在之前的文章中,我們詳細介紹了K3s的架構以及部署場景,給尚未了解K3s的朋友提供了一個很好的入門方向,那么,在本文中我們將探索如何配置一個3節點的etcd集群,它將會被用于高可用、多節點的K3s集群中,
etcd是云原生生態中最受歡迎的開源專案之一,它是云原生計算基金會(CNCF)范訓的專案,目前已經成為Kubernetes基礎架構的核心構件,
在本教程結束的時候,你將完成部署一個啟用了TLS的3節點etcd集群,作為具有多個master的高可用K3s集群的外部資料存盤,
首先,請確保你有3個帶有靜態IP地址的Linux host,在我的實驗環境中,我運行著4臺Intel NUC迷你電腦,這4臺電腦上運行著Ubuntu 18.04,IP地址從10.0.0.60到10.0.0.63不等,我們將在IP地址為10.0.0.60、10.0.0.61和10.0.0.62的主機上安裝etcd,你在自己進行實踐時務必用你自己的一套地址來替換這些IP地址,
下載etcd二進制檔案
在每個Linux host上,運行以下命令以下載和安裝最新版本的二進制檔案:
ETCD_VER=v3.4.10
DOWNLOAD_URL=https://storage.googleapis.com/etcd
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
chmod +x /tmp/etcd-download-test/etcd
chmod +x /tmp/etcd-download-test/etcdctl
#Verify the downloads
/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
#Move them to the bin folder
sudo mv /tmp/etcd-download-test/etcd /usr/local/bin
sudo mv /tmp/etcd-download-test/etcdctl /usr/local/bin

生成和分發證書
我們將使用Cloudflare的cfssl工具來生成證書和密鑰,如果你使用Mac作為你的作業站,你可以使用Homebrew安裝它,
brew install cfssl

建立一個名為certs的目錄,并運行以下命令為每臺主機生成CA證書和server證書及密鑰組合,
mkdir certs && cd certs
首先,創建CA證書,它將被所有的etcd server和客戶端使用,
echo '{"CN":"CA","key":{"algo":"rsa","size":2048}}' | cfssl gencert -initca - | cfssljson -bare ca -
echo '{"signing":{"default":{"expiry":"43800h","usages":["signing","key encipherment","server auth","client auth"]}}}' > ca-config.json
這將生成三個檔案——ca-key.pem、ca.pem和ca.csr,
接下來,我們將為第一個節點生成證書和密鑰
export NAME=node-1
export ADDRESS=10.0.0.60,$NAME
echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem -hostname="$ADDRESS" - | cfssljson -bare $NAME
對接下來的兩個節點也重復以上步驟,
export NAME=node-2
export ADDRESS=10.0.0.61,$NAME
echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=ca-config.json -ca=ca.pem -ca-key=ca-key.pem -hostname="$ADDRESS" - | cfssljson -bare $NAME
export NAME=node-3
export ADDRESS=10.0.0.62,$NAME
不要忘記用自己的組合替換IP地址以及節點名稱,
此時,我們已經為CA和所有三個節點生成了證書和密鑰,

現在是時候開始分發證書到集群的每個節點,
運行以下命令,替換用戶名和IP地址,將證書復制到相應的節點上,
HOST=10.0.0.60
USER=ubuntu
scp ca.pem $USER@$HOST:etcd-ca.crt
scp node-1.pem $USER@$HOST:server.crt
scp node-1-key.pem $USER@$HOST:server.key
SSH進入每個節點,并運行以下命令將證書移動到適當的目錄中,
HOST=10.0.0.60
USER=ubuntu
ssh $USER@$HOST
sudo mkdir -p /etc/etcd
sudo mv * /etc/etcd
sudo chmod 600 /etc/etcd/server.key
我們完成了每個節點上證書的生成和分發,下一步,我們將為每個節點創建組態檔和Systemd單元檔案,
配置和啟動etcd集群
在節點1上,在etc/etcd目錄中創建一個名為etcd.conf的檔案,包含以下內容:
ETCD_NAME=node-1
ETCD_LISTEN_PEER_URLS="https://10.0.0.60:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.60:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER="node-1=https://10.0.0.60:2380,node-2=https://10.0.0.61:2380,node-3=https://10.0.0.62:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.60:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.60:2379"
ETCD_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_CERT_FILE="/etc/etcd/server.crt"
ETCD_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CERT_FILE="/etc/etcd/server.crt"
ETCD_DATA_DIR="/var/lib/etcd"
節點2的檔案則使用以下內容:
ETCD_NAME=node-2
ETCD_LISTEN_PEER_URLS="https://10.0.0.61:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.61:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER="node-1=https://10.0.0.60:2380,node-2=https://10.0.0.61:2380,node-3=https://10.0.0.62:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.61:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.61:2379"
ETCD_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_CERT_FILE="/etc/etcd/server.crt"
ETCD_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CERT_FILE="/etc/etcd/server.crt"
ETCD_DATA_DIR="/var/lib/etcd"
最后,為節點3創建組態檔,
ETCD_NAME=node-3
ETCD_LISTEN_PEER_URLS="https://10.0.0.62:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.62:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER="node-1=https://10.0.0.60:2380,node-2=https://10.0.0.61:2380,node-3=https://10.0.0.62:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.62:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.62:2379"
ETCD_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_CERT_FILE="/etc/etcd/server.crt"
ETCD_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/etcd-ca.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/server.key"
ETCD_PEER_CERT_FILE="/etc/etcd/server.crt"
ETCD_DATA_DIR="/var/lib/etcd"
請不要忘記更換你的網路專用IP地址,
配置完成后,我們就可以在每個節點上創建systemd單元檔案了,
在/lib/system/systemd處創建檔案etcd.service,內容如下:
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target
[Service]
Type=notify
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
由于每個節點的配置都被移到了專用檔案(/etc/etcd/etcd.conf)中,所以所有節點的單元檔案保持不變,
現在我們已經準備好啟動服務了,在每個節點上運行下面的命令來啟動etcd集群:
sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd
確保etcd服務已經啟動,并且運行中沒有出現錯誤,
sudo systemctl status etcd

測驗和驗證集群
SSH進入其中一個節點,通過etcd CLI連接到集群,
etcdctl --endpoints https://10.0.0.60:2379 --cert /etc/etcd/server.crt --cacert /etc/etcd/etcd-ca.crt --key /etc/etcd/server.key put foo bar
我們在etcd資料庫中插入一個密鑰,讓我們看看能否找回它,
etcdctl --endpoints https://10.0.0.60:2379 --cert /etc/etcd/server.crt --cacert /etc/etcd/etcd-ca.crt --key /etc/etcd/server.key get foo

接下來,讓我們使用API端點(endpoint)來檢查集群的健康狀態,
curl --cacert /etc/etcd/etcd-ca.crt --cert /etc/etcd/server.crt --key /etc/etcd/server.key https://10.0.0.60:2379/health

最后,讓我們確保所有的節點都參與到集群中,
etcdctl --endpoints https://10.0.0.60:2379 --cert /etc/etcd/server.crt --cacert /etc/etcd/etcd-ca.crt --key /etc/etcd/server.key member list

Congratulations!現在你擁有了一個安全、分布式的以及高可用的etcd集群,它已經為生產級K3s集群環境做好了準備,
在下一篇文章中,我將向你詳細介紹如何安裝和配置一個具有高可用控制平面的4節點K3s集群,保持關注喲~!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/127930.html
標籤:其他
