环境:Rancher 2.4.7(单机)、Kubernetes 1.18.6(kubeadm安装),Rancher使用import方式管理k8s集群;
k8s节点描述:master(1)、node(6)、etcd(1)
问题:k8s集群证书默认有效期为一年,过期后重新生成证书,但Rancher管理证书未变更导致Rancher不能发布应用、升级应用等;
二、"入坑"1、k8s证书过期导致的问题:Rancher 登陆后发现集群不可用,排查发现证书过期
[root@k8s-master pki]# openssl x509 -in apiserver.crt -noout -text |grep ' Not '
Not Before: Sep 29 09:19:10 2020 GMT
Not After : Sep 29 09:19:10 2021 GMT
Unable to authenticate the request due to an error: [invalid bearer to...not
2、使用《k8s更新证书》方法更新证书后,Rancher可以看到k8s集群中的项目、应用,但发现升级应用时不处理、查看Rancher后台日志发现证书过期不可用; 后经查询发现修改k8s后同时也需要修改Rancher的证书,可是这个证书是在导入集群时生成的,没有找到修改证书的地方;
《导入 k8s 集群更新 CA 证书后 Rancher 端的配置操作 | IT老男孩》找到此链接问题相同,按步骤操作;
注意:此时坑来了!!!
此文章中提示备份Rancher的Etcd,并没有备份k8s集群的Etcd,也可能他执行操作时K8s集群未发生问题,此处要注意如果是外置k8s集群,此时一定要备份k8s集群的etcd,这样会给后面更新失败提供恢复的数据;
在执行下面操作时:删除cattle-cluster-xxx、cattle-agent-xxx有节点的一直处于Terminating状态删除不掉导致后续新的节点一直生成不出来
kubeconfig=xxx.yaml kubectl --kubeconfig=${kubeconfig} -n cattle-system get pod | grep -v 'NAME' | awk '{print $1}' | xargs kubectl --kubeconfig=${kubeconfig} -n cattle-system delete pod
处理办法:重启Master 节点docker、kubelet后重新创建,新的cattle-cluster-xxx、cattle-agent-xxx被创建出来;
systemctl daemon-reload systemctl restart docker systemctl restart kubelet
此时按上面的文章可以继续操作后面可能会成功完成更新; 但是没有重启就已经将原有的集群删除,并且重新导入,生成新的attle-cluster-xxx、cattle-agent-xxx、attle-token-xxx恢复原有的Rancher备份Etcd也不能挽救,只能继续找办法;
3、重新操作Rancher导入k8s集群后在Rancher 里显示新的集群成功,但是project数据丢失,对应的用户与project的数据也已经丢失,本想用原有的etcd数据进行恢复,但是不道怎么连接Rancher中的etcd数据库
此时使用kubectl get pods 登陆在 master 节点上查询时,集群内pods还是存在的
[root@k8s-master ~]# kubectl get pods -A default postgresql-8c76697db-zdrdk 1/1 Running 1 21d
此时重新创建project、并将原有对应的命名空间移动到指定的project下,服务基本恢复,只要用户与新创建的project 重新分配对应权限即可;
三、注意1、部分命名空间在Rancher中是不允许移动的,如:cattle-logging、kube-system
2、期间还看了,RancherLab里的“误删节点或集群怎么办?这里有一颗后悔药”文章,因为不是RKE安装恢复也不太可能;后放弃使用此方法如有小伙伴使用RKE安装可尝试使用此方法https://mp.weixin.qq.com/s/XDgo-3cPbNTB8GvKn5ZptA



