Kubernetes(k8s)部署etcd集群
目錄
- Kubernetes(k8s)部署etcd集群
- 一、實驗環境
- 二、ETCD集群部署
- 2.1 master 節點部署
- 2.1.1 定義兩個腳本檔案
- 2.1.2 下載證書制作工具
- 2.1.3 開始制作證書
- 2.1.4 **ETCD 部署**
- 2.2 node節點部署
一、實驗環境
- 本實驗需求為3個節點即可,每個節點的配置2+4(2個CPU+4G記憶體)
角色分配:
1、master節點IP:192.168.126.10
2、node節點IP:192.168.126.20、192.168.126.30
- 官網原始碼包下載:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1
- ETCD 二進制包地址:https://github.com/etcd-io/etcd/releases
二、ETCD集群部署
2.1 master 節點部署
2.1.1 定義兩個腳本檔案
- 創建k8s目錄,在創建兩個腳本
[root@localhost ~]# mkdir k8s
[root@localhost ~]# cd k8s/
[root@localhost k8s]# ls #從宿主機拖進來
etcd-cert.sh etcd.sh
[root@localhost k8s]# mkdir etcd-cert
[root@localhost k8s]# mv etcd-cert.sh etcd-cert

etcd-cert.sh 證書制作腳本詳解
[root@master k8s]# cat etcd-cert.sh
cat > ca-config.json <<EOF #CA證書組態檔
{
"signing": { #鍵名稱
"default": {
"expiry": "87600h" #證書有效期(10年)
},
"profiles": { #簡介
"www": { #名稱
"expiry": "87600h",
"usages": [ #使用方法
"signing", #鍵
"key encipherment", #密鑰驗證(密鑰驗證要設定在CA證書中)
"server auth", #服務器端驗證
"client auth" #客戶端驗證
]
}
}
}
}
EOF
cat > ca-csr.json <<EOF #CA簽名
{
"CN": "etcd CA", #CA簽名為etcd指定(三個節點均需要)
"key": {
"algo": "rsa", #使用rsa非對稱密鑰的形式
"size": 2048 #密鑰長度為2048
},
"names": [ #在證書中定義資訊(標準格式)
{
"C": "CN", #名稱
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
#-----------------------
cat > server-csr.json <<EOF #服務器端的簽名
{
"CN": "etcd",
"hosts": [ #定義三個節點的IP地址
"192.168.226.128",
"192.168.226.132",
"192.168.226.133"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
#cfssl 為證書制作工具
- etcd.sh 啟動腳本內容詳解
[root@master k8s]# cat etcd.sh
#!/bin/bash
#以下為使用格式:etcd名稱 當前etcd的IP地址+完整的集群名稱和地址
#example: ./etcd.sh etcd01 192.168.1.10 etcd02=https://192.168.1.11:2380,etcd03=https://192.168.1.12:2380
ETCD_NAME=$1 #位置變數1:etcd節點名稱
ETCD_IP=$2 #位置變數2:節點地址
ETCD_CLUSTER=$3 #位置變數3:集群
WORK_DIR=/opt/etcd #指定作業目錄
cat <<EOF >$WORK_DIR/cfg/etcd #在指定作業目錄創建ETCD的組態檔
#[Member]
ETCD_NAME="${ETCD_NAME}" #etcd名稱
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380" #etcd IP地址:2380埠,用于集群之間通訊
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379" #etcd IP地址:2379埠,用于開放給外部客戶端通訊
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379" #對外提供的url使用https的協議進行訪問
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}" #多路訪問
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #tokens 令牌環名稱:etcd-cluster
ETCD_INITIAL_CLUSTER_STATE="new" #狀態,重新創建
EOF
cat <<EOF >/usr/lib/systemd/system/etcd.service #定義ectd的啟動腳本
[Unit] #基本項
Description=Etcd Server #類似為 etcd 服務
After=network.target
After=network-online.target
Wants=network-online.target
[Service] #服務項
Type=notify
EnvironmentFile=${WORK_DIR}/cfg/etcd #etcd檔案位置
ExecStart=${WORK_DIR}/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_TOKEN} \ #群集內部通信,也是使用的令牌,為了保證安全(防范中間人竊取)
--initial-cluster-state=new \
--cert-file=${WORK_DIR}/ssl/server.pem \ #證書相關引數
--key-file=${WORK_DIR}/ssl/server-key.pem \
--peer-cert-file=${WORK_DIR}/ssl/server.pem \
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536 #開放最多的埠號
[Install]
WantedBy=multi-user.target #進行啟動
EOF
systemctl daemon-reload #引數多載
systemctl enable etcd
systemctl restart etcd
2.1.2 下載證書制作工具
下載cfssl官方包
[root@localhost k8s]# vim cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo #給檔案可執行權限
[root@localhost k8s]# bash cfssl.sh
[root@localhost k8s]# ls /usr/local/bin/
cfssl cfssl-certinfo cfssljson
[root@localhost k8s]# chmod + /usr/local/bin/*
注:我們之前是下載好的,就用下載好的工具制作
[root@localhost k8s]#cd /usr/local/bin
[root@localhost bin]#rz -E
rz waiting to receive.
[root@localhost bin]#ls
cfssl cfssl-certinfo cfssljson
[root@localhost bin]#chmod +x *
[root@localhost bin]#ls
cfssl cfssl-certinfo cfssljson

2.1.3 開始制作證書
*cfssl 生成證書工具 cfssljson通過傳入json檔案生成證書 cfssl-certinfo查看證書資訊
定義生成CA證書的組態檔
[root@localhost k8s]# cd etcd-cert/
cat > ca-config.json <<EOF #定義ca證書組態檔
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
- **定義生成證書簽名檔案**
cat > ca-csr.json <<EOF #實作證書簽名
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF
-
生成證書
需生成ca-key.pem 密鑰證書和ca.pem證書
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
#生產證書,生成ca-key.pem ca.pem

指定etcd三個節點之間的通信驗證
cat > server-csr.json <<EOF #指定etcd三個節點之間的通信驗證
{
"CN": "etcd",
"hosts": [
"192.168.126.10",
"192.168.126.20",
"192.168.126.30"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
- 生成服務器端密鑰證書:server-key.pem 和服務器端證書:server.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
#生成ETCD證書 server-key.pem server.pem

2.1.4 ETCD 部署
下載、解壓軟體包
[root@localhost k8s]#ls
etcd-cert etcd.sh etcd-v3.3.10-linux-amd64.tar.gz
[root@localhost k8s]#tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
[root@localhost k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p #組態檔,命令檔案,證書
[root@localhost k8s]# cd etcd-v3.3.10-linux-amd64/
[root@localhost etcd-v3.3.10-linux-amd64]# ls
Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
[root@localhost etcd-v3.3.10-linux-amd64]# mv etcd etcdctl /opt/etcd/bin/
[root@localhost k8s]# cd etcd-cert/
[root@localhost etcd-cert]# ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh server.csr server-csr.json server-key.pem server.pem
[root@localhost etcd-cert]# cp *.pem /opt/etcd/ssl #證書拷貝

進入卡住狀態等待其他節點加入
執行此命令會產生兩個檔案,一個是組態檔,一個是啟動腳本
同時,等待加入的程序大約在5分鐘左右,如果沒有節點接入則會自動退出
[root@localhost k8s]# bash etcd.sh etcd01 192.168.126.10 etcd02=https://192.168.126.20:2380,etcd03=https://192.168.126.30:2380 #進入卡住狀態等待其他節點加入
[root@localhost ~]# ps -ef | grep etcd
#使用另外一個會話打開,會發現etcd行程已經開啟

- 最后,將證書和啟動腳本推送/復制到兩臺node節點中
[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.126.20:/opt/ #拷貝證書去其他節點
[root@localhost k8s]# scp -r /opt/etcd/ root@192.168.126.30:/opt #拷貝證書去其他節點
[root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.126.20:/usr/lib/systemd/system/ #啟動腳本拷貝其他節點
[root@localhost k8s]# scp /usr/lib/systemd/system/etcd.service root@192.168.126.30:/usr/lib/systemd/system/ #啟動腳本拷貝其他節點
2.2 node節點部署
在node01和node02節點修改
[root@localhost ~]# vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.126.20:2380" #ip地址修改對應的node節點
ETCD_LISTEN_CLIENT_URLS="https://192.168.126.20:2379" #ip地址修改對應的node節點
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.126.20:2380" #ip地址修改對應的node節點
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.126.20:2379" #ip地址修改對應的node節點
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.126.20:2380,etcd02=https://192.168.126.5:2380,etcd03=https://192.168.126.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@localhost ssl]# systemctl start etcd
[root@localhost ssl]# systemctl enable etcd
[root@localhost ssl]# systemctl status etcd
在Master檢查集群狀態
檢查群集狀態(需要在有證書的目錄下使用此命令)
[root@localhost ~]# cd /opt/etcd/ssl
[root@localhost ~]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.126.10:2379,https://192.168.126.20:2379,https://192.168.126.30:2379" cluster-health
tcd
[root@localhost ssl]# systemctl status etcd

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275109.html
標籤:其他
上一篇:Java 并發編程_無鎖并發
下一篇:Servlet的生命周期
