Bagaimana cara mengganti runtime container di Kubernetes

Kakak beradik! Anda mungkin sudah tahu bahwa Kubernetes telah menghentikan dukungan untuk Docker sebagai runtime container di rilis mendatang. Dalam rilis 1,20 pada akhir tahun 2020, Dockershim tidak digunakan lagi. Dalam rilis 1.22, yang dijadwalkan untuk rilis pada akhir 2021, itu direncanakan untuk sepenuhnya meninggalkan dukungannya.





Jika Anda menggunakan cluster Kubernetes terkelola (seperti GKE, EKS, AKS), ini tidak akan menjadi masalah besar bagi Anda dan kemungkinan besar pengalihannya akan mudah. Tetapi jika Anda mengelola cluster sendiri (misalnya, menggunakan kubeadm ) dan menggunakan runtime container Docker, cepat atau lambat, Anda harus menggantinya agar dapat mengupdate Kubernetes ke versi terbaru.





Tujuan artikel ini bukanlah untuk memberikan informasi lengkap tentang alasan keputusan ini di pihak developer Kubernetes atau untuk mempelajari secara mendetail perilaku runtime container tertentu di cluster Kubernetes. Sebagai gantinya, kami akan mencari tahu langkah demi langkah cara mengalihkan runtime container Docker ke solusi lain yang mendukung standar Container Runtime Interface ( CRI ). Jika Anda tertarik dengan alasan mengapa Docker tidak lagi direkomendasikan untuk digunakan, lihat artikel dari blog resmi Kubernetes   Don't Panic: Kubernetes dan Docker .





Agar tidak ketinggalan artikel baru, berlangganan saluran telegram Mops DevOps





Apa yang harus diperiksa dulu

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