Gerenciar pods em clusters Kubernetes com vários pools
Os desenvolvedores da Contoso estão trabalhando na transformação de aplicativos Windows e Linux desenvolvidos internamente em imagens baseadas no Docker implantáveis usando gráficos Helm. Em seu planejamento para implementar clusters Kubernetes no Azure Stack HCI, você precisa garantir suporte para ambas as plataformas de sistema operacional.
O que são pools de nós em clusters do Kubernetes no Azure Stack HCI
O AKS no Azure Stack HCI dá suporte a vários pools de nós no mesmo cluster do Kubernetes. Cada pool consiste em VMs configuradas de forma idêntica, de acordo com as configurações especificadas ao provisionar esse pool.
Ao agrupar nós em pools separados, você pode direcionar implantações de pod para o conjunto adequado de VMs. Por exemplo, você pode ter cargas de trabalho em contêineres que são suportadas apenas pelo sistema operacional Windows ou exigem hardware especializado, como unidades de processador gráfico.
Controlar a implantação de pods em pools de nós em clusters Kubernetes no Azure Stack HCI
Por padrão, o Kubernetes agenda o provisionamento de cargas de trabalho em contêineres em qualquer nó de trabalho disponível de uma maneira que otimiza a utilização de recursos. Para alterar esse comportamento, você pode aplicar restrições na escolha de nós com base em critérios personalizados que você especificar. Essas restrições incluem seletores de nós e manchas e tolerâncias.
Seletores de nós
O Seletor de Nó é uma configuração dentro da definição baseada em YAML de um pod ou de uma implantação que identifica os nós de destino nos quais o pod correspondente pode ser agendado. Se sua intenção é designar nós de destino com base em seu sistema operacional, você pode confiar nos rótulos internos atribuídos automaticamente aos nós pelo Kubernetes. Dependendo do sistema operacional pretendido, o seletor de nó assumirá a forma kubernetes.io/os = Windows
ou kubernetes.io/os = Linux
. Por exemplo, o seguinte manifesto de pod baseado em YAML designa nós Linux como destinos de implantação:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
kubernetes.io/os = Linux
Máculas e tolerâncias
Manchas e tolerâncias fornecem uma abordagem alternativa para controlar a colocação de vagens. Com essa abordagem, as manchas fazem parte da configuração do nó e as tolerâncias fazem parte das especificações do pod. Ao manchar um nó, você efetivamente impede que ele hospede qualquer pod sem a tolerância específica de mancha correspondente.
Por exemplo, no AKS no Azure Stack HCI, se você quiser permitir que um pod seja agendado em um nó do Windows, adicione a seguinte tolerância à sua definição:
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
Além disso, você precisaria adicionar a mancha node.kubernetes.io/os=Windows:NoSchedule
a cada um dos nós do Windows que deseja disponibilizar exclusivamente para implantação de pods com a tolerância correspondente. Para fazer isso, você pode usar o utilitário de linha de comando kubectl e, em seguida, depois de se conectar ao cluster de destino, execute o seguinte comando para cada um dos nós no escopo (onde o espaço reservado <node_name>
designa o nome do nó de destino):
kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule
Nota
Os seletores de nós impõem posicionamentos de pods em um conjunto específico de nós. As tolerâncias permitem que os pods sejam executados em um conjunto designado de nós contaminados, mas não impedem sua colocação em nós sem manchas.