Kubernetes je určitě novým základem pro provoz aplikací a řešením, nad kterým lze dál stavět a například do něj přinášet cloudové služby. Samotný Kubernetes ale není nic jednoduchého - určitě potřebuji ho nějak spravovat, monitorovat, sbírat logy, telemetrii, vytvářet bezpečnostní politiky a synchronizovat konfigurace. Ať už jde o Azure Kubernetes Service, AKS Engine v Azure Stack Hub, Kubernetes v Azure Stack HCI či Azure Stack Edge nebo váš vlastní cluster postavený v datovém centru s využitím OpenShift či VMware nebo jsou to K3s clustery z vašich IoT bran v továrnách, u všech těchto variant je centrální řízení hodně důležité. Přesně to vám nabízí Azure Arc for Kubernetes, který si dnes vyzkoušíme.
O tom co je Azure Arc už jsem psal před rokem: Pohled na hybridní svět IT nově i s Azure Arc
Toto řešení umožňí napojit vaše kdekoli běžící clustery na Azure a promítnout je do portálu. To má myslím dost zásadní přínosy:
Umím si představit, že v budoucnu některé vlastnosti, které umí AKS ale Arc for Kubernetes ještě ne, se objeví - třeba možnost pracovat s Kubernetes objekty z pěkného Azure GUI nebo RBAC do clusteru s integrací na single-sign-on v AAD (včetně MFA a dalších vychytávek) a RBAC konfigurace z GUI. Zatím to v Arc není, ale AKS ano a je možné, že se později objeví. Druhá sada funkcí může být v budoucnosti řešena přes Kubernetes Cluster API, tedy standardizované API pro ovládání podvozku clusteru. Pokud například VMware Tanzu nabídne cluster API, bude moci Azure řídit vznik clusterů a jejich škálování i v onpremises.
Za mě je těch výhod opravdu hodně a napojení všech clusterů do Azure mi dává zásadní smysl.
Jdeme na to - nasazení ve finále není složité a dá se dost dobře automatizovat. Pokud máte tisíc clusterů z vašich IoT bran, ani to nebude problém.
Nejprve si zaregistruji nějaké providery.
az provider register --namespace Microsoft.PolicyInsights
az provider register --namespace Microsoft.Kubernetes
az provider register --namespace Microsoft.KubernetesConfiguration
Vytvoříme si Resource Group a virtuálku, v které zprovozním Kubernetes - samozřejmě může běžet kdekoli.
az group create -n kubernetes-rg -l westeurope
az vm create -n kubernetes-vm \
-g kubernetes-rg \
--image UbuntuLTS \
--size Standard_B4ms \
--admin-username tomas \
--ssh-key-values ~/.ssh/id_rsa.pub \
--no-wait
Pro nalodění do Arc a Azure Policy bude cluster potřebovat účet v AAD (Service Principal) a limitovaná práva v subskripci. To si připravíme a také si uložíme login údaje.
# Vytvoreni SP
export CLIENT_SECRET=$(az ad sp create-for-rbac -n "http://tomasArcKubernetes" --skip-assignment --query password -o tsv)
export CLIENT_ID=$(az ad sp show --id "http://tomasArcKubernetes" --query appId -o tsv)
export TENANT_ID=$(az account show --query tenantId -o tsv)
# Role pro Arc onboarding
az role assignment create \
--role 34e09817-6cbe-4d01-b1a2-e0eac5743d41 \
--assignee $CLIENT_ID \
--scope /subscriptions/$(az account show --query id -o tsv)
# Role pro policy
az role assignment create \
--role 66bb4e9e-b016-4a94-8249-4c0511c2be84 \
--assignee $CLIENT_ID \
--scope /subscriptions/$(az account show --query id -o tsv)
Dále si založíme Log Analytics workspace a vyexportujeme jeho údaje. Do workspace pak nasadíme Azure Monitor for Containers solution (tedy “vylepšíme” tento workspace o schopnost práce s kontejnery).
export WORKSPACE_NAME=tomasarckube123
az monitor log-analytics workspace create -n $WORKSPACE_NAME -g kubernetes-rg
export WORKSPACE_ID=$(az monitor log-analytics workspace show -n $WORKSPACE_NAME -g kubernetes-rg --query customerId -o tsv)
export WORKSPACE_RESOURCE_ID=$(az monitor log-analytics workspace create -n $WORKSPACE_NAME -g kubernetes-rg --query id -o tsv)
export WORKSPACE_KEY=$(az monitor log-analytics workspace get-shared-keys -n $WORKSPACE_NAME -g kubernetes-rg --query primarySharedKey -o tsv)
az deployment group create -g kubernetes-rg \
-p workspaceResourceId=$WORKSPACE_RESOURCE_ID \
-p workspaceRegion=westeurope \
-u https://raw.githubusercontent.com/microsoft/Docker-Provider/ci_dev/scripts/onboarding/templates/azuremonitor-containerSolution.json
Perfektní. Všechny stažené údaje budu potřebovat ve VM, do které se připojím, tak se připravím příkazy pro jejich uložení, ať to netípám ručně.
echo export CLIENT_SECRET=\"$CLIENT_SECRET\" &&
echo export CLIENT_ID=\"$CLIENT_ID\" &&
echo export TENANT_ID=\"$TENANT_ID\" &&
echo export WORKSPACE_ID=\"$WORKSPACE_ID\" &&
echo export WORKSPACE_RESOURCE_ID=\"$WORKSPACE_RESOURCE_ID\" &&
echo export WORKSPACE_KEY=\"$WORKSPACE_KEY\"
Připojme se teď do VM a skočme do privilegovaného uživatele a vložme údaje.
ssh $(az network public-ip show -n kubernetes-vmPublicIP -g kubernetes-rg --query ipAddress -o tsv)
sudo -i
# Vložíme export údajů do proměnných prostředí
Nainstalujeme zjednodušenou verzi Kubernetes - projekt K3s od Rancher, což nám teď rozhodně stačí. Je to velmi oblíbené řešení pro malé clustery na kraji jako jsou IoT brány.
curl -sfL https://get.k3s.io | sh -
Nainstalujeme Helm a namíříme ho na správnou konfiguraci.
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
Dál budeme potřebovat Azure CLI a jeho extensions na připojení clusterů.
apt-get update
apt-get install -y ca-certificates curl apt-transport-https lsb-release gnupg
curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null
AZ_REPO=$(lsb_release -cs)
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | tee /etc/apt/sources.list.d/azure-cli.list
apt-get update
apt-get install -y azure-cli
az extension add --name connectedk8s
az extension add --name k8sconfiguration
Zalogujeme se do Azure účtem service principal, co jsme vytvořili na začátku.
az login --service-principal -u $CLIENT_ID -p $CLIENT_SECRET --tenant $TENANT_ID
Nalodíme cluster do Azure Arc for Kubernetes a uložíme si resource ID, které vznikne.
az connectedk8s connect --name tomas-k3s --resource-group kubernetes-rg --tags logAnalyticsWorkspaceResourceId=$WORKSPACE_RESOURCE_ID
export clusterId=$(az connectedk8s show --name tomas-k3s --resource-group kubernetes-rg --query id -o tsv)
Nainstalujeme Azure Monitor for Containers
helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
helm repo update
helm upgrade -i azuremonitor incubator/azuremonitor-containers --set omsagent.secret.wsid=$WORKSPACE_ID,omsagent.secret.key=$WORKSPACE_KEY,omsagent.env.clusterId=$clusterId
Nainstalujeme Azure Policy
helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-charts
helm repo update
helm upgrade -i azure-policy-addon azure-policy/azure-policy-addon-arc-clusters \
--set azurepolicy.env.resourceid=$clusterId \
--set azurepolicy.env.clientid=$CLIENT_ID \
--set azurepolicy.env.clientsecret=$CLIENT_SECRET \
--set azurepolicy.env.tenantid=$TENANT_ID
Můj cluster se promítl do Azure jako samostatný zdroj.
Jednotlivé funkční vlastnosti si rozebereme v příštích článcích, protože nejsou specifické pro Arc - platí i pro AKS.
Vidím řízení konfigurací, nasazení a aplikací clusteru GitOps způsobem.
Můžeme začít přiřazovat politiky, například omezení běhu pod rootem, přístupy na registry a tak podobně.
K dispozici je moc užitečný monitoring.
Možnost vytvářet alerty jako reakce na události.
Uloženy jsou logy z kontejnerů, inventář a události Kubernetu.
Využít můžeme i dalších připravených vizualizací ve formě workbooků.
Pokud už vás ukázka nebaví, můžete ji smazat.
ad sp delete -id "http://tomasArcKubernetes"
ad ad app delete -id "http://tomasArcKubernetes"
az group delete -n kubernetes-rg -y --no-wait
Azure Arc for Kubernetes dokáže zajistit řízení vašich clusterů ať už jsou kdekoli a množství funkcí se bude jistě dál rozšiřovat. Navíc nalodění clusterů do Azure bude základem pro využívání dalších služeb nad tím. Ať to budou služby datové jako je SQL nebo PostgreSQL nebo aplikační jako je Logic App, Azure Functions nebo API Management či z oblasti umělé inteligence jako je vision, custom vision, překlady, analýza textu, formulářů a mnoho dalších, hlavní hybridní platformou bude Kubernetes připojený do správy Azure. Pro cloudové věci použijte nativní cloudové služby od A do Z. Pokud ale musí váš cluster běžet pověšený na stromech Amazonské džungle (ať už doslova v pralese jako IoT brána nebo v AWS jako EKS), napojte ho do Azure přes Arc for Kubernetes a stavte nad tím.