73
汽車大全
玩轉阿裏雲上Kubernetes 1.7.2 高可用部署
隨著Kubernetes社區的不斷壯大,其版本不斷更迭,新功能及BugFIX也不斷更新,促使其部署方式也不斷的變化,本文將帶您在阿裏雲上快速的部署一個高可用的Kubernetes集群。並且添加阿裏雲CloudProvider支持,讓您可以方便的自由的使用阿裏雲上的SLB,NAS,阿裏雲盤,VPC網絡等雲資源。
部署結構圖
如上圖,腳本通過執行SSH命令的方式部署一個M + N節點的Kubernetes集群,M=Number(Master) N=Number(Worker)。
- 支持VPC網絡,確保Pod使用的網段不等於宿主機網段。
- 確保ECS可以訪問公網,需要下載安裝包及docker鏡像。上圖示例使用阿裏雲NAT網關產品作為所有ECS訪問公網的代理;也可以為每個ECS綁定彈性公網IP解決公網連通問題。
- 通常為了實現高可用需要部署最少3個master,每個master上麵部署一個etcd組件組成一個etcd集群作為kubernetes元數據存儲集群。
- 每個master節點上部署一個apiserver、scheduler、controller-manager、kubelet等組件,配置使用阿裏雲SLB作為apiserver的負載均衡入口,worker節點組件通過該SLB訪問apiserver. master節點組件通過本地接口IP訪問本地apiserver。
下麵示例了3個master節點+2個worker節點部署結構。
前置條件
- 準備3個4核8G(至少大於等於2核4G)的機器作為master,假設IP分別為[192.168.0.1,192.168.0.2,192.168.0.3]
- 準備2個4核8G(至少大於等於2核4G)的機器作為Worker節點。假設IP分別為[192.168.0.168,192.168.0.169]
- 請事先打通所有節點之間的SSH通道,並且能夠實現公鑰登錄,避免安裝過程中頻繁輸入密碼。
- 選擇任意一台機器作為總控機,未來的所有命令都會在這台總控機上執行,假設選定[192.168.0.1]
- 高可用部署依賴於阿裏雲SLB為kubernetes apiserver提供負載均衡能力,因此您需要先手動創建一個阿裏雲SLB,類型為intranet,監聽端口6443,後端端口也是6443,後端server backend為您的3個master節點。假設該SLB的地址為192.168.0.98。
- 在Kubernetes集群上使用阿裏雲資源需要您提供阿裏雲賬號的AccessKey和AccessSecret,您可以在賬號信息中找到。
步驟
假設我們已經選定192.168.0.1作為總控機執行所有命令,首先登錄到總控機上。ssh root@192.168.0.1
步驟一:在所有master節點上部署一套ETCD集群
下載部署腳本:
root@192.168.0.1 # curl https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/1.0/kuberun.sh > kuberun.sh
root@192.168.0.1 # chmod +x kuberun.sh
一鍵部署ETCD集群:
root@192.168.0.1 # ./kuberun.sh --role deploy-etcd \
--hosts 192.168.0.1,192.168.0.2,192.168.0.3 \
--version v3.0.17
上麵--hosts
參數指定etcd組件將要在哪幾個機器上部署, --version
指定etcd的版本號,目前支持v3.0.17
。命令執行完成後一個高可用ETCD集群就部署完成了,peer證書及客戶端證書都存放在/var/lib/etcd/cert下麵。
驗證:
- 通過ps -eaf|grep etcd查看進程是否正常啟動。
- 通過命令
root@192.168.0.1 # etcdctl --endpoints=https://192.168.0.1:2379 \
--ca-file=/var/lib/etcd/cert/ca.pem \
--cert-file=/var/lib/etcd/cert/etcd-client.pem \
--key-file=/var/lib/etcd/cert/etcd-client-key.pem \
cluster-health
注:
1. 任何時候您部署etcd集群出錯後可以通過命令./kuberun.sh --role destroy-etcd --hosts 192.168.0.1,192.168.0.2,192.168.0.3 --version v3.0.17
來清理etcd部署環境。
步驟二:在所有master節點上部署Kubernetes Master組件
這些Master組件包含 kubelet,kube-proxy,kubectl,kube-apiserver,kube-controllermanage,kube-scheduler
一鍵部署master節點
使用上一步下載的kuberun.sh腳本
root@192.168.0.1 # export APISERVER_SLB=192.168.0.98 \
KEY=abc.efg \
KEY_SECRET=mntjklouwbkddlam \
HOSTS=192.168.0.1,192.168.0.2,192.168.0.3 \
ETCD_HOSTS=192.168.0.1,192.168.0.2,192.168.0.3
root@192.168.0.1 # kuberun.sh --role deploy-masters \
--container-cidr 172.16.0.0 \
--hosts ${HOSTS} \
--etcd-hosts ${ETCD_HOSTS} \
--apiserver-lb ${APISERVER_SLB} \
--extra-sans 3.3.3.3 \
--docker-version 17.06.1.ce \
--key ${KEY} \
--key-secret ${KEY_SECRET}
參數解析:
- --role 執行的命令類型,取值
deploy-master deploy-node destroy-node
- --container-cidr ,表示集群的POD的網絡CIDR,與宿主機網段不重合即可。
- --hosts, 表示將在哪些機器上麵安裝Master組件。
- --etcd-hosts,表示上一步中etcd集群部署的位置。
- --apiserver-lb, 對於APIServer前麵有LB的情況需要指定該LB的IP地址,方便講該IP添加到受信任列表。
- --extra-sans , 用於添加額外的集群受信任IP列表。
- --docker-version, 指定安裝的docker版本。
注:
1. 如果本地不存在安裝包,則會自動從阿裏雲官網上下載安裝包。
2. 任何時候部署出錯,可以通過命令./kuberun.sh --role destroy-nodes --hosts 192.168.142.188,192.168.0.1,192.168.0.2,192.168.0.3
清理整個環境後重新開始
3. Master被設置了不調度普通應用,因此您還需要為集群添加node節點來運行常規應用負載.
該命令執行完成後,一個包含master節點的集群就運行起來了.可以通過命令kubectl get no ; kubectl get po -n kube-system
來查看集群應用於節點信息了。
現在可以開始加入Node節點了。
步驟三: 為集群添加節點
添加Worker節點的腳本和部署Master的腳本是同一個。同樣在總控機192.168.0.1上執行,假設您要添加的節點IP為192.168.0.168,192.168.0.169
,請運行如下命令將兩個節點添加到集群中。
為了能夠安全的將節點添加到集群中,你需要在添加節點是攜帶一個token,並且指明apiserver endpoint的地址。
token可以通過命令kubeadm token list
獲得,假設為TOKEN=d79fd6.b754322ebab94533
。
apiserver endpoint為您上麵創建的阿裏雲SLB地址ENDPOINT=192.168.0.98
。
root@192.168.0.1 # export TOKEN=d79fd6.b754322ebab94533 \
APISERVER_LB=192.168.0.98 \
HOSTS=192.168.0.168,192.168.0.169
root@192.168.0.1 # kuberun.sh --role deploy-nodes \
--hosts ${HOSTS} \
--apiserver-lb ${APISERVER_LB} \
--token ${TOKEN} \
--endpoint ${APISERVER_LB}:6443
參數解析:
- --role 執行的命令類型,取值
destroy-nodes
- --hosts, 表示將在哪些機器上麵安裝Node組件,即node節點IP列表。
- --apiserver-lb, 對於APIServer前麵有LB的情況需要指定該LB的IP地址,方便將該IP添加到受信任列表。同時,node節點通過該apiserver-lb與apiserver通信。
- --token 用於對加入的節點進行身份認證的信息。通過在master上執行
kubeadm token list
獲得。 - --endpoint,指定節點bootstrap時的master的IP及端口,通常使用apiserver-lb的值。
驗證
通過kubectl get no
命令可以顯示出剛添加的節點。
訪問Kubernetes集群
按照以上方法成功部署一個kubernetes集群後,可以參照阿裏雲容器服務文檔連接到該集群。
小結
阿裏雲提供了非常簡單高效的方式讓您可以快速的在阿裏雲上搭建一個高可用的Kubernetes集群,讓您從負載的集群部署工作中解放出來,更加專注於上層應用開發。同時,集成了阿裏雲CloudProvider,可以讓您直接通過應用部署描述文件使用諸如阿裏雲SLB、NAS、阿裏雲盤等雲上資源。
阿裏雲容器服務將以上過程模板化,讓您甚至可以不用輸入以上命令即可通過ROS模板一鍵部署Kubernetes集群。歡迎您試用ROS模板一鍵創建。
阿裏雲容器服務團隊致力於在阿裏雲上推廣容器技術。想了解更多容器服務內容,請訪問https://www.aliyun.com/product/containerservice
最後更新:2017-10-09 09:33:01