Dela via


Snabbstart: Distribuera en Azure Linux-containervärd för AKS-kluster med hjälp av en ARM-mall

Kom igång med Azure Linux Container Host med hjälp av en ARM-mall (Azure Resource Manager) för att distribuera ett Azure Linux Container Host-kluster. När du har installerat förhandskraven skapar du ett SSH-nyckelpar, granskar mallen, distribuerar mallen och validerar den och distribuerar sedan ett program.

En Azure Resource Manager-mall är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för projektet. Mallen använder deklarativ syntax. Du beskriver den avsedda distributionen utan att skriva sekvensen med programmeringskommandon för att skapa distributionen.

Förutsättningar

  • Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

  • Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Azure Cloud Shell Snabbstart – Bash.

  • Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.

    • 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. Andra inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas att installera Azure CLI-tillägget vid första användningen. 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.

  • Om du inte redan har kubectl installerat installerar du det via Azure CLI med hjälp av az aks install-cli eller följer de överordnade anvisningarna.

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

  • 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 vill distribuera en Bicep-fil eller en ARM-mall måste du ha skrivåtkomst till de resurser som du distribuerar och åtkomst till alla åtgärder i resurstypen Microsoft.Resources/deployments. Om du till exempel vill distribuera en virtuell dator behöver du behörigheterna Microsoft.Compute/virtualMachines/write och Microsoft.Resources/deployments/*. Det finns en lista med roller och behörigheter i Inbyggda roller i Azure.

Skapa ett SSH-nyckelpar

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

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

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

    ssh-keygen -t rsa -b 4096
    

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

Granska mallen

Följande distribution använder en ARM-mall från Azure-snabbstartsmallar.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "parameters": {
    "clusterName": {
      "type": "string",
      "defaultValue": "azurelinuxakscluster",
      "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,
      "minValue": 0,
      "maxValue": 1023,
      "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,
      "minValue": 1,
      "maxValue": 50,
      "metadata": {
        "description": "The number of nodes for the cluster."
      }
    },
    "agentVMSize": {
      "type": "string",
      "defaultValue": "Standard_DS2_v2",
      "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'"
      }
    },
    "osType": {
      "type": "string",
      "defaultValue": "Linux",
      "allowedValues": [
        "Linux"
      ],
      "metadata": {
        "description": "The type of operating system."
      }
    },
    "osSKU": {
      "type": "string",
      "defaultValue": "AzureLinux",
      "allowedValues": [
        "AzureLinux",
        "Ubuntu"
      ],
      "metadata": {
        "description": "The Linux SKU to use."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2021-03-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "mode": "System",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "[parameters('osType')]",
            "osSKU": "[parameters('osSKU')]",
            "storageProfile": "ManagedDisks"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      },
      "identity": {
          "type": "SystemAssigned"
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(parameters('clusterName')).fqdn]"
    }
  }
}

Om du vill lägga till Azure Linux i en befintlig ARM-mall måste du lägga "osSKU": "AzureLinux" till och "mode": "System" till agentPoolProfiles och ange apiVersion till 2021-03-01 eller senare ("apiVersion": "2021-03-01").

Distribuera mallen

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

    Knapp för att distribuera Resource Manager-mallen till Azure.

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

    För den här snabbstarten lämnar du standardvärdena för OS Disk Size GB, Agent Count, Agent VM Size, OS Type och Kubernetes Version. Ange dina 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 testAzureLinuxResourceGroup 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 testAzureLinuxCluster.
    • DNS-prefix: Ange ett unikt DNS-prefix för klustret, till exempel myAzureLinuxCluster.
    • Användarnamn för Linux-administratör: Ange ett användarnamn för att ansluta med hjälp av SSH, till exempel azureUser.
    • Offentlig SSH RSA-nyckel: Kopiera och klistra in den offentliga delen av SSH-nyckelparet (som standard innehållet i ~/.ssh/id_rsa.pub).

    Skärmbild av Resource Manager-mallen för att skapa ett Azure Kubernetes Service-kluster i portalen.

  3. Välj Granska + skapa.

Det tar några minuter att skapa Azure Linux Container Host-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.

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

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

    az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
    
  3. Kontrollera anslutningen till klustret med hjälp av kubectl get kommandot . Det här kommandot returnerar en lista över klusternoderna.

    kubectl get nodes
    

    Följande utdataexempel visar de tre noder som skapades i föregående steg. Kontrollera att nodstatusen ä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
    

Distribuera 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-exempelprogram.
  • En Redis-instans.

Två Kubernetes-tjänster skapas också:

  • En intern tjänst för Redis-instansen.
  • En extern tjänst för å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 code, vieller nano som om du arbetar med ett virtuellt eller fysiskt system
  2. Kopiera i 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
    

    En uppdelning av YAML-manifestfiler finns i Distributioner och YAML-manifest.

  3. Distribuera programmet med kommandot kubectl apply och ange namnet på ditt YAML-manifest:

    kubectl apply -f azure-vote.yaml
    

    Följande exempel liknar utdata som visar 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 hjälp av kommandot kubectl get service med --watch argumentet .

kubectl get service azure-vote-front --watch

EXTERNA IP-utdata för azure-vote-front tjänsten visas inledningsvis 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 DEN EXTERNA 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.

Skärmbild av hur du bläddrar till Azure Vote-exempelprogrammet.

Ta bort klustret

Om du inte ska fortsätta med följande självstudier kan du undvika att Azure-avgifter rensar bort onödiga resurser. az group delete Använd kommandot för att ta bort resursgruppen och alla relaterade resurser.

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

Nästa steg

I den här snabbstarten distribuerade du ett Azure Linux Container Host-kluster. Om du vill veta mer om Azure Linux Container Host och gå igenom ett komplett exempel på klusterdistribution och hantering kan du fortsätta till självstudiekursen Azure Linux Container Host.