Forzar a Kubernetes a utilizar contenedores cuando se instala Docker

Forzar a Kubernetes a utilizar contenedores cuando se instala Docker

Tengo nodos de Kubernetes con Docker y Containerd instalados. Necesito Docker en el nodo para ejecutar compilaciones y canalizaciones de CI. ¿Cómo puedo hacer que Kubernetes utilice el contenedor recomendado en lugar de la ventana acoplable? La documentación existente recomienda eliminar Docker del sistema, lo cual no es deseable para mi caso.

¿Hay alguna manera de obligar a Kubernetes a utilizar Containerd como tiempo de ejecución de contenedor en lugar de Docker cuando ambos están instalados?

Respuesta1

Kubelet es el proceso responsable de las acciones del contenedor en el nodo y tieneun conjunto de indicadores de línea de comandopara decirle que use un proveedor de administración de contenedores remoto (tanto Containerd como cri-o se consumen de la misma manera, AFAIK):

[Service]
ExecStart=/usr/local/bin/kubelet --container-runtime=remote --container-runtime-endpoint=unix:///var/run/dockershim.sock

(suponiendo que su contenedor esté escuchando en el mismo dockershim.sockcamino)

El buen manual dice específicamente que se asegure de no cambiar esos indicadores con un registro de Nodo existente, ya que hace ciertas suposiciones al crear los contenedores, por lo que si ya tiene un Nodo que usa Docker, lo ideal es detener kubelet y eliminar esos contenedores. y kubectl delete node $the_node_namedeje que kubelet se vuelva a registrar con la configuración correcta

Respuesta2

Probado en Ubunut 20.04, una forma sencilla y limpia de habilitar el tiempo de ejecución en contenedores fue agregar este contenido a /etc/systemd/system/kubelet.service.d/20-use-containerd.conf:

Environment="KUBELET_EXTRA_ARGS=--container-runtime remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock"

Esto agrega algunos argumentos adicionales al servicio kubelet, para habilitar el contenedor en lugar de depender de docker-shim de forma predeterminada.

Se recomienda reiniciar el nodo, o al menos detener kubelet, docker y Containerd para el conmutador, ya que un simple reinicio de Kubelet intentará ejecutar los contenedores a través de Containerd mientras todavía se están ejecutando usando Docker.

información relacionada