워커 노드 인증서가 삭제된 상황이군요. 이는 꽤 심각한 문제이지만 복구 가능합니다. 다음과 같은 단계로 해결할 수 있습니다:
# 워커 노드에서 인증서 상태 확인
ls -la /etc/kubernetes/pki/
ls -la /var/lib/kubelet/pki/
# 워커 노드의 kubelet 상태 확인
systemctl status kubelet
journalctl -u kubelet -f
# 워커 노드에서 실행
sudo rm -rf /var/lib/kubelet/pki/*
sudo rm -rf /etc/kubernetes/kubelet.conf
sudo rm -rf /etc/kubernetes/bootstrap-kubelet.conf
# 새로운 bootstrap token 생성
kubeadm token create --ttl=1h
# token 확인
kubeadm token list
# CA cert hash 확인
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 워커 노드에서 실행
sudo kubeadm join <MASTER_IP>:6443 \
--token <TOKEN> \
--discovery-token-ca-cert-hash sha256:<HASH>
Kubespray로 설치했다면 더 간단하게:
# inventory에서 해당 워커 노드만 다시 실행
ansible-playbook -i inventory/mycluster/hosts.yaml \
--become --become-user=root \
cluster.yml \
--limit=<WORKER_NODE_NAME> \
--tags=kubelet
# 보류 중인 CSR 확인
kubectl get csr
# 필요시 승인
kubectl certificate approve <CSR_NAME>
# 인증서 파일 권한 재설정
sudo chmod 600 /var/lib/kubelet/pki/*
sudo chown root:root /var/lib/kubelet/pki/*
# kubelet 재시작
sudo systemctl restart kubelet
가장 빠른 방법은 kubespray ansible을 다시 실행하는 것입니다. 특정 워커 노드에만 제한해서 실행하면 다른 노드에 영향 없이 복구 가능합