<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.sockTaint: 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 etcdctlalias 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"