Kubernetes 클러스터에 새 노드를 추가할 때 다음 오류가 발생합니다.
+ docker start kubelet
Error response from daemon: {"message":"No such container: kubelet"}
Error: failed to start containers: kubelet
+ sleep 2
이 오류는 이미 손상된 클러스터에서 발생합니다. 3개 중 노드가 1개만 남았습니다. 해당 노드는 인증서 복구 및 배포 문제가 선험적으로 남아 있습니다. 이 노드에서는 SSL이 더 이상 작동하지 않습니다. 참고로 Kubernetes 클러스터는 Rancher를 통해 배포되었습니다. etcd 컨테이너는 노드 3에서 정기적으로 재부팅되며, etcd는 클러스터에 다시 통합하려는 다른 노드에 배포하기를 원하지 않습니다.
Kubelet은 Rancher가 Kubernetes 클러스터를 생성할 때 자체적으로 실행되는 Docker 컨테이너에서 실행됩니다. 수행된 테스트와 관련하여 etcd를 사용하여 새 도커 컨테이너를 다시 시작하고 스냅샷에서 다시 시작하려고 시도했지만 아무것도 클러스터를 다시 시작할 수 없습니다. 새 노드를 추가하는 것도 작동하지 않습니다. 내가 본 바로는 Rancher가 생성한 SSL 인증서에 그가 찾을 수 없는 문제도 있습니다.
답변1
다음 단계를 수행해 보세요.
- 다음을 실행하여 노드를 정리합니다.
docker system prune
docker volume prune
이렇게 하면 모든 Docker 볼륨이 삭제됩니다. 볼륨에 중요한 데이터가 있는 경우 주의하세요 .
- 노드에서 Rancher/Kubernetes 런타임 데이터를 정리합니다.
rm -rf /etc/cni/ /etc/kubernetes/ /opt/cni/ /var/lib/calico/ /var/lib/cni/ /var/lib/rancher/ /var/run/calico/
노드 정리에 대한 공식 문서에서는 /opt/rke
및
/var/lib/etcd
. 클러스터 etcd
스냅샷 및 데이터가 포함되어 있으므로 제거할 수 없습니다 . 이는
클러스터에 노드가 하나만 있는 경우 특히 중요합니다 .
exec
rancher 컨테이너에 -ed를 실행 하고 클러스터 상태를 해킹했습니다(thx
@ibrokethecloud 힌트를 위해):
docker exec -it rancher bash
컨테이너 내부:
apt-get update && apt-get -y install vim
kubectl edit cluster c-XXXX # replace the cluster-id with an actual cluster ID
편집자는 키(키 바로 아래에 있어야 함)를 찾아 제거 apiEndpoint
했습니다 . 편집기와 컨테이너를 종료합니다. kubectl이 클러스터를 업데이트했다고 말하는지 확인하세요 .status
- Rancher UI에서 새 노드를 등록하는 명령을 받았습니다. docker run 명령에
a를 추가하여 이전과 다른 노드 이름을 설정합니다
--node-name
(실제로 고급 설정 아래에 이에 대한 편집 상자가 있습니다
). 그것은 다음과 같이 보였습니다:
docker run -d --privileged --restart=unless-stopped --net=host \
-v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.6 \
--server https://rancher.example.com --token XXXXXXXXXXXXXXX --node-name mynode2 \
--etcd --controlplane --worker
- 정리된 노드에서 위 명령을 실행하면 마침내
성공적으로 등록되었으며 RKE는 모든kube-*
및kubelet
컨테이너를 시작했습니다.
구경하다:목장주-kubelet, 목장주-2-시작하기.