O Alibaba Cloud Container Compute Service (ACS) está integrado ao Container Service for Kubernetes. Você pode usar um cluster ACK Pro para acessar rapidamente o poder computacional de contêineres fornecido pelo ACS. Este tópico descreve como utilizar o poder computacional do ACS no seu cluster ACK.
Como funciona
O Container Compute Service (ACS) é um serviço de contêineres que utiliza o Kubernetes como interface de usuário e fornece recursos computacionais compatíveis com especificações de contêineres. O ACS adota uma arquitetura em camadas que separa o plano de controle do Kubernetes do poder computacional subjacente dos contêineres. A camada de recursos computacionais do ACS é responsável por agendar e alocar recursos para os Pods, enquanto o Kubernetes gerencia as cargas de trabalho das aplicações, como Deployments, Services, StatefulSets e CronJobs, sobre essa camada.
É possível conectar o poder computacional de contêineres do ACS a um cluster Kubernetes como um nó virtual. Isso confere ao seu cluster uma elasticidade robusta, sem as restrições da capacidade computacional de seus nós físicos. Quando o ACS assume o gerenciamento da infraestrutura subjacente para os Pods, o Kubernetes não precisa mais lidar diretamente com o posicionamento e a inicialização de Pods individuais, nem monitorar o status dos recursos das máquinas virtuais subjacentes. O ACS garante que os recursos necessários para os Pods estejam sempre disponíveis.
O Container Service for Kubernetes (ACK) é uma das primeiras plataformas Kubernetes certificadas do mundo e oferece um serviço de gerenciamento de alto desempenho para aplicações em contêineres. Ele se integra às capacidades de virtualização, armazenamento, rede e segurança do Alibaba Cloud para simplificar a criação e o dimensionamento de clusters, permitindo que você foque no desenvolvimento e na gestão das suas aplicações conteinerizadas.
Em um cluster ACK Pro, é necessário implantar manualmente um nó virtual antes de criar Pods do ACS. Quando seu cluster precisar escalar horizontalmente, crie Pods do ACS no nó virtual sob demanda, sem a necessidade de planejar a capacidade dos nós. Os Pods do ACS podem se comunicar com Pods em nós regulares do cluster. Para cargas de trabalho de longa duração com tráfego flutuante, recomendamos agendá-las no nó virtual. Essa abordagem maximiza a utilização de recursos, reduz o tempo de escala horizontal e diminui custos. Quando o tráfego diminuir, libere esses Pods rapidamente para reduzir despesas. Cada Pod em um nó virtual executa como uma instância ACS dentro de um ambiente de contêiner seguro e isolado. Para mais informações, consulte Visão geral do ACK.
Pré-requisitos
-
Se esta for sua primeira vez utilizando o serviço, ative os serviços necessários e conceda as permissões adequadas:
Ative o Container Service for Kubernetes, conceda permissões às funções padrão e ative os serviços de nuvem necessários. Para mais informações, consulte Criar um cluster ACK Pro.
Faça login no console do Container Compute Service e siga as instruções na tela para ativar o ACS.
É necessário ter um cluster ACK Pro executando Kubernetes 1.26 ou posterior. Para mais informações, consulte Criar um cluster ACK Pro. Para saber como atualizar um cluster, consulte Atualizar um cluster ACK.
-
Para clusters ACK Pro, o componente de nó virtual (ACK Virtual Node) deve atender ao requisito de versão correspondente à versão do Kubernetes.
Versão do Kubernetes
Versão do componente ACK Virtual Node
1.26 ou posterior
v2.13.0 ou posterior
Instale o componente ACK Virtual Node
Siga as etapas abaixo:
Acesse o console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Components and Add-ons.
-
Na aba Core Components, localize o componente ACK Virtual Node e clique em Install ou Upgrade para a versão necessária.
Você também pode acessar a página de Gerenciamento de Componentes escolhendo Operations > Component Management no painel de navegação à esquerda da página de detalhes do cluster.
Caso receba uma solicitação para Activate and Authorize ACS antes de instalar o ACK Virtual Node, siga as instruções na tela. Após ativar o ACS e conceder as permissões necessárias, clique em OK para prosseguir com a instalação.
Após a conclusão da instalação, escolha no painel de navegação à esquerda. Por padrão, o nome do novo nó virtual começa com
virtual-kubelet-.
Exemplo: Uso do poder computacional de CPU do ACS
Depois que o componente ACK Virtual Node for instalado ou atualizado para a versão especificada nos Pré-requisitos, ele suportará tanto o poder computacional do ACS quanto do ECI.
Ao agendar um Pod para um nó virtual, o poder computacional do Elastic Container Instance (ECI) é usado por padrão, a menos que você especifique o ACS.
Para utilizar o poder computacional de CPU do ACS no ACK, execute as seguintes etapas:
-
Agende Pods para o nó virtual usando métodos como nodeSelector, affinity, ResourcePolicy ou adicionando o rótulo
alibabacloud.com/acs: "true". Para mais informações, consulte Afinidade de nó.NotaO agendamento via rótulo
alibabacloud.com/acs: "true"não é suportado em clusters ACK Serverless. Atualmente, há suporte para clusters ACK Pro, clusters dedicados ACK, clusters registrados ACK One e clusters ACK Edge. Especifique o tipo de instância para o Pod do ACS usando o rótulo
alibabacloud.com/compute-class:<compute-type>. Para mais informações sobre os tipos de instância ACS, consulte Instâncias de Pod ACS.
As etapas a seguir apresentam um exemplo detalhado:
-
Implante um Deployment.
ImportanteSe você agendar Pods adicionando o rótulo
alibabacloud.com/acs: "true", StorageClasses do tipoWaitForFirstConsumernão são suportadas. Portanto, ao usar o poder computacional do ACS em um cluster ACK onde um Pod ACS precisa montar um disco em nuvem, agende o Pod para um nó virtual usando nodeSelector ou ResourcePolicy. Para mais informações sobre como configurar o ResourcePolicy, consulte Clusters ACK Pro suportam agendamento híbrido de poder computacional ECS e ACS.NodeSelector
-
Execute o comando abaixo para visualizar os rótulos do nó virtual. Substitua
virtual-kubelet-cn-hangzhou-kpelo nome do seu nó virtual.kubectl get node virtual-kubelet-cn-hangzhou-k -oyamlA saída a seguir é um trecho da seção
labels:apiVersion: v1 kind: Node metadata: labels: kubernetes.io/arch: amd64 kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k kubernetes.io/os: linux kubernetes.io/role: agent service.alibabacloud.com/exclude-node: "true" topology.diskplugin.csi.alibabacloud.com/zone: cn-hangzhou-k topology.kubernetes.io/region: cn-hangzhou topology.kubernetes.io/zone: cn-hangzhou-k type: virtual-kubelet # Use this label to schedule Pods to virtual nodes. name: virtual-kubelet-cn-hangzhou-k spec: taints: - effect: NoSchedule key: virtual-kubelet.io/provider value: alibabacloud -
Crie um arquivo chamado nginx.yaml com o conteúdo a seguir para implantar dois Pods.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx alibabacloud.com/compute-class: general-purpose # Specify the compute class for the ACS Pod. Default: general-purpose. alibabacloud.com/compute-qos: default # Specify the QoS class for the ACS Pod. Default: default. spec: nodeSelector: type: virtual-kubelet # Schedule Pods to a virtual node. tolerations: - key: "virtual-kubelet.io/provider" # Tolerate the taint on the virtual node. operator: "Exists" effect: "NoSchedule" containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2 -
Crie a aplicação NGINX e verifique o resultado da implantação.
-
Execute o comando abaixo para criar a aplicação NGINX.
kubectl apply -f nginx.yaml -
Execute o comando a seguir para verificar o resultado da implantação.
kubectl get pods -o wideSaída esperada:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-s**** 1/1 Running 0 36s 10.0.6.68 virtual-kubelet-cn-hangzhou-j <none> <none> nginx-9cdf7bbf9-v**** 1/1 Running 0 36s 10.0.6.67 virtual-kubelet-cn-hangzhou-k <none> <none>A saída mostra que o
nodeSelectoragendou os dois Pods para nós com olabeltype=virtual-kubelet.
-
Agendamento por rótulo de Pod
-
Crie um arquivo chamado nginx.yaml com o seguinte conteúdo.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx alibabacloud.com/acs: "true" # Configure the Pod to use ACS computing power. alibabacloud.com/compute-class: general-purpose # Specify the compute class for the ACS Pod. Default: general-purpose. alibabacloud.com/compute-qos: default # Specify the QoS class for the ACS Pod. Default: default. spec: containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 resources: limits: cpu: 2 requests: cpu: 2 -
Crie a aplicação NGINX e verifique o resultado da implantação.
-
Execute o comando abaixo para criar a aplicação NGINX.
kubectl apply -f nginx.yaml -
Execute o comando a seguir para verificar o resultado da implantação.
kubectl get pods -o wideSaída esperada:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-9cdf7bbf9-s**** 1/1 Running 0 36s 10.0.6.68 virtual-kubelet-cn-hangzhou-j <none> <none> nginx-9cdf7bbf9-v**** 1/1 Running 0 36s 10.0.6.67 virtual-kubelet-cn-hangzhou-k <none> <none>A saída indica que os Pods foram agendados para nós virtuais, conforme especificado pelo
alibabacloud.com/acs: "true"label.
-
-
-
Visualize os detalhes de um Pod NGINX para confirmar que se trata de uma instância de Pod ACS.
-
Execute o comando abaixo para visualizar os detalhes de um Pod NGINX.
kubectl describe pod nginx-9cdf7bbf9-s****Saída esperada (informações principais):
Annotations: ProviderCreate: done alibabacloud.com/client-token: edf29202-54ac-438e-9626-a1ca007xxxxx alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx alibabacloud.com/pod-ephemeral-storage: 30Gi alibabacloud.com/pod-use-spec: 2-4Gi alibabacloud.com/request-id: A0EF3BF3-37E7-5A07-AC2D-68A0CFCxxxxx alibabacloud.com/schedule-result: finished alibabacloud.com/user-id: 14889995898xxxxx kubernetes.io/pod-stream-port: 10250 kubernetes.io/preferred-scheduling-node: virtual-kubelet-cn-hangzhou-j/1 kubernetes.io/resource-type: serverlessA anotação
alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxxconfirma que o Pod é uma instância de Pod ACS.
-
Exemplo: Uso do poder computacional de GPU do ACS
O processo para usar o poder computacional de GPU do ACS é semelhante ao uso de CPU do ACS, mas exige versões específicas de componentes e algumas configurações adicionais.
Configuração de componentes
Para clusters ACK Pro de diferentes versões do Kubernetes, o componente kube-scheduler deve atender aos seguintes requisitos de versão.
|
Versão do Kubernetes |
Versão do kube-scheduler |
|
1.26 ou posterior |
|
Uso
...
labels:
# Declare the ACS GPU resource requirement in the labels.
alibabacloud.com/compute-class: gpu # For GPU types, use the fixed value 'gpu'.
alibabacloud.com/compute-qos: default # The QoS class. This has the same meaning as for regular ACS computing power.
alibabacloud.com/gpu-model-series: example-model # The GPU model series. Replace with your actual model, such as T4.
...
Para mais informações sobre classes de computação e classes de qualidade de serviço (QoS) do ACS, consulte Relação entre classes de computação e classes de QoS.
Para modelos de GPU disponíveis para
gpu-model-series, consulte Especificar modelos de GPU e versões de driver para Pods acelerados por GPU do ACS.O agendamento via rótulo
alibabacloud.com/acs: "true"não é suportado em clusters ACK Serverless. Atualmente, há suporte para clusters ACK Pro, clusters dedicados ACK, clusters registrados ACK One e clusters ACK Edge.
-
Os exemplos a seguir mostram três maneiras diferentes de configurar o poder computacional de GPU.
NodeSelector
Utilize o YAML a seguir para criar uma carga de trabalho de GPU.
apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 1 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo # ACS attributes alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # The GPU model series. Replace with your actual model, such as T4. spec: # Specify the label for the virtual node. nodeSelector: type: virtual-kubelet # Tolerate the virtual node's taint. tolerations: - key: "virtual-kubelet.io/provider" # Tolerate the taint on the virtual node. operator: "Exists" effect: "NoSchedule" containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" resources: limits: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1"ResourcePolicy
Utilize o YAML a seguir para criar uma carga de trabalho de GPU.
apiVersion: scheduling.alibabacloud.com/v1alpha1 kind: ResourcePolicy metadata: name: dep-rp-demo namespace: default spec: selector: app: dep-rp-demo units: - resource: acs podLabels: alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # The GPU model series. Replace with your actual model, such as T4. --- apiVersion: apps/v1 kind: Deployment metadata: name: dep-rp-demo labels: app: dep-rp-demo annotations: resourcePolicy: "dep-rp-demo" # Reference the name of the ResourcePolicy. spec: replicas: 1 selector: matchLabels: app: dep-rp-demo template: metadata: labels: app: dep-rp-demo alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # The GPU model series. Replace with your actual model, such as T4. spec: containers: - name: demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" resources: limits: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1"Para mais informações sobre o uso de ResourcePolicy para agendamento de recursos, consulte Agendamento personalizado de prioridade de recursos.
Agendamento por rótulo de Pod
Utilize o YAML a seguir para criar uma carga de trabalho de GPU.
apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 1 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo # ACS attributes alibabacloud.com/acs: "true" # Configure the Pod to use ACS computing power. alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: example-model # The GPU model series. Replace with your actual model, such as T4. spec: containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" resources: limits: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" -
Execute o comando abaixo para verificar o status de execução da carga de trabalho de GPU.
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlSaída esperada (informações principais):
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"
Exemplo: Uso do poder computacional de GPU HPN do ACS
O processo para usar o poder computacional de GPU HPN do ACS é semelhante ao uso de CPU do ACS, mas com os seguintes requisitos:
Este recurso é suportado apenas em clusters ACK Pro, clusters registrados ACK One e clusters Argo de fluxo de trabalho distribuído ACK One.
É necessário adquirir antecipadamente as reservas de capacidade GPU-HPN e associá-las ao seu cluster.
-
A versão do kube-scheduler deve atender aos seguintes requisitos:
Versão do Kubernetes
Versão do kube-scheduler
1.28
v1.28.12-aliyun-6.9.3.cd73f3fe ou posterior.
1.30
v1.30.3-aliyun.6.9.3.ce7e2faf ou posterior.
1.31
v1.31.0-aliyun.6.9.3.051bb0e8 ou posterior.
1.32
v1.32.0-aliyun.6.9.3.515ac311 ou posterior.
1.33
v1.33.0-aliyun.6.9.4.8b58e6b4 ou posterior.
O componente ACK Virtual Node deve ser v2.15.0 ou posterior.
Uso
...
labels:
# Declare the ACS GPU resource requirement in the labels.
alibabacloud.com/compute-class: gpu-hpn # Must be set to gpu-hpn.
alibabacloud.com/compute-qos: default # The QoS class. This has the same meaning as for regular ACS computing power.
...
Para mais informações sobre classes de computação e classes de QoS do ACS, consulte Relação entre classes de computação e classes de QoS.
Para informações sobre outros parâmetros para Pods ACS, consulte Configurar um Pod ACS.
Um nó ACS GPU HPN só pode agendar Pods da classe de computação
gpu-hpn. Não é necessário especificar requisitos de recursos de GPU na declaração de recursos do Pod para esses Pods. O nó não consegue agendar Pods de outras classes de computação ou Pods para os quais nenhuma classe de computação foi declarada.
-
Use um nodeSelector do Kubernetes para agendar Pods para nós GPU HPN.
ImportanteAo configurar um Pod ACS GPU HPN, observe os seguintes campos:
Especifique a classe de computação:
alibabacloud.com/compute-class: gpu-hpn.Especifique o rótulo de nó reservado:
alibabacloud.com/node-type: reserved.Para o nome do recurso de dispositivo nos campos
requestselimitsde uma especificação de recurso, especifique o nome com base no tipo real da placa do dispositivo, como NVIDIA ou outros.
apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 1 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo # ACS attributes alibabacloud.com/compute-class: gpu-hpn alibabacloud.com/compute-qos: default spec: # Specify the label for GPU HPN reserved nodes. nodeSelector: alibabacloud.com/node-type: reserved containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" resources: limits: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" # Use the resource name that matches your actual GPU model. requests: cpu: 1 memory: 1Gi nvidia.com/gpu: "1" # Use the resource name that matches your actual GPU model. -
Verifique o status de execução da carga de trabalho de GPU.
kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyamlSaída esperada (informações principais):
phase: Running resources: limits: #other resources nvidia.com/gpu: "1" requests: #other resources nvidia.com/gpu: "1"