Snabbstart: Distribuera ett AKS-kluster (Azure Kubernetes Service) med Azure PowerShell
Azure Kubernetes Service (AKS) är en hanterad Kubernetes-tjänst som gör att du snabbt kan distribuera och hantera kluster. I den här snabbstarten kommer du att göra följande:
- Distribuera ett AKS-kluster med Azure PowerShell.
- Kör ett exempelprogram med flera containrar med en grupp mikrotjänster och webbklientdelar som simulerar ett detaljhandelsscenario.
Kommentar
För att komma igång med att snabbt etablera ett AKS-kluster innehåller den här artikeln steg för att distribuera ett kluster med standardinställningar endast i utvärderingssyfte. Innan du distribuerar ett produktionsklart kluster rekommenderar vi att du bekantar dig med vår referensarkitektur för baslinje för att överväga hur det överensstämmer med dina affärskrav.
Innan du börjar
Den här artikeln förutsätter en grundläggande förståelse av Kubernetes-begrepp. Mer information finns i Viktiga koncept för Azure Kubernetes Service (AKS).
-
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
För enkel användning kan du prova PowerShell-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Azure Cloud Shell.
Om du vill använda PowerShell lokalt installerar du Az PowerShell-modulen och ansluter till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount . Kontrollera att du kör kommandona med administratörsbehörighet. Mer information finns i Installera Azure PowerShell.
Kontrollera att den identitet som du använder för att skapa klustret har lämpliga minimibehörigheter. Mer information om åtkomst och identitet för AKS finns i Åtkomst- och identitetsalternativ för Azure Kubernetes Service (AKS).
Om du har fler än en Azure-prenumeration anger du den prenumeration som du vill använda för snabbstarten genom att anropa cmdleten Set-AzContext . Mer information finns i Hantera Azure-prenumerationer med Azure PowerShell.
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras. När du skapar en resursgrupp uppmanas du att ange en plats. Den här platsen är lagringsplatsen för dina resursgruppsmetadata och där dina resurser körs i Azure om du inte anger en annan region när du skapar resurser.
I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus.
Skapa en resursgrupp med cmdleten New-AzResourceGroup .
New-AzResourceGroup -Name myResourceGroup -Location eastus
Följande exempelutdata liknar skapandet av resursgruppen:
ResourceGroupName : myResourceGroup Location : eastus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup
Skapa AKS-kluster
Om du vill skapa ett AKS-kluster använder du cmdleten New-AzAksCluster . I följande exempel skapas ett kluster med namnet myAKSCluster med en nod och aktiverar en systemtilldelad hanterad identitet.
New-AzAksCluster -ResourceGroupName myResourceGroup `
-Name myAKSCluster `
-NodeCount 1 `
-EnableManagedIdentity `
-GenerateSshKey
Efter några minuter slutförs kommandot och returnerar information om klustret.
Kommentar
När du skapar ett AKS-kluster skapas en andra resursgrupp automatiskt för att lagra AKS-resurserna. Mer information finns i Varför skapas två resursgrupper med AKS?
Anslut till klustret
Om du vill hantera ett Kubernetes-kluster använder du Kubernetes-kommandoradsklienten kubectl. kubectl
är redan installerat om du använder Azure Cloud Shell. Om du vill installera kubectl
lokalt anropar du cmdleten Install-AzAksCliTool
.
Konfigurera
kubectl
för att ansluta till kubernetes-klustret med hjälp av cmdleten Import-AzAksCredential . Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
Kontrollera anslutningen till klustret med kommandot kubectl get . Det här kommandot returnerar en lista över klusternoderna.
kubectl get nodes
Följande exempelutdata visar den enskilda nod som skapades i föregående steg. Kontrollera att nodstatusen är Klar.
NAME STATUS ROLES AGE VERSION aks-nodepool1-11853318-vmss000000 Ready agent 2m26s v1.27.7
Distribuera programmet
För att distribuera programmet använder du en manifestfil för att skapa alla objekt som krävs för att köra AKS Store-programmet. En Kubernetes-manifestfil definierar ett klusters önskade tillstånd, till exempel vilka containeravbildningar som ska köras. Manifestet innehåller följande Kubernetes-distributioner och -tjänster:
- Butiksfront: Webbprogram där kunder kan visa produkter och göra beställningar.
- Produkttjänst: Visar produktinformation.
- Ordertjänst: Gör beställningar.
- Rabbit MQ: Meddelandekö för en orderkö.
Kommentar
Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel Rabbit MQ, utan beständig lagring för produktion. Dessa används här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure CosmosDB eller Azure Service Bus.
Skapa en fil med namnet
aks-store-quickstart.yaml
och kopiera i följande manifest:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: 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 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 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: LoadBalancer
En uppdelning av YAML-manifestfiler finns i Distributioner och YAML-manifest.
Om du skapar och sparar YAML-filen lokalt kan du ladda upp manifestfilen till standardkatalogen i CloudShell genom att välja knappen Ladda upp/ladda ned filer och välja filen från det lokala filsystemet.
Distribuera programmet med kommandot kubectl apply och ange namnet på YAML-manifestet.
kubectl apply -f aks-store-quickstart.yaml
Följande exempelutdata visar distributioner och tjänster:
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
Testa programmet
När programmet körs så exponerar en Kubernetes-tjänst programmets klientdel mot Internet. Den här processen kan ta ett par minuter att slutföra.
Kontrollera statusen för de distribuerade poddarna med kommandot kubectl get pods . Gör så att alla poddar är
Running
innan du fortsätter.kubectl get pods
Sök efter en offentlig IP-adress för programmet store-front. Övervaka förloppet med hjälp av kommandot kubectl get service med
--watch
argumentet .kubectl get service store-front --watch
EXTERNA IP-utdata för
store-front
tjänsten visas inledningsvis som väntande:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
När DEN EXTERNA IP-adressen ändras från väntande till en faktisk offentlig IP-adress använder du
CTRL-C
för att stoppakubectl
bevakningsprocessen.Följande exempelutdata visar en giltig offentlig IP-adress som har tilldelats tjänsten:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Öppna en webbläsare till tjänstens externa IP-adress för att se hur Azure Store-appen fungerar.
Ta bort klustret
Om du inte planerar att gå igenom AKS-självstudien rensar du onödiga resurser för att undvika Azure-avgifter. Ta bort resursgruppen, containertjänsten och alla relaterade resurser genom att anropa cmdleten Remove-AzResourceGroup .
Remove-AzResourceGroup -Name myResourceGroup
Kommentar
AKS-klustret skapades med systemtilldelad hanterad identitet (standardidentitetsalternativet som används i den här snabbstarten), identiteten hanteras av plattformen och kräver inte borttagning.
Nästa steg
I den här snabbstarten distribuerade du ett Kubernetes-kluster och distribuerade sedan ett enkelt program med flera containrar till det. Det här exempelprogrammet är endast i demosyfte och representerar inte alla metodtips för Kubernetes-program. Vägledning om hur du skapar fullständiga lösningar med AKS för produktion finns i AKS-lösningsvägledning.
Om du vill veta mer om AKS och gå igenom ett komplett exempel på kod-till-distribution fortsätter du till självstudiekursen för Kubernetes-klustret.
Azure Kubernetes Service