Déployer un conteneur Windows Server sur un cluster Azure Kubernetes Service (AKS) à l’aide de PowerShell

AKS (Azure Kubernetes Service) est un service Kubernetes managé qui vous permet de déployer et de gérer rapidement des clusters. Dans cet article, vous allez utiliser Azure PowerShell pour déployer un cluster AKS qui exécute des conteneurs Windows Server. Vous déployez également un exemple d’application ASP.NET dans un conteneur Windows Server vers le cluster.

Remarque

Dans cet article, vous trouverez les étapes à suivre pour déployer rapidement un cluster AKS. Les paramètres par défaut sont utilisés à des fins d'évaluation uniquement. Avant de déployer un cluster prêt pour la production, nous vous recommandons de vous familiariser avec notre architecture de référence de base pour prendre en compte la façon dont elle s’aligne sur vos besoins métier.

Avant de commencer

Ce guide de démarrage rapide suppose une compréhension élémentaire des concepts liés à Kubernetes. Pour plus d’informations, consultez Concepts de base de Kubernetes pour AKS (Azure Kubernetes Service).

Créer un groupe de ressources

Un groupe de ressources Azure est un groupe logique dans lequel des ressources Azure sont déployées et gérées. Lorsque vous créez un groupe de ressources, vous devez spécifier un emplacement. Il s’agit de l’emplacement de stockage des métadonnées de groupe de ressources et c’est là que vos ressources s’exécutent dans Azure si vous ne spécifiez pas une autre région pendant la création de ressources.

Pour créer un groupe de ressources, utilisez la cmdlet New-AzResourceGroup. L’exemple suivant crée un groupe de ressources nommé myResourceGroup dans la région USA Est.

New-AzResourceGroup -Name myResourceGroup -Location eastus

L’exemple de sortie suivant montre que le groupe de ressources a été créé correctement :

ResourceGroupName : myResourceGroup
Location          : eastus
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup

Créer un cluster AKS

Dans cette section, nous allons créer un cluster AKS avec la configuration suivante :

  • Le cluster est configuré avec deux nœuds pour garantir un fonctionnement fiable. Un nœud est une machine virtuelle (VM) Azure qui exécute les composants de nœud Kubernetes et le runtime de conteneur.
  • Les paramètres -WindowsProfileAdminUserName et -WindowsProfileAdminUserPassword définissent les informations d’identification d’administrateur pour tous les nœuds Windows Server du cluster et doivent répondre aux exigences de complexité des mots de passe de Windows Server.
  • Le pool de nœuds utilise VirtualMachineScaleSets.

Pour créer le cluster AKS avec Azure PowerShell, procédez comme suit :

  1. Créez les informations d’identification d’administrateur pour vos conteneurs Windows Server à l’aide de la commande suivante. Cette commande vous invite à entrer WindowsProfileAdminUserName et WindowsProfileAdminUserPassword. Le mot de passe doit comporter au moins 14 caractères et répondre aux exigences de complexité de mot de passe Windows Server.

    $AdminCreds = Get-Credential `
        -Message 'Please create the administrator credentials for your Windows Server containers'
    
  2. Créez votre cluster à l’aide de la cmdlet New-AzAksCluster et spécifiez les paramètres WindowsProfileAdminUserPassword et WindowsProfileAdminUserName.

    New-AzAksCluster -ResourceGroupName myResourceGroup `
        -Name myAKSCluster `
        -NodeCount 2 `
        -NetworkPlugin azure `
        -NodeVmSetType VirtualMachineScaleSets `
        -WindowsProfileAdminUserName $AdminCreds.UserName `
        -WindowsProfileAdminUserPassword $secureString `
        -GenerateSshKey
    

    Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster. Parfois, le provisionnement du cluster peut prendre un peu de temps. Prévoyez 10 minutes tout au plus.

    Si vous obtenez une erreur de validation de mot de passe et que le mot de passe que vous définissez répond aux exigences de longueur et de complexité, essayez de créer votre groupe de ressources dans une autre région. Puis essayez de créer le cluster avec le nouveau groupe de ressources.

    Si vous ne spécifiez pas de nom d’utilisateur et de mot de passe Administrateur lorsque vous créez le pool de nœuds, le nom d’utilisateur est défini sur azureuser et le mot de passe sur une valeur aléatoire. Pour plus d’informations, consultez Comment faire pour modifier le mot de passe Administrateur des nœuds Windows Server sur mon cluster ?.

    Le nom d’utilisateur Administrateur ne peut pas être modifié, mais vous pouvez modifier le mot de passe Administrateur utilisé par votre cluster AKS pour les nœuds Windows Server en utilisant la commande az aks update. Pour plus d’informations, consultez FAQ sur les pools de nœuds Windows Server.

    Pour pouvoir exécuter un cluster AKS qui prend en charge des pools de nœuds pour des conteneurs Windows Server, votre cluster doit appliquer une stratégie de réseau qui utilise un plug-in réseau [Azure CNI (avancé)][azure-cni]. Le paramètre -NetworkPlugin azure spécifie Azure CNI.

Ajouter un pool de nœuds

Par défaut, un cluster AKS est créé avec un pool de nœuds qui peut exécuter des conteneurs Linux. Vous devez ajouter un autre pool de nœuds capable d’exécuter des conteneurs Windows Server en même temps que le pool de nœuds Linux.

Windows Server 2022 est le système d’exploitation par défaut pour Kubernetes 1.25.0 et les versions ultérieures. Windows Server 2019 est le système d’exploitation par défaut pour les versions antérieures. Si vous ne spécifiez pas de référence SKU de système d’exploitation particulière, Azure crée le nouveau pool de nœuds avec la référence SKU par défaut pour la version de Kubernetes utilisée par le cluster.

Pour utiliser la référence SKU de système d’exploitation par défaut, créez le pool de nœuds sans spécifier de référence SKU de système d’exploitation. Le pool de nœuds est configuré pour le système d’exploitation par défaut en fonction de la version Kubernetes du cluster.

Ajoutez un pool de nœuds Windows Server au moyen de la cmdlet New-AzAksNodePool. La commande suivante crée un pool de nœuds nommé npwin et l’ajoute à myAKSCluster. La commande utilise également le sous-réseau par défaut dans le réseau virtuel par défaut créé lors de l’exécution de New-AzAksCluster :

New-AzAksNodePool -ResourceGroupName myResourceGroup `
    -ClusterName myAKSCluster `
    -VmSetType VirtualMachineScaleSets `
    -OsType Windows `
    -Name npwin

Se connecter au cluster

Vous devez utiliser kubectl, le client en ligne de commande Kubernetes, pour gérer vos clusters Kubernetes. Si vous utilisez Azure Cloud Shell, kubectl est déjà installé. Si vous souhaitez installer kubectl localement, vous pouvez utiliser la cmdlet Install-AzAzAksCliTool.

  1. Configurez kubectl afin de vous connecter à votre cluster Kubernetes avec la cmdlet Import-AzAksCredential. Cette commande télécharge les informations d’identification et configure l’interface CLI Kubernetes pour les utiliser.

    Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
    
  2. Vérifiez la connexion à votre cluster à l’aide de la commande kubectl get, qui retourne la liste des nœuds du cluster.

    kubectl get nodes
    

    L’exemple de sortie suivant montre tous les nœuds du cluster. Vérifiez que l’état de tous les nœuds est sur Prêt :

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-20786768-vmss000000   Ready    agent   22h   v1.27.7
    aks-nodepool1-20786768-vmss000001   Ready    agent   22h   v1.27.7
    aksnpwin000000                      Ready    agent   21h   v1.27.7
    

Déployer l’application

Un fichier manifeste Kubernetes définit un état souhaité pour le cluster, notamment les images conteneur à exécuter. Dans cet article, vous allez utiliser un manifeste pour créer tous les objets nécessaires à l’exécution de l’exemple d’application ASP.NET dans un conteneur Windows Server. Ce manifeste comprend un déploiement Kubernetes pour l’exemple d’application ASP.NET et un service Kubernetes externe pour accéder à l’application à partir d’Internet.

L’exemple d’application ASP.NET est fourni dans le cadre des Exemples .NET Framework et s’exécute dans un conteneur Windows Server. AKS exige que les conteneurs Windows Server soient basés sur des images de Windows Server 2019 ou versions supérieures. Le fichier manifeste Kubernetes doit également définir un sélecteur de nœud pour indiquer à votre cluster AKS d’exécuter le pod de votre exemple d’application ASP.NET sur un nœud qui peut exécuter des conteneurs Windows Server.

  1. Créez un fichier nommé sample.yaml, et copiez-y la définition YAML suivante.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      replicas: 1
      template:
        metadata:
          name: sample
          labels:
            app: sample
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
          - name: sample
            image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
            resources:
              limits:
                cpu: 1
                memory: 800M
            ports:
              - containerPort: 80
      selector:
        matchLabels:
          app: sample
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sample
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 80
      selector:
        app: sample
    

    Pour obtenir une décomposition des fichiers manifeste YAML, consultez Déploiements et manifestes YAML.

    Si vous créez et que vous enregistrez le fichier YAML localement, vous pouvez charger le fichier manifeste dans votre répertoire par défaut dans CloudShell en sélectionnant le bouton Charger/télécharger des fichiers, puis en sélectionnant le fichier dans votre système de fichiers local.

  2. Déployez l’application en tirant parti de la commande kubectl apply et spécifiez le nom de votre manifeste YAML.

    kubectl apply -f sample.yaml
    

    L’exemple de sortie suivant montre que le déploiement et le service ont été correctement créés :

    deployment.apps/sample created
    service/sample created
    

Test de l’application

Quand l’application s’exécute, un service Kubernetes expose le front-end de l’application sur Internet. L’exécution de ce processus peut prendre plusieurs minutes. Parfois, le provisionnement du service peut prendre plus de quelques minutes. Prévoyez 10 minutes tout au plus.

  1. Vérifiez l’état des pods déployés à l’aide de la commande kubectl get pods. Assurez-vous que tous les pods sont Running avant de continuer.

    kubectl get pods
    
  2. Surveillez la progression avec la commande kubectl get service et l’argument --watch.

    kubectl get service sample --watch
    

    Dans un premier temps, la valeur pending (en attente) s’affiche pour EXTERNAL-IP dans la sortie de l’exemple de service :

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

    Quand l’adresse EXTERNAL-IP passe de l’état pending à une adresse IP publique réelle, utilisez CTRL-C pour arrêter le processus de surveillance kubectl. L’exemple de sortie suivant montre une adresse IP publique valide affectée au service :

    sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m
    
  3. Pour découvrir l’exemple d’application en action, accédez à l’adresse IP externe de votre service dans un navigateur web.

    Capture d’écran de la navigation vers l’exemple d’application ASP.NET.

Supprimer des ressources

Si vous ne prévoyez pas de terminer le Didacticiel AKS, alors supprimez votre cluster pour éviter de vous exposer à des frais Azure. Appelez la cmdlet Remove-AzResourceGroup pour supprimer le groupe de ressources, le service conteneur et toutes les ressources associées.

Remove-AzResourceGroup -Name myResourceGroup

Remarque

Le cluster AKS a été créé avec une identité managée affectée par le système (option d’identité par défaut dans ce guide de démarrage rapide). Cette identité étant gérée par la plateforme Azure, il n’est pas nécessaire de la supprimer.

Étapes suivantes

Dans ce démarrage rapide, vous avez déployé un cluster Kubernetes puis déployé un exemple d’application ASP.NET dans un conteneur Windows Server vers ce cluster. Cet exemple d’application est fourni à des fins de version de démonstration uniquement et ne représente pas toutes les meilleures pratiques pour les applications Kubernetes. Pour obtenir des conseils sur la création de solutions complètes avec AKS pour la production, consultez Conseils pour les solutions AKS.

Pour en savoir plus sur AKS et étudier un exemple complet code-à-déploiement, passez au didacticiel sur le cluster Kubernetes.