Skip to main content

Kubernetes 1.13.3 external etcd clean up | Kubernetes外部etcd数据清除

· 2 min read

Kubernetes 配置过程中如果出了问题, 可以用 kubeadm reset 重置 Kubernetes cluster 状态, 但如果使用了外部 etcd cluster, 则执行 kubeadm reset 不会清除外部 etcd cluster 中的数据, 也就意味着如果再次执行 kubeadm init, 则会看到上一个 kubenetes cluster 中的数据。

查询和手动清除外部 etcd cluster 的方式如下(以 Kubernetes 1.13.3 为例):

1. 查询所有数据:

docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes -e ETCDCTL_API=3 k8s.gcr.io/etcd:3.2.24 etcdctl --cert="/etc/kubernetes/pki/etcd/healthcheck-client.crt" --key="/etc/kubernetes/pki/etcd/healthcheck-client.key" --cacert="/etc/kubernetes/pki/etcd/ca.crt" --endpoints https://etcd1.cloud.k8s:2379 get "" --prefix

2. 删除所有数据:

docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes -e ETCDCTL_API=3 k8s.gcr.io/etcd:3.2.24 etcdctl --cert="/etc/kubernetes/pki/etcd/healthcheck-client.crt" --key="/etc/kubernetes/pki/etcd/healthcheck-client.key" --cacert="/etc/kubernetes/pki/etcd/ca.crt" --endpoints https://etcd1.cloud.k8s:2379 del "" --prefix

指令中的几个关键点:

  1. 运行使用 docker 镜像 k8s.gcr.io/etcd:3.2.24 中的 etcdctl 指令, 也可以使用外部的
  2. 通过 docker -e 参数设置环境变量 ETCDCTL_API=3 设置 API Version 为 3
  3. 挂载外部的 etcd ca 和客户端证书连接 etcd cluster

参考:

External etcd clean up: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-reset/#external-etcd-clean-up

ClustrMaps