Um Deployment gerencia um conjunto de pods idênticos e mantém o número especificado em execução continuamente. É o tipo padrão de carga de trabalho para aplicações sem estado no Kubernetes — serviços que não dependem de estado local persistente, como servidores web, backends de API e processadores em lote.
Este tópico mostra como criar um Deployment em um cluster ACK usando o console ou kubectl.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster ACK. Consulte Cargas de trabalho para entender os conceitos e considerações sobre cargas de trabalho.
-
Acesso à internet para o cluster ou seus nós, pois os exemplos de início rápido baixam uma imagem pública:
(Recomendado) Ativar acesso à internet para o cluster — cria um gateway NAT de Internet para a VPC, concedendo acesso de saída a todos os recursos do cluster.
Atribua um endereço IP público estático a cada nó onde a carga de trabalho será executada.
Criar um Deployment
Criar um Deployment usando o console
Os passos abaixo apresentam o caminho mais rápido para ter um Deployment em execução. Após dominar o básico, consulte a Referência de configuração do console para personalizar ainda mais a carga de trabalho.
-
Configure as informações básicas. Faça login no Console do Container Service for Kubernetes. No painel de navegação à esquerda, clique em Clusters. Na página Clusters, clique no nome do seu cluster e escolha Workloads > Deployments no painel de navegação à esquerda. Na página Deployments, clique em Create from Image. Na página Basic Information, defina o nome da aplicação e outras configurações básicas, depois clique em Next para ir à página Container.


-
Configure the container. Na seção Container, defina Image Name com o endereço abaixo e defina Port como
80. Mantenha todas as outras configurações com os valores padrão e clique em Next para acessar a página Advanced.ImportantePara baixar esta imagem, o cluster precisa ter acesso à internet. Se você selecionou Configure SNAT for VPC ao criar o cluster, o acesso à internet já está ativado. Caso contrário, ative-o agora.
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
-
Complete the advanced configuration. Na página Advanced, clique em Create no lado direito de Services para criar um Service do tipo SLB e expor a carga de trabalho na internet. Configure Scaling, Scheduling e Labels and Annotations conforme necessário, e clique em Create na parte inferior da página.
ImportanteA criação de um serviço do tipo SLB provisiona uma instância de Server Load Balancer (SLB), o que gera cobranças no modelo de pagamento conforme o uso. Consulte Pagamento conforme o uso para detalhes de preços. Libere a instância SLB quando não precisar mais dela.

-
Access the application. Na página Complete, clique em View Details no painel Creation Task Submitted. Clique na aba Access Method, localize o serviço chamado
nginx-test-svce clique no link na coluna External Endpoint. A partir da página Deployments, é possível View, Edit e Redeploy a carga de trabalho a qualquer momento.


Criar um Deployment usando kubectl
Conecte-se ao cluster com kubectl antes de prosseguir. Consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.
-
Copie o conteúdo YAML a seguir e salve-o como
deployment.yaml. Ele define um Deployment com duas réplicas e um serviço LoadBalancer que expõe o Deployment na porta 80.apiVersion: apps/v1 kind: Deployment # Workload type metadata: name: nginx-test namespace: default # Change the namespace as needed labels: app: nginx spec: replicas: 2 # Specify the number of pods selector: matchLabels: app: nginx template: # Pod configuration metadata: labels: # Pod labels app: nginx spec: containers: - name: nginx # Container name image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 # Use a specific version of the Nginx image ports: - containerPort: 80 # Port exposed by the container protocol: TCP # Specify the protocol as TCP or UDP. The default is TCP. --- # service apiVersion: v1 kind: Service metadata: name: nginx-test-svc namespace: default # Change the namespace as needed labels: app: nginx spec: selector: app: nginx # Match labels to ensure the service points to the correct pods ports: - port: 80 # Port provided by the service within the cluster targetPort: 80 # Points to the port listened to by the application inside the container (containerPort) protocol: TCP # Protocol. The default is TCP. type: LoadBalancer # Service type. The default is ClusterIP for internal access. -
Aplique o manifesto:
kubectl apply -f deployment.yamlSaída esperada:
deployment.apps/nginx-test created service/nginx-test-svc created -
Execute o comando a seguir para visualizar o endereço IP público do serviço:
kubectl get svcSaída esperada:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.16.**.*** <none> 443/TCP 4h47m nginx-test-svc LoadBalancer 172.16.**.*** 106.14.**.*** 80:31130/TCP 1h10m -
Em um navegador, insira o endereço IP público do Nginx (106.14..*) para acessar a aplicação Nginx.

Referência de configuração do console
Informações básicas


|
Item de Configuração |
Descrição |
|
Name |
Nome da carga de trabalho. Os nomes dos pods pertencentes a ela são gerados com base neste nome. |
|
Namespace |
Namespace ao qual a carga de trabalho pertence. |
|
Replicas |
Quantidade de pods na carga de trabalho. O padrão é 2. |
|
Type |
Tipo da carga de trabalho. Para escolher um tipo, consulte Criar uma carga de trabalho. |
|
Label |
Rótulos da carga de trabalho. |
|
Annotations |
Anotações da carga de trabalho. |
|
Synchronize Timezone |
Define se o contêiner usa o mesmo fuso horário do nó onde reside. |
Contêiner
Configuração avançada
|
Cartão de Configuração |
Item de Configuração |
Descrição |
|
Access Control |
Services |
Um serviço fornece um ponto de entrada unificado e fixo da camada 4 (camada de transporte) para um grupo de pods. É um recurso obrigatório para expor uma carga de trabalho. Serviços suportam vários tipos, incluindo Cluster IP, Node Port e SLB. Antes de configurar um serviço, consulte Gerenciamento de serviços para entender os fundamentos de serviços. |
|
Ingresses |
Um Ingress fornece um ponto de entrada da camada 7 (camada de aplicação) para múltiplos serviços em um cluster e encaminha requisições para diferentes serviços com base na correspondência de nome de domínio. Antes de usar um Ingress, instale um controlador de Ingress. O ACK oferece várias opções para diferentes cenários. Consulte Comparação entre Nginx Ingress, ALB Ingress e MSE Ingress para fazer sua escolha. |
|
|
Scaling |
HPA |
Aciona o dimensionamento automático monitorando métricas de desempenho dos contêineres. O dimensionamento baseado em métricas ajuda a ajustar automaticamente o total de recursos usados por uma carga de trabalho quando a carga de negócios flutua, escalando horizontalmente para lidar com altas cargas e reduzindo para economizar recursos durante baixas cargas. Para mais informações, consulte Usar Horizontal Pod Autoscaling (HPA). |
|
CronHPA |
Aciona o dimensionamento da carga de trabalho em horários agendados. Adequado para cenários com alterações periódicas na carga de negócios, como picos cíclicos de tráfego em redes sociais após o almoço e jantar. Para mais informações, consulte Usar CronHPA para dimensionamento horizontal agendado de pods. |
|
|
Scheduling |
Upgrade Method |
Mecanismo pelo qual uma carga de trabalho substitui pods antigos por novos quando a configuração do pod muda.
|
|
Configurações de afinidade, anti-afinidade e tolerância são usadas para agendamento, garantindo que os pods sejam executados em nós específicos. Operações de agendamento são complexas e exigem planejamento antecipado com base nas suas necessidades. Para operações detalhadas, consulte Agendamento. |
|
|
Labels and Annotations |
Pod Labels |
Adiciona um rótulo a cada pod pertencente a esta carga de trabalho. Vários recursos no cluster, incluindo cargas de trabalho e serviços, correspondem aos pods através de rótulos. O ACK adiciona um rótulo padrão aos pods no formato |
|
Pod Annotations |
Adiciona uma anotação a cada pod pertencente a esta carga de trabalho. Alguns recursos no ACK usam anotações. Edite-as ao utilizar esses recursos. |
Exemplo de YAML de carga de trabalho
O YAML abrangente a seguir demonstra opções comuns de configuração, incluindo limites de recursos, verificações de integridade, variáveis de ambiente de um ConfigMap e um Ingress.
apiVersion: apps/v1
kind: Deployment # Workload type
metadata:
name: nginx-test
namespace: default # Change the namespace as needed
labels:
app: nginx
spec:
replicas: 2 # Specify the number of pods
selector:
matchLabels:
app: nginx
template: # Pod configuration
metadata:
labels: # Pod labels
app: nginx
annotations: # Pod annotations
description: "This is an application deployment"
spec:
containers:
- name: nginx # Image name
image: nginx:1.7.9 # Use a specific version of the Nginx image
ports:
- name: nginx # name
containerPort: 80 # Port exposed by the container
protocol: TCP # Specify the protocol as TCP or UDP. The default is TCP.
command: ["/bin/sh"] # Container start command
args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # Output variables, add command to start nginx
stdin: true # Enable standard input
tty: true # Allocate a virtual terminal
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # Name of the configuration item
key: SPECIAL_LEVEL # Key name of the configuration item
securityContext:
privileged: true # true enables privileged mode, false disables it. The default is false.
resources:
limits:
cpu: "500m" # Maximum CPU usage, 500 millicores
memory: "256Mi" # Maximum memory usage, 256 MiB
ephemeral-storage: "1Gi" # Maximum ephemeral storage usage, 1 GiB
requests:
cpu: "200m" # Minimum requested CPU usage, 200 millicores
memory: "128Mi" # Minimum requested memory usage, 128 MiB
ephemeral-storage: "500Mi" # Minimum requested ephemeral storage usage, 500 MiB
livenessProbe: # Liveness probe configuration
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe: # Readiness probe configuration
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
readOnly: true
volumes:
- name: tz-config
hostPath:
path: /etc/localtime # Mount the host's /etc/localtime file to the same path in the container using volumeMounts and volumes fields.
---
# service
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
namespace: default # Change the namespace as needed
labels:
app: nginx
spec:
selector:
app: nginx # Match labels to ensure the service points to the correct pods
ports:
- port: 80 # Port provided by the service within the cluster
targetPort: 80 # Points to the port listened to by the application inside the container (containerPort)
protocol: TCP # Protocol. The default is TCP.
type: ClusterIP # Service type. The default is ClusterIP for internal access.
---
# ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default # Change the namespace as needed
annotations:
kubernetes.io/ingress.class: "nginx" # Specify the Ingress controller type
# If using Alibaba Cloud SLB Ingress controller, you can specify the following:
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxxxxxxx"
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.spec.s1.small"
spec:
rules:
- host: foo.bar.com # Replace with your domain name
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service # Backend service name
port:
number: 80 # Backend service port
tls: # Optional, for enabling HTTPS
- hosts:
- foo.bar.com # Replace with your domain name
secretName: tls-secret # TLS certificate Secret name
Próximos passos
Para aplicações que exigem armazenamento persistente, como bancos de dados, use um StatefulSet. Consulte Criar uma carga de trabalho com estado (StatefulSet).
Se encontrar problemas ao criar uma carga de trabalho, consulte as Perguntas frequentes sobre Cargas de Trabalho.
Se um pod estiver em estado anormal, consulte Solucionar exceções de pods.







