HELLO---------kubernetes 叢集部署之ETCD資料庫部署
阿新 • • 發佈:2020-11-25
一、實驗環境
1、需要三臺伺服器
主機名 | ip | 搭建的服務資訊 |
---|---|---|
master | 20.0.0.10 | kube-apiserver kube-controller-manager kube-scheduler etcd |
node1 | 20.0.0.11 | kubelet kube-proxy docker flannel etcd |
node2 | 20.0.0.12 | kubelet kube-proxy docker flannel etcd |
上面軟體說明
##各配置的作用:
etcd生產環境中往往放在master上面,,,構建一個叢集最少需要三個節點
kube-apiserver 就是master的主腦部分
kube-controller-manager 控制器的管理器kube-scheduler 排程器
kubelet 3希望master給它頒發證書
kube-proxy 4提供對外的服務
docker 1容器
flannel 2網路主鍵
2、關閉相關的安全軟體,因為這時實驗環境,所以直接關閉就行,改下主機名
hostnamectl set-hostname node2
su
systemctl stop firewalld
iptables -F
setenforce 0
二、進行實驗
在master上操作
1、建立工作目錄,傳檔案,##從宿主機將所需要的個檔案放在k8s目錄
mkdir k8s cd k8s/ ls ##從宿主機將所需要的個檔案在這,兩個指令碼,一個目錄 etcd-cert etcd-cert.sh etcd.sh cd etcd-cert/ chmod +x cfssl cfssl-certinfo cfssljson mv cfssl cfssl-certinfo cfssljson /usr/local/bin/ ls /usr/local/bin/ ##檢視下有有沒有下面三個檔案 cfssl cfssl-certinfo cfssljson #cfssl:生成證書工具 #cfssl-certinfo:檢視證書資訊 #cfssljson:通過傳入json檔案生成證書
2、製作CA證書
cd .. mv etcd-cert.sh etcd-cert/ cd etcd-cert/ 1、建立ca證書的配置檔案 vim ca-config.json { "signing": { "default": { ##系統設定值 "expiry": "87600h" ##證書的有效期10年 }, "profiles": { ##配置 "www": { ##臺頭是www "expiry": "87600h", ##時效 87600h "usages": [ ##常見用法(標籤) "signing", ##簽字簽名 "key encipherment", ##加密 "server auth", ##服務端驗證 "client auth" ##客戶端驗證 ] } } } } 2、建立ca證書的簽名證書 ##看到csr這個就是簽名的證書 vim ca-csr.json { "CN":"etcd CA", ##CN中國 "key": { ##祕鑰 "algo":"rsa", ##祕鑰型別採用rsa非對稱祕鑰 "size":2048 ##祕鑰長度 }, "names": [ ##證書的名稱 { "C":"CN", ##來自於中國 "L":"Beijing", ##地區 "ST":"Beijing" ##時區 } ] } 3、用ca簽名證書生成ca證書,得到ca-key.pem ca.pem cfssl gencert -initca ca-csr.json | cfssljson -bare ca - ls ##能看到下面六個檔案 ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh
上面指令3的部分解釋。
gencert -initca讀取
ca-csr.json初始化用的
cfssljson -bare基本資訊的讀取時-bare
ca-key.pem ca.pem這兩個是所獲得的證書
ca-config.json做server要用到的
3、指定etcd三個節點之間的通訊驗證—需要伺服器簽名證書 server-csr.json
vim server-csr.json ##通訊驗證證書
{
"CN": "etcd",
"hosts": [ ##指明host的檔案地址
"20.0.0.10",
"20.0.0.11",
"20.0.0.12"
],
"key": {
"algo": "rsa", ##給你ca相匹配的祕鑰證明
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
4、用ca-key.pem、ca.pem、伺服器簽名證書 生成ETCD證書 ----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
ls ##看一下會有下面八個證書#其中server-key.pem server.pem是最重要的
ca-config.json ca-csr.json ca.pem server.csr server-key.pem
ca.csr ca-key.pem etcd-cert.sh server-csr.json server.pem
5、使用證書、etcd指令碼搭建ETCD叢集
5、1、上傳一個生成ETCD配置檔案的指令碼etcd.sh到 /root/k8s 目錄下,指令碼內容如下:
cd ..
tar zxf etcd-v3.3.10-linux-amd64.tar.gz
5、2、解壓後到etcd-v3.3.10-linux-amd64下會生成兩個檔案etcd 和etcdctl是很重要的。
mkdir /opt/etcd/{cfg,bin,ssl} -p ##在opt目錄中建立etcd叢集的工作目錄
ls /opt/etcd/
#bin cfg ssl ##看是否建立成功
cd /root/k8s/etcd-v3.3.10-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/ ##將解壓後的檔案放在/opt/etcd/bin 目錄下
ls /opt/etcd/bin/ ##檢視一下有兩個檔案了etcd etcdctl
cd /root/k8s/etcd-cert/
cp *.pem /opt/etcd/ssl/ ##將所有的證書放在/opt/etcd/ssl中
ls /opt/etcd/ssl/
#ca-key.pem ca.pem server-key.pem server.pem ##再去檢視下有沒有
cd /root/k8s/ ##將這個三個壓縮包gz結尾的從宿主機放在它下面
#cfssl.sh etcd-v3.3.10-linux-amd64 kubernetes-server-linux-amd64.tar.gz
#etcd-cert etcd-v3.3.10-linux-amd64.tar.gz
#etcd.sh flannel-v0.10.0-linux-amd64.tar.gz
5、3、執行 etcd.sh 指令碼產生etcd叢集的配置指令碼和服務啟動指令碼,進入卡住狀態等待其他節點加入
#注意:修改成自己的ip地址《vim /root/k8s/etcd.sh這個檔案中能看你配置的群集資訊》
[root@localhost k8s]# bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380
三、使用另外一個會話視窗,會發現etcd程序己經開啟
ps -ef | grep etcd
.... ##能顯示下面的埠資訊
root 16431 0.0 0.0 112664 972 pts/2 S+ 22:38 0:00 grep --color=auto etcd
scp -r /opt/etcd/ [email protected]:/opt/
scp -r /opt/etcd/ [email protected]:/opt/
#將所有的配置檔案遠端拷貝到對方的/opt目錄下,記得一定是這個目錄,不然你要重新改配置檔案。
scp /usr/lib/systemd/system/etcd.service [email protected]:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service [email protected]:/usr/lib/systemd/system/
#將啟動指令碼遠端拷貝到node節點的啟動指令碼的位置
四、在node上面進行相關的更改節點node2的node1差不對這裡不多解釋。
#主機名最好改一下
hostnamectl set-hostname node1
su
cd /opt/etcd/cfg #
[root@node2 cfg]# vim etcd ##修改叢集的名稱和ip
#[Member] ##成員
ETCD_NAME="etcd02" ##修改etcd節點的名稱
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ##服務執行資料儲存的路徑(設定資料儲存的目錄)
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##監聽的同伴通訊的地址,比如http://ip:2380,如果有多個,使用逗號分隔。需要所有節點都能夠訪問,所以不要使用 localhost!(用於監聽其他etcd member的url (統一資源定位器,有叫網頁地址))
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##監聽的客戶端服務地址(對外提供服務的地址(CLIENT客戶機))
#[Clustering] #使成群(cluster的現在分詞)或聚類
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##對外公告的該節點同伴監聽地址,這個值會告訴叢集中其他節點
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379" ##對外公告的該節點客戶端監聽地址,這個值會告訴叢集中其他節點。
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380" ##叢集中所有節點的資訊,格式為
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ##叢集的ID,多個叢集的時候,每個叢集的ID必須保持唯一
ETCD_INITIAL_CLUSTER_STATE="new" ##新建叢集的時候,這個值為 new;假如加入已經存在的叢集,這個值為existing。
這裡是具體的要更改的說明
vim etcd
#[Member]
ETCD_NAME="etcd02" ##改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##改
##
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379" ##改
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
五、兩個node節點都改過後可以去master節點上將叢集開啟,,,原來開的應該會超時而自動退出,所有要重新去開啟,
bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
六、然後回到node節點開啟etcd
[root@localhost ~]# systemctl start etcd
[root@localhost ~]# systemctl status etcd
若是running狀態證明是正常的
七、最後到master去執行叢集健康檢查
cd /root/k8s/etcd-cert
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health
member 4a9f1750486efa02 is healthy: got healthy result from https://20.0.0.10:2379
member c1b99d661e10b568 is healthy: got healthy result from https://20.0.0.11:2379
member f33c8e897853b7c4 is healthy: got healthy result from https://20.0.0.12:2379
cluster is healthy
出現cluster is healthy說明正常