Kubernetesでコンテナランタイムを置き換える方法

ブラザーズ!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).





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