Snabbstart: Distribuera ett Azure Kubernetes Service (AKS)-kluster med hjälp av en ARM-mall

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:

  • Distribuera ett AKS-kluster med en Azure Resource Manager mall.
  • Kör ett program med flera containrar med en webbwebbdel och en Redis-instans i klustret.

Bild som illustrerar hur du navigerar till Azure Vote

En ARM-mall är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för ditt projekt. Mallen använder deklarativ syntax. I deklarativ syntax beskriver du din avsedda distribution utan att skriva sekvensen med programmeringskommandon för att skapa den.

Den här snabbstarten förutsätter grundläggande kunskaper om Kubernetes-begrepp. Mer information finns i Viktiga koncept för Azure Kubernetes Service (AKS).

Om din miljö uppfyller förhandskraven och du är van att använda ARM-mallar väljer du knappen Distribuera till Azure. Mallen öppnas på Azure-portalen.

Distribuera till Azure

Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.

Förutsättningar

  • Använd bash-miljön i Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönster

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.

    • Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Fler inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. Mer information om tillägg finns i Använda tillägg med Azure CLI.

    • Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.

  • Den här artikeln kräver version 2.0.61 eller senare av Azure CLI. Om du Azure Cloud Shell är den senaste versionen redan installerad.

  • Om du vill skapa ett AKS-kluster Resource Manager en mall anger du en offentlig SSH-nyckel. Om du behöver den här resursen kan du se följande avsnitt: gå annars till avsnittet Granska mallen.

Skapa ett SSH-nyckelpar

För att få åtkomst till AKS-noder ansluter du med hjälp av ett SSH-nyckelpar (offentligt och privat) som du genererar med ssh-keygen kommandot . Som standard skapas dessa filer i katalogen ~/.ssh. Om du ssh-keygen kör kommandot skriver du över alla SSH-nyckelpar med samma namn som redan finns på den angivna platsen.

  1. Gå till https://shell.azure.com för att Cloud Shell i webbläsaren.

  2. Kör kommandot ssh-keygen. I följande exempel skapas ett SSH-nyckelpar med RSA-kryptering och en bitlängd på 2 048:

    ssh-keygen -t rsa -b 2048
    

Mer information om hur du skapar SSH-nycklar finns i Skapa och hantera SSH-nycklar för autentisering i Azure.

Granska mallen

Mallen som används i den här snabbstarten är från Azure snabbstartsmallar.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.4.412.5873",
      "templateHash": "14640985186631737095"
    }
  },
  "parameters": {
    "clusterName": {
      "type": "string",
      "defaultValue": "aks101cluster",
      "metadata": {
        "description": "The name of the Managed Cluster resource."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the Managed Cluster resource."
      }
    },
    "dnsPrefix": {
      "type": "string",
      "metadata": {
        "description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
      }
    },
    "osDiskSizeGB": {
      "type": "int",
      "defaultValue": 0,
      "maxValue": 1023,
      "minValue": 0,
      "metadata": {
        "description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
      }
    },
    "agentCount": {
      "type": "int",
      "defaultValue": 3,
      "maxValue": 50,
      "minValue": 1,
      "metadata": {
        "description": "The number of nodes for the cluster."
      }
    },
    "agentVMSize": {
      "type": "string",
      "defaultValue": "Standard_D2s_v3",
      "metadata": {
        "description": "The size of the Virtual Machine."
      }
    },
    "linuxAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "User name for the Linux Virtual Machines."
      }
    },
    "sshRSAPublicKey": {
      "type": "string",
      "metadata": {
        "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
      }
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2020-09-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "Linux",
            "mode": "System"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerService/managedClusters', parameters('clusterName'))).fqdn]"
    }
  }
}

Fler AKS-exempel finns på webbplatsen för AKS-snabbstartsmallar.

Distribuera mallen

  1. Välj följande knapp för att logga in på Azure och öppna en mall.

    Distribuera till Azure

  2. Välj eller ange följande värden.

    I den här snabbstarten lämnar du standardvärdena för OS-diskstorleken GB, Antal agenter, VM-agentstorlek, OS-typ och Kubernetes-version. Ange egna värden för följande mallparametrar:

    • Prenumeration: Välj en Azure-prenumeration.
    • Resursgrupp: Välj Skapa ny. Ange ett unikt namn för resursgruppen, till exempel myResourceGroup, och välj sedan OK.
    • Plats: Välj en plats, till exempel USA, östra.
    • Klusternamn: Ange ett unikt namn för AKS-klustret, till exempel myAKSCluster.
    • DNS-prefix: Ange ett unikt DNS-prefix för klustret, till exempel myakscluster.
    • Användarnamn för Linux-administratör: Ange ett användarnamn för att ansluta med SSH, till exempel azureuser.
    • Offentlig SSH RSA-nyckel: Kopiera och klistra in den offentliga delen av ditt SSH-nyckelpar (som standard innehållet i ~/.ssh/id_rsa.pub).

    Resource Manager mall för att skapa Azure Kubernetes Service kluster i portalen

  3. Välj Granska + skapa.

Det tar några minuter att skapa AKS-klustret. Vänta tills klustret har distribuerats innan du går vidare till nästa steg.

Verifiera distributionen

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.

  1. Installera kubectl lokalt med kommandot az aks install-cli:

    az aks install-cli
    
  2. Konfigurera kubectl för att ansluta till kubernetes-klustret med kommandot az aks get-credentials. Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Verifiera anslutningen till klustret med kommandot kubectl get. Det här kommandot returnerar en lista över klusternoderna.

    kubectl get nodes
    

    Utdata visar noderna som skapades i föregående steg. Kontrollera att statusen för alla noder är Klar:

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-agentpool-41324942-0   Ready    agent   6m44s   v1.12.6    
    aks-agentpool-41324942-1   Ready    agent   6m46s   v1.12.6
    aks-agentpool-41324942-2   Ready    agent   6m45s   v1.12.6
    

Kör programmet

En Kubernetes-manifestfil definierar ett klusters önskade tillstånd, till exempel vilka containeravbildningar som ska köras.

I den här snabbstarten använder du ett manifest för att skapa alla objekt som behövs för att köra Azure Vote-programmet. Det här manifestet innehåller två Kubernetes-distributioner:

  • Azure Vote Python-exempelprogrammen.
  • En Redis-instans.

Två Kubernetes-tjänster skapas också:

  • En intern tjänst för Redis-instansen.
  • En extern tjänst för att få åtkomst till Azure Vote-programmet från Internet.
  1. Skapa en fil som heter azure-vote.yaml.

    • Om du använder Azure Cloud Shell kan den här filen skapas med hjälp av eller som om du vi nano arbetar med ett virtuellt eller fysiskt system
  2. Kopiera följande YAML-definition:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-back
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-back
      template:
        metadata:
          labels:
            app: azure-vote-back
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-back
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
            env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 6379
              name: redis
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-back
    spec:
      ports:
      - port: 6379
      selector:
        app: azure-vote-back
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: azure-vote-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: azure-vote-front
      template:
        metadata:
          labels:
            app: azure-vote-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: azure-vote-front
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
            resources:
              requests:
                cpu: 100m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            ports:
            - containerPort: 80
            env:
            - name: REDIS
              value: "azure-vote-back"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: azure-vote-front
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-vote-front
    
  3. Distribuera programmet med kommandot kubectl apply och ange namnet på ditt YAML-manifest:

    kubectl apply -f azure-vote.yaml
    

    Utdata visar de distributioner och tjänster som har skapats:

    deployment "azure-vote-back" created
    service "azure-vote-back" created
    deployment "azure-vote-front" created
    service "azure-vote-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.

Övervaka förloppet med kommandot kubectl get service med argumentet --watch .

kubectl get service azure-vote-front --watch

EXTERNAL-IP-utdata för azure-vote-front tjänsten visas initialt som väntande.

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s

När EXTERNAL-IP-adressen ändras från väntande till en faktisk offentlig IP-adress använder du CTRL-C för att stoppa kubectl bevakningsprocessen. Följande exempelutdata visar en giltig offentlig IP-adress som har tilldelats tjänsten:

azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

Om du vill se hur Azure Vote-appen fungerar i praktiken så öppnar du en webbläsare till den externa IP-adressen för din tjänst.

Bild som illustrerar hur du navigerar till Azure Vote

Rensa resurser

Du kan undvika Azure-avgifter genom att rensa bort onödiga resurser. Använd kommandot az group delete för att ta bort resursgruppen, containertjänsten och alla relaterade resurser.

az group delete --name myResourceGroup --yes --no-wait

Anteckning

När du tar bort klustret tas Azure Active Directory-tjänstens huvudnamn, som används av AKS-klustret, inte bort. Stegvisa instruktioner om hur du tar bort tjänstens huvudnamn finns i dokumentationen om viktiga överväganden och borttagning av AKS-tjänsten.

Om du använde en hanterad identitet hanteras identiteten av plattformen och kräver inte borttagning.

Hämta koden

Befintliga containeravbildningar användes i den här snabbstarten för att skapa en Kubernetes-distribution. Relaterad programkod, Dockerfile och Kubernetes-manifestfil finns på GitHub.

Nästa steg

I den här snabbstarten distribuerade du ett Kubernetes-kluster och distribuerade sedan ett program med flera containrar till det. Öppna Kubernetes-webbinstrumentpanelen för ditt AKS-kluster.

Om du vill lära dig mer om AKS, och gå igenom ett exempel med fullständig distributionskod, fortsätter du till självstudiekursen om Kubernetes-kluster.