使用Docker 单节点安装rancher,然后在rancher中创建了一个k8s的集群。重启rancher所在的虚拟机后,登录rancher发现这是新的实例,集群信息丢失了。但是k8s集群还是好好的。
检查k8s的日志,api server日志会报错
time="2023-04-13T02:31:20Z" level=error msg="Issuer of last certificate found in chain (CN=dynamiclistener-ca@1680190230,O=dynamiclistener-org) does not match with CA certificate Issuer (CN=dynamiclistener-ca@1680191229,O=dynamiclistener-org). Please check if the configured server certificate contains all needed intermediate certificates and make sure they are in the correct order (server certificate first, intermediates after)"
可以看到SSL的认证两边对不上,因为rancher server和rancher agent需要通过SSL来通讯。而安装过程中选择了Rancher 生成的自签名证书,新的rancher自己产生了新的签名证书,而rancher agent还是用的老的签名证书。
在rancher网页上产看证书,可以看到颁发者是1680190230,而agent保存的证书颁发者是1680191229,所以agent连不上rancher server,并且rancher server也没有集群的信息。
解决方法是让agent更新新的SSL证书。可以参考rancher官方提供的方案《无需重新搭建集群,轻松替换证书!》https://blog.csdn.net/RancherLabs/article/details/115906198
1、在集群上配置kubectl工具。
http://mirror.rancher.cn/ 上可以下载kubectl工具,注意版本需要跟集群一致。然后配置~/.kube/config文件,就是rancher上下载的kubeconfig文件。
然后发命令验证一下
kubectl config get-contexts
rancher很特殊,kubectl命令需要加context才区分,其中cluster2-localhost是直连本地k8s,而cluster2是连接rancher。具体介绍看官方文档
https://docs.rancher.cn/docs/rancher2/cluster-admin/cluster-access/kubectl/_index/#!
那么在本地执行kubectl命令是类似这样的。
kubectl --context cluster2-localhost get nodes
2、删除agent
通过 kubectl 删除 daemonset.apps/cattle-node-agent和deployment.apps/cattle-cluster-agent
kubectl --context cluster2-localhost -n cattle-system delete daemonset.apps/cattle-node-agent deployment.apps/cattle-cluster-agent
3、在rancher中导入集群
可以看到黑框中的导入集群的命令,在集群上发出。
稍等片刻,cattle-cluster-agent和cattle-node-agent 将会重新运行:
kubectl --context cluster2-localhost -n cattle-system get pods
4、rancher中集群状态正常