ブラザーズ!Kubernetesが将来のリリースでコンテナランタイムとしてのDockerのサポートを終了したことはすでにご存知でしょう。2020年末の1.20リリースでは、Dockershimは非推奨になりました。2021年末にリリースが予定されているリリース1.22では、サポートを完全に放棄する予定です。
マネージドKubernetesクラスター(GKE、EKS、AKSなど)を使用している場合、これは大きな問題ではなく、切り替えが簡単になる可能性があります。ただし、クラスターを自分で管理し(たとえば、kubeadmを使用)、Dockerコンテナーランタイムを使用する場合は、遅かれ早かれ、Kubernetesを最新バージョンに更新できるようにするためにクラスターを置き換える必要があります。
この記事の目的は、Kubernetes開発者がこの決定の理由について網羅的な情報を提供したり、Kubernetesクラスター内の特定のコンテナーランタイムの動作を詳細に調査したりすることではありません。代わりに、DockerコンテナーランタイムをContainer Runtime Interface(CRI)標準をサポートする別のソリューションに切り替える方法を段階的に理解します。Dockerの使用が推奨されなくなった理由に興味がある場合は、Kubernetes Do n'tPanicの公式ブログKubernetesandDockerの記事を確認してください 。
新しい記事を見逃さないために、テレグラムチャネルMopsDevOpsを購読してください
最初に確認すること
クラスタで実行されているワークロードへの影響は最小限に抑える必要があります。気にする必要があるのは、Dockerソケット/var/run/docker.sockをマウントして、コンテナーワークロードのいずれかでDocker-in-Dockerを使用しているかどうかだけです。この場合、Dockerから新しいコンテナランタイムに切り替える前に、代替手段(Kanikoなど)を見つける必要があります。
また、コンテナランタイムの切り替えに進む前に、データをバックアップすることを強くお勧めします。
仕事に取り掛かろう!
, , 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 - , , !