淺談Kubernetes集群的高可用方案
大小:0.4 MB 人氣: 2017-10-11 需要積分:1
標簽:容器(21808)
Kubernetes作為容器應用的管理中心,通過對Pod的數量進行監控,并且根據主機或容器失效的狀態將新的Pod調度到其他Node上,實現了應用層的高可用性。針對Kubernetes集群,高可用性還應包含以下兩個層面的考慮:etcd數據存儲的高可用性和Kubernetes Master組件的高可用性。本文節選自龔正等所著的《kubernetes權威指南》。1.etcd高可用性方案
etcd在整個Kubernetes集群中處于中心數據庫的地位,為保證Kubernetes集群的高可用性,首先需要保證數據庫不是單故障點。一方面,etcd需要以集群的方式進行部署,以實現etcd數據存儲的冗余、備份與高可用性;另一方面,etcd存儲的數據本身也應考慮使用可靠的存儲設備。
etcd集群的部署可以使用靜態配置,也可以通過etcd提供的REST API在運行時動態添加、修改或刪除集群中的成員。本節將對etcd集群的靜態配置進行說明。關于動態修改的操作方法請參考etcd官方文檔的說明。
首先,規劃一個至少3臺服務器(節點)的etcd集群,在每臺服務器上安裝好etcd。
部署一個由3臺服務器組成的etcd集群,其配置如表4.10所示,其集群部署實例如圖4.2所示。
圖4.2 etcd集群部署實例
然后修改每臺服務器上etcd的配置文件/etc/etcd/etcd.conf。
以etcd1為創建集群的實例,需要將其ETCD_INITIAL_CLUSTER_STATE設置為“new”。etcd1的完整配置如下:
# [member]ETCD_NAME=etcd1 #etcd實例名稱ETCD_DATA_DIR="/var/lib/etcd/etcd1" #etcd數據保存目錄ETCD_LISTEN_PEER_URLS="http://10.0.0.1:2380" #集群內部通信使用的URLETCD_LISTEN_CLIENT_URLS="http://10.0.0.1:2379" #供外部客戶端使用的URL…… #[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.1:2380" #廣播給集群內其他成員使用的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" #初始集群狀態,new為新建集群ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群名稱ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.1:2379" #廣播給外部客戶端使用的URL
啟動etcd1服務器上的etcd服務:
$ systemctl restart etcd
啟動完成后,就創建了一個名為etcd-cluster的集群。
etcd2和etcd3為加入etcd-cluster集群的實例,需要將其ETCD_INITIAL_CLUSTER_STATE設置為“exist”。etcd2的完整配置如下(etcd3的配置略):
# [member]ETCD_NAME=etcd2 #etcd實例名稱ETCD_DATA_DIR="/var/lib/etcd/etcd2" #etcd數據保存目錄ETCD_LISTEN_PEER_URLS="http://10.0.0.2:2380" #集群內部通信使用的URLETCD_LISTEN_CLIENT_URLS="http://10.0.0.2:2379" #供外部客戶端使用的URL…… #[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.2:2380" #廣播給集群內其他成員使用的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
啟動etcd2和etcd3服務器上的etcd服務:
$ systemctl restart etcd
啟動完成后,在任意etcd節點執行etcdctl cluster-health命令來查詢集群的運行狀態:
$ etcdctl cluster-health clusterishealthy member ce2a822cea30bfca ishealthy member acda82ba1cf790fc ishealthy member eba209cd0012cd2 ishealthy
在任意etcd節點上執行etcdctl member list命令來查詢集群的成員列表:
$ 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
至此,一個etcd集群就創建成功了。
以kube-apiserver為例,將訪問etcd集群的參數設置為:
--etcd-servers=http://10.0.0.1:4001,http://10.0.0.2:4001,http://10.0.0.3:4001
在etcd集群成功啟動之后,如果需要對集群成員進行修改,則請參考官方文檔的詳細說明:
對于etcd中需要保存的數據的可靠性,可以考慮使用RAID磁盤陣列、高性能存儲設備、NFS網絡文件系統,或者使用云服務商提供的網盤系統等來實現。
2. Kubernetes Master組件的高可用性方案
在Kubernetes體系中,Master服務扮演著總控中心的角色,主要的三個服務kube-apiserver、kube-controller-mansger和kube-scheduler通過不斷與工作節點上的Kubelet和kube-proxy進行通信來維護整個集群的健康工作狀態。如果Master的服務無法訪問到某個Node,則會將該Node標記為不可用,不再向其調度新建的Pod。但對Master自身則需要進行額外的監控,使Master不成為集群的單故障點,所以對Master服務也需要進行高可用方式的部署。
以Master的kube-apiserver、kube-controller-mansger和kube-scheduler三個服務作為一個部署單元,類似于etcd集群的典型部署配置。使用至少三臺服務器安裝Master服務,并且使用Active-Standby-Standby模式,保證任何時候總有一套Master能夠正常工作。
所有工作節點上的Kubelet和kube-proxy服務則需要訪問Master集群的統一訪問入口地址,例如可以使用pacemaker等工具來實現。圖4.3展示了一種典型的部署方式。
圖4.3 Kubernetes Master高可用部署架構
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
淺談Kubernetes集群的高可用方案下載
相關電子資料下載
- 開關頻率對直流母線電容器的影響 35
- 淺談法拉電容 37
- 只要封裝相同,電容器本身大小就一樣嗎? 59
- 緩啟動電路的工作原理 緩啟動電路的作用 32
- MLCC的結構、特點、應用及發展趨勢 125
- 萬用表使用口訣分享 18
- 焊接機器人能焊壓力容器嗎 60
- 不同無功補償設備的性能比較 76
- 三星機電新型多層陶瓷電容器將擴大汽車系統緊湊型高電容解決方案組合 216
- 超級電容是什么? 64