Adaptación de las aplicaciones para su uso en clústeres de Kubernetes con sistema operativo mixto
Se aplica a: AKS en Azure Stack HCI 22H2, AKS en Windows Server
AKS habilitado por Arc permite ejecutar clústeres de Kubernetes con nodos de Linux y Windows, pero debe realizar pequeñas modificaciones en las aplicaciones para su uso en estos clústeres de sistema operativo mixto. En esta guía paso a paso se describe cómo asegurarse de que la aplicación se programa en el sistema operativo host adecuado mediante selectores de nodos o taints y tolerations.
En este artículo se presupone un conocimiento básico de los conceptos de Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes para AKS habilitado por Arc.
Selectores de nodos
Un selector de nodos es un campo simple en la especificación de pod YAML que restringe los pods para que solo se programe en nodos correctos que coincidan con el sistema operativo. En la especificación de pod YAML, especifique un nodeSelector
valor de Windows o Linux, como se muestra en los ejemplos siguientes:
kubernetes.io/os = Windows
o bien,
kubernetes.io/os = Linux
Para obtener más información sobre los selectores de nodos, consulte Selectores de nodos.
Intolerancias y tolerancias
Los taints y las toleraciones funcionan juntos para asegurarse de que los pods no están programados involuntariamente en los nodos. Un nodo se puede "manchar" para rechazar pods que no toleran explícitamente su taint a través de una "tolerancia" en la especificación de pod YAML.
Los nodos del sistema operativo Windows en AKS Arc se pueden manchar cuando se crean con New-AksHciNodePool o los comandos New-AksHciCluster. También puede usar estos comandos para aplicar una intolerancia a nodos del sistema operativo Linux. En el ejemplo siguiente se taints nodos de Windows.
Aplicación de taint al nuevo clúster
Si también crea un nuevo clúster, ejecute el siguiente comando para crear un grupo de nodos de Windows con un valor taint. Si tiene un clúster existente al que desea agregar un grupo de nodos con un taint, consulte el ejemplo siguiente, que usa el New-AksHciNodePool
comando .
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Adición de un grupo de nodos con estado a un clúster existente
Para agregar un grupo de nodos con una intolerancia aplicada a un clúster existente, ejecute el siguiente comando.
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Para comprobar que el grupo de nodos se haya implementado correctamente con la intolerancia, ejecute el siguiente comando.
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
Ejemplo:
Status : {Phase, Details}
ClusterName : mycluster
NodePoolName : taintnp
Version : v1.20.7-kvapkg.1
OsType : Windows
NodeCount : 0
VmSize : Standard_K8S3_v1
Phase : Deployed
Taints : {sku=Windows:NoSchedule}
Especificación de la tolerancia para pod
Puede especificar una tolerancia para un pod en la especificación de pod YAML. La siguiente tolerancia "coincide" con el taint creado por la kubectl
línea taint que se muestra en el ejemplo anterior. El resultado es que un pod con la toleración puede programar en los nodos de entendido.
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
Los pasos de esta sección funcionan bien si está en control de la especificación de pod que va a implementar. Sin embargo, en algunos casos, los usuarios tienen un gran número de implementaciones existentes para contenedores de Linux, así como un ecosistema de configuraciones comunes, como gráficos de Helm de la comunidad. No tendrá acceso a la especificación de pod a menos que quiera descargar y editar el gráfico.
Si implementa estos gráficos de Helm en un entorno de clúster mixto con nodos de trabajo de Linux y Windows, los pods de la aplicación producirán el error "ImagePullBackOff". Por ejemplo:
kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-deployment-558fc78868-795dp 0/1 ImagePullBackOff 0 6m24s
default nginx-deployment-6b474476c4-gpb77 0/1 ImagePullBackOff 0 11m
En este caso, puede usar taints para ayudar con esto. Los nodos de Windows Server se pueden manchar con el par node.kubernetes.io/os=windows:NoSchedule
clave-valor .
Para obtener más información sobre las taints y tolerations, vea Taints and Tolerations.
Pasos siguientes
En esta guía paso a paso, ha aprendido a agregar selectores de nodo o intolerancias y tolerancias a los clústeres de Kubernetes mediante kubectl. A continuación, puede realizar: