作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與新應用遞送方案的介紹與推廣。
接續前篇討論AKO (Avi Kubernetes Operator) 的安裝步驟。上篇內我們已經說明了步驟1~4,其實是基礎環境 / NSX Advanced Load Balancer平台 / Kubernetes叢集本身的建立。接下來我要說明下圖的步驟5~6部分:
5. 配置AKO設定檔
基本的AKO安裝流程在這個頁面:https://avinetworks.com/docs/ako/1.4/ako-installation/ 。簡單說明一下,安裝前的準備動作包括了
- 找一台Linux跳板機 (Bastion Host),在上邊安裝helm的最新版本。helm的安裝:https://helm.sh/docs/intro/install/
- AKO本身的安裝可以透過Internet,由VMware官方的repository拉下來 ( projects.registry.vmware.com/ ),我自己通常用這個方法。但如果在沒有Internet, air-gap的環境,管理者當然也可以自己用Harbor或其他方案建一個企業私有的容器庫,把AKO的映像檔放進來安裝
- 用 # helm show values ako/ako –version 1.4.2 > values.yaml指令拉出AKO的參數範例檔,修改這個values.yaml檔內的相關參數
真正重要的是這邊的配置檔參數。基本上喔,通常AKO安裝有沒有成功,就是這些參數有沒有設錯的問題。相關AKO配置參數的說明可以參考下列地方:
- https://avinetworks.com/docs/ako/1.4/configuring-ako/
- https://github.com/avinetworks/avi-helm-charts/blob/master/docs/AKO/values.md
- 預設範例檔內也有最基本的說明
如果大家玩到深了,一個個參數是什麼意思再來做完整的研究吧。下表我只列出通常在基本安裝時我們會使用到的參數有哪些,我自己很少動到未在下面列出的參數。
AKO配置參數 | 參數說明 |
image.repository | AKO映像檔地址,預設在projects.registry.vmware.com/ako/ako,如果用私有容器庫的話則需要修改 |
AKOSettings.deleteConfig | 預設是false,平常不會用到,如果設成true代表要移除AKO的所有配置 |
AKOSettings.disableStaticRouteSync | 這就是前面網誌內討論,網路架構是ClusterIP / Nodeport / Routable時的配置參數。預設是false,代表採用ClusterIP模式,要求AKO自動建立Pod網路的靜態路由 |
AKOSettings.clusterName | 這個K8S叢集的名稱。一套Avi Controller內可以提供給多組K8S使用,以這個名稱進行不同K8S叢集間的區分 |
AKOSettings.layer7Only | 預設是false,代表AKO同時提供LoadBalancer / Ingress服務。但在底層已經預設有LoadBalancer配置的K8S環境,可將此配置為true,僅提供Ingress功能 |
NetworkSettings.nodeNetworkList | 採用vCenter Cloud時,告知Kubernetes Nodes (Workload) 是在哪個Port Group內。這邊要輸入的是Port Group名稱以及對應的網段資訊,比如說172.20.14.0/24這樣 |
NetworkSettings.subnetIP | Virtual IP所在網段資訊,與上面的Workload網段相同或不同均可。這裡是網段IP,比如說172.20.14.0 |
NetworkSettings.subnetPrefix | 同上,Virtual IP所在網段的subnetmask,比如說24 |
NetworkSettings.vipNetworkList | 同上,在vCenter Cloud內,Virtual IP所在網段的Port Group名稱 |
L7Settings.defaultIngController | AKO是不是這個K8S叢集內預設的Ingress Controller呢?預設當然要設為true摟 |
L7Settings.serviceType | 前面網路架構內討論的,這邊的網路配置方式是ClusterIP / NodePort / NodePortLocal 那一種。預設是ClusterIP不用特別改 |
ControllerSettings.serviceEngineGroupName | 這個K8S Cluster內的LoadBalancer / Ingress服務,在Avi平台內要使用哪一個Service Engine Group?預設是Default-Group,但我通常會特別配置一個Service Engine Group,讓每個K8S Cluster使用不同的服務引擎資源 |
ControllerSettings.cloudName | 這個K8S叢集的服務是在Avi環境的哪個Cloud?預設值是Default-Cloud,或將指定的Cloud名稱填入 |
ControllerSettings.controllerHost | Avi Controller的IP地址或是Hostname,通常是對應到Controller 的Cluster IP |
avicredentials.username | Avi Controller的管理者登入帳號 |
avicredentials.password | Avi Controller的管理者登入密碼 |
6. 進行AKO安裝
在上面的設定檔 (values.yaml) 參數配置完後,後面的設定就很直接,請參考下面的命令列。包含了建立一個namespace叫做avi-system,然後以helm的指令安裝AKO到這個namespace內,並且宣告對應的設定檔:
# kubectl create ns avi-system namespace/avi-system created # helm install ako/ako –generate-name -f values.yaml –namespace=avi-system NAME: ako-1623221131 LAST DEPLOYED: Wed Jun 9 06:45:32 2021 NAMESPACE: avi-system STATUS: deployed REVISION: 1 # helm ls -n avi-system NAME NAMESPACE ako-1623221131 avi-system # kubectl get pod -n avi-system NAME READY STATUS RESTARTS AGE ako-0 1/1 Running 0 3m21s |
上圖後面我們用# helm ls指令可以看到ako配置完成,且可以看到ako容器在avi-system的namespace正常運作 (STATUS為Running)。整個安裝流程到這邊為止就完成,接著應用管理者就可以做他們需要的Ingress / LB Service相關配置了。
在我們與不同經銷夥伴展示這邊的安裝過程時,常會得到的feedback是感覺安裝比較複雜。但通常更進一步討論時,主要感覺複雜的點在於
- 沒有安裝過NSX Advanced Load Balancer,或雖然安裝過,對IPAM/DNS相關配置不熟悉
- AKO的設定檔參數不熟悉。
也因此,前面幾篇網誌我用了比較大的篇幅,對安裝相關內容做了說明。一般來說上面這幾個點有做過一遍走通,後續環境要複製都不需要花太多的時間。希望對大家有幫助。
後續的網誌想和大家討論另一個技術課題:在AKO內,可以支持哪些進階的負載均衡與資源配置?我想和大家說明AKO支持的CRD (Customized Resource Definition),包含HTTPRule / HostRule / AKOInfraSetting等配置。
Comments
0 Comments have been added so far