<none>
while running kubectl get nodes -A
command.capw-controller-manager
logs on Supervisor has below entries:controller.go:317] controller/kubeadmcontrolplane "msg"="Reconciler error" "error"="failed attempt to reconcile etcd members: cluster has fewer than 2 control plane nodes; removing an etcd member is not supported" "name"="<Control Plane VM name>" "namespace"="<namespace>" "reconciler group"="controlplane.cluster.x-k8s.io" "reconciler kind"="KubeadmControlPlane".
vSphere Kubernetes Service 8.x
vSphere Kubernetes Service 7.x
During the upgrade process, manually deleting a Control Plane node is not recommended, as it can lead to potential etcd data loss. In this case, a Control Plane was manually deleted, causing the update to stall for the guest cluster. The etcd member removal process requires a minimum of two healthy etcd members to proceed and ensure a successful upgrade.
"systemctl restart kubelet
". The node will be re-added to the cluster (k8s layer).kubectl get no <node-name> -o yaml
, and look for the following labels and taints.Label:
node-role.kubernetes.io/control-plane:""
Annotation:
kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
Taint:
node-role.kubernetes.io/master:NoSchedule
kubectl taint node <node-name> node-role.kubernetes.io/control-plane:NoSchedule
kubectl label node <node-name> node-role.kubernetes.io/control-plane=""
OR
kubectl label node <node-name> node-role.kubernetes.io/master=""
You can choose between the master or control-plane based on what other healthy control plane node is labeled as.
Ready control-plane,master
"# etcdctl -w table member list
+------------------+---------+----------------------------------+-------------------------+--------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+----------------------------------+-------------------------+--------------------------+------------+
| 4f############9b | started | guest-cluster-control-plane-#####| https://##.##.#.##:2380 | https://##.###.#.##:2379 | false |
| 9d
############
05 | started | guest-cluster-control-plane-#####| https://##.##.#.##:2380 | https://##.###.#.##:2379 | false || b7
############
cd | started | guest-cluster-control-plane-#####| https://##.##.#.##:2380 | https://##.###.#.##:2379 | false |+------------------+---------+----------------------------------+-------------------------+--------------------------+------------+
#
#
# etcdctl -w table endpoint --cluster health
+-------------------------+--------+-------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+-------------------------+--------+-------------+-------+
| https://##.##.#.##:2379 | true | 20.672251ms | |
| https://##.##.#.##:2379 | true | 19.126599ms | |
| https://##.##.#.##:2379 | true | 27.634253ms | |
+-------------------------+--------+-------------+-------+
Set the etcd alias on the TKC CP VM before running the etcdctl commands:
find / | grep bin | grep etcdctl
alias etcdctl="/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/*/fs/usr/local/bin/etcdctl --cert /etc/kubernetes/pki/etcd/peer.crt --key /etc/kubernetes/pki/etcd/peer.key --cacert /etc/kubernetes/pki/etcd/ca.crt"