12.10 這裡有設置Kubernetes Etcd集群所需的全部知識

這裡有設置Kubernetes Etcd集群所需的全部知識

我們都知道Kubernetes是一個分佈式平臺,它編排不同的工作節點,並且可以由中心主節點控制。可以有n個分佈式的工作節點處理pod。為了完成跟蹤這些節點的所有更改、更新、傳遞所需的操作, Kubernetes使用etcd。

Kubernetes中的etcd是什麼?

etcd是一種簡單、快速、安全的分佈式可靠鍵值存儲。它類似於後端服務發現和數據庫,同時在Kubernetes集群中的不同服務器上運行,以監視集群中的更改,並存儲應該由Kubernetes主機或集群訪問的狀態/配置數據。此外,etcd允許Kubernetes master支持發現服務,以便部署的應用程序可以聲明其可用性以包含在服務中。

Kubernetes主節點中的API服務器組件與etcd通信,這些組件分佈在不同的集群中。etcd還可用於設置系統的所需狀態。

通過對Kubernetes-etcd的鍵值存儲,存儲了Kubernetes集群的所有配置。它不同於傳統的以表格形式存儲數據的數據庫。etcd為每個記錄創建一個數據庫頁,在更新一條記錄時不會妨礙其他記錄。例如,可能會發生這樣的情況:少數記錄可能需要額外的列,但同一數據庫中的其他記錄不需要這些列。這會在數據庫中創建冗餘。etcd以可靠的方式為Kubernetes添加和管理所有記錄。

分佈的和一致的

etcd為Kubernetes存儲關鍵數據。通過分佈式,它還維護分佈式機器/服務器上所有集群的數據存儲副本。此副本對於所有數據存儲區都是相同的,並維護來自所有其他etcd數據存儲區的相同數據。即使一個副本被破壞,還有另兩個保存著相同的信息。

Kubernetes集群中etcd的部署方法

etcd的實現是以這樣一種方式構建的,以實現Kubernetes中的高可用性。etcd可以作為pod部署在主節點上。

這裡有設置Kubernetes Etcd集群所需的全部知識

它也可以部署在外部以實現彈性和安全性:

這裡有設置Kubernetes Etcd集群所需的全部知識

etcd的工作原理

etcd是Kubernetes集群的大腦。使用etcd的“Watch”功能監控更改序列。通過這個功能,Kubernetes可以訂閱集群內的更改並執行來自API服務器的任何狀態請求。etcd與分佈式集群中的不同組件協作。etcd對組件狀態的更改作出反應,其他組件可能會對更改作出反應。

可能存在這樣一種情況:在維護集群中一組etcd組件的所有狀態的相同副本時,需要將相同的數據存儲在兩個etcd實例中。但是,etcd不應該在不同的實例中更新相同的記錄。

在這種情況下,etcd不會處理每個集群節點上的寫操作。相反,只有一個實例負責在內部處理寫操作。那個節點叫做leader。集群內其他節點採用RAFT算法選擇一個leader。一旦leader選定,其他節點就成為follower節點。

現在,當寫請求到達leader節點時,leader處理寫入。leader etcd節點向其他節點廣播數據的副本。如果一個follower節點在那一刻處於不活動或脫機狀態,那麼基於大多數可用節點,寫請求將得到一個完整的標誌。通常,如果leader得到集群中其他成員的同意,寫操作將獲得完整標誌。

這是它們選擇leader,以及如何確保在所有實例中傳播寫操作的方式。利用raft協議在etcd中實現了這種分佈式共識。

etcd中集群的工作方式

Kubernetes是由CoreOS發起的etcd項目的主要用戶。etcd已經成為Kubernetes集群pod功能和整體跟蹤的規範。Kubernetes支持各種集群架構——這些架構可能包含etcd作為關鍵組件,或者可能包含多個主節點,且etcd作為獨立組件。

在任何特定架構中,每個系統配置的etcd角色都會發生變化。可以實現這種etcd的動態佈局來管理集群,以提高擴展性。結果是很容易支持和管理工作負載。

下面是在Kubernetes中啟動etcd的步驟。

Wget etcd文件:
wget -q --show-progress --https-only --timestamping \\ "https://github.com/etcd-io/etcd/releases/download/v3.4.0/etcd-v3.4.0-linux-amd64.tar.gz"
{ 
tar -xvf etcd-v3.4.0-linux-amd64.tar.gz 
sudo mv etcd-v3.4.0-linux-amd64/etcd* /usr/local/bin/
}
{ 
sudo mkdir -p /etc/etcd /var/lib/etcd 
sudo cp ca.pem kubernetes-key.pem kubernetes.pem /etc/etcd/
}
獲取當前計算實例的內部IP地址。它將用於處理客戶端請求和與etcd集群對等方的數據傳輸:
INTERNAL_IP=$(curl -s -H "Metadata-Flavor: Google" \\ http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip)
ETCD_NAME=$(hostname -s)
cat <
Description=etcd
Documentation=https://github.com/coreos
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \\\\ 
--name ${ETCD_NAME} \\\\ 
--cert-file=/etc/etcd/kubernetes.pem \\\\ 
--key-file=/etc/etcd/kubernetes-key.pem \\\\ 
--peer-cert-file=/etc/etcd/kubernetes.pem \\\\ 
--peer-key-file=/etc/etcd/kubernetes-key.pem \\\\ 
--trusted-ca-file=/etc/etcd/ca.pem \\\\ 
--peer-trusted-ca-file=/etc/etcd/ca.pem \\\\ 
--peer-client-cert-auth \\\\ 
--client-cert-auth \\\\ 
--initial-advertise-peer-urls https://${INTERNAL_IP}:2380 \\\\ 
--listen-peer-urls https://${INTERNAL_IP}:2380 \\\\ 
--listen-client-urls https://${INTERNAL_IP}:2379,https://127.0.0.1:2379 \\\\ 
--advertise-client-urls https://${INTERNAL_IP}:2379 \\\\ 
--initial-cluster-token etcd-cluster-0 \\\\ 
--initial-cluster controller-0=https://10.240.0.10:2380,controller-1=https://10.240.0.11:2380,controller-2=https://10.240.0.12:2380 \\\\ 
--initial-cluster-state new \\\\ 
--data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
 
Initiate etcd Server
{ 
sudo systemctl daemon-reload 
sudo systemctl enable etcd 
sudo systemctl start etcd
}
在控制器0、控制器1和控制器2上重複上述命令。
sudo ETCDCTL_API=3 etcdctl member list \\ 
--endpoints=https://127.0.0.1:2379 \\ 
--cacert=/etc/etcd/ca.pem \\ 
--cert=/etc/etcd/kubernetes.pem \\ 
--key=/etc/etcd/kubernetes-key.pem
3a57933972cb5131, started, controller-2, https://10.240.0.12:2380, https://10.240.0.12:2379
f98dc20bce6225a0, started, controller-0, https://10.240.0.10:2380, https://10.240.0.10:2379
ffed16798470cab5, started, controller-1, https://10.240.0.11:2380, https://10.240.0.11:2379

結論

etcd是一個獨立項目。但是,Kubernetes社區已經廣泛使用它來管理集群的狀態,從而進一步實現動態工作負載的自動化。將Kubernetes與etcd結合使用的主要好處是,etcd本身就是一個與分佈式Kubernetes集群協同工作的分佈式數據庫。因此,將etcd與Kubernetes結合使用對於集群的健康至關重要。


原文鏈接:

https://superuser.openstack.org/articles/a-guide-to-kubernetes-etcd-all-you-need-to-know-to-set-up-etcd-clusters/

"


分享到:


相關文章: