13 - 恢复rkestate状态文件


Kubernetes集群状态由Kubernetes集群中的集群配置文件cluster.yml组件证书组成。由RKE生成,但根据RKE版本不同,集群状态的保存方式不同。

  • 在v0.2.0之前,RKE将Kubernetes集群状态保存为secret。更新状态时,RKE会提取secret更新/更改状态并保存新secret
  • 从v0.2.0开始,RKE在集群配置文件cluster.yml的同一目录中创建cluster.rkestate文件。该.rkestate文件包含集群的当前状态,包括RKE配置和证书。需要保留此文件以更新集群或通过RKE对集群执行任何操作。

状态文件转换

如果是通过rke v0.2.0之前版本创建的Kubernetes集群,那么建议升级rke版本到最新版本。

rke v0.2.0以前的版本,是通过pki.bundle.tar.gz来保存组件证书。而rke v0.2.0及以后的版本通过.rkestate来保存组件证书。

在rke升级到最新版本后,需要有一个过渡操作。通过原始是rke配置文件,重新运行rke up将会自动生成.rkestate文件。

找回.rkestate

假如.rkestate无意间丢失或者损坏,可以通过集群中的配置映射文件恢复.rkestate。

  • 通过本地kubectl找回

如果只是.rkestate丢失,kubectl还可以正常连接集群,运行以下命令找回

  1. kubectl --kubeconfig kube_config_cluster.yml get configmap -n kube-system \
  2. full-cluster-state -o json | jq -r .data.\"full-cluster-state\" | jq -r . > <rke-config-name>.rkestate

注意: <rke-config-name>需要与rke配置文件名相同

  • 通过master节点找回

如果本地的.rkestate和kubecfg文件一并丢失,则需要登录到master节点进行恢复

  1. docker run --rm --net=host \
  2. -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro \
  3. --entrypoint bash \
  4. rancher/rancher-agent:v2.2.2 \
  5. -c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml get configmap \
  6. -n kube-system full-cluster-state -o json | jq -r .data.\"full-cluster-state\" | jq -r .' > <rke-config-name>.rkestate

注意: <rke-config-name>需要与rke配置文件名相同