Em clusters Kubernetes autogerenciados que utilizam nós reais e virtuais (VNodes), você pode agendar pods em um VNode para executá-los como elastic container instances (ECIs). Este tópico aborda dois métodos de agendamento manual: configure nodeSelector e tolerations, ou especifique nodeName diretamente.
Ambos os métodos exigem a modificação individual dos recursos de workload. Para ambientes de produção, utilize o componente eci-profile . Ele emprega um seletor de rótulos para direcionar automaticamente os pods correspondentes aos VNodes em todas as workloads, sem necessidade de alterações individuais. Consulte Usar eci-profile para agendar pods em um VNode .
Escolha um método de agendamento
|
Método |
Funcionamento |
Cenário recomendado |
|
|
Associa pods aos VNodes por rótulo e tolera o taint do VNode |
Agendar um grupo de pods em qualquer VNode disponível (recomendado para a maioria dos casos) |
|
|
Fixa pods em um VNode específico pelo nome |
Testes ou depuração em um VNode conhecido |
Método 1: Configure nodeSelector e tolerations
Por padrão, os VNodes possuem o seguinte rótulo e taint:
labels:
k8s.aliyun.com/vnode: "true"
taints:
- effect: NoSchedule
key: k8s.aliyun.com/vnode
value: "true"
Para agendar pods em VNodes, defina nodeSelector para corresponder ao rótulo e adicione uma tolerância ao taint NoSchedule.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster Kubernetes autogerenciado com pelo menos um VNode (verifique com
kubectl get nodes)kubectl configurado para conectar-se ao cluster
Etapas
-
Salve o conteúdo abaixo como
deploy-vnode-test1.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: vnode-nginx-test1 spec: replicas: 2 selector: matchLabels: app: uid template: metadata: labels: app: uid spec: nodeSelector: # Match VNodes by label k8s.aliyun.com/vnode: "true" tolerations: # Tolerate the VNode NoSchedule taint - key: k8s.aliyun.com/vnode operator: "Equal" value: "true" effect: "NoSchedule" containers: - name: nginx image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 -
Aplique o Deployment.
kubectl apply -f deploy-vnode-test1.yaml
Método 2: Especifique nodeName
Especifique nodeName ignora o scheduler do Kubernetes e fixa os pods diretamente em um VNode identificado pelo nome.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster Kubernetes autogerenciado com pelo menos um VNode
kubectl configurado para conectar-se ao cluster
O nome exato do VNode de destino
Etapas
-
Obtenha o nome do VNode.
kubectl get nodesOs nomes dos VNodes seguem o formato
<region>.<VNode ID>. Exemplo de saída:NAME STATUS ROLES AGE VERSION cn-hangzhou.vnd-2ze2qhf8lmp5kgsx**** Ready agent 132m v1.20.6 k8s-master Ready control-plane,master 169m v1.20.6 -
Salve o conteúdo abaixo como
deploy-vnode-test2.yaml. Substituacn-hangzhou.vnd-2ze2qhf8lmp5kgsx****pelo nome do seu VNode.apiVersion: apps/v1 kind: Deployment metadata: name: vnode-nginx-test2 spec: replicas: 2 selector: matchLabels: app: uid template: metadata: labels: app: uid spec: nodeName: cn-hangzhou.vnd-2ze2qhf8lmp5kgsx**** # Replace with your VNode name containers: - name: nginx image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 -
Aplique o Deployment.
kubectl apply -f deploy-vnode-test2.yaml
Próximas etapas
Usar eci-profile para agendar pods em um VNode — abordagem recomendada para ambientes de produção