Como substituir o tempo de execução do contêiner no Kubernetes

Irmãos! Você provavelmente já sabe que o Kubernetes abandonou o suporte para Docker como um tempo de execução de contêiner em versões futuras. Na versão 1.20 no final de 2020, Dockershim foi descontinuado. Na versão 1.22, que está programada para lançamento no final de 2021, está planejado abandonar completamente seu suporte.





Se você estiver usando clusters Kubernetes gerenciados (como GKE, EKS, AKS), isso não será um grande problema para você e provavelmente a troca será fácil. Mas se você mesmo gerenciar o cluster (por exemplo, usando kubeadm ) e usar o tempo de execução do contêiner do Docker, mais cedo ou mais tarde, terá que substituí-lo para poder atualizar o Kubernetes para as versões mais recentes.





O objetivo deste artigo não é fornecer informações completas sobre os motivos dessa decisão por parte dos desenvolvedores do Kubernetes ou estudar em detalhes o comportamento do tempo de execução do contêiner específico em um cluster do Kubernetes. Em vez disso, descobriremos passo a passo como alternar o tempo de execução do contêiner Docker para outra solução que suporte o padrão Container Runtime Interface ( CRI ). Se você estiver interessado nos motivos pelos quais o Docker não é mais recomendado para uso, confira o artigo do blog oficial do Kubernetes   Don't Panic: Kubernetes e Docker .





Para não perder novos artigos, assine o canal de telegramas Mops DevOps





O que verificar primeiro

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