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).
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 - , , !