Déployer un cluster Kubernetes avec le moteur AKS sur Azure Stack Hub

Vous pouvez déployer un cluster Kubernetes sur Azure Stack Hub à partir d’une machine virtuelle cliente exécutant le moteur AKS. Dans cet article, nous examinons l’écriture d’une spécification de cluster, le déploiement d’un cluster avec le fichier apimodel.json et la vérification de votre cluster en déployant MySQL avec Helm.

Définir une spécification de cluster

Vous pouvez préciser une spécification de cluster dans un fichier de document au format JSON appelé modèle d’API. Le moteur AKS utilise une spécification de cluster dans le modèle d’API pour créer votre cluster.

Vous trouverez des exemples de modèle d’API pour votre système d’exploitation et votre numéro de version de moteur AKS pour les versions récentes dans Moteur AKS et mappage d’image correspondant.

  1. Recherchez le numéro de version de votre moteur AKS, par exemple, v.0.63.0, dans le tableau.
  2. Dans le tableau d’exemples de modèle d’API, sélectionnez et ouvrez le lien correspondant à votre système d’exploitation.
  3. Sélectionnez Raw. Vous pouvez utiliser l’URL fournie dans les instructions suivantes.

Une URL vers le modèle d’API peut se présenter comme suit :

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

Pour chacun des exemples suivants, remplacez <URL for the API Model> par l’URL.

Mettre à jour le modèle d’API

Cette section présente la création d’un modèle d’API pour votre cluster.

  1. Commencez par utiliser un fichier de modèle d’API Azure Stack Hub pour Linux ou Windows. À partir de la machine sur laquelle vous avez installé le moteur AKS, exécutez :

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

    Remarque

    Si vous êtes déconnecté, vous pouvez télécharger le fichier et le copier manuellement sur la machine déconnectée sur laquelle vous envisagez de le modifier. Vous pouvez copier le fichier sur votre machine Linux à l’aide d’outils comme PuTTY ou WinSCP.

  2. Pour ouvrir le modèle d’API dans un éditeur, vous pouvez utiliser nano :

    nano ./kubernetes-azurestack.json
    

    Remarque

    Si vous n’avez pas installé nano, vous pouvez le faire sur Ubuntu : sudo apt-get install nano.

  3. Dans le fichier kubernetes-azurestack.json , recherchez orchestratorRelease et orchestratorVersion. Sélectionnez l’une des versions de Kubernetes prises en charge ; le tableau des versions est disponible dans les notes de publication. Spécifiez la valeur orchestratorRelease sous la forme x.xx et orchestratorVersion sous la forme x.xx.x. Pour obtenir la liste des versions actuelles, consultez Versions du moteur AKS prises en charge.

  4. Recherchez customCloudProfile et fournissez l’URL du portail du locataire. Par exemple : https://portal.local.azurestack.external.

  5. Ajoutez "identitySystem":"adfs" si vous utilisez AD FS. Par exemple,

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

    Remarque

    Si vous utilisez Microsoft Entra ID pour votre système d’identité, vous n’avez pas besoin d’ajouter le champ identitySystem.

  6. Dans masterProfile, définissez les champs suivants :

    Champ Description
    dnsPrefix Entrez une chaîne unique qui servira à identifier le nom d’hôte des machines virtuelles. Par exemple, un nom basé sur le nom du groupe de ressources.
    count Entrez le nombre de maîtres que vous souhaitez pour votre déploiement. Le minimum pour un déploiement HA s’élève à 3, mais 1 seul maître est autorisé pour les déploiements non-HA.
    vmSize Entrez une taille prise en charge par Azure Stack Hub, par exemple Standard_D2_v2.
    distro Entrez aks-ubuntu-18.04 ou aks-ubuntu-20.04.
  7. Dans la mise à jour agentPoolProfiles :

    Champ Description
    count Entrez le nombre d’agents que vous souhaitez pour votre déploiement. Le nombre maximal de nœuds à utiliser par abonnement est de 50. Si vous déployez plus d’un cluster par abonnement, veillez à ne pas dépasser 50 agents. Utilisez les éléments de configuration spécifiés dans l’exemple de fichier JSON de modèle d’API.
    vmSize Entrez une taille prise en charge par Azure Stack Hub, par exemple Standard_D2_v2.
    distro Entrez aks-ubuntu-18.04, aks-ubuntu-20.04 ou Windows.
    Utilisez Windows pour les agents qui s’exécutent sur Windows. Par exemple, consultez kubernetes-windows.json
  8. Dans la mise à jour linuxProfile :

    Champ Description
    adminUsername Entrez le nom d’utilisateur administrateur de la machine virtuelle.
    ssh Entrez la clé publique qui sera utilisée pour l’authentification SSH auprès des machines virtuelles. Utilisez ssh-rsa, puis la clé. Pour obtenir des instructions sur la création d’une clé publique, consultez Créer une clé SSH pour Linux.

    Si vous déployez sur un réseau virtuel personnalisé, vous pouvez trouver des instructions pour rechercher la clé et les valeurs nécessaires afin de les ajouter aux tableaux appropriés dans le modèle d’API dans Déployer un cluster Kubernetes sur un réseau virtuel personnalisé.

    Remarque

    Le moteur AKS pour Azure Stack Hub ne vous permet pas de fournir vos propres certificats pour la création du cluster.

  9. Si vous utilisez Windows, dans windowsProfile, mettez à jour les valeurs de adminUsername: et adminPassword :

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

Plus d’informations sur le modèle d’API

Ajouter un certificat lors de l’utilisation de l’ASDK

Si vous déployez un cluster sur le Kit de développement Azure Stack (ASDK) et que vous utilisez Linux, vous devez ajouter le certificat racine au magasin de certificats approuvé de la machine virtuelle cliente exécutant le moteur AKS.

  1. Recherchez le certificat racine sur la machine virtuelle dans ce répertoire : /var/lib/waagent/Certificates.pem.
  2. Copiez le fichier du certificat :
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Déployer un cluster Kubernetes

Une fois que vous avez collecté toutes les valeurs requises dans votre modèle d’API, vous pouvez créer votre cluster. À ce stade, vous devez :

Demander à votre opérateur Azure Stack Hub d’effectuer les opérations suivantes :

  • Vérifier l’intégrité du système, en lui suggérant d’exécuter Test-AzureStack et l’outil de supervision de matériel de votre fournisseur OEM.
  • Vérifiez la capacité système, notamment les ressources comme la mémoire, le stockage et les adresses IP publiques.
  • Fournir les détails du quota associé à votre abonnement afin de vous permettre de vérifier que l’espace est toujours suffisant pour le nombre de machines virtuelles que vous envisagez d’utiliser.

Procéder au déploiement d’un cluster :

  1. Passez en revue les paramètres disponibles pour les indicateurs CLI du moteur AKS sur Azure Stack Hub.

    Paramètre Exemple Description
    azure-env AzureStackCloud Pour indiquer au moteur AKS que votre plateforme cible est Azure Stack Hub, utilisez AzureStackCloud.
    identity-system adfs facultatif. Spécifiez votre solution de gestion des identités si vous utilisez Active Directory Federated Services (AD FS).
    location local Nom de la région de votre Azure Stack Hub. Pour le kit de développement Azure Stack (ASDK), la région est définie sur local.
    resource-group kube-rg Entrez le nom d’un nouveau groupe de ressources ou sélectionnez un groupe de ressources existant. Le nom de la ressource doit être alphanumérique et en minuscules.
    api-model ./kubernetes-azurestack.json Chemin du fichier de configuration du cluster ou modèle d’API.
    output-directory kube-rg Entrez le nom du répertoire à contenir le fichier de sortie apimodel.json et d’autres fichiers générés.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Entrez le GUID du principal du service. ID de client identifié comme ID d’application lorsque votre administrateur Azure Stack Hub a créé le principal du service.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Entrez le secret du principal du service. Vous configurez la clé secrète client quand vous créez votre service.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Entrez votre ID d’abonnement. Vous devez fournir un abonnement pour le locataire. Le déploiement vers l’abonnement administratif n’est pas pris en charge. Pour plus d’informations, consultez S’abonner à une offre.

    Voici un exemple :

    Notes

    Pour AKSe version 0.75.3 et ultérieures, la commande permettant de déployer un cluster de moteur AKS est aks-engine-azurestack deploy.

    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. Si, pour une raison quelconque, l’exécution échoue après la création du répertoire de sortie, vous pouvez corriger le problème et réexécuter la commande. Si vous réexécutez le déploiement et que vous avez déjà utilisé le même répertoire de sortie, le moteur AKS retourne une erreur indiquant que le répertoire existe déjà. Vous pouvez remplacer le répertoire existant à l’aide de l’indicateur : --force-overwrite.

  3. Enregistrez la configuration de cluster du moteur AKS à un emplacement sécurisé et chiffré.

    Recherchez le fichier apimodel.json. Enregistrez-le à un emplacement sécurisé. Ce fichier sera utilisé comme entrée dans toutes vos autres opérations du moteur AKS.

    Le fichier apimodel.json généré contient le principal de service, le secret et la clé publique SSH que vous utilisez dans le modèle d’API d’entrée. Le fichier contient également toutes les autres métadonnées nécessaires au moteur AKS pour effectuer toutes les autres opérations. Si vous perdez le fichier, le moteur AKS ne pourra pas configurer le cluster.

    Les secrets sont non chiffrés. Conservez le fichier à un emplacement sécurisé et chiffré.

Vérifier votre cluster

Vérifiez votre cluster en vous connectant à kubectl, en obtenant les informations, puis en obtenant les états de vos nœuds.

  1. Obtenez le fichier kubeconfig pour vous connecter au plan de contrôle.

    • Si vous avez kubectl déjà installé, case activée le fichier du kubeconfig cluster nouvellement créé dans ce chemin /kubeconfig/kubeconfig.jsonde répertoire . Vous pouvez ajouter au /kubeconfig.json.kube répertoire pour accéder à votre nouveau cluster.
      Si vous n’avez pas installé kubectl, visitez Installer des outils pour installer l’outil en ligne de commande Kubernetes. Sinon, suivez les instructions ci-dessous pour accéder au cluster à partir de l’un des nœuds du plan de contrôle.
  2. Obtenez l’adresse IP publique de l’un de vos nœuds de plan de contrôle à l’aide du portail Azure Stack Hub.

  3. À partir d’une machine ayant accès à votre instance Azure Stack Hub, connectez-vous via SSH au nouveau nœud du plan de contrôle à l’aide d’un client tel que PuTTY ou MobaXterm.

  4. Pour le nom d’utilisateur SSH, utilisez « azureuser » et le fichier de clé privée de la paire de clés que vous avez fournie pour le déploiement du cluster.

  5. Vérifiez que les points de terminaison du cluster sont en cours d’exécution :

    kubectl cluster-info
    

    Le résultat doit être semblable à ce qui suit :

    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. Ensuite, vérifiez les états des nœuds :

    kubectl get nodes
    

    La sortie doit ressembler à ce qui suit :

    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
    

Résoudre les problèmes de déploiement de cluster

Lorsque vous rencontrez des erreurs lors du déploiement d’un cluster Kubernetes à l’aide du moteur AKS, vous pouvez case activée :

  1. Utilisez-vous les bonnes informations d’identification du principal du service (SPN) ?
  2. Le SPN joue-t-il un rôle de contributeur pour l’abonnement Azure Stack Hub ?
  3. Disposez-vous d’un quota suffisamment élevé dans votre plan Azure Stack Hub ?
  4. Un correctif ou une mise à niveau sont-ils appliqués à l’instance Azure Stack Hub ?

Pour plus d’informations, consultez l’article Résolution des problèmes dans le dépôt GitHub Azure/aks-engine-azurestack .

Effectuer la rotation du secret du principal du service

Après le déploiement du cluster Kubernetes avec le moteur AKS, le principal du service (SPN) est utilisé pour gérer les interactions avec Azure Resource Manager sur votre instance Azure Stack Hub. À un certain stade, le secret pour ce principal de service peut expirer. Si votre secret expire, vous pouvez actualiser les informations d’identification en :

  • Mettant à jour chaque nœud avec le nouveau secret du principal du service.
  • Ou en mettant à jour les informations d’identification du modèle d’API et en exécutant la mise à niveau.

Mettre à jour chaque nœud manuellement

  1. Obtenez un nouveau secret pour votre principal de service auprès de votre opérateur cloud. Pour obtenir des instructions pour Azure Stack Hub, consultez Utiliser une identité d’application pour accéder aux ressources Azure Stack Hub.
  2. Utilisez les nouvelles informations d’identification fournies par votre opérateur cloud pour mettre à jour /etc/kubernetes/azure.json sur chaque nœud. Après avoir effectué la mise à jour, redémarrez et kubelekube-controller-manager.

Mettre à jour le cluster avec la mise à jour du moteur AKS

Vous pouvez également remplacer les informations d’identification dans apimodel.json et exécuter la mise à niveau à l’aide du fichier .json mis à jour vers la même version de Kubernetes ou plus récente. Pour obtenir des instructions de mise à niveau du modèle, consultez Mettre à niveau un cluster Kubernetes sur Azure Stack Hub.

Étapes suivantes