Come migrare lontano da Dockershim in Kubernetes v1.24 e versioni successive

0
83

Kubernetes v1.24 e versioni successive vengono forniti senza Dockershim dopo il ritiro della versione v1.20 di dicembre 2020. Dockershim non è più disponibile come runtime del contenitore integrato. Devi invece utilizzare un runtime supportato diverso, come containerd, CRI-O o Docker Engine con l'adattatore cri-dockerd.

In questo articolo, mostreremo come verificare se sei interessato, quindi spiegheremo come migrare a un runtime diverso. Devi eseguire questi passaggi prima di eseguire l'aggiornamento a Kubernetes v1.24 o una versione successiva in modo che i carichi di lavoro del tuo cluster non siano interessati.

Che cos'era Dockershim?

Dockershim è stato sviluppato come componente necessario in modo che Kubernetes potesse supportare più runtime di container. All'inizio del progetto, Kubernetes funzionava solo con Docker Engine. Questa restrizione è stata rimossa dall'introduzione dello standard CRI. Qualsiasi runtime compatibile con CRI ora può essere utilizzato con Kubernetes, inclusi containerd e CRI-O, un'implementazione OCI dello standard.

Sebbene la CRI abbia apportato una nuova flessibilità a Kubernetes, ha presentato un problema per i cluster esistenti. Docker non disponeva del supporto per lo standard CRI, quindi Dockershim è stato creato per consentire al team di Kubernetes la compatibilità a livello di livello superiore. Dockershim era un'integrazione diretta con Docker Engine che è sempre stata concepita come una misura temporanea.

Il movimento dei container ora è molto più di Docker, come dimostra l'originale push di Kubernetes al CRI. Docker stesso si è suddiviso in singoli componenti con il suo runtime estratto come containerd, laureato alla Cloud Native Computing Foundation (CNCF).

containerd è completamente supportato da Kubernetes e più adatto per l'uso autonomo in ambienti cloud. Kubernetes non richiede la Docker CLI e le sue numerose funzionalità per eseguire i tuoi pod; tutto ciò di cui ha bisogno è la capacità di avviare ed eseguire container a un livello relativamente basso. Dockershim è stato rimosso perché era difficile da mantenere. Il suo utilizzo ha creato codice fragile che era strettamente collegato all'implementazione di Docker Engine.

Verifica se stai utilizzando Dockershim

È altamente improbabile che i cluster creati di recente su piattaforme moderne utilizzino Dockershim. Ciò include i cluster gestiti dai provider cloud più diffusi come Amazon EKS, Azure AKS, Google GKE e DigitalOcean DOKS.

È molto probabile che tu debba agire se gestisci il tuo cluster e prima istituito diversi anni fa. Puoi verificare se stai utilizzando Dockershim come runtime per uno qualsiasi dei tuoi nodi eseguendo questo comando Kubectl:

$ kubectl get nodes -o wide NAME STATUS VERSION CONTAINER-RUNTIME node-1 Docker pronto v1.22.8 ://19.3.1 node-2 Ready v1.22.8 containerd://1.4.13

In questo esempio, uno dei nodi utilizza containerd e può essere lasciato così com'è. L'altro nodo è configurato utilizzando Docker e potrebbe essere interessato dalla rimozione di Dockershim. Puoi controllare eseguendo questo comando sul Node:

$ tr \0 ' ' < /proc/”$(pgrep kubelet)”/cmdline | grep “–container-runtime”

Il tuo nodo utilizza Dockershim per eseguire i container se non viene visualizzato alcun output. Se ottieni un output, controlla il valore del flag –container-runtime-endpoint visualizzato per determinare se Dockershim è attivo. Viene utilizzato un endpoint di runtime di unix:///run/containerd/containerd.sock segnala containerd, quindi non è necessaria alcuna migrazione.

Cambiare un nodo&#8217 ;s Runtime

I nodi che utilizzano Dockershim devono essere aggiornati per utilizzare un runtime diverso. Per prima cosa scarica i carichi di lavoro del nodo utilizzando Kubectl, in modo che i tuoi pod vengano riprogrammati su altri nodi nel tuo cluster. Dovresti cordonare anche il nodo per interrompere la pianificazione di nuovi pod.

$ kubectl cordon node-1 $ kubectl drain node-1 –ignore-daemonsets

Quindi esegui i seguenti comandi sul nodo stesso. Inizia arrestando il demone Docker e il processo di lavoro Kubelet di Node:

$ systemctl stop kubelet $ systemctl disable docker.service –now

Ora puoi installare il tuo nuovo runtime.

< h3 id="using-containerd">Utilizzo di containerd

containerd è generalmente la soluzione preferita per i cluster attuali. Dovresti essere in grado di migrare a containerd se non fai affidamento su funzionalità specifiche di Docker Engine. Se lo sei, vai alla sezione seguente e installa invece cri-dockerd.

Aggiungi il repository Docker al tuo sistema se i tuoi elenchi di pacchetti non lo includono già. containerd è distribuito nel repository di Docker.

$ sudo apt-get update $ sudo apt-get install ca-certificates curl gnupg lsb-release $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo “deb [arch=$(dpkg –print-architecture) firmato-by=/usr/share/keyrings/docker -archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Install containerd:

$ sudo apt update $ sudo apt install containerd

Ora aggiorna il file di configurazione Kubelet di Node per utilizzare il nuovo runtime. Apri /var/lib/kubelet/kubeadm-flags.env. Cerca o aggiungi i flag –container-runtime e –container-runtime-endpoint con i seguenti valori:

  • –container-runtime=remote
  • –container-runtime-endpoint=unix:///run/containerd/containerd.sock

Quindi cambia l'annotazione socket salvata sull'oggetto Node nel piano di controllo di Kubernetes:

$ kubectl edit node-1

Nel file che si apre, trova l'annotazione kubeadm.alpha.kubernetes.io/cri-socket e cambiala in unix:///run/containerd/containerd.sock . Salva e chiudi il file per aggiornare l'oggetto Node.

Ora riavvia Kubelet:

$ systemctl start kubelet

Consenti al Nodo alcuni istanti di avviarsi e connettersi al piano di controllo di Kubernetes. Dovresti essere in grado di ripetere il comando get nodes e vedere che containerd è ora in uso.

$ kubectl get nodes -o wide NAME STATUS VERSION CONTAINER-RUNTIME node-1 Pronto v1.22.8 containerd://1.4.13 node-2 Ready v1.22.8 containerd://1.4.13

Finalmente rimuovi il cordone che hai posizionato attorno al Node in modo che possa iniziare a ricevere i Pod:

$ kubectl uncordon node-1

Utilizzo di cri-dockerd

cri-dockerd è un runtime sviluppato congiuntamente da Docker e Mirantis. È effettivamente una versione standalone di Dockershim che viene mantenuta in modo indipendente. Ti consente di continuare a utilizzare funzionalità familiari senza appesantire il progetto Kubernetes con i requisiti di manutenzione di Dockershim.

Assicurati di aver già installato Docker Engine. Quindi installa cri-dockerd scaricando l'ultimo binario dalle versioni di GitHub:

$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.0/cri-dockerd-v0.2.0-linux-amd64.tar.gz $ tar xvf cri-dockerd-v0.2.0- linux-amd64.tar.gz $ mv cri-dockerd /usr/local/bin/

Scarica, installa e abilita le configurazioni del servizio systemd di cri-dockerd:

wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd /cri-docker.socket sudo mv cri-docker.socket cri-docker.service /etc/systemd/system/sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service sudo systemctl daemon-reload sudo systemctl enable cri-docker.service sudo systemctl enable –now cri-docker.socket

Ora puoi modificare il tuo nodo& #8217;s Configurazione di Kubelet per usare cri-dockerd. È simile alla configurazione di un nodo per l'uso di containerd.

Apri /var/lib/kubelet/kubeadm-flags.env. Cerca o aggiungi i flag –container-runtime e –container-runtime-endpoint con i seguenti valori:

  • –container-runtime=remote
  • — container-runtime-endpoint=unix:///var/run/cri-dockerd.sock

Successivamente cambia l'annotazione del socket dell'oggetto Node:

$ kubectl edit node node-1

Nel file che si apre, trova l'annotazione kubeadm.alpha.kubernetes.io/cri-socket e cambiala in unix:///var/run/cri-dockerd.sock. Salva e chiudi il file per aggiornare l'oggetto Node.

Ora riavvia Kubelet:

$ systemctl start kubelet

Attendi qualche istante e quindi usa Kubectl per verificare che il nodo sia attivo. Mostrerà ancora il runtime Docker, ma ora è basato sul cri-dockerd standalone, invece del Dockershim integrato con Kubernetes.

$ kubectl get nodes -o wide NAME STATUS VERSION CONTAINER -RUNTIME node-1 Ready v1.22.8 docker://19.3.1 node-2 Ready v1.22.8 containerd://1.4.13

Ora puoi rimuovere il cordone che hai posizionato attorno al nodo. Inizierà ad accettare nuovamente le richieste di pianificazione del Pod.

$ kubectl uncordon node-1

Conclusion

Kubernetes v1.24 ha rimosso il componente Dockershim che in precedenza integrava la compatibilità CRI per Docker Engine. Anche se i cluster più recenti non saranno interessati, dovresti verificare se stai utilizzando Dockershim prima di eseguire l'aggiornamento alla nuova versione.

Il runtime a cui passare dipende da come utilizzi attualmente il tuo cluster. containerd è in genere una buona scelta se non utilizzi le funzionalità Docker. Puoi utilizzare cri-dockerd per ripristinare l'integrazione simile a Dockershim se devi mantenere la compatibilità con gli strumenti esistenti che dipendono da Docker Engine. Questo aiuta anche se stai montando il socket del daemon Docker (/var/run/docker.sock) nei tuoi container per alimentare i flussi di lavoro Docker-in-Docker.

La rimozione di Dockershim non& #8217;Non influisce sul modo in cui crei e utilizzi le immagini del contenitore. Kubernetes può ancora eseguire immagini create con la build docker e sono compatibili con tutti i runtime supportati. I runtime CRI funzionano con qualsiasi immagine in formato OCI, come output di Docker e altri costruttori di immagini.

LEGGI SUCCESSIVO

  • › Come importare dati con le funzioni di Fogli Google
  • › Framework ha appena lanciato il Chromebook più cool di sempre
  • › Ottieni un Surface Laptop Go 2 economico con ancora meno, più più offerte
  • › Microsoft lancerà nuovi Surface PC il 12 ottobre
  • › Le migliori custodie per iPhone 14 Pro del 2022
  • › Come combinare, rimodellare e ridimensionare gli array in Excel