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.
W tym przewodniku Szybki start użyjesz interfejsu wiersza polecenia platformy Azure (Azure CLI), aby utworzyć klaster Azure Kubernetes Service (AKS), w którym jako system operacyjny węzłów działa Azure Container Linux (ACL). Po wdrożeniu klastra nawiąż połączenie z nim przy użyciu polecenia kubectl i sprawdź, czy węzły listy ACL działają zgodnie z oczekiwaniami.
Uwagi i ograniczenia
Przed rozpoczęciem zapoznaj się z następującymi kwestiami i ograniczeniami dotyczącymi ACL:
- ACL jest ogólnie dostępne od wersji 1.34 usługi AKS.
- ACL wymaga funkcji Trusted Launch z Secure Boot i vTPM. Nie zaufane warianty uruchamiania nie są dostępne.
- ACL na platformie Arm64 wymaga jednostek SKU opartych na procesorach Cobalt (v6), aby zapewnić zgodność z funkcją Trusted Launch.
-
NodeImageiNonesą jedynymi obsługiwanymi kanałami uaktualniania systemu operacyjnego.UnmanagediSecurityPatchnie są zgodne z ACL ze względu na niezmienny katalog/usr. - Przesyłanie strumieniowe artefaktów nie jest obsługiwane.
- Pod Sandboxing nie jest obsługiwany.
- Poufne maszyny wirtualne (CVM) nie są obsługiwane.
- Maszyny wirtualne generacji 1 nie są obsługiwane.
Wymagania wstępne
Note
Możesz użyć usługi Azure Cloud Shell lub lokalnej instalacji interfejsu wiersza polecenia Azure, aby uruchomić polecenia w ramach tego przewodnika Szybki start.
- Jeśli korzystasz z Azure CLI lokalnie, instaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
- Jeśli używasz instalacji lokalnej, zaloguj się do Azure CLI przy użyciu polecenia
az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Zaloguj się za pomocą Azure CLI. - Jeśli zostanie wyświetlony monit, zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
- Użyj polecenia
az version, aby znaleźć zainstalowaną wersję Azure CLI i biblioteki zależne. Azure Container Linux wymaga Azure CLI w wersji 2.86.0 lub nowszej. Aby przeprowadzić uaktualnienie do najnowszej wersji, użyjaz upgradepolecenia . - W razie potrzeby zarejestruj dostawcę zasobów Microsoft.ContainerService w subskrypcji platformy Azure.
Zarejestruj dostawcę zasobów Microsoft.ContainerService
Może być konieczne zarejestrowanie dostawców zasobów w ramach subskrypcji platformy Azure. Sprawdź stan rejestracji przy użyciu az provider show polecenia .
az provider show --namespace Microsoft.ContainerService --query registrationState
W razie potrzeby zarejestruj dostawcę zasobów przy użyciu az provider register polecenia .
az provider register --namespace Microsoft.ContainerService
Tworzenie grupy zasobów
Grupa zasobów platformy Azure to logiczna grupa przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi. Podczas tworzenia grupy zasobów należy określić lokalizację. Ta lokalizacja to:
- Lokalizacja magazynu metadanych grupy zasobów.
- Gdzie zasoby będą uruchamiane na platformie Azure, jeśli nie określisz innego regionu podczas tworzenia zasobu.
Utwórz grupę zasobów przy użyciu polecenia az group create. Poniższy przykład ustawia zmienne środowiskowe dla nazwy grupy zasobów, regionu i nazwy klastra usługi AKS, a następnie tworzy grupę zasobów w określonej lokalizacji. Możesz zastąpić wartości zmiennych środowiskowych własnymi preferowanymi nazwami i regionami.
export MY_RESOURCE_GROUP_NAME="myACLResourceGroup"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myACLCluster"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
Przykładowy wynik:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myACLResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myACLResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Utwórz klaster ACL
Utwórz klaster AKS za pomocą polecenia az aks create z parametrem --os-sku AzureContainerLinux, aby utworzyć klaster AKS z obrazem ACL.
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 3 \
--generate-ssh-keys
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Połącz się z klastrem
Aby zarządzać klastrem Kubernetes, użyj klienta wiersza polecenia Kubernetes, kubectl.
kubectl jest już zainstalowany, jeśli używasz usługi Azure Cloud Shell. Aby zainstalować kubectl lokalnie, użyj az aks install-cli polecenia .
Skonfiguruj
kubectl, aby nawiązać połączenie z klastrem Kubernetes za pomocą poleceniaaz aks get-credentials. To polecenie pobiera poświadczenia i konfiguruje Kubernetes CLI do ich użycia.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAMEZweryfikuj połączenie z klastrem, używając polecenia
kubectl get. Ta komenda zwraca listę węzłów klastra.kubectl get nodes
Wdrażanie aplikacji
Aby wdrożyć aplikację, należy użyć pliku manifestu, aby utworzyć wszystkie obiekty wymagane do uruchomienia aplikacji AKS Store. Plik manifestu Kubernetes definiuje pożądany stan klastra, taki jak obrazy kontenerów do uruchomienia. Manifest obejmuje następujące wdrożenia i usługi Kubernetes:
- Front sklepu: aplikacja internetowa dla klientów do wyświetlania produktów i składania zamówień.
- Usługa produktu: wyświetla informacje o produkcie.
- Usługa zamówień: składa zamówienia.
- Rabbit MQ: system kolejkowania komunikatów dla kolejki zamówień.
Note
Nie zalecamy uruchamiania kontenerów stanowych, takich jak RabbitMQ, bez stałego przechowywania danych w środowisku produkcyjnym. Są one używane tutaj dla uproszczenia, ale zalecamy korzystanie z usług zarządzanych, takich jak Azure Cosmos DB lub Azure Service Bus.
Utwórz plik o nazwie
aks-store-quickstart.yamli skopiuj go w następującym manifeście:apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerWdróż aplikację przy użyciu
kubectl applypolecenia i określ nazwę manifestu YAML.kubectl apply -f aks-store-quickstart.yaml
Testowanie aplikacji
Możesz sprawdzić, czy aplikacja jest uruchomiona, odwiedzając publiczny adres IP lub adres URL aplikacji.
Pobierz adres URL aplikacji przy użyciu następujących poleceń:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo "Status: $STATUS"
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
echo "http://$IP_ADDRESS"
Usuwanie klastra
Jeśli nie planujesz korzystać z samouczków, usuń niepotrzebne zasoby, aby uniknąć opłat za platformę Azure.
Usuń grupę zasobów, usługę kontenera i wszystkie powiązane zasoby przy użyciu az group delete polecenia .
az group delete --name $MY_RESOURCE_GROUP_NAME --yes --no-wait
Treści powiązane
Dowiedz się więcej o usłudze ACL dla AKS w artykule Czym jest Azure Container Linux (ACL) dla usługi Azure Kubernetes Service (AKS)?