Docker obvykle poskytuje vývojářům první seznámení s kontejnery. Kubernetes je platforma pro orchestraci, která řeší problémy související se spouštěním kontejnerů v produkci. Zde je návod, jak se příkazy Dockeru mapují na jejich protějšky Kubernetes.
Nemůžete použít docker
CLI pro interakci s kontejnery běžícími v Kubernetes. Kubernetes poskytuje své vlastní rozhraní příkazového řádku, kubectl
, které vám pomohou spravovat váš cluster. Přečtěte si našeho průvodce, jak začít s kubectl
pokud nástroj neznáte.
Žádný z docker
příkazy mají stejný název v kubectl
. Kubernetes odhaluje funkčnost svým vlastním způsobem. Samotné pracovní zátěže se zásadně liší – Docker je navržen tak, aby pracoval s jedním kontejnerem najednou, zatímco Kubernetes umožňuje orchestraci více replik.
První bod, který je třeba ocenit, je posun v terminologii. Docker odkazuje na „kontejnery“, zatímco Kubernetes používá „pody“. Pod může provozovat jeden kontejner nebo více replik spravovaných jako jedna jednotka. Tento detail stranou, když v Dockeru uvidíte „kontejner“, měli byste myslet na „pod“ Kubernetes. Ve zbývající části tohoto článku budou tyto termíny používány zaměnitelně.
Získání podrobností o vašich kontejnerech
V Dockeru používáte docker ps -a
zobrazíte všechny kontejnery na vašem počítači.
Nejbližší ekvivalent Kubernetes je kubectl get pods
.
Výstup z těchto dvou příkazů je zcela odlišný. Docker zobrazuje další informace o pracovní zátěži, kterou kontejner běží.
Kubernetes poskytne podrobnosti o obrázku a příkazu při použití describe pod
příkaz. Musíte předat název modulu. To poskytuje mnohem podrobnější informace s použitím seznamu namísto tabulky.
Provádění příkazů v kontejnerech
Docker vám umožňuje spustit příkaz ve spuštěném kontejneru pomocí docker exec
.
Ekvivalent Kubernetes se také nazývá exec
. Místo názvu kontejneru Docker použijte název pod Kubernetes. Příkaz je specifikován mírně odlišně – musí být oddělen od názvu podu znakem --
sekvence.
Můžete použít -it
příznaky, abyste získali interaktivní přístup stejným způsobem jako Docker. Toto je zkratka pro --stdin --tty
a měl by být použit vždy, když chcete spustit shell v modulu. Zadejte název shellu, například bash
, jako příkaz.
Kubectl podporuje attach
příkaz, když se chcete připojit k procesu v kontejneru, který již běží. Funguje podobně jako docker attach
ale měli byste předat -it
příznaky, pokud potřebujete interaktivní přístup.
Zobrazení protokolů kontejneru
Chcete-li zobrazit protokoly kontejneru pomocí Dockeru, použijte docker logs
příkaz. Přidání -f
přepínač bude „sledovat“ protokoly, takže budou nepřetržitě streamovány do vašeho terminálu.
Kubectlovy logs
příkaz má stejnou syntaxi. Zadejte název pod stejným způsobem, jakým Docker přijímá název kontejneru.
Docker i Kubernetes shromažďují protokoly ze standardního výstupu a standardní chyby (stdout
/stderr
) proudy běžících kontejnerů. Kubernetes zpracovává restartování kontejneru jinak než Docker. Zatímco v Dockeru restartovaný kontejner připojí své protokoly ke stávajícím, Kubernetes vytvoří nový protokol pro každé spuštění. Protokoly nahrazeného kontejneru můžete získat přidáním --previous
příznak do logs
příkaz.
Vytváření kontejnerů
Kontejnery Docker se vytvářejí pomocí run
příkaz. Zde je návod, jak můžete spustit nginx
server s Docker:
docker run -d --name nginx --restart=always -p 80:80 nginx
Tím se vytvoří kontejner pomocí nginx
základní obraz a nastaví jej na automatický restart. Server je vázán na výchozí port HTTP 80.
Kubernetes vyžaduje, abyste při přidávání kontejnerů do clusteru mysleli na abstrakce vyšší úrovně. Místo spuštění kontejneru vytváříte rozmístění reprezentovat vaši pracovní zátěž:
kubectl create deployment --image=nginx nginx
Tím se vytvoří nginx
rozvinutí. Modul se spustí automaticky; v podu bude kontejner, na kterém běží webový server.
Vytvořením nasazení nebudou jeho kontejnery vázány na žádné porty. Nově vytvořený server ještě není přístupný. Porty musí být odkryté prostřednictvím služby . Pody jsou pomíjivé a mohou obsahovat více replikovaných nádob. Služby definují logickou kolekci modulů a umožňují vám přiřadit jim síťové zdroje, jako je IP adresa a port.
Odhalení nginx
nasazení na portu 80 umožní přístup k serveru:
kubectl expose deployment nginx --port=80 --name nginx-http
Pokus o přístup k portu 80 na výchozí IP adrese clusteru by vás nyní měl přesměrovat na nginx
server.
Kubectl přímo nepodporuje jiné docker run
možnosti, jako je vytvoření svazku a připojení připojení. Kontejnery, které vyžadují trvalé úložiště, budou muset mít svazky nakonfigurované ručně pomocí kubectl
příkazy nebo svazek manifestu.
Odebrání kontejnerů
Kontejnery dockeru se odstraní pomocí docker rm
příkaz s ID kontejneru.
Kubernetes neumožňuje přímo odstranit kontejnery. Místo toho pracujete s rozmístěním který vytvořil lusk. Použijte kubectl delete deployment
příkaz, předání názvu nasazení.
Docker vám umožňuje zastavit nádobu místo jejího odstranění. Kubernetes odebral podporu pro tuto akci. Doporučený způsob dočasného pozastavení nasazení je zmenšení počtu replik na 0. Bez spuštěných modulů je pracovní zátěž efektivně zastavena.
kubectl scale --replicas=0 deployment/my-deployment
Až budete připraveni obnovit nasazení, spusťte scale
příkaz znovu. Nastavte počet nových replik na 1
nebo vyšší. Použití více replik může zvýšit dostupnost vaší pracovní zátěže.
Závěr
Mezi Docker CLI a kubectl
neexistují žádné přímé paralely . Většina příkazů Kubernetes má jinou syntaxi než jejich protějšky Docker. Než budete moci převést pracovní postupy založené na Dockeru na Kubernetes, budete se muset naučit nové termíny a možnosti.
V mnoha případech neexistuje žádný kubectl
alternativa k funkci Docker CLI. Funkce Dockeru je zaměřena na koncept kontejneru. Kubernetes to vezme a umístí to do středu značně rozšířeného ekosystému zdrojů.
S kontejnery se zřídka zachází izolovaně. Místo toho budete muset pracovat se zdroji, jako jsou nasazení, služby a sady replik. To je důvod, proč se učení Kubernetes může zdát náročné, když k němu přistupujete z pohledu uživatele Dockeru.
Pokud jste obeznámeni se základy Dockeru, přechod na Kubernetes by přesto měl být relativně jednoduchý. Zásadní rozdíl je v tom, že to, co Docker vidí jako kontejner, je v Kubernetes obvykle přístupné jako souhrnný „pod“. Pody jsou vytvářeny „rozmístěními“, která představují pracovní zatížení ve vašem clusteru. V případě pochybností nahlédněte do kubectl
docs k nalezení vhodné shody pro příkaz Docker.