Quickstart: Een AKS-cluster (Azure Kubernetes Service) implementeren met behulp van een ARM-sjabloon

Azure Kubernetes Service (AKS) is een beheerde Kubernetes-service waarmee u snel clusters kunt implementeren en beheren. In deze quickstart gaat u het volgende doen:

  • Implementeer een AKS-cluster met behulp van Azure Resource Manager sjabloon.
  • Voer een toepassing met meerdere containers uit met een webfront-end en een Redis-exemplaar in het cluster.

Afbeelding van browsen naar Azure Vote

Een Resource Manager-sjabloon is een JavaScript Object Notation-bestand (JSON) dat de infrastructuur en configuratie van uw project definieert. Voor de sjabloon is declaratieve syntaxis vereist. In declaratieve syntaxis beschrijft u de beoogde implementatie zonder dat u de reeks programmeeropdrachten voor het maken van de implementatie hoeft te schrijven.

In deze snelstart wordt ervan uitgegaan dat u een basisbegrip hebt van Kubernetes-concepten. Zie Kubernetes-kernconcepten voor Azure Kubernetes Service (AKS) voor meer informatie.

Als uw omgeving voldoet aan de vereisten en u benkend bent met het gebruik van ARM-sjablonen, selecteert u de knop Implementeren naar Azure. De sjabloon wordt in Azure Portal geopend.

Implementeren in Azure

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Vereisten

  • Gebruik de bash-omgeving in Azure Cloud shell.

    Cloud Shell starten in een nieuw venster

  • Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.

    • Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij de Azure CLI voor aanvullende aanmeldingsopties.

    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.

    • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.

  • Voor dit artikel is versie 2.0.61 of hoger van Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

  • Als u een AKS-cluster wilt maken met Resource Manager sjabloon, geeft u een openbare SSH-sleutel op. Zie de volgende sectie als u deze resource nodig hebt; ga anders naar de sectie De sjabloon controleren.

Een SSH-sleutelpaar maken

Voor toegang tot AKS-knooppunten maakt u verbinding met behulp van een SSH-sleutelpaar (openbaar en privé), dat u genereert met behulp van de ssh-keygen opdracht . Deze bestanden worden standaard gemaakt in de map ~/.ssh. Als u ssh-keygen de opdracht uitwerkt, worden alle SSH-sleutelparen overschreven met dezelfde naam die al op de opgegeven locatie bestaan.

  1. Ga naar https://shell.azure.com om Cloud Shell in uw browser te openen.

  2. Voer de opdracht ssh-keygen uit. In het volgende voorbeeld wordt een SSH-sleutelpaar gemaakt met behulp van RSA-versleuteling en een bitlengte van 2048:

    ssh-keygen -t rsa -b 2048
    

Zie SSH-sleutels maken en beheren voor verificatie in Azure voor meer informatie over het maken van SSH-sleutels.

De sjabloon controleren

De sjabloon die in deze quickstart wordt gebruikt, komt uit Azure Quick Start-sjablonen.

{
  "$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]"
    }
  }
}

Zie de site AKS-quickstartsjablonen voor meer AKS-voorbeelden.

De sjabloon implementeren

  1. Selecteer de volgende knop om u aan te melden bij Azure en een sjabloon te openen.

    Implementeren in Azure

  2. Typ of selecteer de volgende waarden.

    Voor deze quickstart behoudt u de standaardwaarden voor besturingssysteemschijfgrootte (GB) , aantal agenten, agentgrootte van de virtuele machine, type besturingssysteem en Kubernetes-versie. Geef uw eigen waarden op voor de volgende sjabloonparameters:

    • Abonnement: Selecteer een Azure-abonnement.
    • Resourcegroep: Selecteer Nieuw maken. Voer een unieke naam in voor de resourcegroep, zoals myResourceGroup, en kies vervolgens OK.
    • Locatie: Selecteer een locatie, zoals VS-Oost.
    • Clusternaam: voer een unieke naam in voor het AKS-cluster, zoals myAKSCluster.
    • DNS-voorvoegsel: voer een uniek DNS-voorvoegsel voor uw cluster in, zoals myakscluster.
    • Linux-gebruikersnaam van beheerder: voer een gebruikersnaam in om verbinding te maken via SSH, zoals azureuser.
    • Openbare SSH-RSA-sleutel: kopieer en plak het openbare onderdeel van uw SSH-sleutelpaar (standaard de inhoud van ~/.ssh/id_rsa.pub).

    Resource Manager-sjabloon om een Azure Kubernetes Service-cluster te maken in de portal

  3. Selecteer Controleren + maken.

Het duurt een paar minuten om het AKS-cluster te maken. Wacht totdat het cluster met succes is geïmplementeerd voordat u met de volgende stap verdergaat.

De implementatie valideren

Verbinding maken met het cluster

Als u een Kubernetes-cluster wilt beheren, gebruikt u de Kubernetes-opdrachtregelclient kubectl. kubectl is al geïnstalleerd als u Azure Cloud Shell.

  1. Installeer kubectl lokaal met de opdracht az aks install-cli:

    az aks install-cli
    
  2. Configureer kubectl om verbinding te maken met uw Kubernetes-cluster met behulp van de opdracht az aks get-credentials. Bij deze opdracht worden referenties gedownload en wordt Kubernetes CLI geconfigureerd voor het gebruik van deze referenties.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Controleer de verbinding met uw cluster met behulp van de opdracht kubectl get. Met deze opdracht wordt een lijst met de clusterknooppunten weergegeven.

    kubectl get nodes
    

    Uitvoer toont de knooppunten die in de vorige stappen zijn gemaakt. Zorg ervoor dat de status van alle knooppunten Ready is:

    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
    

De toepassing uitvoeren

Een Kubernetes-manifestbestand definieert de gewenste status van een cluster, zoals welke containerafbeeldingen moeten worden uitgevoerd.

In deze quickstart gebruikt u een manifest om alle objecten te maken die nodig zijn om de Azure Vote-toepassing uit te voeren. Dit manifest bevat twee Kubernetes-implementaties:

  • De Azure Vote Python-voorbeeldtoepassingen.
  • Een Redis-exemplaar.

Er worden ook twee Kubernetes-services gemaakt:

  • Een interne service voor het Redis-exemplaar.
  • Een externe service voor toegang tot de Azure Vote-toepassing via internet.
  1. Maak een bestand met de naam azure-vote.yaml.

    • Als u de Azure Cloud Shell, kan dit bestand worden gemaakt met of alsof het vi werkt op een virtueel of fysiek nano systeem
  2. Kopieer de volgende YAML-definitie:

    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. Implementeer de toepassing met de opdracht kubectl apply en geef de naam op van uw YAML-manifest:

    kubectl apply -f azure-vote.yaml
    

    Uitvoer toont de gemaakte implementaties en services:

    deployment "azure-vote-back" created
    service "azure-vote-back" created
    deployment "azure-vote-front" created
    service "azure-vote-front" created
    

De toepassing testen

Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes-service de front-end van de toepassing beschikbaar op internet. Dit proces kan enkele minuten duren.

Controleer de voortgang met behulp van de opdracht kubectl get service met het argument --watch .

kubectl get service azure-vote-front --watch

De uitvoer EXTERNAL-IP voor de azure-vote-front service wordt in eerste instantie als in behandeling weer geven.

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

Zodra het EXTERNE IP-adres is gewijzigd van in behandeling in een echt openbaar IP-adres, gebruikt u om CTRL-C het kubectl watch-proces te stoppen. In de volgende voorbeelduitvoer ziet u een geldig openbaar IP-adres dat aan de service is toegewezen:

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

Open een webbrowser naar het externe IP-adres van uw service om de Azure Vote-app te zien.

Afbeelding van browsen naar Azure Vote

Resources opschonen

Schoon uw overbodige resources op om Azure-kosten te voorkomen. Gebruik de opdracht az group delete om de resourcegroep, de containerservice en alle gerelateerde resources te verwijderen.

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

Notitie

Wanneer u het cluster verwijdert, wordt de Azure Active Directory-service-principal die door het AKS-cluster wordt gebruikt niet verwijderd. Zie Overwegingen voor en verwijdering van AKS service-principal voor stappen voor het verwijderen van de service-principal.

Als u een beheerde identiteit hebt gebruikt, wordt de identiteit beheerd door het platform en hoeft deze niet te worden verwijderd.

Code ophalen

In deze quickstart zijn al bestaande containerafbeeldingen gebruikt om een Kubernetes-implementatie te maken. De gerelateerde toepassingscode, Dockerfile en het Kubernetes-manifestbestand zijn beschikbaar op GitHub.

Volgende stappen

In deze quickstart hebt u een Kubernetes-cluster geïmplementeerd en vervolgens een toepassing met meerdere containers geïmplementeerd. Toegang tot het Kubernetes-webdashboard voor uw AKS-cluster.

Voor meer informatie over AKS en een volledig stapsgewijs voorbeeld van code tot implementatie gaat u naar de zelfstudie over Kubernetes-clusters.