O Container Compute Service (ACS) da Alibaba Cloud é integrado ao Container Service for Kubernetes. Com um ACK Pro cluster, você acessa rapidamente o poder computacional de contêineres fornecido pelo ACS. Este tópico descreve como usar o poder computacional do ACS no seu cluster ACK.
Como funciona
O Container Compute Service (ACS) é um service de contêineres que utiliza o Kubernetes como interface 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 da camada de poder computacional subjacente. A camada de recursos computacionais do ACS é responsável pelo agendamento e alocação de recursos para os Pods, enquanto o Kubernetes gerencia as cargas de trabalho da aplicação — 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 cluster uma elasticidade elevada, sem restrições relacionadas à capacidade computacional dos nós. Quando o ACS assume o gerenciamento da infraestrutura subjacente dos Pods, o Kubernetes deixa de precisar lidar diretamente com o posicionamento e a inicialização de cada Pod ou monitorar o status de recursos das máquinas virtuais subjacentes. O ACS garante que os recursos de Pod necessários estejam sempre disponíveis.
O Container Service for Kubernetes (ACK) é uma das primeiras plataformas Kubernetes certificadas do mundo e oferece um service de gerenciamento de alta performance para aplicações em contêineres. Ele se integra às capacidades de virtualização, armazenamento, rede e segurança da Alibaba Cloud para simplificar a criação e o dimensionamento de clusters, permitindo que você se concentre no desenvolvimento e no gerenciamento das suas aplicações em contêineres.
Em um ACK Pro cluster, é necessário implantar manualmente um nó virtual antes de criar Pods do ACS. Quando o 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 se comunicam com Pods em nós regulares do cluster. Para cargas de trabalho de longa duração com tráfego variável, recomendamos agendá-las no nó virtual. Essa abordagem maximiza a utilização de recursos, reduz o tempo de escalonamento horizontal e diminui custos. Quando o tráfego cai, libere esses Pods rapidamente para reduzir ainda mais os custos. Cada Pod em um nó virtual é executado como uma instância ACS em um ambiente de contêiner seguro e isolado. Para mais informações, consulte Overview of ACK.
Pré-requisitos
-
Se esta for a primeira vez que você usa o service, ative os services 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 cloud services necessários. Para mais informações, consulte Create an ACK Pro cluster.
Faça login no console do Container Compute Service e siga as instruções na tela para ativar o ACS.
É necessário um ACK Pro cluster com Kubernetes 1.26 ou posterior. Para mais informações, consulte Create an ACK Pro cluster. Para saber como fazer upgrade de um cluster, consulte Upgrade an ACK cluster.
-
Em ACK Pro cluster s, 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
Execute as seguintes etapas:
Faça login no ACK console. 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.
Se você for solicitado a 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. O nome do novo nó virtual começa com
virtual-kubelet-por padrão.
Exemplo: Use o poder computacional de CPU do ACS
Após instalar ou fazer upgrade do componente ACK Virtual Node para a versão especificada em Prerequisites, ele passará a suportar tanto o poder computacional do ACS quanto o 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 usar 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 Node affinity.NotaO agendamento pelo rótulo
alibabacloud.com/acs: "true"não é suportado em ACK Serverless cluster s. Atualmente, é suportado em ACK Pro cluster s, ACK dedicated cluster s, ACK One registered cluster s e ACK Edge cluster s. 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 do ACS, consulte ACS Pod instances.
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, quando usar o poder computacional do ACS em um cluster ACK e um Pod do ACS precisar montar um disco em cloud, agende o Pod para um nó virtual usando nodeSelector ou ResourcePolicy. Para mais informações sobre como configurar o ResourcePolicy, consulte ACK Pro clusters support hybrid scheduling of ECS and ACS computing power.NodeSelector
-
Execute o comando a seguir 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 a seguir 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.
-
Pod label scheduling
-
Crie um arquivo chamado nginx.yaml com o conteúdo a seguir.
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 a seguir 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 confirma que os Pods foram agendados para nós virtuais, conforme definido pelo
alibabacloud.com/acs: "true"label.
-
-
-
Verifique os detalhes de um Pod NGINX para confirmar que se trata de uma instância de Pod do ACS.
-
Execute o comando a seguir 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 do ACS.
-
Exemplo: Use o poder computacional de GPU do ACS
O processo para usar o poder computacional de GPU do ACS é semelhante ao de CPU, mas exige versões específicas de componentes e algumas configurações adicionais.
Configuração de componentes
Para ACK Pro cluster s com diferentes versões do Kubernetes, o componente kube-scheduler deve atender aos seguintes requisitos de versão.
Versão do Kubernetes | kube-scheduler version |
1.26 ou posterior |
|
Utilização
...
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 as classes de computação e classes de qualidade de service (QoS) do ACS, consulte Relationship between compute classes and QoS classes.
Para consultar os modelos de GPU disponíveis para
gpu-model-series, acesse Specify GPU models and driver versions for ACS GPU-accelerated Pods.O agendamento pelo rótulo
alibabacloud.com/acs: "true"não é suportado em ACK Serverless clusters. Atualmente, é suportado em ACK Pro cluster s, ACK dedicated cluster s, ACK One registered cluster s e ACK Edge cluster s.
-
Os exemplos a seguir mostram três formas diferentes de configurar o poder computacional de GPU.
NodeSelector
Use o YAML a seguir para criar uma carga de trabalho com 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
Use o YAML a seguir para criar uma carga de trabalho com 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 do ResourcePolicy para agendamento de recursos, consulte Custom resource priority scheduling.
Pod label scheduling
Use o YAML a seguir para criar uma carga de trabalho com 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 a seguir para verificar o status de execução da carga de trabalho com 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: Use o poder computacional de GPU HPN do ACS
O processo para usar o poder computacional de GPU HPN do ACS é semelhante ao de CPU, mas com os seguintes requisitos:
Este recurso é suportado apenas em ACK Pro clusters, ACK One registered clusters e clusters Argo de fluxo de trabalho distribuído do ACK One.
É necessário adquirir GPU-HPN capacity reservations com antecedência e associá-los ao seu cluster.
-
A versão do kube-scheduler deve atender aos seguintes requisitos:
Versão do Kubernetes
kube-scheduler version
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.
Utilização
...
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 as classes de computação e de QoS do ACS, consulte Relationship between compute classes and QoS classes.
Para informações sobre outros parâmetros dos Pods do ACS, consulte Configure an ACS Pod.
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 pode agendar Pods de outras classes de computação nem Pods sem classe de computação 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 do nó reservado:
alibabacloud.com/node-type: reserved.Para o nome do recurso de dispositivo nos campos
requestselimitsde uma especificação de recursos, defina 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 com 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"