二進制安裝K8S(三):部署Etcd數據庫集羣

一、master節點上部署etcd:
1、編寫腳本:
vim /root/scripts/etcd_master_install.sh
#!/bin/bash
master_ip=cat /etc/hosts |grep master|awk '{print $1}'
node01_ip=cat /etc/hosts |grep node01|awk '{print $1}'
node02_ip=cat /etc/hosts |grep node02|awk '{print $1}'
node03_ip=cat /etc/hosts |grep node03|awk '{print $1}'

#etcd二進制包下載
wget https://raw.githubusercontent.com/guancongcong/kubernetes/master/pkg/etcd/etcd-v3.2.12-linux-amd64.tar.gz
tar xf etcd-v3.2.12-linux-amd64.tar.gz
cd etcd-v3.2.12-linux-amd64
mv etcd* /opt/kubernetes/bin/

#創建etcd集羣的配置文件:
cat >/opt/kubernetes/cfg/etcd <<EOF
#{Member}
ETCD_NAME=“etcd01”
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS=“https://masterip:2380"ETCDLISTENCLIENTURLS="https://{master_ip}:2380" ETCD_LISTEN_CLIENT_URLS="https://{master_ip}:2379”

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS=“https://masterip:2380"ETCDADVERTISECLIENTURLS="https://{master_ip}:2380" ETCD_ADVERTISE_CLIENT_URLS="https://{master_ip}:2379”
ETCD_INITIAL_CLUSTER=“etcd01=https://masterip:2380,etcd02=https://{master_ip}:2380,etcd02=https://{node01_ip}:2380,etcd03=https://node02ip:2380,etcd04=https://{node02_ip}:2380,etcd04=https://{node03_ip}:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”
EOF
#創建系統文件,通過systemctl管理etcd:
cat >/usr/lib/systemd/system/etcd.service <<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=-/opt/kubernetes/cfg/etcd
ExecStart=/opt/kubernetes/bin/etcd \
–name=${ETCD_NAME} \
–data-dir=${ETCD_DATA_DIR} \
–listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
–listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
–advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
–initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
–initial-cluster=${ETCD_INITIAL_CLUSTER} \
–initial-cluster-token=${ETCD_INITIAL_CLUSTER} \
–initial-cluster-state=new \
–cert-file=/opt/kubernetes/ssl/server.pem \
–key-file=/opt/kubernetes/ssl/server-key.pem \
–peer-cert-file=/opt/kubernetes/ssl/server.pem \
–peer-key-file=/opt/kubernetes/ssl/server-key.pem \
–trusted-ca-file=/opt/kubernetes/ssl/ca.pem \
–peer-trusted-ca-file=/opt/kubernetes/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

#啓動etcd服務:
systemctl daemon-reload
systemctl restart etcd
systemctl enable etcd

2、執行腳本:
sh /root/scripts/etcd_master_install.sh

二、node節點上部署etcd:
1、主機間互信:
1>在master節點編寫主機間互信腳本:
vim /root/scripts/believe.sh
#!/bin/bash
[ -x /usr/bin/expect ] || yum install expect -y &>/dev/null
if [ ! -f /root/.ssh/id_rsa.pub ]
then
/usr/bin/expect <<EOF
set timeout 180
spawn ssh-keygen
expect {
“Enter file *” {send “\n”;exp_continue}
"Enter passphrase * " {send “\n”;exp_continue}
"Enter same passphrase again: " {send “\n”}
}
expect eof
EOF
fi
for ip in 75 76 77
do
/usr/bin/expect <<EOF
spawn ssh-copy-id 192.168.1.${ip}
expect {
“yes/no” {send “yes\n”;exp_continue}
“password” {send “1\n”}
}
expect eof
EOF
done

#從master節點將相關文件傳到node01、node02、node03節點上:
scp -r /opt/kubernetes/{bin,cfg,ssl} 192.168.1.75:/opt/kubernetes/
scp -r /opt/kubernetes/{bin,cfg,ssl} 192.168.1.76:/opt/kubernetes/
scp -r /opt/kubernetes/{bin,cfg,ssl} 192.168.1.77:/opt/kubernetes/
scp /usr/lib/systemd/system/etcd.service 192.168.1.75:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service 192.168.1.76:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service 192.168.1.77:/usr/lib/systemd/system/

#讓命令全局可用
ln -s /opt/kubernetes/bin/* /usr/local/sbin/

2>執行腳本:
sh /root/scripts/believe.sh

2、在三臺node節點上修改配置文件並啓動etcd服務:
vim /root/scripts/change.sh
#!/bin/bash
hostname=hostname
master_ip=cat /etc/hosts|grep master|awk '{print $1}'
local_ip=cat /etc/hosts|grep ${hostname}|awk '{print $1}'
number=$((hostname|awk -F"0" '{print $2}'+1))
etcd_name=etcd0KaTeX parse error: Expected 'EOF', got '#' at position 10: {number} #̲修改etcd名字 eval s…{etcd_name}/’ /opt/kubernetes/cfg/etcd
#修改etcd的ip
eval sed -i ‘1,9s/masterip/{master_ip}/{local_ip}/’ /opt/kubernetes/cfg/etcd
#讓命令全局可用
ln -s /opt/kubernetes/bin/* /usr/local/sbin/
#啓動etcd服務
systemctl daemon-reload
systemctl restart etcd
systemctl enable etcd

3、在任意一個節點上查看etcd集羣健康狀態:
cd /opt/kubernetes/ssl/
/opt/kubernetes/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=“https://192.168.1.250:2379,https://192.168.1.75:2379,https://192.168.1.76:2379,https://192.168.1.77:2379” cluster-health
在這裏插入圖片描述
4、驗證集羣可用性:
集羣做好的四臺服務器的etcd數據應該是互通的,即在mater上創建一個文件或者目錄,在任意node上都是可以查詢到的,同理,在node上設置的key值,在master上也是可以get到的
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發佈了44 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章