Implementación de un contenedor de Windows Server en un clúster de Azure Kubernetes Service (AKS) mediante la CLI de Azure
Azure Kubernetes Service (AKS) es un servicio de Kubernetes administrado que le permite implementar y administrar clústeres rápidamente. En este artículo, usará la CLI de Azure para implementar un clúster de AKS que ejecute contenedores de Windows Server. También implementará una aplicación de ejemplo de ASP.NET en un contenedor de Windows Server en el clúster.
Nota:
Para empezar a aprovisionar rápidamente un clúster de AKS, en este artículo se incluyen los pasos para implementar un clúster con la configuración predeterminada solo con fines de evaluación. Antes de implementar un clúster listo para producción, se recomienda familiarizarse con nuestra arquitectura de referencia de línea de base para considerar cómo se alinea con sus requisitos empresariales.
Antes de empezar
En esta guía rápida se presupone un conocimiento básico de los conceptos de Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes de Azure Kubernetes Service (AKS).
- Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- En este artículo se necesita la versión 2.0.64 de la CLI de Azure, o cualquier versión posterior. Si usa Azure Cloud Shell, ya está instalada allí la versión más reciente.
- Asegúrese de que la identidad que usará para crear el clúster tenga los permisos mínimos adecuados. Para más información sobre el acceso y la identidad en AKS, consulte Opciones de acceso e identidad en Azure Kubernetes Service (AKS).
- Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado en el que se deben facturar los recursos con el comando az account set. Para más información, consulte Cómo administrar suscripciones de Azure: CLI de Azure.
Crear un grupo de recursos
Un grupo de recursos de Azure es un grupo lógico en el que se implementan y administran recursos de Azure. Cuando se crea un grupo de recursos, se le pide que especifique una ubicación. Esta ubicación es donde se almacenan los metadatos del grupo de recursos y el lugar en el que los recursos se ejecutan en Azure si no se especifica otra región al crearlos.
Cree un grupo de recursos con el comando az group create. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación eastus. Utilice este comando y otros comandos de este artículo en un shell de BASH:
az group create --name myResourceGroup --location eastus
En la salida del siguiente ejemplo se muestra que el grupo de recursos se ha creado correctamente:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": null }
Creación de un clúster de AKS
En esta sección, se crea un clúster de AKS con la siguiente configuración:
- El clúster se configura con dos nodos para asegurarse de que funciona de forma confiable. Un nodo es una máquina virtual de Azure que ejecuta los componentes de nodo de Kubernetes y el entorno de ejecución del contenedor.
- Los parámetros
--windows-admin-password
y--windows-admin-username
establecen las credenciales de administrador para los nodos de Windows Server del clúster y deben satisfacer los requisitos de contraseña de Windows Server. - El grupo de nodos usa
VirtualMachineScaleSets
.
Para crear el clúster de AKS con la CLI de Azure, siga estos pasos:
Cree un nombre de usuario para usarlo como credenciales de administrador para los nodos de Windows Server en el clúster. Los comandos siguientes le solicitan un nombre de usuario y lo establecen en WINDOWS_USERNAME para su uso en un comando posterior.
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
Cree una contraseña para el nombre de usuario de administrador que creó en el paso anterior. La contraseña debe tener un mínimo de 14 caracteres y cumplir los requisitos de complejidad de contraseña de Windows Server.
echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
Utilice el comando az aks create para crear un clúster y especifique los parámetros
--windows-admin-username
y--windows-admin-password
. El siguiente comando de ejemplo crea un clúster con el valor de WINDOWS_USERNAME establecido en el comando anterior. También, puede proporcionar un nombre de usuario diferente directamente en el parámetro, en lugar de usar WINDOWS_USERNAME.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 2 \ --enable-addons monitoring \ --generate-ssh-keys \ --windows-admin-username $WINDOWS_USERNAME \ --windows-admin-password $WINDOWS_PASSWORD \ --vm-set-type VirtualMachineScaleSets \ --network-plugin azure
Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster. En ocasiones, el clúster puede tardar más de unos minutos en aprovisionarse. Espere hasta 10 minutos para que se produzca el aprovisionamiento.
Si recibe un error de validación de contraseña y la contraseña que estableció cumple los requisitos de longitud y complejidad, pruebe a crear el grupo de recursos en otra región. A continuación, intente crear el clúster con el nuevo grupo de recursos.
Si no especifica un nombre de usuario y una contraseña de administrador al crear el grupo de nodos, el nombre de usuario se establece en azureuser y la contraseña se establece en un valor aleatorio. Para más información, consulte ¿Cómo cambio la contraseña del administrador de los nodos de Windows Server en el clúster?
El nombre de usuario del administrador no se puede cambiar, pero la contraseña de administrador que el clúster de AKS usa para los nodos de Windows Server mediante
az aks update
sí que se puede cambiar. Para obtener más información, consulte Preguntas más frecuentes sobre un grupo de nodos de Windows Server.Para ejecutar un clúster de AKS que admita grupos de nodos para contenedores de Windows Server, el clúster debe utilizar una directiva de red que use el complemento de red de Azure CNI (avanzado). El parámetro
--network-plugin azure
especifica Azure CNI.
Adición de un grupo de nodos
De forma predeterminada, se crea un clúster de AKS 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.
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. Si no especifica una SKU de sistema operativo determinada, Azure crea el grupo de nodos con la SKU predeterminada de la versión de Kubernetes que usa el clúster.
- Grupo de nodos de Windows (SKU predeterminada)
- Grupo de nodos de Windows Server 2022
- Grupo de nodos de Windows Server 2019
Para usar la SKU predeterminada del sistema operativo, cree el grupo de nodos sin especificar ninguna SKU de sistema operativo. El grupo de nodos está configurado para el sistema operativo predeterminado en función de la versión de Kubernetes del clúster.
Agregue un grupo de nodos de Windows con el comando az aks nodepool add
. El siguiente comando crea un nuevo grupo de nodos denominado npwin y lo agrega a myAKSCluster. El comando también usa la subred predeterminada en la red virtual predeterminada que se crea al ejecutar az aks create
. No se especificó ninguna SKU del sistema operativo, por lo que el grupo de nodos se establece en el sistema operativo predeterminado en función de la versión de Kubernetes del clúster.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwin \
--node-count 1
Conectarse al clúster
Para administrar un clúster de Kubernetes, usará kubectl, el cliente de línea de comandos de Kubernetes. Si usa Azure Cloud Shell, kubectl
ya está instalado. Si desea instalar y ejecutar kubectl
localmente, llame al comando az aks install-cli.
Para configurar
kubectl
para conectarse a su clúster de Kubernetes, use el comando az aks get-credentials. Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Compruebe la conexión al clúster, para lo que debe usar el comando kubectl get, que devuelve una lista de los nodos del clúster.
kubectl get nodes -o wide
La siguiente salida de ejemplo muestra todos los nodos del clúster. Asegúrese de que el estado de todos los nodos sea Listo:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME aks-nodepool1-20786768-vmss000000 Ready agent 22h v1.27.7 10.224.0.4 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aks-nodepool1-20786768-vmss000001 Ready agent 22h v1.27.7 10.224.0.33 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aksnpwin000000 Ready agent 20h v1.27.7 10.224.0.62 <none> Windows Server 2022 Datacenter 10.0.20348.2159 containerd://1.6.21+azure
Nota
El entorno de ejecución de contenedor para cada grupo de nodos se muestra en CONTAINER-RUNTIME. Los valores del runtime del contenedor comienzan por
containerd://
, lo que significa que usancontainerd
para el runtime del contenedor.
Implementación de la aplicación
Un archivo de manifiesto de Kubernetes define un estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar. En este artículo, usará un manifiesto para crear todos los objetos necesarios para ejecutar la aplicación de ejemplo de ASP.NET en un contenedor de Windows Server. Este manifiesto incluye una implementación de Kubernetes para la aplicación de ejemplo de ASP.NET y un servicio de Kubernetes externo para acceder a la aplicación desde Internet.
La aplicación de ejemplo de 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 que le indique al clúster de AKS que ejecute el pod de la aplicación de ejemplo de ASP.NET en un nodo que pueda ejecutar contenedores de Windows Server.
Cree un archivo denominado
sample.yaml
y cópielo en la siguiente definición de código 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 obtener un desglose de los archivos de manifiesto de YAML, consulte Implementaciones y manifiestos de YAML.
Si crea y guarda el archivo YAML localmente, para cargar el archivo de manifiesto en el directorio predeterminado de CloudShell, seleccione el botón Cargar y descargar archivos y elija el archivo en el sistema de archivos local.
Implemente la aplicación mediante el comando kubectl apply y especifique el nombre del manifiesto de YAML:
kubectl apply -f sample.yaml
En la salida de ejemplo siguiente se muestran la implementación y el servicio que 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.
Compruebe el estado de los pods implementados con el comando kubectl get pods. Haga que todos los pods tengan el estado
Running
antes de continuar.kubectl get pods
Para supervisar el progreso, utilice el comando kubectl get service con el argumento
--watch
.kubectl get service sample --watch
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 cambie de pendiente a una dirección IP pública real, use
CTRL-C
para detener el proceso de inspección dekubectl
. 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 del servicio.
Eliminar recursos
Si no planea realizar el tutorial de AKS, debe eliminar el clúster para evitar incurrir en cargos de Azure.
Elimine el grupo de recursos, el servicio de contenedor y todos los recursos relacionados, para lo que debe usar el comando az group delete.
az group delete --name myResourceGroup --yes --no-wait
Nota:
El clúster de AKS se creó con una identidad administrada asignada por el sistema (la opción de identidad predeterminada que se usa en este inicio rápido). La plataforma de Azure administra esta identidad, por lo que no requiere eliminación.
Pasos siguientes
En este inicio rápido, ha implementado un clúster de Kubernetes y, después, una aplicación de ejemplo de ASP.NET en un contenedor de Windows Server de este. Esta aplicación de ejemplo es solo para fines de demostración y no representa todos los procedimientos recomendados para las aplicaciones de Kubernetes. Para instrucciones sobre cómo crear soluciones completas con AKS para producción, consulte Guía de soluciones de AKS.
Para más información sobre AKS y obtener un ejemplo completo desde el código hasta la implementación, continúe con el tutorial del clúster de Kubernetes.
Azure Kubernetes Service