前言
etcd-manager 在云或裸机上管理 etcd 集群。它借鉴了 etcd-operator 的思想,但避免了依赖 kubernetes(本身依赖 etcd)的循环依赖。
当 etcd-manager 首次启动时,它会为每个主节点颁发证书。这些证书的硬编码期限为一年。如果证书过期,apiserver 将无法再访问本地 etcd 成员。
etcd-manager 首次在 Kops 1.12 中引入,该版本于 2019 年 5 月 15 日发布。这意味着,如果你升级了1.12以上的版本,并且不知道这个特性,那么在一年期满后将会遇到etcd终端的情况。
kops中etcd-manager相关配置
关键参数解释
#执行操作查看集群配置
kops get cluster -oyaml --full
etcdClusters:
- backups:
backupStore: s3://your_bucket_name/your_cluster_name/backups/etcd/main
cpuRequest: 200m
enableEtcdTLS: true
enableTLSAuth: true
etcdMembers:
- instanceGroup: master-me-south-1a
name: a
- instanceGroup: master-me-south-1b
name: b
- instanceGroup: master-me-south-1c
name: c
manager: {}
memoryRequest: 100Mi
name: main
provider: Manager
version: 3.2.24
- backups:
backupStore: s3://your_bucket_name/your_cluster_name/backups/etcd/events
cpuRequest: 100m
enableEtcdTLS: true
enableTLSAuth: true
etcdMembers:
- instanceGroup: master-me-south-1a
name: a
- instanceGroup: master-me-south-1b
name: b
- instanceGroup: master-me-south-1c
name: c
manager: {}
memoryRequest: 100Mi
name: events
provider: Manager
version: 3.2.24
Provider: Manager #此参数指定etcd集群使用etcd-manager。有两个可选参数Manager、Legacy。Legacy为传统模式,既不启动etcd-manager。
此解释在kops的官方文档暂时没有找到明确说明的地方,不过通过查看kops的go语言文档不难看出其意思。
etcd自签证书文件存放位置
etcd一年期自签证书查询过期时间
#宿主机路径
openssl x509 -in /etc/kubernetes/pki/kube-apiserver/etcd-client.crt -noout -dates
#etcd docker容器内路径
openssl x509 -in /rootfs/etc/kubernetes/pki/kube-apiserver/etcd-client.crt -noout -dates
其他一些证书路径:/mnt/master-vol-0*/pki/*/clients/*.crt
查看证书过期时间
for i in `ls /mnt/master-vol-*/pki/*/clients/*.crt`;do echo ====$i====;openssl x509 -in $i -noout -dates;done
etcd-manager自签证书过期解决办法
根据kops开源项目github上的issue中提供的方法的描述。
只要将etcd证书存放的pki目录删除,然后重启etcd的docker。就会自动重新签发证书。
其实这里的rm删除操作,是用mv将文件备份更为合适。
#SSH 到每个主实例并从每个卷挂载中删除 pki 目录:
sudo mv /mnt/master-vol-*/pki /mnt/master-vol-*/pki-bak
#重启两个 etcd-manager 容器。或者,您可以重启实例或终止自动缩放组中的实例
sudo docker restart $(sudo docker ps -q -f "label=io.kubernetes.container.name=etcd-manager")
参考文档
etcd-manager github:https://github.com/kopeio/etcd-manager
kops godoc:kops package - k8s.io/kops/pkg/apis/kops - pkg.go.dev
etcd-manager证书问题issue:https://github.com/kubernetes/kops/issues/8959