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 enWindows
.os-sku
se establece enWindows2019
.
- Para usar Windows Server 2022, especifique los parámetros siguientes:
os-type
se establece enWindows
.os-sku
establezca enWindows2022
(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.
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.
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.
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
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 .
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