Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Izolacja zasobników w usłudze AKS wykorzystuje technologię Kata Containers do uruchamiania każdego izolowanego zasobnika w lekkiej maszynie wirtualnej (VM) z własnym jądrem gościa. Ta granica izolacji obliczeniowej oddziela obciążenie robocze od jądra hosta i obciążeń roboczych w innych maszynach wirtualnych podów. Aby dowiedzieć się więcej o architekturze, korzyściach i zastosowaniach, zobacz artykuł Omówienie izolacji zasobników w Azure Kubernetes Service (AKS).
W tym artykule wdrożysz piaskownicowanie zasobników w nowym lub istniejącym klastrze usługi AKS z systemem Azure Linux, wdrożysz aplikację z użyciem środowiska uruchomieniowego Kata, a opcjonalnie zweryfikujesz izolację jądra.
Prerequisites
- Interfejs wiersza polecenia platformy Azure w wersji 2.80.0 lub nowszej. Uruchom polecenie
az --version, aby znaleźć wersję interfejsu wiersza polecenia platformy Azure i uruchomić polecenieaz upgradew celu uaktualnienia. Aby uzyskać więcej informacji, zobacz kroki opisane w temacie Instalowanie interfejsu wiersza polecenia platformy Azure. - AKS obsługuje izolację zasobników w Kubernetes w wersji 1.27.0 i nowszych.
- Aby zarządzać klastrem Kubernetes, użyj klienta wiersza polecenia
kubectl. Usługa Azure Cloud Shell jest dostarczana z usługąkubectl. Można zainstalowaćkubectllokalnie za pomocą poleceniaaz aks install-cli. - Funkcja
Microsoft.Network/AllowBringYourOwnPublicIpAddressmusi być uwzględniona w Twojej subskrypcji. Ta funkcja jest wymagana w przypadku obciążeń korzystających z izolacji Podów, które używają środowiska uruchomieniowego Kata.
Zarejestruj funkcję Microsoft.Network/AllowBringYourOwnPublicIpAddress
Zarejestruj funkcję
Microsoft.Network/AllowBringYourOwnPublicIpAddressw ramach subskrypcji za pomocą poleceniaaz feature register. Rejestracja może potrwać kilka minut.az feature register --namespace Microsoft.Network --name AllowBringYourOwnPublicIpAddressPrzed wdrożeniem izolacji zasobników Pod sprawdź za pomocą polecenia
az feature show, czy stan rejestracji toRegistered.az feature show --namespace Microsoft.Network --name AllowBringYourOwnPublicIpAddress --query properties.state --output tsvPo zarejestrowaniu funkcji odśwież rejestrację dostawcy zasobów
Microsoft.Networkza pomocą poleceniaaz provider register.az provider register --namespace Microsoft.Network
Limitations
Następujące ograniczenia dotyczą piaskowania Podów:
- Kata containers mogą nie osiągnąć limitów wydajności operacji IO, które mogą osiągnąć tradycyjne kontenery w usłudze Azure Files i wysokowydajnym lokalnym dysku SSD.
- Usługa Microsoft Defender for Containers nie obsługuje oceny zasobników środowiska uruchomieniowego Kata.
- Dostęp do sieci hosta Kata nie jest obsługiwany. Nie można bezpośrednio uzyskać dostępu do konfiguracji sieci hosta z poziomu maszyny wirtualnej.
- Przydział procesora i pamięci przy izolacji Poda różni się od
runc. Każdy zasobnik Kata działa na maszynie wirtualnej zasobnika, której stały rozmiar pamięci jest oparty na limicie pamięci zasobnika lub domyślnie wynosi 512Mi, jeśli nie określisz limitu. Limity CPU określają przydział vCPU maszyny wirtualnej poda, a limity ułamkowe są zaokrąglane w górę do pełnego vCPU na potrzeby tego przydziału. Aby uzyskać więcej informacji, zobacz Uwagi dotyczące izolacji Podów. - Piaskownica poda jest obsługiwana tylko w systemie Azure Linux. Systemy Ubuntu i Windows nie są obsługiwane. Aby uzyskać więcej informacji, zobacz Azure Host kontenera systemu Linux dla usługi AKS.
- Nie można włączyć standardu FIPS (Federal Information Processing Standard) ani Trusted Launch w puli węzłów korzystającej z izolacji zasobników Pod. Aby uzyskać więcej informacji, zobacz Kwestie dotyczące izolacji Poda.
- Architektura Arm64 nie jest obsługiwana w puli węzłów korzystającej z izolacji Pod.
Jak to działa
Izolacja podów w usłudze AKS bazuje na projekcie open source Kata Containers. Kontenery Kata działające na hoście kontenerów Azure Linux dla AKS zapewniają izolację opartą na maszynach wirtualnych oraz oddzielne jądro dla każdego podu. Izolacja podów umożliwia przydzielanie zasobów każdemu podowi, a zasoby te nie są współdzielone z innymi kontenerami Kata ani z kontenerami w przestrzeni nazw uruchomionymi na tym samym hoście.
Architektura rozwiązania jest oparta na następujących głównych składnikach:
- Host kontenera systemu Linux platformy Azure dla usługi AKS
- Hiperwizor Microsoft Hyper-V
- Monitor maszyny wirtualnej Open-Source Cloud-Hypervisor (VMM)
- Integracja z kontenerami Kata dla środowiska uruchomieniowego
Wdrażanie izolacji Podów przy użyciu Kata Containers jest podobne do standardowego przepływu pracy containerd wdrażania kontenerów. Klastry z włączoną izolacją Pod mają określoną klasę uruchomieniową, do której można się odwołać w manifeście Pod (runtimeClassName: kata-vm-isolation). Aby uzyskać więcej informacji o domyślnych ustawieniach klas środowiska uruchomieniowego i ich dostosowywaniu, zobacz Uwagi dotyczące izolowania zasobników.
Aby użyć tej funkcji z zasobnikiem, jedyną różnicą jest dodanie parametru runtimeClassNamekata-vm-isolation do specyfikacji zasobnika. Gdy zasobnik używa kata-vm-isolation klasy runtimeClass, funkcja hypervisor uruchamia uproszczoną maszynę wirtualną z własnym jądrem, aby obciążenie działało.
Tworzenie klastra za pomocą piaskownicy zasobnika
Wykonaj następujące kroki, aby wdrożyć klaster usługi Azure Linux AKS przy użyciu interfejsu wiersza polecenia platformy Azure.
Utwórz klaster usługi AKS, uruchamiając
az aks createpolecenie z następującymi parametrami:Parameter Wartość wymagana Notatki --workload-runtimeKataVmIsolationWłącza izolację Podów dla puli węzłów. --os-skuAzureLinuxIzolacja podów obsługuje tylko SKU systemu operacyjnego Azure Linux. --node-vm-sizeRozmiar maszyny wirtualnej generacji 2 obsługujący wirtualizację zagnieżdżoną Na przykład użyj rozmiaru maszyny wirtualnej serii Dsv3 . --node-count3Tworzy trzy węzły dla tego przykładu. Dostosuj wartość obciążenia. Poniższy przykład obejmuje tworzenie klastra o nazwie myAKSCluster z trzema węzłami w grupie myResourceGroup:
az aks create \ --name myAKSCluster \ --resource-group myResourceGroup \ --os-sku AzureLinux \ --workload-runtime KataVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 3 \ --generate-ssh-keysUruchom następujące polecenie, aby uzyskać poświadczenia dostępu dla klastra Kubernetes.
az aks get-credentialsUżyj polecenia i zastąp wartości nazwy klastra i nazwy grupy zasobów.az aks get-credentials --resource-group myResourceGroup --name myAKSClusterWyświetl listę wszystkich zasobników we wszystkich przestrzeniach nazw, uruchamiając polecenie
kubectl get pods.kubectl get pods --all-namespaces
Włącz izolację Podów w istniejącym klastrze
Aby korzystać z tej funkcji z istniejącym klastrem usługi AKS, należy spełnić następujące wymagania:
Klaster uruchamia platformę Kubernetes w wersji 1.27.0 lub nowszej.
Użyj następującego polecenia, aby włączyć izolację Podów przez utworzenie puli węzłów do ich hostowania.
Dodaj pulę węzłów do klastra usługi AKS przy użyciu
az aks nodepool addpolecenia z następującymi parametrami:Parameter Wartość wymagana Notatki --resource-groupGrupa zasobów, która zawiera istniejący klaster AKS Na przykład użyj myResourceGroup.--cluster-nameNazwa istniejącego klastra AKS Na przykład użyj myAKSCluster.--nameUnikatowa nazwa puli węzłów Na przykład użyj nodepool2.--workload-runtimeKataVmIsolationWłącza izolację Podów w puli węzłów. --os-skuAzureLinuxIzolacja podów obsługuje tylko wersję SKU systemu operacyjnego Azure Linux. --node-vm-sizeRozmiar maszyny wirtualnej generacji 2 obsługujący wirtualizację zagnieżdżoną Na przykład użyj rozmiaru maszyny wirtualnej z serii Dsv3. --node-count1Tworzy jeden węzeł dla tego przykładu. Dostosuj wartość obciążenia. Poniższy przykład dodaje pulę węzłów do myAKSCluster z jednym węzłem w nodepool2 w myResourceGroup:
az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataVmIsolation --node-vm-size Standard_D4s_v3 --node-count 1Uruchom polecenie
az aks update, aby uzgodnić konfigurację klastra, tak aby klaster rozpoznawał nową pulę węzłów ze środowiskiem uruchomieniowym obciążeńKataVmIsolation.az aks update --name myAKSCluster --resource-group myResourceGroupSprawdź, czy aktualizacja klastra zakończyła się pomyślnie oraz czy pula węzłów obsługująca piaskownicowanie Podów używa oczekiwanego środowiska uruchomieniowego obciążeń, wariantu SKU systemu operacyjnego i rozmiaru maszyny wirtualnej.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query provisioningState \ --output tsv az aks nodepool show \ --cluster-name myAKSCluster \ --resource-group myResourceGroup \ --name nodepool2 \ --query "{workloadRuntime:workloadRuntime, osSKU:osSKU, vmSize:vmSize}" \ --output tableStan aprowizacji klastra powinien mieć wartość
Succeeded. W danych wyjściowych puli węzłów powinny być widoczneKataVmIsolation,AzureLinuxi wybrany rozmiar maszyny wirtualnej.
Wdrażanie aplikacji z wykorzystaniem piaskownicy Podu
Korzystając z izolacji podów, można wdrażać zarówno standardowe pody, które nie używają środowiska uruchomieniowego Kata, jak i pody Kata, które go używają. Zasobnik Kata określa runtimeClassName: kata-vm-isolation w specyfikacji zasobnika.
Klasa uruchomieniowa wybiera środowisko uruchomieniowe Kata, ale należy również zdefiniować ograniczenia harmonogramowania, gdy obciążenia mają być uruchamiane w określonej puli węzłów obsługujących piaskownicowanie podów. Na przykład użyj wbudowanej etykiety puli węzłów AKS w elemencie nodeSelector. Zastąp element nodepool2 nazwą puli węzłów do izolowania Podów.
spec:
runtimeClassName: kata-vm-isolation
nodeSelector:
kubernetes.azure.com/agentpool: nodepool2
W celu silniejszego rozdzielenia można zawężać pulę węzłów piaskownicy zasobnika i dodawać pasujące tolerancje do obciążeń Kata. Defekt bez zgodnej tolerancji uniemożliwia planowanie innych obciążeń w tej puli węzłów. Aby uzyskać więcej informacji, zobacz Use node taints in an AKS cluster (Używanie defektów węzłów w klastrze usługi AKS).
Wdrażanie aplikacji przy użyciu środowiska uruchomieniowego Kata
Aby wdrożyć pod ze środowiskiem uruchomieniowym Kata w klastrze AKS, wykonaj następujące kroki.
Utwórz plik o nazwie kata-app.yaml, aby opisać pod kata, a następnie wklej następujący manifest.
kind: Pod apiVersion: v1 metadata: name: isolated-pod spec: runtimeClassName: kata-vm-isolation containers: - name: kata image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]Wartość specyfikacji zasobnika
runtimeClassNametokata-vm-isolation.Wdróż zasobnik Kubernetes, uruchamiając polecenie
kubectl applyi podając plik kata-app.yaml:kubectl apply -f kata-app.yamlDane wyjściowe polecenia przypominają następujący przykład:
pod/isolated-pod created
Weryfikowanie izolacji jądra (opcjonalnie)
- Aby porównać jądra podów Kata i podów innych niż Kata, utwórz plik o nazwie normal-app.yaml. Poniższy manifest definiuje standardowy pod bez środowiska uruchomieniowego Kata:
kind: Pod
apiVersion: v1
metadata:
name: normal-pod
spec:
containers:
- name: non-kata
image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Wdróż standardowy pod za pomocą polecenia
kubectl apply.kubectl apply -f normal-app.yamlAby uzyskać dostęp do kontenera w klastrze AKS, uruchom sesję powłoki za pomocą polecenia
kubectl exec. W tym przykładzie uzyskujesz dostęp do kontenera wewnątrz isolated-pod.kubectl exec -it isolated-pod -- /bin/shKubectl łączy się z klastrem, uruchamia
/bin/shwewnątrz pierwszego kontenera wisolated-podi przekazuje strumienie wejściowe i wyjściowe terminala do procesu kontenera. Możesz również uruchomić sesję powłoki do kontenera obsługującego zasobnik inny niż Kata, aby zobaczyć różnice.Po rozpoczęciu sesji powłoki do kontenera z izolowanego zasobnika uruchom polecenia, aby sprawdzić, czy kontener kata jest uruchomiony w piaskownicy zasobnika. Ma inną wersję jądra w porównaniu z kontenerem innym niż Kata poza piaskownicą.
Aby wyświetlić wersję jądra, uruchom następujące polecenie:
uname -rPoniższy przykład przypomina dane wyjściowe z jądra piaskownicy zasobnika:
[user]/# uname -r 6.6.96.mshv1Rozpocznij sesję powłoki do kontenera z normal-pod, aby zweryfikować dane wyjściowe jądra.
kubectl exec -it normal-pod -- /bin/bashAby wyświetlić wersję jądra, uruchom następujące polecenie:
uname -rPoniższy przykład przypomina dane wyjściowe z maszyny wirtualnej, na której działa zasobnik normalny, który jest innym jądrem niż zasobnik Kata uruchomiony w piaskownicy zasobnika:
6.6.100.mshv1-1.azl3
Uprzątnij zasoby
Po zakończeniu oceny tej funkcji usuń zasoby, których już nie potrzebujesz, aby uniknąć opłat za korzystanie z platformy Azure. Jeśli w ramach oceny lub testowania wdrożono nowy klaster, uruchom następujące
az aks deletepolecenie, aby usunąć klaster usługi AKS.az aks delete --resource-group myResourceGroup --name myAKSClusterJeśli wdrożono izolację podów w istniejącym klastrze, możesz usunąć pody za pomocą polecenia
kubectl delete pod.kubectl get pods kubectl delete pod <kata-pod-name>Aby usunąć zasoby obliczeniowe piaskownicy Poda, możesz również usunąć pulę węzłów Kata za pomocą polecenia
az aks nodepool delete. Przed usunięciem puli węzłów upewnij się, że nie są w niej uruchomione żadne obciążenia robocze, które chcesz zachować.az aks nodepool delete \ --cluster-name myAKSCluster \ --resource-group myResourceGroup \ --name nodepool2
Dalsze kroki
- Dowiedz się więcej o dedykowanych hostach platformy Azure dla węzłów z klastrem usługi AKS w celu korzystania z izolacji sprzętowej i kontroli nad zdarzeniami konserwacji platformy Azure.
- Aby lepiej poznać izolację sandboxów Podów i scenariusze obciążeń, wypróbuj laboratoria izolacji Podów.