Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Complementos/ Mecanismo de estouro de nuvem do CCE para CCI
Atualizado em 2024-11-28 GMT+08:00

Mecanismo de estouro de nuvem do CCE para CCI

O mecanismo de estouro de nuvem do CCE para CCI, virtual-kubelet, é desenvolvido com base no Virtual Kubelet, uma implementação de kubelet do Kubernetes de código aberto que se disfarça como um kubelet para conectar o Kubernetes a outras APIs. virtual-kubelet é usado principalmente para estender as APIs do Kubernetes a serviços de contêiner sem servidor, como CCI da Huawei Cloud.

Para ser específico, o kubelet virtual chama a Cloud Container Instance (CCI) para criar e gerenciar pods para as Implementações, os StatefulSets e as tarefas implementadas no CCE durante picos de serviço de curto prazo. Desta forma, você pode reduzir o consumo causado pelo escalonamento de cluster.

Comunidade de código aberto: https://github.com/virtual-kubelet/virtual-kubelet

O complemento virtual-kubelet fornece as seguintes funções:

  • Cria pods em segundos. virtual-kubelet cria pods automaticamente na CCI, eliminando a sobrecarga de redimensionamento do cluster do CCE.
  • Funciona perfeitamente com SWR para você usar imagens públicas e privadas.
  • Suporta sincronização de eventos, monitoramento, registro em logs, execução de comandos remotos em pods e visualização de status para pods da CCI.
  • Permite que os usuários visualizem as informações de capacidade sobre nós elásticos virtuais.
  • Suporta conectividade entre pods do CCE e CCI por meio de Serviços.

Restrições

  • Somente os clusters padrão do CCE que usam VPCs e clusters do CCE Turbo (usando virtual-kubelet 1.2.5 ou posterior) são compatíveis. Clusters de Arm não são suportados. As instâncias do complemento não serão implementadas nos nós de Arm, se houver, em execução no cluster.
  • Os pods do CCE agendados para CCI oferecem suporte aos volumes de ConfigMap, Secret, EmptyDir, DownwardAPI, Projected e PersistentVolumeClaims, e os volumes de DownwardAPI e Projected só podem ser usados no virtual-kubelet 1.3.25 e versões posteriores.
    • emptyDir: subcaminhos não são suportados.
    • PersistentVolumeClaims: somente os tipos de armazenamento em nuvem do SFS e SFS Turbo e as classes de armazenamento CSI são compatíveis.
    • Projected: se uma origem do tipo serviceAccountToken estiver configurada, o token no segredo service-account-token correspondente será montado depois que o pod for agendado para a CCI. O token é válido por um longo tempo e não tem público esperado. Ou seja, as configurações de expirationSeconds e audience não têm efeito.
  • DaemonSets e pods que usam o modo HostNetwork não podem ser agendados para CCI.
  • Os pods implementados no CCE e na CCI só podem se comunicar por meio dos Serviços ClusterIP. Os Serviços do CCE ClusterIP não podem ser acessados no init-container.
  • Não especifique a porta de verificação de integridade ao interconectar com um Serviço LoadBalancer ou ingress para cargas de trabalho executadas no CCE e na CCI.

    1. Em um cluster do CCE, os contêineres da CCI e os contêineres do CCE usam portas de back-end diferentes registradas no ELB. Se você especificar uma porta de verificação de integridade, algumas verificações de integridade do back-end serão anormais.

    2. Quando clusters diferentes usarem um serviço para se conectar ao ouvinte do mesmo balanceador de carga do ELB, verifique se o modo de verificação de integridade escolhido não afetará o acesso ao serviço.

    3. Permita acesso de 100.125.0.0/16 ao interconectar com um Serviço LoadBalancer compartilhado para cargas de trabalho executadas em CCE e CCI.

  • A sub-rede onde o cluster está localizado não pode se sobrepor com 10.247.0.0/16. Caso contrário, a sub-rede entra em conflito com o bloco CIDR de serviço no espaço para nomes da CCI.
  • Antes de usar o virtual-kubelet, vá para o console da CCI para conceder à CCI permissão para usar o CCE.
  • Depois que o complemento virtual-kubelet é instalado, um namespace chamado "cce-burst-cluster ID" é criado na CCI e gerenciado pelo complemento. Não use esse namespace ao criar pods manualmente na CCI.
  • O uso de recursos do complemento varia de acordo com o volume de serviço dimensionado para CCI. Os pods, segredos, congfigMaps, PVs e PVCs solicitados pelo serviço ocupam os recursos da VM. Recomendamos que você avalie o uso do serviço e se inscreva para VMs com base nas seguintes especificações: para 1.000 pods e 1.000 ConfigMaps (300 KB), nós com 2 vCPUs e 4 GiB de memória são recomendados. Para 2.000 pods e 2.000 ConfigMaps são recomendados nós com 4 vCPUs e 8 GiB de memória. Para 4.000 pods e 4.000 ConfigMaps são recomendados nós com 8 vCPUs e 16 GiB de memória.
  • Se o agendamento dos recursos dimensionados para CCI falhar, o nó de virtual-kubelet será bloqueado por meia hora, durante a qual os recursos não poderão ser agendados para CCI. Você pode usar o kubectl para verificar o status do nó do virtual-kubelet no console do cluster do CCE. Se o nó tiver sido bloqueado, desbloqueie-o manualmente.

  • As restrições ao uso do gerenciamento de logs para coletar os logs de pods dimensionados para CCI são as seguintes:
    • Somente logs em caminhos de arquivo de contêiner podem ser coletados.
    • A rede deve ser ativada quando o complemento é instalado porque a rede de Serviço do virtual-kubelet é necessária.
    • Os pods dimensionados para CCI não oferecem suporte à atualização a quente das políticas de log. Depois que uma política de log for atualizada, reimplemente os pods dimensionados para CCI para aplicar a modificação.
    • A coleta de logs consome memória de pod. É uma boa prática reservar 50 MB de memória para que um pod seja associado a uma política de log. Se o pod estiver associado a várias políticas de log, reserve 5 MB adicionais de memória sempre que uma política de log for associada.
    • Um log maior que 250 KB não pode ser coletado.
    • Os logs não podem ser coletados de diretórios de montagem especificados, como os diretórios system, device, cgroup e tmpfs.
    • Os nomes dos arquivos de log a serem coletados associados à mesma política de log no mesmo contêiner devem ser exclusivos. Se houver vários arquivos com o mesmo nome, o coletor coletará apenas o primeiro que detectar.
    • Se o nome de um arquivo de log exceder 190 caracteres, o arquivo de log não será coletado.

Cálculo e restrições nas especificações do pod

As especificações do pod são as seguintes:
  • As solicitações e os limites de um recurso são definidos com o mesmo valor para todos os contêineres de aplicação e inicialização. Se um limite for configurado, o limite será aplicado. Se nenhum limite for configurado, a solicitação será aplicada.
  • Se as solicitações não forem iguais aos limites, o valor maior dos dois itens a seguir será aplicado:
    • Soma dos limites definidos para um recurso em todos os contêineres de aplicação
    • Limite máximo de um recurso em todos os contêineres de inicialização

Restrições às especificações do pod:

  • O número de vCPUs em um pod deve ser maior que 0.
  • Após o ajuste automático de recursos, o número de vCPUs no pod é 48 ou 64, ou varia de 0,25 a 32, a memória é um múltiplo inteiro de 1 GiB e varia de 1 GiB a 512 GiB, e a relação entre CPU e memória varia de 1:2 a 1:8.

Ajuste automático de recursos

Se os pods a serem dimensionados para CCI não atenderem às especificações da CCI e as especificações configuradas não forem superiores a 32 vCPUs e 256 GiB de memória, o virtual-kubelet ajustará automaticamente os recursos do pod.

As regras são as seguintes:

  1. Aumente o número de vCPUs de cada contêiner de aplicação e de inicialização (exceto contêineres BestEffort) no pod para um múltiplo inteiro de 0,25 e defina a memória para um valor maior ou igual a 0,2 GiB.
  2. Ajuste continuamente os recursos do pod até que o número de vCPUs do pod seja maior que 32 ou a memória seja maior que 256 GiB.
  3. Aumente a memória do pod para um múltiplo inteiro de 1 GiB.
  4. Se a proporção de memória de pod/vCPUs for menor que 2, aumente a memória de pod para um valor maior ou igual ao dobro do número de vCPUs, bem como um múltiplo inteiro de 1 GiB. Se a proporção de memória de pod/vCPUs for maior que 8, aumente o número de vCPUs de pod para ser maior ou igual a 1/8 da memória, bem como um múltiplo inteiro de 0,25.
  5. Os incrementos de vCPU e memória causados pelo ajuste são adicionados ao primeiro contêiner de aplicação não BestEffort.

Instalar o complemento

  1. No console do CCE, clique no nome do cluster para acessar o cluster. Clique em Add-ons no painel de navegação, localize virtual-kubelet à direita e clique em Install.
  2. Na página Install Add-on, selecione Networking para habilitar as comunicações de pod entre o CCE e a CCI por meio dos Serviços do Kubernetes.

    Figura 1 Selecionar rede

  3. Clique em Install.

    Depois que a rede é selecionada, um sidecar é injetado no pod em execução na CCI para oferecer suporte ao acesso ao Serviço. O número de contêineres em execução consultados é um a mais do que o número definido, o que é normal.

Usar rótulos para definir políticas de dimensionamento

Após instalar o complemento virtual-kubelet, adicione o rótulo virtual-kubelet.io/burst-to-cci à carga de trabalho.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  namespace: default
  labels:
					    virtual-kubelet.io/burst-to-cci: 'auto'    # Scale pods to CCI.
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
        - image: 'nginx:perl'
          name: container-0
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 512Mi
          volumeMounts: []
      imagePullSecrets:
        - name: default-secret

Adicione o seguinte campo aos labels de uma carga de trabalho ou pod no arquivo YAML:

virtual-kubelet.io/burst-to-cci: "auto"

Os seguintes valores são suportados:

  • auto: o sistema determina automaticamente se os pods devem ser dimensionados para CCI com base no resultado de pontuação real do agendador. TaintToleration agenda preferencialmente os pods para os nós do CCE.
  • localPrefer: os pods são agendados para a CCI quando os recursos do cluster são insuficientes.
  • enforce: os pods são agendados à força para CCI.
  • off: os pods não estão agendados para a CCI.

Usar perfis para gerenciar pods na nuvem e fora dela

Você pode usar perfis para configurar e gerenciar pods, associar perfis a pods usando labelSelector e configurar a política de alocação dos pods associados para alocar ou limitar o número de pods na e fora da nuvem.

Restrições

  • Você pode usar o perfil para configurar e gerenciar a política de pods. burst-to-cci ainda é compatível e é anterior ao perfil.
  • localPrefer não pode ser configurado para local e cci ao mesmo tempo.
  • As políticas auto e localPrefer podem ser associadas a pods que não foram associados a perfis. A política de imposição não pode ser associada a pods que não foram associados a perfis.
  • Atualmente, quando a política localPrefer é configurada no perfil, a configuração do número máximo de local pode se tornar inválida em cenários extremos para evitar problemas globais.
  • Quando uma implantação está realizando atualização contínua, é recomendável definir maxSurge para um valor tão pequeno quanto possível (por exemplo, 0) para evitar que o volume de programação da região onde maxNum é limitado seja menor do que o esperado.
  • Um pod pode ser associado a apenas um perfil, ou seja, o perfil com o maior grau de associação. Depois que um pod é criado, se o rótulo do pod for modificado, o pod não corresponde ao perfil original. Nesse caso, o pod seleciona o perfil com o maior grau de associação para associação. Você pode avaliar o grau de associação de acordo com as seguintes instruções:
    • Calcule a soma de matchLabels e matchExpressions em labelSelector com base em obejectLables no perfil. O perfil com a maior soma tem o maior grau de associação.
    • Se dois perfis forem filtrados, selecione aquele cujo nome tenha a menor ordem alfabética.

Descrição do uso

Configurar local maxNum e scaleDownPriority
apiVersion: scheduling.cci.io/v1
kind: ScheduleProfile
metadata:
  name: test-cci-profile
  namespace: default
spec:
  objectLabels:
    matchLabels:
      app: nginx
					strategy: localPrefer
  location:
					local: 
					maxNum: 20 # Currently, maxNum cannot be configured for local and cci at the same time.
					scaleDownPriority: 10
    cci: {}
status:
  phase: initialized
  restrict:
					local: 20 # restrict is configured based on location. That is, local and cci do not appear at the same time.
  used:
    local: 20
    cci: 0

Configurar cci maxNum e scaleDownPriority

apiVersion: scheduling.cci.io/v1
kind: ScheduleProfile
metadata:
  name: test-cci-profile
  namespace: default
spec:
  objectLabels:
    matchLabels:
      app: nginx
				strategy: localPrefer
  location:
    local: {}
				cci:
				maxNum: 20 # Currently, maxNum cannot be configured for local and cci at the same time.
				scaleDownPriority: 10
status:
  phase: initialized
  restrict:
				cci: 20 # restrict is configured based on location. That is, local and cci do not appear at the same time.
  used:
    local: 0
    cci: 20

Parâmetros:

  • strategy: política de agendamento. O valor pode ser auto, enforce ou localPrefer.
  • O número máximo de pods no IDC off-line e na nuvem e a prioridade de dimensionamento do scaleDownPriority podem ser configurados no location. O valor de maxNum varia de 0 a int32, e o valor de scaleDownPriority varia de -100 a 100.

Crie uma Implementação, use selector para selecionar o pod que contém app:nginx e associe o pod ao perfil criado.

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: container-1
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 512Mi
      imagePullSecrets:
        - name: default-secret

Impacto do virtual-kubelet no monitoramento de recursos disponíveis

Depois que o complemento virtual-kubelet é instalado, o sistema usa recursos da CCI como recursos de nó de cluster. É equivalente a um nó super-grande para monitoramento. Nesse caso, os recursos da CCI são calculados juntos nos recursos alocáveis na página de monitoramento de cluster do CCE. Conforme mostrado na figura a seguir, após a instalação do complemento virtual-kubelet, a taxa de alocação de CPU/memória diminui drasticamente.

Figura 2 Monitoramento do cluster

Você pode exibir a taxa de alocação de um nó específico na página Nodes ou no console do AOM.

Figura 3 Exibir recursos alocáveis de um nó no console do AOM