Compartir a través de


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:NoScheduleclave-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: