Víte, že populární orchestrátor kontejnerů může nejen ovládat Linuxový svět, ale také Windows kontejnery ve Windows OS? A že si tohle můžete vyzkoušet (zatím jako neprodukční preview) na kliknutí s Azure Container Service? A že je to všechno krásně napojeno na Azure networking? Dnes si to vyzkoušíme.
ACS je služba, která pro vás vytvoří a škáluje cluster s vybraným open source orchestrátorem - DC/OS, Swarm nebo Kubernetes. Právě poslední zmíněný už v preview podporuje Windows hostitele.
Pro dnešní ukázku jsem použil Azure CLI 2.0 běžící v mém Linux subsystému v rámci Windows 10. Vytvořil jsem resource group a sestavil v ní malý Kubernetes cluster s jedním Windows agentem (hostitelem).
az group create -n kubewin -l westeurope az acs create --orchestrator-type kubernetes -g kubewin -n kubewin --dns-prefix=mojekubewin --agent-count=1 --windows --admin-username tomas --admin-password Azure12345678 -l westeurope
Pak jsem si nainstaloval kubectl, tedy ovládací příkaz pro Kubernetes clustery. Můžete to udělat přímo z Azure CLI (ale v případě Linux subsystému ve Windows 10 musíte mít Azure CLI nainstalované i pod root účtem) nebo použít postup na stránkách Kubernetes.
sudo az acs kubernetes install-cli
Stáhněte si parametry pro bezpečené připojení vašeho clusteru.
az acs kubernetes get-credentials --resource-group kubewin --name kubewin
A už běžíme, vyzkoušejte načíst nody.
$ kubectl get nodes NAME STATUS AGE VERSION 857a6acs9000 Ready 2h v1.5.3-8+e44bcb2f1f19d3 k8s-master-857a68f5-0 Ready 2h v1.5.3
Použijeme příkaz run pro stažení a spuštění IIS kontejneru ve třech kopiích v našem clusteru (tedy deployment v Kubernetes terminologii).
$ kubectl run mojeiis --image=microsoft/iis $ kubectl get pods NAME READY STATUS RESTARTS AGE mojeiis-1247386878-dqv7b 1/1 Running 0 15m mojeiis-1247386878-g94bj 1/1 Running 0 15m mojeiis-1247386878-w6ppk 1/1 Running 0 15m
Po nějaké době budou kontejnery (přesněji pody s kontejnerem) nahoře a my si můžeme zjistit IP adresu jednoho z nich.
$ kubectl describe pod mojeiis-1247386878-dqv7b | grep IP IP: 10.244.1.113
Jak už jsem na tomto blogu psal, v ACS využíváte Azure networking přímo pro kontejnery. Jinak řečeno kontejnery jsou přímo součástí vašeho VNETu! Pakliže tedy například v kontejnerech poběží front-end, ale transakční databázi chcete z různých důvodů provozovat ve VM, klidně můžete mít přímou kontektivitu mezi VM a kontejnery. Jsou totiž ve stejném VNETu - žádná NAT a podobné nepěknosti. Nastartoval jsem v Kubernetes VNET obyčejnou Windows VM a z ní jsem schopen přistoupit přímo na konkrétní kontejner.
Stejně jako v případě Linux hostitelů podporuje Kubernetes nejen koncept IP pro kontejnery z VNETu, ale také je součástí ACS deploymentu driver pro Azure Load Balancer pro koncept služeb. Vezmeme teď deployment našich IIS kontejnerů (chtěli jsme tři repliky) a vytvoříme službu, tedy chceme na ně balancovat provoz. Kubernetes požádá Azure o součinnost a společně získají veřejnou adresu a nastaví vše potřebné jak v Kubernetes tak v Azure.
$ kubectl expose deployments mojeiis --port 80 --type=LoadBalancer service "mojeiis" exposed $ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.0.0.1 <none> 443/TCP 3h mojeiis 10.0.196.35 52.233.170.243 80:32704/TCP 3m
Podívám se ze svého notebooku na tuto externí veřejnou adresu.
Právě jsme společně vytvořili Kubernetes cluster s Windows hostiteli, spustili v něm tři kopie kontejneru s IIS web serverem. Ty mají přímou adresovatelnost v rámci VNETu, takže Windows kontejnery mohou mluvit s libovolnou VM ve stejném VNETu. Pak jsme všechny kopie IIS vystrčili ven jako balancovanou službu s veřejně dostupnou adresou. Tohle všechno se dá zvládnout za pár minut - a pak že je to s těma kontejnerama složité :)