Créer des conteneurs Windows Server

S’applique à : Azure Stack HCI, version 23H2

Cet article explique comment utiliser Azure CLI pour déployer un pool de nœuds sur un cluster AKS existant qui exécute des conteneurs Windows Server. Il explique également comment déployer un exemple d’application ASP.NET dans un conteneur Windows Server sur le cluster.

Prérequis

Créez un cluster AKS en suivant les instructions de la procédure de création de clusters AKS.

Ajouter un pool de nœuds

Par défaut, un cluster Kubernetes 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.

Ajoutez un pool de nœuds avec des hôtes de conteneur Windows à l’aide de la az aksarc nodepool add commande avec le paramètre --os-type Windows. Si la référence SKU du système d’exploitation n’est pas spécifiée, le pool de nœuds est défini sur le système d’exploitation par défaut en fonction de la version Kubernetes du cluster. 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.

  • Pour utiliser Windows Server 2019, spécifiez les paramètres suivants :
    • os-type défini sur Windows.
    • os-sku défini sur Windows2019.
  • Pour utiliser Windows Server 2022, spécifiez les paramètres suivants :
    • os-type défini sur Windows.
    • os-sku défini sur Windows2022 (facultatif).

La commande suivante crée un pool de nœuds nommé $mynodepool et l’ajoute à $myAKSCluster un nœud Windows Server 2022 :

az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022

Se connecter au cluster AKS

Vous pouvez maintenant vous connecter à votre cluster Kubernetes en exécutant la az connectedk8s proxy commande à partir de votre ordinateur local. Veillez à vous connecter à Azure avant d’exécuter cette commande. Si vous avez plusieurs abonnements Azure, sélectionnez l’ID d’abonnement approprié à l’aide de la commande az account set.

Cette commande télécharge le kubeconfig de votre cluster Kubernetes sur votre ordinateur local et ouvre un canal de connexion proxy à votre cluster Kubernetes local. Le canal est ouvert tant que cette commande s’exécute. Laissez cette commande s’exécuter aussi longtemps que vous souhaitez accéder à votre cluster. Si la commande expire, fermez la fenêtre CLI, ouvrez-en une nouvelle, puis réexécutez la commande.

Vous devez disposer d’autorisations Contributeur sur le groupe de ressources qui héberge le cluster AKS pour exécuter la commande suivante :

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

Sortie attendue :

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.

Conservez cette session en cours d’exécution et connectez-vous à votre cluster Kubernetes à partir d’une autre invite de terminal/commande. Vérifiez que vous pouvez vous connecter à votre cluster Kubernetes en exécutant la commande kubectl get. Cette commande retourne une liste des nœuds de cluster :

kubectl get node -A --kubeconfig .\aks-arc-kube-config

L’exemple de sortie suivant montre le nœud créé aux étapes précédentes. Assurez-vous que l’état du nœud est Prêt :

NAME              STATUS   ROLES           AGE     VERSION
moc-lesdc78871d   Ready    control-plane   6d8h    v1.26.3
moc-lupeeyd0f8c   Ready    <none>          6d8h    v1.26.3
moc-ww2c8d5ranw   Ready    <none>          7m18s   v1.26.3

Déployer l’application

Un fichier manifeste Kubernetes définit un état souhaité d’un cluster, notamment les images conteneur à exécuter.

Vous pouvez utiliser un manifeste YAML pour créer tous les objets nécessaires pour exécuter l’exemple d’application ASP.NET dans un conteneur Windows Server. Ce manifeste inclut un déploiement Kubernetes pour l’exemple d’application ASP.NET et un service Kubernetes 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œuds pour vous assurer que les pods de votre exemple d’application ASP.NET sont planifiés sur un nœud capable d’exécuter des conteneurs Windows Server.

  1. Créez un fichier nommé sample.yaml et copiez-le dans 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 répartition des fichiers manifeste YAML, consultez Déploiements et manifestes YAML.

  2. Déployez l’application à l’aide de la commande kubectl apply et spécifiez le nom de votre manifeste YAML :

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

L’exemple de sortie suivant montre que le déploiement et le service ont été créés avec succè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. Surveillez la progression avec la commande kubectl get service et l’argument --watch.

    kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
    

    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
    

    Lorsque l’adresse EXTERNAL-IP passe d’une adresse IP en attente à une adresse IP, 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
    
  2. Consultez l’exemple d’application en action en ouvrant un navigateur web à l’adresse IP externe et au port de l’exemple de service.

    Capture d’écran montrant ASP.NET exemple d’application.

    Si vous recevez un délai d’expiration de connexion lors de la tentative de chargement de la page, vous devez vérifier que l’exemple d’application est prêt à l’aide de la kubectl get pods --watch commande. Il peut arriver que le conteneur Windows ne soit pas démarré au moment où votre adresse IP externe est disponible.

Supprimer un pool de nœuds

Supprimez le pool de nœuds à l’aide de la az akshybrid nodepool delete commande :

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

Étapes suivantes

Vue d’ensemble d’AKS activée par Arc