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