Atribuindo Pods aos nós usando afinidade de nó
Esta página mostra como atribuir um Pod kubernetes a um nó particular em um cluster Kubernetes utilizando afinidade de nó.
Antes de você começar
Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:
O seu servidor Kubernetes deve estar numa versão igual ou superior a v1.10. Para verificar a versão, digitekubectl version
.Adicione um label a um nó
Liste os nós em seu cluster, juntamente com seus labels:
kubectl get nodes --show-labels
A saída é semelhante a esta:
NAME STATUS ROLES AGE VERSION LABELS worker0 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker0 worker1 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker1 worker2 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker2
Escolha um de seus nós e adicione um label a ele:
kubectl label nodes <your-node-name> disktype=ssd
onde
<your-node-name>
é o nome do seu nó escolhido.Verifique se seu nó escolhido tem o label
disktype=ssd
:kubectl get nodes --show-labels
A saída é semelhante a esta:
NAME STATUS ROLES AGE VERSION LABELS worker0 Ready <none> 1d v1.13.0 ...,disktype=ssd,kubernetes.io/hostname=worker0 worker1 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker1 worker2 Ready <none> 1d v1.13.0 ...,kubernetes.io/hostname=worker2
Na saída anterior, você pode ver que o nó
worker0
tem o labeldisktype=ssd
.
Alocar um Pod usando afinidade de nó obrigatória
Este manifesto descreve um Pod que possui uma afinidade de nó requiredDuringSchedulingIgnoredDuringExecution
com o label disktype: ssd
.
Isso significa que o Pod será alocado apenas em um nó que tenha o label disktype=ssd
.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
Aplique o manifesto para criar um Pod que será alocado no nó escolhido:
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-required-affinity.yaml
Verifique se o Pod está executando no nó escolhido:
kubectl get pods --output=wide
A saída é semelhante a esta:
NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0
Alocar um Pod usando afinidade de nó preferencial
Este manifesto descreve um Pod que possui uma afinidade de nó requiredDuringSchedulingIgnoredDuringExecution
com o label disktype: ssd
.
Isso significa que o Pod será alocado de preferência em um nó com o label disktype=ssd
.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
Aplique o manifesto para criar um Pod que será alocado no nó escolhido:
kubectl apply -f https://k8s.io/examples/pods/pod-nginx-preferred-affinity.yaml
Verifique se o Pod está executando no nó escolhido:
kubectl get pods --output=wide
A saída é semelhante a esta:
NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 13s 10.200.0.4 worker0
Próximos passos
Saiba mais sobre Afinidade de nó.