Distribuera ett Kubernetes-kluster med AKS-motorn på Azure Stack Hub

Du kan distribuera ett Kubernetes-kluster på Azure Stack Hub från en virtuell klientdator som kör AKS-motorn. I den här artikeln tittar vi på att skriva en klusterspecifikation, distribuera ett kluster med filen apimodel.json och kontrollera klustret genom att distribuera MySQL med Helm.

Definiera en klusterspecifikation

Du kan ange en klusterspecifikation i en dokumentfil med hjälp av JSON-formatet som kallas API-modellen. AKS-motorn använder en klusterspecifikation i API-modellen för att skapa klustret.

Du hittar exempel på API-modellen för ditt operativsystem och AKS-motorns versionsnummer för de senaste versionerna i AKS-motorn och motsvarande bildmappning.

  1. Leta reda på aks-motorns versionsnummer, v.0.63.0till exempel , i tabellen.
  2. I tabellen API-modellexempel väljer du och öppnar länken för ditt operativsystem.
  3. Välj . Du kan använda URL:en i följande instruktioner.

En URL till API-modellen kan se ut så här:

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

För vart och ett av följande exempel ersätts <URL for the API Model> med URL:en.

Uppdatera API-modellen

I det här avsnittet tittar vi på hur du skapar en API-modell för klustret.

  1. Börja med att använda en Azure Stack Hub API-modellfil för Linux eller Windows. Från datorn installerade du AKS-motorn och körde:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Anteckning

    Om du är frånkopplad kan du ladda ned filen och manuellt kopiera den till den frånkopplade datorn där du planerar att redigera den. Du kan kopiera filen till Linux-datorn med hjälp av verktyg som PuTTY eller WinSCP.

  2. Om du vill öppna API-modellen i en redigerare kan du använda nano:

    nano ./kubernetes-azurestack.json
    

    Anteckning

    Om du inte har nano installerat kan du installera nano på Ubuntu: sudo apt-get install nano.

  3. Leta reda på orchestratorRelease och orchestratorVersion i filen kubernetes-azurestack.json . Välj en av kubernetes-versionerna som stöds. du hittar versionstabellen i viktig information. orchestratorRelease Ange som x.xx och orchestratorVersion som x.xx.x. En lista över aktuella versioner finns i AKS-motorversioner som stöds

  4. Hitta customCloudProfile och ange URL:en till klientportalen. Till exempel https://portal.local.azurestack.external.

  5. Lägg till "identitySystem":"adfs" om du använder AD FS. Exempel:

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Anteckning

    Om du använder Microsoft Entra ID för ditt identitetssystem behöver du inte lägga till fältet identitySystem.

  6. I masterProfileanger du följande fält:

    Fält Beskrivning
    dnsPrefix Ange en unik sträng som ska användas för att identifiera värdnamnet för virtuella datorer. Till exempel ett namn baserat på resursgruppens namn.
    count Ange det antal original som du vill använda för distributionen. Minimivärdet för en HA-distribution är 3, men 1 är tillåtet för distributioner som inte har hög tillgänglighet.
    vmSize Ange en storlek som stöds av Azure Stack Hub, till exempel Standard_D2_v2.
    Distributioner Ange aks-ubuntu-18.04 eller aks-ubuntu-20.04.
  7. I agentPoolProfiles uppdatering:

    Fält Beskrivning
    count Ange det antal agenter som du vill använda för distributionen. Det maximala antalet noder som ska användas per prenumeration är 50. Om du distribuerar fler än ett kluster per prenumeration kontrollerar du att det totala antalet agenter inte överskrider 50. Se till att använda konfigurationsobjekten som anges i JSON-exempelmodellens JSON-fil.
    vmSize Ange en storlek som stöds av Azure Stack Hub, till exempel Standard_D2_v2.
    Distributioner Ange aks-ubuntu-18.04, aks-ubuntu-20.04 eller Windows.
    Används Windows för agenter som ska köras i Windows. Se till exempel kubernetes-windows.json
  8. I linuxProfile uppdatering:

    Fält Beskrivning
    adminUsername Ange användarnamnet för VM-administratören.
    Ssh Ange den offentliga nyckel som ska användas för SSH-autentisering med virtuella datorer. Använd ssh-rsa och sedan nyckeln. Anvisningar om hur du skapar en offentlig nyckel finns i Skapa en SSH-nyckel för Linux.

    Om du distribuerar till ett anpassat virtuellt nätverk kan du hitta instruktioner om hur du hittar och lägger till nödvändig nyckel och värden i lämpliga matriser i API-modellen i Distribuera ett Kubernetes-kluster till ett anpassat virtuellt nätverk.

    Anteckning

    MED AKS-motorn för Azure Stack Hub kan du inte ange egna certifikat för att skapa klustret.

  9. Om du använder Windows windowsProfile uppdaterar du värdena adminUsername: för och adminPassword:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

Mer information om API-modellen

Lägga till certifikat när du använder ASDK

Om du distribuerar ett kluster i Azure Stack Development Kit (ASDK) och använder Linux måste du lägga till rotcertifikatet i det betrodda certifikatarkivet för den virtuella klientdatorn som kör AKS-motorn.

  1. Hitta rotcertifikatet på den virtuella datorn i den här katalogen: /var/lib/waagent/Certificates.pem.
  2. Kopiera certifikatfilen:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Distribuera ett Kubernetes-kluster

När du har samlat in alla nödvändiga värden i DIN API-modell kan du skapa klustret. Nu bör du:

Be din Azure Stack Hub-operatör att:

  • Kontrollera systemets hälsotillstånd, föreslå körning Test-AzureStack och OEM-leverantörens maskinvaruövervakningsverktyg.
  • Kontrollera systemkapaciteten, inklusive resurser som minne, lagring och offentliga IP-adresser.
  • Ange information om den kvot som är associerad med din prenumeration så att du kan kontrollera att det fortfarande finns tillräckligt med utrymme för det antal virtuella datorer som du planerar att använda.

Fortsätt att distribuera ett kluster:

  1. Granska de tillgängliga parametrarna för AKS-motorn på Azure Stack Hub CLI-flaggor.

    Parameter Exempel Description
    azure-env AzureStackCloud För att ange för AKS-motorn att målplattformen är Azure Stack Hub använder du AzureStackCloud.
    identitetssystem Adfs Valfritt. Ange din identitetshanteringslösning om du använder Active Directory Federated Services (AD FS).
    location lokalt Regionnamnet för din Azure Stack Hub. För ASDK är regionen inställd på local.
    resource-group kube-rg Ange namnet på en ny resursgrupp eller välj en befintlig resursgrupp. Resursnamnet måste vara alfanumeriskt och gemener.
    api-modell ./kubernetes-azurestack.json Sökväg till klusterkonfigurationsfilen eller API-modellen.
    output-directory kube-rg Ange namnet på katalogen som ska innehålla utdatafilen apimodel.json och andra genererade filer.
    klient-ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Ange guid för tjänstens huvudnamn. Klient-ID:t identifierades som program-ID när Azure Stack Hub-administratören skapade tjänstens huvudnamn.
    klienthemlighet xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Ange hemligheten för tjänstens huvudnamn. Du konfigurerar klienthemligheten när du skapar tjänsten.
    prenumerations-ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Ange ditt prenumerations-ID. Du måste ange en prenumeration för klientorganisationen. Distribution till den administrativa prenumerationen stöds inte. Mer information finns i Prenumerera på ett erbjudande

    Här är ett exempel:

    Anteckning

    För AKSe version 0.75.3 och senare är aks-engine-azurestack deploykommandot för att distribuera ett AKS-motorkluster .

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. Om körningen av någon anledning misslyckas när utdatakatalogen har skapats kan du åtgärda problemet och köra kommandot igen. Om du kör distributionen igen och hade använt samma utdatakatalog tidigare returnerar AKS-motorn ett fel som säger att katalogen redan finns. Du kan skriva över den befintliga katalogen med hjälp av flaggan: --force-overwrite.

  3. Spara AKS-motorns klusterkonfiguration på en säker och krypterad plats.

    Leta upp filen apimodel.json. Spara den på en säker plats. Den här filen används som indata i alla dina andra AKS-motoråtgärder.

    Den genererade filen apimodel.json innehåller tjänstens huvudnamn, hemlighet och den offentliga SSH-nyckel som du använder i indata-API-modellen. Filen har också alla andra metadata som krävs av AKS-motorn för att utföra alla andra åtgärder. Om du förlorar filen kommer AKS-motorn inte att kunna konfigurera klustret.

    Hemligheterna är okrypterade. Förvara filen på en krypterad och säker plats.

Verifiera klustret

Kontrollera klustret genom att ansluta till kubectl, hämta informationen och sedan hämta nodernas tillstånd.

  1. kubeconfig Hämta filen för att ansluta till kontrollplanet.

    • Om du redan har kubectl installerat kontrollerar kubeconfig du filen för det nyligen skapade klustret i den här katalogsökvägen /kubeconfig/kubeconfig.json. Du kan lägga till /kubeconfig.json i .kube katalogen för att få åtkomst till det nya klustret.
      Om du inte har installerat kubectlgår du till Installera verktyg för att installera kubernetes-kommandoradsverktyget. Annars följer du anvisningarna nedan för att komma åt klustret från en av kontrollplansnoderna.
  2. Hämta den offentliga IP-adressen för en av dina kontrollplansnoder med hjälp av Azure Stack Hub-portalen.

  3. Från en dator med åtkomst till din Azure Stack Hub-instans ansluter du via SSH till den nya kontrollplansnoden med hjälp av en klient som PuTTY eller MobaXterm.

  4. För SSH-användarnamnet använder du "azureuser" och den privata nyckelfilen för nyckelparet som du angav för distributionen av klustret.

  5. Kontrollera att klusterslutpunkterna körs:

    kubectl cluster-info
    

    Resultatet bör se ut ungefär så här:

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. Granska sedan nodtillstånden:

    kubectl get nodes
    

    Resultatet bör likna följande:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

Felsöka klusterdistribution

När det uppstår fel när du distribuerar ett Kubernetes-kluster med hjälp av AKS-motorn kan du kontrollera:

  1. Använder du rätt autentiseringsuppgifter för tjänstens huvudnamn (SPN)?
  2. Har SPN rollen "Deltagare" i Azure Stack Hub-prenumerationen?
  3. Har du en tillräckligt stor kvot i din Azure Stack Hub-plan?
  4. Har Azure Stack Hub-instansen en korrigering eller uppgradering som tillämpas?

Mer information finns i felsökningsartikeln i GitHub-lagringsplatsen Azure/aks-engine-azurestack .

Rotera din tjänstprinciphemlighet

Efter distributionen av Kubernetes-klustret med AKS-motorn används tjänstens huvudnamn (SPN) för att hantera interaktioner med Azure Resource Manager på din Azure Stack Hub-instans. Vid något tillfälle kan hemligheten för detta tjänstens huvudnamn upphöra att gälla. Om hemligheten upphör att gälla kan du uppdatera autentiseringsuppgifterna genom att:

  • Uppdaterar varje nod med den nya hemligheten för tjänstens huvudnamn.
  • Eller uppdatera API-modellens autentiseringsuppgifter och köra uppgraderingen.

Uppdatera varje nod manuellt

  1. Hämta en ny hemlighet för tjänstens huvudnamn från molnoperatören. Anvisningar för Azure Stack Hub finns i Använda en appidentitet för att komma åt Azure Stack Hub-resurser.
  2. Använd de nya autentiseringsuppgifterna som tillhandahålls av molnoperatören för att uppdatera /etc/kubernetes/azure.json på varje nod. När du har gjort uppdateringen startar du om både kubele och kube-controller-manager.

Uppdatera klustret med aks-engine update

Du kan också ersätta autentiseringsuppgifterna i apimodel.json och köra uppgraderingen med hjälp av den uppdaterade .json-filen till samma eller nyare Kubernetes-version. Anvisningar om hur du uppgraderar modellen finns i Uppgradera ett Kubernetes-kluster på Azure Stack Hub

Nästa steg