Creación de contenedores de Windows Server

Se aplica a: Azure Stack HCI, versión 23H2

En este artículo se describe cómo usar la CLI de Azure para implementar un grupo de nodos en un clúster de AKS existente que ejecuta contenedores de Windows Server. También se describe cómo implementar una aplicación de ejemplo de ASP.NET en un contenedor de Windows Server en el clúster.

Requisitos previos

Cree un clúster de AKS siguiendo las instrucciones de Creación de clústeres de AKS.

Adición de un grupo de nodos

De forma predeterminada, se crea un clúster de Kubernetes con un grupo de nodos que puede ejecutar contenedores de Linux. Debe agregar otro grupo de nodos que pueda ejecutar contenedores de Windows Server en combinación con el grupo de nodos de Linux.

Agregue un grupo de nodos con hosts de contenedor de Windows mediante el az aksarc nodepool add comando con el parámetro --os-type Windows. Si no se especifica la SKU del sistema operativo, el grupo de nodos se establece en el sistema operativo predeterminado basado en la versión de Kubernetes del clúster. Windows Server 2022 es el sistema operativo predeterminado para Kubernetes versiones 1.25.0 y posteriores. Windows Server 2019 es el sistema operativo predeterminado para versiones anteriores.

  • Para usar Windows Server 2019, especifique los parámetros siguientes:
    • os-type se establece en Windows.
    • os-sku se establece en Windows2019.
  • Para usar Windows Server 2022, especifique los parámetros siguientes:
    • os-type se establece en Windows.
    • os-sku establezca en Windows2022 (opcional).

El comando siguiente crea un nuevo grupo de nodos denominado $mynodepool y lo agrega a $myAKSCluster con un nodo de Windows Server 2022:

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

Conexión al clúster de AKS

Ahora puede conectarse al clúster de Kubernetes ejecutando el comando desde la az connectedk8s proxy máquina local. Asegúrese de iniciar sesión en Azure antes de ejecutar este comando. Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado mediante el comando az account set.

Este comando descarga el kubeconfig del clúster de Kubernetes en el equipo local y abre un canal de conexión de proxy al clúster de Kubernetes local. El canal está abierto mientras se ejecute este comando. No puede acceder al clúster si este comando no está en ejecución. Si el comando agota el tiempo de espera, cierre la ventana de la CLI, abra una nueva y vuelva a ejecutar el comando.

Debe tener permisos de colaborador en el grupo de recursos que hospeda el clúster de AKS para ejecutar el siguiente comando correctamente:

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

Resultado esperado:

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.

Mantenga esta sesión en ejecución y conéctese al clúster de Kubernetes desde otro símbolo del sistema o terminal. Compruebe que puede conectarse al clúster de Kubernetes mediante la ejecución del comando kubectl get. Este comando devuelve una lista de los nodos del clúster:

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

En la salida de ejemplo siguiente se muestra el nodo creado en los pasos anteriores. Asegúrese de que el estado del nodo es Listo:

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

Implementación de la aplicación

Un archivo de manifiesto de Kubernetes define el estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar.

Puede usar un manifiesto YAML para crear todos los objetos necesarios para ejecutar la aplicación de ejemplo ASP.NET en un contenedor de Windows Server. Este manifiesto incluye una implementación de Kubernetes para la aplicación de ejemplo ASP.NET y un servicio de Kubernetes para acceder a la aplicación desde Internet.

La aplicación de ejemplo ASP.NET se proporciona como parte de los ejemplos de .NET Framework y se ejecuta en un contenedor de Windows Server. AKS requiere contenedores de Windows Server que se basen en las imágenes de Windows Server 2019 u otra versión posterior. El archivo de manifiesto de Kubernetes también debe definir un selector de nodos para asegurarse de que los pods de la aplicación de ejemplo de ASP.NET están programados en un nodo que pueda ejecutar contenedores de Windows Server.

  1. Cree un archivo denominado sample.yaml y copie en la siguiente definición de YAML:

    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
    

    Para ver un desglose de los archivos de manifiesto de YAML, consulte Implementaciones y manifiestos de YAML.

  2. Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML:

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

En la salida de ejemplo siguiente se muestra que la implementación y el servicio se crearon correctamente:

deployment.apps/sample created
service/sample created

Prueba de la aplicación

Cuando se ejecuta la aplicación, un servicio de Kubernetes expone el front-end de la aplicación a Internet. Este proceso puede tardar unos minutos en completarse. En ocasiones, el servicio puede tardar más de unos minutos en aprovisionarse. Espere hasta 10 minutos para que se produzca el aprovisionamiento.

  1. Para supervisar el progreso, utilice el comando kubectl get service con el argumento --watch.

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

    Inicialmente, la salida muestra el parámetro EXTERNAL-IP del servicio de ejemplo como pendiente:

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

    Cuando la dirección EXTERNAL-IP cambia de pendiente a una dirección IP, use CTRL-C para detener el proceso de inspección kubectl. En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:

    sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
    
  2. Para ver la aplicación de ejemplo en acción, abra un explorador web en la dirección IP externa y el puerto del servicio de ejemplo .

    Captura de pantalla que muestra ASP.NET aplicación de ejemplo.

    Si recibe un tiempo de espera de conexión al intentar cargar la página, debe comprobar que la aplicación de ejemplo está lista con el kubectl get pods --watch comando . A veces, el contenedor Windows no se inicia en el momento en que la dirección IP externa esté disponible.

Eliminación del grupo de nodos

Elimine el grupo de nodos mediante el az akshybrid nodepool delete comando :

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

Pasos siguientes

Introducción a AKS habilitado por Arc