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.
Rozpocznij pracę z usługą Azure Container Linux (ACL) dla usługi AKS, wdrażając klaster usługi AKS przy użyciu Azure CLI.
Z tego przewodnika Szybki start dowiesz się, jak wykonywać następujące zadania:
- Utwórz klaster AKS przy użyciu ACL dla AKS.
- Wdróż klaster przy użyciu Azure CLI.
- Uruchom przykładową aplikację z wieloma kontenerami z grupą mikrousług i frontonów internetowych, które symulują scenariusz sprzedaży detalicznej.
Note
Ten artykuł zawiera kroki wdrażania klastra z ustawieniami domyślnymi tylko do celów ewaluacyjnych. Przed wdrożeniem klastra gotowego do produkcji zalecamy zapoznanie się z naszą architekturą referencyjną punktu odniesienia , aby rozważyć, jak jest ona zgodna z wymaganiami biznesowymi.
Ważna
Jeśli używasz Azure Container Linux (ACL) w usłudze AKS, zapoznaj się z następującymi zagadnieniami i ograniczeniami:
- ACL jest ogólnie dostępne od wersji 1.34 usługi AKS.
- ACL wymaga funkcji Trusted Launch z Secure Boot i vTPM. Warianty uruchamiania inne niż zaufane 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
Ten szybki start zakłada, że masz podstawową wiedzę na temat pojęć związanych z platformą Kubernetes. Aby uzyskać więcej informacji, zobacz Podstawowe pojęcia Kubernetes dla Azure Kubernetes Service (AKS).
Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia 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 Uwierzytelnianie do Azure za pomocą Azure CLI. - Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą Azure CLI.
- Potrzebujesz Azure CLI w wersji 2.86.0 lub nowszej. Uruchom
az version, aby znaleźć zainstalowaną wersję i biblioteki zależne. Aby przeprowadzić uaktualnienie do najnowszej wersji, uruchom polecenieaz upgrade.
- Jeśli używasz instalacji lokalnej, zaloguj się do Azure CLI przy użyciu polecenia
Upewnij się, że tożsamość używana do utworzenia klastra ma odpowiednie minimalne uprawnienia. Aby uzyskać więcej informacji na temat dostępu i tożsamości dla usługi AKS, zobacz Opcje dostępu i tożsamości dla usługi Azure Kubernetes Service (AKS).
Jeśli masz wiele subskrypcji Azure, wybierz odpowiedni identyfikator subskrypcji, w którym zasoby mają być rozliczane przy użyciu polecenia
az account set. Aby uzyskać więcej informacji, zobacz Jak zarządzać subskrypcjami platformy Azure — interfejs wiersza polecenia platformy Azure.W zależności od subskrypcji platformy Azure może być konieczne zażądanie zwiększenia limitu przydziału procesorów wirtualnych. Aby uzyskać więcej informacji, zobacz Zwiększanie limitów przydziału procesorów wirtualnych rodziny maszyn wirtualnych.
Rejestrowanie wymaganych dostawców zasobów
Może być konieczne zarejestrowanie wymaganych dostawców zasobów, takich jak Microsoft.ContainerService w ramach subskrypcji Azure.
Sprawdzanie stanu rejestracji
Sprawdź stan rejestracji przy użyciu az provider show polecenia .
az provider show --namespace Microsoft.ContainerService --query registrationState
Rejestrowanie dostawcy zasobów
W razie potrzeby zarejestruj dostawcę zasobów Microsoft.ContainerService przy użyciu polecenia az provider register.
az provider register --namespace Microsoft.ContainerService
Definiowanie zmiennych środowiskowych
Zdefiniuj następujące zmienne środowiskowe do użycia w tym przewodniku Szybki start. Jeśli wolisz, możesz zastąpić wartości własnymi nazwami niestandardowymi.
export RESOURCE_GROUP="myAKSResourceGroup"
export REGION="westus"
export CLUSTER_NAME="myAKSCluster"
Tworzenie grupy zasobów
Grupa zasobów platformy Azure to grupa logiczna, w której zasoby platformy Azure są wdrażane i zarządzane. Podczas tworzenia grupy zasobów zostanie wyświetlony monit o określenie lokalizacji. Ta lokalizacja to lokalizacja magazynu metadanych grupy zasobów i lokalizacja, w której zasoby są uruchamiane na platformie Azure, jeśli nie określisz innego regionu podczas tworzenia zasobów.
Utwórz grupę zasobów przy użyciu polecenia az group create.
az group create \
--name $RESOURCE_GROUP \
--location $REGION
Przykładowy wynik:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Utwórz klaster AKS
Utwórz klaster AKS za pomocą polecenia az aks create. Parametr --os-sku AzureContainerLinux konfiguruje pulę węzłów systemowych tak, aby używała systemu ACL jako systemu operacyjnego węzłów. Poniższy przykład tworzy klaster z jednym węzłem i włącza tożsamość zarządzaną przypisaną przez system:
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 1 \
--generate-ssh-keys
Note
Podczas tworzenia nowego klastra usługa AKS automatycznie tworzy drugą grupę zasobów do przechowywania zasobów usługi AKS. Aby uzyskać więcej informacji, zobacz Dlaczego dwie grupy zasobów są tworzone za pomocą usługi AKS?
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 $RESOURCE_GROUP \ --name $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.
-
RabbitMQ: kolejka komunikatów dla kolejki zamówień.
Note
Nie zalecamy uruchamiania kontenerów stanowych, takich jak RabbitMQ, bez trwałej pamięci w środowisku produkcyjnym. Używamy go 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.yaml i 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 startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] 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 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- 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 startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerAby uzyskać podział plików manifestu YAML, zobacz Wdrożenia i manifesty YAML.
Jeśli tworzysz i zapisujesz plik YAML lokalnie, możesz przekazać plik manifestu do katalogu domyślnego w usłudze Cloud Shell, wybierając przycisk Przekaż/Pobierz pliki i wybierając plik z lokalnego systemu plików.
Wdróż aplikację przy użyciu
kubectl applypolecenia i określ nazwę manifestu YAML.kubectl apply -f aks-store-quickstart.yamlW poniższych przykładowych danych wyjściowych przedstawiono wdrożenia i usługi:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
Testowanie aplikacji
Podczas uruchamiania aplikacji usługa Kubernetes uwidacznia fronton aplikacji w Internecie. Ten proces może potrwać kilka minut.
Sprawdź stan wdrożonych zasobników za pomocą polecenia
kubectl get pods. Przed kontynuowaniem upewnij się, że wszystkie zasobniki sąRunninggotowe.kubectl get podsSprawdź publiczny adres IP aplikacji
store-front. Monitoruj postęp za pomocąkubectl get servicepolecenia z argumentem--watch.kubectl get service store-front --watchDane wyjściowe EXTERNAL-IP dla
store-frontusługi początkowo są wyświetlane jako oczekujące:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mGdy adres EXTERNAL-IP zmieni się z oczekującego na rzeczywisty publiczny adres IP, użyj
CTRL-Cdo zatrzymania procesukubectlobserwacji.Następujące przykładowe dane wyjściowe przedstawiają prawidłowy publiczny adres IP przypisany do usługi:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mOtwórz przeglądarkę internetową na zewnętrzny adres IP usługi, aby zobaczyć działanie aplikacji ze Sklepu Azure.
Usuwanie klastra
Jeśli nie planujesz przechodzenia przez samouczek usługi AKS, wyczyść niepotrzebne zasoby, aby uniknąć opłat za rozliczenia platformy Azure.
Usuń grupę zasobów, usługę kontenera i wszystkie powiązane zasoby przy użyciu az group delete polecenia .
az group delete --name $RESOURCE_GROUP
Klaster usługi AKS został utworzony z użyciem tożsamości zarządzanej przypisanej przez system, która jest domyślną opcją tożsamości używaną w tym szybkim starcie. Platforma zarządza tą tożsamością, aby nie trzeba było jej ręcznie usuwać.
Treści powiązane
W tym przewodniku Szybki start wdrożysz klaster AKS z ACL dla AKS za pomocą Azure CLI. Aby dowiedzieć się więcej o usłudze Azure Container Linux (ACL) dla Azure Kubernetes Service (AKS), zobacz Azure Container Linux (ACL) dla Azure Kubernetes Service (AKS).