k8s之external-etcd集群管理


一、概述

kubernetes使用etcd作為數據中心,使用kubeadm部署kubernetes的時候默認會自己部署一個etcd,當然也可以將kubeadm部署的單點的etcd做成集群,但是比較麻煩,所以我們使用的是自建

的etcd集群即external  etcd cluster。在使用kubeadm初始化集群的時候指定etcd為external。

具體kubeadm的init config參考我的另外一篇blog:https://www.cnblogs.com/cuishuai/p/10149727.html

etcd集群的搭建參考:https://www.cnblogs.com/cuishuai/p/9897006.html

本片blog不再贅述詳細的搭建過程,主要記錄一下etcd集群的管理。

 

二、Etcd Cluster 管理

1、准備etcdctl

默認etcd部署采用的是etcd-v2,kubernetes默認使用的是v3,所以直接使用etcdctl在etcd里查不到任何關於kubernetes的信息,v2和v3有很大的差距,可以從v2遷移到v3,但是不能往回遷。

想要使用必須指定etcd api 為v3,作如下操作:

# vim  ~/.bashrc

#etcd host1='10.42.13.230:2379' host2='10.42.43.147:2379' host3='10.42.150.212:2379' endpoints=$host1,$host2,$host3 alias etcdctl='etcdctl --endpoints=$endpoints --key /etc/etcd/ssl/etcd-key.pem --cert /etc/etcd/ssl/etcd.pem --cacert /etc/kubernetes/ssl/ca.pem' export ETCDCTL_API=3

#使修改生效

#source  ~/.bashrc

 

現在使用etcdctl查看kubernetes的信息:

查看所有的key:

etcdctl get --prefix "" --keys-only

刪掉所有的key:

etcdctl del  --prefix  ""

查看以calico開頭的所有的key:

etcdctl get --prefix "/calico" --keys-only

使用etcdctl可以管理很多etcd的內容,具體的可以使用etcdctl  --help查看。

 

2、etcd集群添加節點

添加節點前的准備:

!集群必須是奇數個節點

!重新創建etcd的證書,將所有要添加的ip都加進去,參考https://www.cnblogs.com/cuishuai/p/9897006.html

!為新的etcd服務創建啟動文件,參考https://www.cnblogs.com/cuishuai/p/9897006.html,需要做一些簡單的修改:

#cat /etc/systemd/system/etcd.service

[Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target Documentation=https://github.com/coreos
 [Service] Type=notify WorkingDirectory=/var/lib/etcd/ EnvironmentFile=-/etc/etcd/etcd.conf ExecStart=/opt/bin/etcd \ --name=etcd-host3 \ --cert-file=/etc/etcd/ssl/etcd.pem \ --key-file=/etc/etcd/ssl/etcd-key.pem \ --peer-cert-file=/etc/etcd/ssl/etcd.pem \ --peer-key-file=/etc/etcd/ssl/etcd-key.pem \ --trusted-ca-file=/etc/kubernetes/ssl/ca.pem \ --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \ --initial-advertise-peer-urls=https://10.42.10.90:2380 \
--listen-peer-urls=https://10.42.10.90:2380 \
--listen-client-urls=https://10.42.10.90:2379,http://127.0.0.1:2379 \
--advertise-client-urls=https://10.42.10.90:2379 \
--initial-cluster-token=etcd-cluster-1 \ --initial-cluster=etcd-host0=https://10.42.13.230:2380,etcd-host1=https://10.42.43.147:2380,etcd-host2=https://10.42.150.212:2380,etcd-host3=https://10.42.10.90:2380 \
--initial-cluster-state=exsiting \ --data-dir=/var/lib/etcd Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target
--initial-cluster-state修改為existing

創建數據目錄:

mkdir  /var/lib/etcd


添加節點:

etcdctl member add --endpoints=https://10.42.10.90:2379 etcd-host3 https://10.42.10.90:2380

啟動etcd實例

systemctl start etcd
systemctl enable etcd

查看:

etcdctl  endpoint health 
etcdctl member list

 

3、移除節點

找到需要移除節點的memberid:

etcdctl  member  list 

移除:

etcdctl  member  remove  [memberid]

 

4、etcd集群數據備份與恢復

!數據備份

准備備份路徑

mkdir  -p /data/backup/etcd

開始備份:

etcdctl snapshot save /data/backup/etcd/snapshot-$(date +%Y%m%d%H%M).db

查看snapshot文件的狀態:

etcdctl snapshot status /data/backup/etcd/snapshot-201901171717.db

 

!數據恢復

寫了一個腳本,現在集群假設是3個節點,名稱一次為etcd-host0、etcd-host1、etcd-host2:

#cat etcdrestoe.sh

#!/bin/bash h0=10.42.13.230 h1=10.42.43.147 h2=10.42.150.212

for i in h0 h1 h2 do etcdctl snapshot restore snapshot.db \ --data-dir=/var/lib/etcd \ --name=$i \ --initial-cluster=etcd-host0=https://$h0:2380,etcd-host1=https://$h1:2380,etcd-host2=https://$h2:2380 \
--initial-cluster-token=etcd-cluster-1 \ --initial-advertise-peer-urls=https://$i:2380 && \

mv /var/lib/etcd/ etcd_$i done

把生成的etcd_10.42.13.230、etcd_10.42.43.147、etcd_10.42.150.212分別覆蓋各自節點之前的/var/lib/etcd下面的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM