淺談Kubernetes集群的高可用方案
大小:0.4 MB 人氣: 2017-10-11 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
標(biāo)簽:容器(21808)
Kubernetes作為容器應(yīng)用的管理中心,通過(guò)對(duì)Pod的數(shù)量進(jìn)行監(jiān)控,并且根據(jù)主機(jī)或容器失效的狀態(tài)將新的Pod調(diào)度到其他Node上,實(shí)現(xiàn)了應(yīng)用層的高可用性。針對(duì)Kubernetes集群,高可用性還應(yīng)包含以下兩個(gè)層面的考慮:etcd數(shù)據(jù)存儲(chǔ)的高可用性和Kubernetes Master組件的高可用性。本文節(jié)選自龔正等所著的《kubernetes權(quán)威指南》。1.etcd高可用性方案
etcd在整個(gè)Kubernetes集群中處于中心數(shù)據(jù)庫(kù)的地位,為保證Kubernetes集群的高可用性,首先需要保證數(shù)據(jù)庫(kù)不是單故障點(diǎn)。一方面,etcd需要以集群的方式進(jìn)行部署,以實(shí)現(xiàn)etcd數(shù)據(jù)存儲(chǔ)的冗余、備份與高可用性;另一方面,etcd存儲(chǔ)的數(shù)據(jù)本身也應(yīng)考慮使用可靠的存儲(chǔ)設(shè)備。
etcd集群的部署可以使用靜態(tài)配置,也可以通過(guò)etcd提供的REST API在運(yùn)行時(shí)動(dòng)態(tài)添加、修改或刪除集群中的成員。本節(jié)將對(duì)etcd集群的靜態(tài)配置進(jìn)行說(shuō)明。關(guān)于動(dòng)態(tài)修改的操作方法請(qǐng)參考etcd官方文檔的說(shuō)明。
首先,規(guī)劃一個(gè)至少3臺(tái)服務(wù)器(節(jié)點(diǎn))的etcd集群,在每臺(tái)服務(wù)器上安裝好etcd。
部署一個(gè)由3臺(tái)服務(wù)器組成的etcd集群,其配置如表4.10所示,其集群部署實(shí)例如圖4.2所示。


圖4.2 etcd集群部署實(shí)例
然后修改每臺(tái)服務(wù)器上etcd的配置文件/etc/etcd/etcd.conf。
以etcd1為創(chuàng)建集群的實(shí)例,需要將其ETCD_INITIAL_CLUSTER_STATE設(shè)置為“new”。etcd1的完整配置如下:
# [member]ETCD_NAME=etcd1 #etcd實(shí)例名稱ETCD_DATA_DIR="/var/lib/etcd/etcd1" #etcd數(shù)據(jù)保存目錄ETCD_LISTEN_PEER_URLS="http://10.0.0.1:2380" #集群內(nèi)部通信使用的URLETCD_LISTEN_CLIENT_URLS="http://10.0.0.1:2379" #供外部客戶端使用的URL…… #[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.1:2380" #廣播給集群內(nèi)其他成員使用的URLETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.1:2380,etcd2=http://10.0.0.2:2380, etcd3=http://10.0.0.3:2380" #初始集群成員列表ETCD_INITIAL_CLUSTER_STATE="new" #初始集群狀態(tài),new為新建集群ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群名稱ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.1:2379" #廣播給外部客戶端使用的URL
啟動(dòng)etcd1服務(wù)器上的etcd服務(wù):
$ systemctl restart etcd
啟動(dòng)完成后,就創(chuàng)建了一個(gè)名為etcd-cluster的集群。
etcd2和etcd3為加入etcd-cluster集群的實(shí)例,需要將其ETCD_INITIAL_CLUSTER_STATE設(shè)置為“exist”。etcd2的完整配置如下(etcd3的配置略):
# [member]ETCD_NAME=etcd2 #etcd實(shí)例名稱ETCD_DATA_DIR="/var/lib/etcd/etcd2" #etcd數(shù)據(jù)保存目錄ETCD_LISTEN_PEER_URLS="http://10.0.0.2:2380" #集群內(nèi)部通信使用的URLETCD_LISTEN_CLIENT_URLS="http://10.0.0.2:2379" #供外部客戶端使用的URL…… #[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.2:2380" #廣播給集群內(nèi)其他成員使用的URLETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.1:2380,etcd2=http://10.0.0.2:2380,etcd3=http://10.0.0.3:2380" #初始集群成員列表ETCD_INITIAL_CLUSTER_STATE="exist" # existing表示加入已存在的集群ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群名稱ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.2:2379" #廣播給外部客戶端使用的URL
啟動(dòng)etcd2和etcd3服務(wù)器上的etcd服務(wù):
$ systemctl restart etcd
啟動(dòng)完成后,在任意etcd節(jié)點(diǎn)執(zhí)行etcdctl cluster-health命令來(lái)查詢集群的運(yùn)行狀態(tài):
$ etcdctl cluster-health clusterishealthy member ce2a822cea30bfca ishealthy member acda82ba1cf790fc ishealthy member eba209cd0012cd2 ishealthy
在任意etcd節(jié)點(diǎn)上執(zhí)行etcdctl member list命令來(lái)查詢集群的成員列表:
$ etcdctl member list ce2a822cea30bfca: name=default peerURLs=http://10.0.0.1:2380,http://10.0.0.1: 7001clientURLs=http://10.0.0.1:2379,http://10.0.0.1:4001acda82ba1cf790fc: name=default peerURLs=http://10.0.0.2:2380,http://10.0.0.2: 7001clientURLs=http://10.0.0.2:2379,http://10.0.0.2:4001eba209cd40012cd2: name=default peerURLs=http://10.0.0.3:2380,http://10.0.0.3: 7001clientURLs=http://10.0.0.3:2379,http://10.0.0.3:4001
至此,一個(gè)etcd集群就創(chuàng)建成功了。
以kube-apiserver為例,將訪問(wèn)etcd集群的參數(shù)設(shè)置為:
--etcd-servers=http://10.0.0.1:4001,http://10.0.0.2:4001,http://10.0.0.3:4001
在etcd集群成功啟動(dòng)之后,如果需要對(duì)集群成員進(jìn)行修改,則請(qǐng)參考官方文檔的詳細(xì)說(shuō)明:
對(duì)于etcd中需要保存的數(shù)據(jù)的可靠性,可以考慮使用RAID磁盤陣列、高性能存儲(chǔ)設(shè)備、NFS網(wǎng)絡(luò)文件系統(tǒng),或者使用云服務(wù)商提供的網(wǎng)盤系統(tǒng)等來(lái)實(shí)現(xiàn)。
2. Kubernetes Master組件的高可用性方案
在Kubernetes體系中,Master服務(wù)扮演著總控中心的角色,主要的三個(gè)服務(wù)kube-apiserver、kube-controller-mansger和kube-scheduler通過(guò)不斷與工作節(jié)點(diǎn)上的Kubelet和kube-proxy進(jìn)行通信來(lái)維護(hù)整個(gè)集群的健康工作狀態(tài)。如果Master的服務(wù)無(wú)法訪問(wèn)到某個(gè)Node,則會(huì)將該Node標(biāo)記為不可用,不再向其調(diào)度新建的Pod。但對(duì)Master自身則需要進(jìn)行額外的監(jiān)控,使Master不成為集群的單故障點(diǎn),所以對(duì)Master服務(wù)也需要進(jìn)行高可用方式的部署。
以Master的kube-apiserver、kube-controller-mansger和kube-scheduler三個(gè)服務(wù)作為一個(gè)部署單元,類似于etcd集群的典型部署配置。使用至少三臺(tái)服務(wù)器安裝Master服務(wù),并且使用Active-Standby-Standby模式,保證任何時(shí)候總有一套Master能夠正常工作。
所有工作節(jié)點(diǎn)上的Kubelet和kube-proxy服務(wù)則需要訪問(wèn)Master集群的統(tǒng)一訪問(wèn)入口地址,例如可以使用pacemaker等工具來(lái)實(shí)現(xiàn)。圖4.3展示了一種典型的部署方式。

圖4.3 Kubernetes Master高可用部署架構(gòu)
?
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%