您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Kubernetes模擬生產環境搭建高可用集群中的Etcd集群是怎樣部署,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
下面首先要說到什么是etcd,為什么kubernetes要使用etcd ,然后實踐下二進制安裝部署etcd集群。
一、Etcd組件簡介
Etcd是一個高可用的鍵值存儲系統,快速地保存和提供對關鍵數據的訪問。它通過分布式鎖定,領導者選舉和寫入障礙實現可靠的分布式協調。etcd集群旨在實現高可用性和永久數據存儲和檢索。主要用于共享配置和服務發現,它通過Raft一致性算法處理日志復制以保證強一致性,我們可以理解它為一個高可用強一致性的服務發現存儲倉庫。Etcd主要解決的是分布式系統中數據一致性的問題,而分布式系統中的數據分為控制數據和應用數據,etcd處理的數據類型為控制數據,對于很少量的應用數據也可以進行處理。
Etcd和Zookeeper的比較:
1.zk相比部署維護復雜復雜,使用也復雜,學習成本較高。而etcd部署簡單,使用HTTP作為接口使用簡單,使用Raft算法保證強一致性讓用戶易于理解。
2.zk使用Java編寫,需要jvm才能運行,會引入大量的依賴,相對偏于中性應用。
3.zk發展緩慢。而etcd被k8s作為默認存儲系統,升級迭代迅速。
4.etcd更安全,支持SSL客戶端安全認證。
二、K8S和ETCD的關系
kubernetes官方默認使用etcd組件作為自己的高可用強一致性的服務發現存儲倉庫,在kubernetes集群中etcd主要用于配置數據共享和服務發現,把關鍵數據都存放在etcd鍵值存儲中,這使得kubernetes的整體結構變得非常簡單。在kubernetes中由于數據是隨時發生變化的,提交了新任務、增加了新的Node、Node宕機了、容器死掉了等,都會觸發狀態數據的變更。集群狀態數據變更之后,Master上的kube-scheduler和kube-controller-manager,就會重新安排工作,它們的工作安排結果也是數據。由于集群內狀態數據變化都需要及時地通知給每一個組件,剛好etcd有一個特別好的特性,可以調用它的api監聽其中的數據,一旦數據發生變化了就會收到通知。有了這個特性之后kubernetes中的每個組件只需要監聽etcd中數據,就可以知道自己應該做什么。kube-scheduler和kube-controller-manager也只需要把最新的工作安排寫入到etcd中就可以了,不用自己去逐個通知了。還有就是etcd使用raft協議實現一致性,是一個分布式鎖可以用來做選舉。如果在kubernetes中部署了多個kube-schdeuler,那么同一時刻只能有一個kube-scheduler在工作,要保證只有一個kube-schduler在工作呢就通過etcd選舉出一個leader來實現。
三、二進制部署etcd集群
官網地址:https://etcd.io/
文檔地址:https://etcd.io/docs/
項目地址:https://github.com/etcd-io/etcd
下載地址:https://github.com/etcd-io/etcd/releases
1.下載etcd二進制安裝包
本文使用最新版本3.4.3,下載適合自己硬件平臺的,本文使用:etcd-v3.4.3-linux-amd64.tar.gz
2.解壓etcd二進制安裝包
tar -zxvf etcd-v3.4.3-linux-amd64.tar.gz
3.安裝二進制程序
mkdir -p /work/etcd/{cfg,bin,dat,run,wal}
將etcd和etcdctl文件復制到/work/etcd/bin/目錄下
創建軟連接:
ln -s /work/etcd/bin/etcd /usr/local/bin/etcd
ln -s /work/etcd/bin/etcdctl /usr/local/bin/etcdctl
4.編寫注冊系統服務文件
vi /usr/lib/systemd/system/etcd.service 如下:
[Unit] Description=etcd Documentation=https://github.com/etcd-io/etcd Conflicts=etcd.service After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify Restart=always RestartSec=5s LimitNOFILE=40000 TimeoutStartSec=0 WorkingDirectory=/work/etcd/run/ ExecStart=/work/etcd/bin/etcd --config-file=/work/etcd/cfg/etcd.yml [Install] WantedBy=multi-user.target
5.生成Etcd服務需要的證書
準備證書生成工具
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o ./cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o ./cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o ./cfssl-certinfo
注意:本文在模擬內網環境下二進制安裝,所以下載完成后傳到機器上的/usr/local/bin
創建全局證書目錄mkdir cert
創建認證中心(CA)
cfssl print-defaults config > ca-etcd-config.json # 默認證書生產策略配置模板
cfssl print-defaults csr > ca-etcd-csr.json #默認csr請求模板
修改模板自定義內容vi ca-etcd-config.json 如下:
{ "signing": { "default": { "expiry": "87600h" }, "profiles": { "etcd": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } }
注意:
ca-config.json:可以定義多個 profiles,分別指定不同的過期時間、使用場景等參數;后續在簽名證書時可以指定使用某個 profile;此實例只有一個etcd。
signing:表示該證書可用于簽名其它證書;生成的 ca-etcd.pem 證書中 CA=TRUE;
server auth:表示client可以用該 CA 對server提供的證書進行驗證;
client auth:表示server可以用該CA對client提供的證書進行驗證;
修改模板自定義內容ca-etcd-csr.json 如下:
{ "CN": "etcd", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "SH", "L": "BS", "O": "etcd", "OU": "System" } ] }
生成證書(ca-etcd-key.pem)和秘鑰(ca-etcd.pem)
cfssl gencert -initca ca-etcd-csr.json | cfssljson -bare ca-etcd
創建etcd證書簽名請求, vi etcd-csr.json 如下:
{ "CN": "etcd", "hosts": [ "127.0.0.1", "192.168.100.111", "192.168.100.112", "192.168.100.113", "kube-cluster-master01", "kube-cluster-master02", "kube-cluster-master03" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "SH", "L": "BS", "O": "etcd", "OU": "System" } ] }
生成etcd證書
cfssl gencert -ca=/work/cert/ca-etcd.pem \
-ca-key=/work/cert/ca-etcd-key.pem \
-config=/work/cert/ca-etcd-config.json \
-profile=etcd etcd-csr.json | cfssljson -bare etcd
生成的如下文件:etcd.csr etcd-key.pem etcd.pem 將三個證書拷貝到其他兩個節點上
6.編寫Etcd服務配置文件
節點1配置文件:vi /work/etcd/cfg/etcd.yml
name: kube-etcd-node01 wal-dir: /work/etcd/wal data-dir: /work/etcd/dat/default.etcd listen-peer-urls: https://192.168.100.111:2380 listen-client-urls: https://192.168.100.111:2379,https://127.0.0.1:2379 advertise-client-urls: https://192.168.100.111:2379 initial-advertise-peer-urls: https://192.168.100.111:2380 initial-cluster: kube-etcd-node01=https://192.168.100.111:2380,kube-etcd-node02=https://192.168.100.112:2380,kube-etcd-node03=https://192.168.100.113:2380 initial-cluster-token: kube-etcd-cluster initial-cluster-state: new client-transport-security: cert-file: /work/cert/etcd.pem key-file: /work/cert/etcd-key.pem client-cert-auth: false trusted-ca-file: /work/cert/ca-etcd.pem auto-tls: false peer-transport-security: cert-file: /work/cert/etcd.pem key-file: /work/cert/etcd-key.pem client-cert-auth: false trusted-ca-file: /work/cert/ca-etcd.pem auto-tls: false debug: false logger: zap log-outputs: [stderr]
節點2配置文件:vim /work/etcd/cfg/etcd.yml
name: kube-etcd-node02 wal-dir: /work/etcd/wal data-dir: /work/etcd/dat/default.etcd listen-peer-urls: https://192.168.100.112:2380 listen-client-urls: https://192.168.100.112:2379,https://127.0.0.1:2379 advertise-client-urls: https://192.168.100.112:2379 initial-advertise-peer-urls: https://192.168.100.112:2380 initial-cluster: kube-etcd-node01=https://192.168.100.111:2380,kube-etcd-node02=https://192.168.100.112:2380,kube-etcd-node03=https://192.168.100.113:2380 initial-cluster-token: kube-etcd-cluster initial-cluster-state: new client-transport-security: cert-file: /work/cert/etcd.pem key-file: /work/cert/etcd-key.pem client-cert-auth: false trusted-ca-file: /work/cert/ca-etcd.pem auto-tls: false peer-transport-security: cert-file: /work/cert/etcd.pem key-file: /work/cert/etcd-key.pem client-cert-auth: false trusted-ca-file: /work/cert/ca-etcd.pem auto-tls: false debug: false logger: zap log-outputs: [stderr]
節點3配置文件:vi /work/etcd/cfg/etcd.conf
name: kube-etcd-node03 wal-dir: /work/etcd/wal data-dir: /work/etcd/dat/default.etcd listen-peer-urls: https://192.168.100.113:2380 listen-client-urls: https://192.168.100.113:2379,https://127.0.0.1:2379 advertise-client-urls: https://192.168.100.113:2379 initial-advertise-peer-urls: https://192.168.100.113:2380 initial-cluster: kube-etcd-node01=https://192.168.100.111:2380,kube-etcd-node02=https://192.168.100.112:2380,kube-etcd-node03=https://192.168.100.113:2380 initial-cluster-token: kube-etcd-cluster initial-cluster-state: new client-transport-security: cert-file: /work/cert/etcd.pem key-file: /work/cert/etcd-key.pem client-cert-auth: false trusted-ca-file: /work/cert/ca-etcd.pem auto-tls: false peer-transport-security: cert-file: /work/cert/etcd.pem key-file: /work/cert/etcd-key.pem client-cert-auth: false trusted-ca-file: /work/cert/ca-etcd.pem auto-tls: false debug: false logger: zap log-outputs: [stderr]
7.啟動ETCD服務
以上步驟在三個節點上都操作完成后,分別在三個節點上執行以下操作:
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd
8.驗證ETCD服務
etcdctl --cacert=/work/cert/ca-etcd.pem \ --cert=/work/cert/etcd.pem \ --key=/work/cert/etcd-key.pem \ --endpoints=https://192.168.100.111:2379,https://192.168.100.112:2379,https://192.168.100.113:2379 endpoint health
etcdctl --write-out=table \ --cacert=/work/cert/ca-etcd.pem \ --cert=/work/cert/etcd.pem \ --key=/work/cert/etcd-key.pem \ --endpoints=https://192.168.100.111:2379,https://192.168.100.112:2379,https://192.168.100.113:2379 endpoint status
etcdctl --write-out=table \ --cacert=/work/cert/ca-etcd.pem \ --cert=/work/cert/etcd.pem \ --key=/work/cert/etcd-key.pem \ --endpoints=https://192.168.100.111:2379,https://192.168.100.112:2379,https://192.168.100.113:2379 member list
上述就是小編為大家分享的Kubernetes模擬生產環境搭建高可用集群中的Etcd集群是怎樣部署了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。