Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Workload FAQ

Última atualização: Sep 01, 2026

Perguntas e respostas comuns sobre a implantação e o gerenciamento de workloads em clusters ACK.

Como implantar uma aplicação containerizada em um cluster ACK?

A implantação de uma aplicação containerizada envolve quatro fases:

  1. Escreva o código da aplicação em qualquer linguagem.

  2. Crie uma imagem de container com um Dockerfile — arquivo de texto que empacota o código e todas as dependências em um artefato de entrega portátil. A imagem de container é mais completa que pacotes tradicionais (como JAR, WAR ou RPM), pois agrupa a aplicação com todos os arquivos necessários ao runtime do container. Use essa imagem para iniciar o container, que representa a aplicação em execução. Para obter instruções passo a passo, consulte Build, package, and run images using a Dockerfile.

  3. Envie a imagem para um registry. O Container Registry (ACR) armazena, gerencia, distribui e serve imagens. O ACR oferece duas edições. Para mais informações, consulte What is Container Registry ACR.

    • Personal Edition — para desenvolvedores individuais

    • Enterprise Edition — para clientes corporativos

  4. Implante workloads no ACK para executar a aplicação containerizada. O ACK gerencia todo o ciclo de vida dos workloads containerizados, incluindo agendamento de pods em nós específicos, dimensionamento conforme mudanças de carga, entre outros recursos. Para mais informações, consulte Workloads.

Por que os pulls de imagem demoram muito ou falham?

Verifique os itens abaixo conforme a origem do pull:

Pull via rede pública

Pull a partir do ACR

Como solucionar problemas de aplicações no ACK?

Falhas em aplicações geralmente têm origem em pods, controladores (Deployment, StatefulSet, DaemonSet) ou Services. Identifique qual camada apresenta o problema e siga as etapas abaixo.

Verificar pods

Consulte Troubleshoot pod anomalies para obter um guia completo sobre diagnóstico de problemas no nível de pod.

Verificar Deployments

Anomalias em pods frequentemente surgem ao criar controladores como Deployments, DaemonSets, StatefulSets ou Jobs. Após verificar problemas no nível de pod, examine os eventos e logs do Deployment:

  1. Faça login no console ACK. No painel de navegação à esquerda, clique em console ACKClusters.

  2. Na página Clusters, localize e clique no nome do cluster. No painel de navegação à esquerda, escolha Workloads > Deployments.

  3. Na página Deployments, clique no nome do Deployment e, em seguida, clique em Events ou Logs para identificar o problema.

O processo para DaemonSets, StatefulSets e Jobs é o mesmo.

Verificar Services

Um service balanceia o tráfego entre um grupo de pods. Siga estas etapas para identificar problemas relacionados ao service.

Etapa 1: Verificar a existência de endpoints

Connect to the cluster with kubectl e execute:

kubectl get endpoints <service_name>

A quantidade de endereços na coluna ENDPOINTS deve corresponder ao número esperado de réplicas. Por exemplo, um Deployment com três réplicas deve exibir três endereços.

Endpoints de service ausentes

Se o service não tiver endereços de endpoint, o seletor pode não estar correspondendo a nenhum pod. Execute o comando a seguir para verificar:

  1. Localize o seletor no YAML do service:

    spec:
      clusterIP: 1x.xx.xx.33
      externalTrafficPolicy: Cluster
      ports:
        - name: http
          nodePort: 30040
          port: 30080
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      sessionAffinity: None
  2. Consulte os pods usando esse seletor:

    <app> é o valor do rótulo app do pod. <namespace> é o namespace onde o service reside. Omita -n <namespace> se o service estiver no namespace padrão.
    kubectl get pods -l app=<app> -n <namespace>
  3. Se existirem pods correspondentes, mas ainda assim não houver endpoints, a porta do service pode não corresponder à porta do container. Teste a conectividade:

    <ip> e <port> são os valores de clusterIP e port do YAML do service na etapa 1. O método exato de teste depende do seu ambiente.
    curl <ip>:<port>

    Confirme se a porta do container especificada no service é a mesma porta em que a aplicação escuta.

Problemas de encaminhamento de rede

Se o cliente alcançar o service e os endpoints estiverem corretos, mas as conexões forem encerradas imediatamente, o tráfego pode não estar chegando aos pods. Verifique os seguintes pontos:

  • O pod está íntegro? Consulte Troubleshoot pod anomalies.

  • O IP do pod está acessível? Obtenha os IPs dos pods com kubectl get pods -o wide, faça login em qualquer nó e execute ping <pod-ip> para verificar a conectividade de rede.

  • A aplicação escuta na porta correta? Em qualquer nó, execute curl <pod-ip>:<port> para confirmar se a porta do container no pod funciona conforme o esperado.

Como atualizar o Helm manualmente?

O componente Tiller do Helm v2, executado no lado do servidor, possui vulnerabilidades de segurança conhecidas que permitem a invasores instalar aplicações não autorizadas nos clusters. Atualize para o Helm v3. Consulte Upgrading from Helm v2 to Helm v3.

Como fazer pull de imagens de uma instância do Container Registry Enterprise Edition na China continental para um cluster ACK fora da China continental?

Adquira as seguintes instâncias do Container Registry Enterprise Edition:

  • Instância Standard ou Premium na região dentro da China continental

  • Instância Basic na região fora da China continental

Em seguida, use uma instância de sincronização para replicar imagens da região da China continental para a região fora da China continental. Consulte Same-account sync instance. Após a sincronização, obtenha o endereço do registry da instância Enterprise Edition na região fora da China continental e utilize-o ao criar aplicações no ACK.

O ACR Personal Edition apresenta velocidades de sincronização mais lentas. Para repositórios autogerenciados, é necessário adquirir o Global Acceleration (GA) para acelerar o pull de imagens, o que aumenta o custo. O Container Registry Enterprise Edition é a opção recomendada. Consulte Billing information .

Como realizar rolling updates sem interrupção de service?

Durante a substituição de pods em um rolling update, ocorre um atraso de alguns segundos antes que as alterações nos pods sejam sincronizadas com a instância do Classic Load Balancer (CLB). Isso pode gerar erros 5XX temporários. Configure o desligamento gracioso para garantir rolling updates sem tempo de inatividade. Consulte Implement zero-downtime rolling deployments.

Como obter uma imagem de container para um workload?

Para pré-requisitos e orientações sobre o pull de imagens de container, consulte Pull image.

Como reiniciar um container?

O Kubernetes não suporta o reinício direto de containers individuais. Em vez disso, exclua o pod — o controlador (Deployment, DaemonSet, etc.) cria automaticamente um substituto.

  1. Liste os pods para encontrar aquele que deseja reiniciar:

    kubectl get pods
  2. Exclua o pod:

    kubectl delete pod <pod-name>
  3. Verifique se o novo pod está em execução:

    kubectl get pods

    Confirme se o status do pod é Running.

Em produção, gerencie containers por meio de objetos de nível superior, como ReplicaSets e Deployments, em vez de manipular pods diretamente. Isso preserva a consistência do estado do cluster.

Como alterar o namespace de um Deployment?

Mover um Deployment para outro namespace também exige a atualização manual dos recursos dependentes — persistent volume claims (PVCs), ConfigMaps e Secrets — para o novo namespace.

  1. Exporte a configuração do Deployment:

    kubectl get deploy <deployment-name> -n <old-namespace> -o yaml > deployment.yaml
  2. Edite o arquivo deployment.yaml e substitua o valor de namespace:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
      generation: 1
      labels:
        app: nginx
      name: nginx-deployment
      namespace: new-namespace # Specify the new namespace.
      ... ...
  3. Aplique a configuração atualizada:

    kubectl apply -f deployment.yaml
  4. Verifique se o Deployment está em execução no novo namespace:

    kubectl get deploy -n new-namespace

Como expor informações do pod a containers em execução?

O ACK segue as especificações nativas da comunidade Kubernetes. Dois métodos são suportados:

Como usar imagePullSecrets?

Importante
  • O componente de pull sem senha não suporta o campo imagePullSecrets especificado manualmente.

  • O Secret deve estar no mesmo namespace do workload.

Instâncias do ACR Personal Edition criadas em ou após 9 de setembro de 2024 não suportam aliyun-acr-credential-helper. Armazene suas credenciais em um Secret do Kubernetes e referencie-as via imagePullSecrets.

Etapa 1: Criar o Secret

kubectl create secret docker-registry image-secret \
  --docker-server=<ACR-registry> \
  --docker-username=<username> \
  --docker-password=<password> \
  --docker-email=<email@example.com>

Parâmetro

Descrição

--docker-server

Endpoint da instância do ACR. Deve corresponder ao tipo de rede do endereço do registry (interno ou público).

--docker-username

Nome de usuário da credencial de acesso ao ACR.

--docker-password

Senha da credencial de acesso ao ACR.

--docker-email

Opcional.

Etapa 2: Referenciar o Secret

Escolha um dos métodos a seguir:

Usar uma Service Account

Opção 1: Adicionar a uma ServiceAccount

Todos os workloads que utilizam essa ServiceAccount podem fazer pull de imagens sem precisar especificar o Secret individualmente.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
imagePullSecrets:
- name: image-secret # Enter the ACR Secret

Qualquer Deployment que utilize essa ServiceAccount poderá então fazer pull de imagens:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx
spec:
  serviceAccountName: default # If using the default ServiceAccount for the namespace, you do not need to specify it.
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # Replace with the ACR instance link

Usar diretamente em um workload

Opção 2: Especificar diretamente no workload

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:
      - name: image-secret  # Use the Secret created in the previous step
      containers:
      - name: nginx
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # Replace with the Registry Address of the ACR repository

Verificar

Após aplicar a configuração, confirme se o pod está em execução:

kubectl get pods

Por que os pulls ainda falham após configurar o componente sem senha?

O componente de pull sem senha pode estar mal configurado. Verifique estas duas causas comuns:

  • As informações da instância no componente não correspondem à instância do ACR.

  • O endereço da imagem usado para o pull não corresponde ao nome de domínio configurado no componente.

Siga Pull images within the same account para verificar a configuração.

Se o pull ainda falhar após a configuração correta, um campo imagePullSecrets especificado manualmente no YAML do workload pode estar em conflito com o componente sem senha. Remova o campo imagePullSecrets, exclua o pod e crie-o novamente.

Por que os containers falham ao iniciar em novos nós após ativar a aceleração de imagem no node pool?

Após ativar a Container Image Acceleration para um node pool, você pode encontrar o seguinte erro:

failed to create containerd container: failed to attach and mount for snapshot 46: failed to enable target for /sys/kernel/config/target/core/user_99999/dev_46, failed:failed to open remote file as tar file xxxx

Esse erro ocorre porque a Container Image Acceleration exige que o componente aliyun-acr-acceleration-suite esteja instalado e que as credenciais de pull estejam configuradas para imagens privadas. Consulte Configure container image pull credentials.

Importante

Se o problema persistir após a instalação do componente, disable container image acceleration primeiro para restaurar seus services e, em seguida, reconfigure-o.