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’ ;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