有个master1因为服务器问题数据丢失了,所有系统盘底下的数据都没了,要重新加入3master高可用状态的集群,加入前要先进行处理
删除etcd对应master节点的etcd节点
kubekey安装的 Etcd 为二进制方式
所以etcd默认证书位置在/etc/ssl/etcd/ssl下
admin-bigdata-uat-manage-master-节点名-key.pem
admin-bigdata-uat-manage-master-节点名.pem
admin-bigdata-uat-manage-master-节点名-key.pem
admin-bigdata-uat-manage-master-节点名.pem
admin-bigdata-uat-manage-master-节点名.pem
admin-bigdata-uat-manage-master-节点名.pem
ca-key.pem
ca.pem
member-bigdata-uat-manage-master-节点名-key.pem
member-bigdata-uat-manage-master-节点名.pem
member-bigdata-uat-manage-master-节点名-key.pem
member-bigdata-uat-manage-master-节点名.pem
member-bigdata-uat-manage-master-节点名-key.pem
member-bigdata-uat-manage-master-节点名.pem
node-bigdata-uat-manage-master-节点名-key.pem
node-bigdata-uat-manage-master-节点名.pem
node-bigdata-uat-manage-master-节点名-key.pem
node-bigdata-uat-manage-master-节点名.pem
node-bigdata-uat-manage-master-节点名-key.pem
node-bigdata-uat-manage-master-节点名.pem
前缀带node的是给k8s集群用的,member前缀是给etcd自己以及peer用的,admin是给etcdctl用的
配置文件是通过systemd启动的,所以得通过看systemd的配置文件去找,
环境配置相关的文件在/etc/etcd.env里面
有三个证书,共用一个单独的ca
- ETCD_PEER证书是由 etcd 集群成员使用,供它们彼此之间通信使用
- ETCD_CERT_FILE由服务器使用,并由客户端验证服务器身份。例如docker服务器或kube-apiserver
- ETCDCTL_CERT_FILE用于通过服务器验证客户端。例如etcdctl,etcd proxy,fleetctl或docker客户端
# Environment file for etcd v3.4.13
ETCD_DATA_DIR=/var/lib/etcd
ETCD_ADVERTISE_CLIENT_URLS=https://节点:2379
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://节点:2380
ETCD_INITIAL_CLUSTER_STATE=existing
ETCD_METRICS=basic
ETCD_LISTEN_CLIENT_URLS=https://节点:2379,<https://127.0.0.1:2379>
ETCD_ELECTION_TIMEOUT=5000
ETCD_HEARTBEAT_INTERVAL=250
ETCD_INITIAL_CLUSTER_TOKEN=k8s_etcd
ETCD_LISTEN_PEER_URLS=https://节点:2380
ETCD_NAME=etcd-bigdata-uat-manage-master-节点
ETCD_PROXY=off
ETCD_ENABLE_V2=true
ETCD_INITIAL_CLUSTER=etcd-bigdata-uat-manage-master-
节点=https://节点:2380,etcd-bigdata-uat-manage-master-
节点=https://节点:2380,etcd-bigdata-uat-manage-master-
节点=https://节点:2380
ETCD_AUTO_COMPACTION_RETENTION=8
ETCD_SNAPSHOT_COUNT=10000
# TLS settings
ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点.pem
ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点-key.pem
ETCD_CLIENT_CERT_AUTH=true
ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCD_PEER_CERT_FILE=/etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点.pem
ETCD_PEER_KEY_FILE=/etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点-key.pem
ETCD_PEER_CLIENT_CERT_AUTH=True
# CLI settings
ETCDCTL_ENDPOINTS=https://127.0.0.1:2379
ETCDCTL_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCDCTL_KEY_FILE=/etc/ssl/etcd/ssl/admin-bigdata-uat-manage-master-节点-key.pem
ETCDCTL_CERT_FILE=/etc/ssl/etcd/ssl/admin-bigdata-uat-manage-master-节点.pem
通过这个就能获取证书来用etcd指令了 查看etcd节点列表
etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/ssl/etcd/ssl/ca.pem --cert /etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点名.pem --key /etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点名-key.pem member list
添加master之前得先删除对应etcd节点
etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/ssl/etcd/ssl/ca.pem --cert /etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点.pem --key /etc/ssl/etcd/ssl/member-bigdata-uat-manage-master-节点-key.pem member remove ce239518a505adf3
删完了就可以准备通过kubekey添加节点了
通过kubekey添加节点
这块是报错的中心,得谨慎处理
首先是配置kubekey(kk)集群文件,这里直接用之前创建集群的yaml文件
在执行kk之前得先介绍下添加节点部分的代码逻辑
添加节点这里会进行判断,如果BootstrapToken和CertificateKey是空并且文件是InitConfiguration或者ClusterConfiguration的时候才会更新BootstrapToken和CertificateKey的值
上面提到的BootstrapToken和CertificateKey是在JoinConfiguration文件中的变量,如果这两个值为空,kubeadm就无法通过这个JoinConfiguration文件添加节点
这也是最坑的地方,系统是通过这两个指令生成的BootstrapToken和CertificateKey的值,但是这两条代码如果你服务器没有/etc/kubernetes/kubeadm-config.yaml这个文件,或者,有这个文件但是不是InitConfiguration或者ClusterConfiguration类型就会报错
/usr/local/bin/kubeadm init phase upload-certs --config=/etc/kubernetes/kubeadm-config.yaml --upload-certs
/usr/local/bin/kubeadm token create
这时候开始通过kubekey重新添加节点就行了
./kk add nodes -f config-sample-manager.yaml
注意这里还是会报错,不过这个应该是因为worker节点已经有haproxy了导致的,我们这次主要是修复master1,所以可以忽略,整个系统也是正常的
最后附上一个整体add指令的执行顺序,不感兴趣可以跳过