So ersetzen Sie die Container-Laufzeit in Kubernetes

Brüder! Sie wissen wahrscheinlich bereits, dass Kubernetes die Unterstützung für Docker als Container-Laufzeit in zukünftigen Versionen eingestellt hat. In der Version 1.20 Ende 2020 ist Dockershim veraltet. In Release 1.22, das Ende 2021 veröffentlicht werden soll, soll die Unterstützung vollständig eingestellt werden.





Wenn Sie verwaltete Kubernetes-Cluster (wie GKE, EKS, AKS) verwenden, ist dies kein großes Problem für Sie und der Wechsel ist höchstwahrscheinlich einfach. Wenn Sie den Cluster jedoch selbst verwalten (z. B. mit kubeadm ) und früher oder später die Docker-Container-Laufzeit verwenden, müssen Sie ihn ersetzen, um Kubernetes auf die neuesten Versionen aktualisieren zu können.





Der Zweck dieses Artikels besteht nicht darin, erschöpfende Informationen über die Gründe für diese Entscheidung seitens der Kubernetes-Entwickler bereitzustellen oder das Verhalten einer bestimmten Containerlaufzeit in einem Kubernetes-Cluster im Detail zu untersuchen. Stattdessen werden wir Schritt für Schritt herausfinden, wie die Docker-Container-Laufzeit auf eine andere Lösung umgestellt werden kann, die den CRI- Standard (Container Runtime Interface ) unterstützt. Wenn Sie an den Gründen interessiert sind, warum Docker nicht mehr zur Verwendung empfohlen wird, lesen Sie den Artikel aus dem offiziellen Kubernetes Don't Panic- Blog   : Kubernetes and Docker .





Abonnieren Sie den Telegrammkanal Mops DevOps, um keine neuen Artikel zu verpassen





Was zuerst zu überprüfen

Die Auswirkungen auf Workloads, die in Ihrem Cluster ausgeführt werden, sollten minimal sein. Sie müssen sich nur darum kümmern, ob Sie Docker-in-Docker in einem Ihrer Container-Workloads verwenden, indem Sie den Docker-Socket /var/run/docker.sock bereitstellen. In diesem Fall müssen Sie eine Alternative (wie Kaniko ) finden, bevor Sie von Docker zur neuen Container-Laufzeit wechseln.





Es wird außerdem dringend empfohlen, dass Sie Ihre Daten sichern, bevor Sie mit dem Umschalten der Container-Laufzeit fortfahren!





Lass uns zur Arbeit gehen!

, , 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