Respuesta de error del demonio: {“mensaje”:“No existe tal contenedor: kubelet”}

Respuesta de error del demonio: {“mensaje”:“No existe tal contenedor: kubelet”}

Al agregar un nuevo nodo a un clúster de Kubernetes, termino con este error:

+ docker start kubelet
Error response from daemon: {"message":"No such container: kubelet"}
Error: failed to start containers: kubelet
+ sleep 2

Este error ocurre en un clúster que ya está dañado. Solo queda un nodo de 3. El nodo sigue siendo a priori un problema de recuperación y distribución de certificados. SSL ya no funciona en este nodo. Para obtener información, el clúster de Kubernetes se implementó a través de Rancher. El contenedor etcd se reinicia periódicamente en el nodo 3 y etcd no quiere implementarse en los otros nodos que estoy intentando reintegrar en el clúster.

Kubelet se lanza en un contenedor Docker, que Rancher lanzó cuando creó el clúster de Kubernetes. Respecto a las pruebas realizadas, relancé un nuevo contenedor docker con etcd, intenté empezar de nuevo desde una instantánea... nada permite reiniciar el cluster. Agregar un nuevo nodo tampoco es funcional. Por lo que he visto, también hay un problema con los certificados SSL creados por Rancher que no puede encontrar.

Respuesta1

Intente seguir los siguientes pasos:

  1. Limpiar el nodo ejecutando
docker system prune
docker volume prune

Esto eliminará todos los volúmenes de Docker, tenga cuidado si tiene
datos importantes en sus volúmenes.

  1. Limpiar los datos del tiempo de ejecución de Rancher/Kubernetes en el nodo.
rm -rf /etc/cni/ /etc/kubernetes/ /opt/cni/ /var/lib/calico/ /var/lib/cni/ /var/lib/rancher/ /var/run/calico/

Los documentos oficiales sobre la limpieza de nodos recomiendan también la eliminación de /opt/rke y
/var/lib/etcd. No puede eliminarlos porque contienen
instantáneas y datos del etcd del clúster. Esto es especialmente importante en caso de que solo haya un nodo
en el clúster.

  1. Ejecutó exec-ed en el contenedor del ranchero y pirateó el estado del clúster (gracias
    @ibrokethecloud para la pista):
docker exec -it rancher bash

Dentro del contenedor:

apt-get update && apt-get -y install vim
kubectl edit cluster c-XXXX  # replace the cluster-id with an actual cluster ID

El editor encuentra la clave apiEndpoint (debe estar directamente debajo de
la status clave) y la elimina. Salga del editor y del contenedor. Asegúrese de que
kubectl diga que actualizó el clúster.

  1. De la interfaz de usuario de Rancher obtuve el comando para registrar un nuevo nodo.
    Establezca un nombre diferente para el nodo que antes agregando un
    --node-name al comando de ejecución de la ventana acoplable (en realidad, hay un cuadro de edición para esto
    en la configuración avanzada). Se veía así:
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

  1. Ejecute el comando anterior en el nodo limpio y finalmente se registró
    correctamente y RKE inició todos los kube-* contenedores kubelet .

Echar un vistazo:ranchero-kubelet, ranchero-2-comenzando-.

información relacionada