Cómo reemplazar el tiempo de ejecución del contenedor en Kubernetes

Hermanos! Probablemente ya sepa que Kubernetes ha dejado de admitir Docker como tiempo de ejecución de contenedor en versiones futuras. En la versión 1.20 a finales de 2020, Dockershim está obsoleto. En la versión 1.22, que está programada para su lanzamiento a fines de 2021, se planea abandonar por completo su soporte.





Si usa clústeres de Kubernetes administrados (como GKE, EKS, AKS), esto no será un problema importante para usted y lo más probable es que el cambio sea fácil. Pero si administra el clúster usted mismo (por ejemplo, usando kubeadm ) y usa el tiempo de ejecución del contenedor de Docker, tarde o temprano, tendrá que reemplazarlo para poder actualizar Kubernetes a las últimas versiones.





El propósito de este artículo no es proporcionar información exhaustiva sobre los motivos de esta decisión por parte de los desarrolladores de Kubernetes ni estudiar en detalle el comportamiento del tiempo de ejecución de un contenedor específico en un clúster de Kubernetes. En su lugar, descubriremos paso a paso cómo cambiar el tiempo de ejecución del contenedor Docker a otra solución que admita el estándar Container Runtime Interface ( CRI ). Si está interesado en los motivos por los que ya no se recomienda el uso de Docker, consulte el artículo del blog oficial de Kubernetes   Don't Panic: Kubernetes and Docker .





Para no perderse nuevos artículos, suscríbase al canal de telegramas Mops DevOps





Qué comprobar primero

, , . , , - Docker-in-Docker , Docker /var/run/docker.sock. (, Kaniko), Docker container runtime.





, !





!

, , container runtime, . containerd container runtime, , , CRI-O.





(worker nodes) (control plane).





Worker nodes

.





1) drain



cordon



, :





kubectl cordon <node_name>
kubectl drain <node_name>
      
      



: DaemonSets, --ignore-daemonsets



, pods. kubelet pods container runtime, . , DaemonSet, , , nodeSelector



DaemonSet, .





2) kubelet:





sudo systemctl stop kubelet
sudo systemctl status kubelet
      
      



3) Docker





, Linux Docker. , Docker, , (, /var/ lib/docker).





Docker.





4) countainerd .





5) Enable



  Start



  containerd:





sudo systemctl enable containerd
sudo systemctl start containerd
sudo systemctl status containerd
      
      



6) Kubernetes container runtime CRI . , containerd.





/etc/containerd/config.toml





disabled_plugins = [""]
      
      



, containerd:





sudo systemctl restart containerd
      
      



7) kubelet.





/var/lib/kubelet/kubeadm-flags.env KUBELET_KUBEADM_ARGS ( container runtime):





--container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock
      
      



8) kubelet:





sudo systemctl start kubelet
      
      



9) , container runtime:





kubectl describe node <node_name>
      
      



System Info:
  Machine ID:                 21a5dd31f86c4
  System UUID:                4227EF55-BA3BCCB57BCE
  Boot ID:                    77229747-9ea581ec6773
  Kernel Version:             3.10.0-1127.10.1.el7.x86_64
  OS Image:                   Red Hat Enterprise Linux Server 7.8 (Maipo)
  Operating System:           linux
  Architecture:               amd64
>>Container Runtime Version:  containerd://1.4.3
  Kubelet Version:            v1.20.2
  Kube-Proxy Version:         v1.20.2
      
      



10) Uncordon , , pods:





kubectl uncordon <node_name>
      
      



, , !





Control Plane

container runtime . , .





container runtime kube-apiserver, etcd coredns pods, . kubectl.





, container runtime :





1) journalctl, kubelet:





journalctl -u kubelet
      
      



2) containerd:





journalctl -u containerd
      
      



3) crictl, , :





crictl --runtime-endpoint /run/containerd/containerd.sock ps
      
      



4) container runtime , , :





kubectl describe node <master_node_name>

   ,        
kubectl get node -o wide
      
      



! Kubernetes Docker, .






- Mops DevOps - , , !








All Articles