Um Deployment é um tipo comum de workload do Kubernetes usado para gerenciar aplicações stateless. Ele garante que um número especificado de Pods réplica esteja sempre em execução no cluster, no estado definido por você. Este tópico descreve como criar uma aplicação stateless em um cluster do Container Service for Kubernetes (ACK) utilizando o console do ACK e o kubectl.
Antes de começar
Antes de criar um workload, leia Workloads para compreender os conceitos básicos e as considerações principais. Este tópico está dividido nas seguintes seções:
Create a Deployment: Fornece guias de início rápido sobre como criar um Deployment usando o console e o kubectl.
Configuration parameters: Explica os parâmetros de configuração do console e fornece um arquivo YAML de exemplo para o kubectl.
Os exemplos neste tópico utilizam uma imagem pública. Para baixar uma imagem pública, seu cluster ou nós devem ter acesso à internet pública. Habilite esse acesso de uma das seguintes maneiras:
Enable public network access for a cluster (Recomendado): Crie um gateway NAT para a VPC onde o cluster está implantado. Isso fornece acesso à internet pública para todos os recursos no cluster.
Atribua um static public IP address a um nó: Nós com um endereço IP público podem baixar imagens públicas. No entanto, atribua um endereço IP público a cada nó onde implantar o workload.
Criar um Deployment
Usar o console
As etapas a seguir apresentam um processo simplificado para criar um workload. Siga estas etapas para implantar e verificar sua aplicação rapidamente. Após familiarizar-se com as operações básicas, consulte Configuration parameters para personalizar seu workload.
-
Configure basic application information
-
Faça login no console do ACK e clique em Clusters no painel de navegação à esquerda. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, escolha . Na página Deployments, clique em Create from Image.

-
Na página Basic Information, configure as definições básicas da aplicação. Em seguida, clique em Next.

-
-
Configure the container
Na seção Container Configuration, configure o Image Name e a Port. As outras configurações são opcionais; mantenha os valores padrão se preferir. Depois, clique em Next para abrir a página do assistente Advanced Settings. O endereço da imagem é o seguinte.
ImportantePara baixar esta imagem, habilite o acesso à internet pública para o seu cluster. Se você manteve a opção Configure SNAT for VPC selecionada ao criar o cluster, o acesso à internet pública já está habilitado. Caso contrário, consulte Enable public network access for a cluster.
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
-
Configure advanced settings
Na página Advanced, configure as definições de controle de acesso, dimensionamento e agendamento. Na seção Access Control, configure como expor os Pods de backend e clique em OK. Em seguida, clique em Create na parte inferior da página.
ImportanteEsta etapa cria um Service do tipo LoadBalancer para expor o workload. A instância associada do Server Load Balancer (SLB) gera custos. Para mais informações, consulte Pay-as-you-go. Se não precisar mais da instância do SLB, libere-a prontamente para evitar cobranças desnecessárias.

-
View the application
Após a criação da aplicação, a página Complete é exibida. No painel Creation Task Submitted, clique em View Details. Clique na aba Access Method, localize o Service recém-criado (nginx-test-svc) e clique no link na coluna External Endpoint para acessar a página de boas-vindas do NGINX.


É possível View, Edit ou Redeploy o workload criado.

Usar o kubectl
Antes de criar um workload, conecte-se ao seu cluster ACK usando o kubectl. Para mais informações, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Copie a seguinte configuração YAML e salve-a em deployment.yaml. Esta configuração define um Deployment e um Service do tipo
LoadBalancerpara acesso externo.apiVersion: apps/v1 kind: Deployment # The type of workload. metadata: name: nginx-test namespace: default # The namespace. Change it based on your requirements. labels: app: nginx spec: replicas: 2 # The number of Pod replicas. selector: matchLabels: app: nginx template: # The Pod template. metadata: labels: # The Pod labels. app: nginx spec: containers: - name: nginx # The container name. image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 # The NGINX image and its version. ports: - containerPort: 80 # The port exposed by the container. protocol: TCP # The protocol. You can set it to TCP or UDP. Default value: TCP. --- # The Service definition. apiVersion: v1 kind: Service metadata: name: nginx-test-svc namespace: default # The namespace. Change it based on your requirements. labels: app: nginx spec: selector: app: nginx # Selects Pods with the specified label. ports: - port: 80 # The port exposed by the Service in the cluster. targetPort: 80 # The container port that the traffic is forwarded to. protocol: TCP # The protocol. Default value: TCP. type: LoadBalancer # The type of Service. Default value: ClusterIP (for internal access only). -
Execute o seguinte comando para criar o Deployment e o Service:
kubectl apply -f deployment.yamlSaída esperada:
deployment.apps/nginx-test created service/nginx-test-svc created -
Execute o seguinte comando para consultar o endereço IP público do Service:
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 -
Insira o endereço IP público do Nginx (
106.14.**.***) em um navegador para acessar o contêiner Nginx do workload.
Parâmetros de configuração
Parâmetros do console
Informações básicas

|
Parâmetro |
Descrição |
|
Name |
O nome do workload. Os nomes dos Pods são derivados deste nome. |
|
Namespace |
O namespace que contém o workload. |
|
Replicas |
O número de réplicas de Pod. Valor padrão: 2. |
|
Type |
O tipo do workload. Para mais informações sobre como selecionar um tipo de workload, consulte Create a workload. |
|
Label |
Os rótulos do workload. |
|
Annotations |
As anotações do workload. |
|
Synchronize Timezone |
Especifica se o contêiner usa o mesmo fuso horário do seu nó host. |
Configuração do contêiner
Configuração avançada
Cartão de configuração | Parâmetro | Descrição |
Access Control | Services | Um Service fornece um endpoint estável e unificado da Camada 4 (camada de transporte) para um grupo de Pods. É um recurso obrigatório para expor um workload. Os Services suportam vários tipos, incluindo Cluster IP, Node Port e Load Balancer. Antes de configurar um Service, consulte Service management para entender os conceitos básicos. |
Ingresses | Um Ingress fornece um ponto de entrada da Camada 7 (camada de aplicação) para múltiplos Services em um cluster e encaminha solicitações para diferentes Services 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. Para mais informações, consulte Comparison of NGINX Ingress Controller, ALB Ingress Controller, and MSE Ingress gateways. | |
Scaling | Horizontal Pod Autoscaler (HPA) | O Horizontal Pod Autoscaler (HPA) dimensiona automaticamente o número de Pods com base nas métricas de desempenho do contêiner. Isso ajuda a ajustar o total de recursos usados pelo seu workload em resposta a flutuações na carga de negócios, escalando horizontalmente para lidar com altas cargas e reduzindo a escala para economizar recursos durante baixas cargas. Para mais informações, consulte Use a HorizontalPodAutoscaler to automatically scale Pods. |
Cron Horizontal Pod Autoscaler (CronHPA) | O Cron Horizontal Pod Autoscaler (CronHPA) dimensiona workloads em horários agendados. Indicado para cenários com mudanças cíclicas previsíveis na carga de negócios, como picos de tráfego em plataformas de mídia social após o almoço e jantar. Para mais informações, consulte Use a CronHPA to automatically scale Pods. | |
Scheduling | Upgrade strategy | A estratégia usada para substituir Pods antigos por novos quando a configuração do Pod muda.
|
| Afinidade, anti-afinidade e tolerâncias são usados para controlar como os Pods são agendados nos nós. Essas operações são complexas e exigem planejamento prévio. Para mais informações, consulte Scheduling. | |
Labels and annotations | Pod labels | Adiciona um rótulo a cada Pod pertencente ao workload. Em um cluster, recursos como workloads e Services usam rótulos para corresponder aos Pods. Por padrão, o ACK adiciona um rótulo no formato |
Pod annotations | Adiciona anotações a cada Pod neste workload. Alguns recursos no ACK usam anotações, que podem ser adicionadas ou modificadas conforme necessário ao usar esses recursos. |
YAML de workload de exemplo
apiVersion: apps/v1
kind: Deployment # The type of workload.
metadata:
name: nginx-test
namespace: default # The namespace. Change it based on your requirements.
labels:
app: nginx
spec:
replicas: 2 # The number of Pod replicas.
selector:
matchLabels:
app: nginx
template: # The Pod template.
metadata:
labels: # The Pod labels.
app: nginx
annotations: # The Pod annotations.
description: "This is an application deployment"
spec:
containers:
- name: nginx # The container name.
image: nginx:1.7.9 # The NGINX image and its version.
ports:
- name: nginx # The port name.
containerPort: 80 # The port exposed by the container.
protocol: TCP # The protocol. You can set it to TCP or UDP. Default value: TCP.
command: ["/bin/sh"] # The entrypoint of the container.
args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # Prints variables and starts NGINX.
stdin: true # Enables standard input.
tty: true # Allocates a pseudo-TTY.
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # The name of the ConfigMap.
key: SPECIAL_LEVEL # The key in the ConfigMap.
securityContext:
privileged: true # Enables privileged mode if set to true. Default value: false.
resources:
limits:
cpu: "500m" # The maximum amount of CPU, 500 millicores.
memory: "256Mi" # The maximum amount of memory, 256 MiB.
ephemeral-storage: "1Gi" # The maximum amount of ephemeral storage, 1 GiB.
requests:
cpu: "200m" # The minimum requested amount of CPU, 200 millicores.
memory: "128Mi" # The minimum requested amount of memory, 128 MiB.
ephemeral-storage: "500Mi" # The minimum requested amount of ephemeral storage, 500 MiB.
livenessProbe: # The configuration of the liveness probe.
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe: # The configuration of the readiness probe.
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 # Mounts the /etc/localtime file from the host to the same path in the container.
---
# The Service definition.
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
namespace: default # The namespace. Change it based on your requirements.
labels:
app: nginx
spec:
selector:
app: nginx # Selects Pods with the specified label.
ports:
- port: 80 # The port exposed by the Service in the cluster.
targetPort: 80 # The container port that the traffic is forwarded to.
protocol: TCP # The protocol. Default value: TCP.
type: ClusterIP # The type of Service. Default value: ClusterIP (for internal access only).
---
# The Ingress definition.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default # The namespace. Change it based on your requirements.
annotations:
kubernetes.io/ingress.class: "nginx" # Specifies the Ingress controller.
# If you use an Alibaba Cloud SLB Ingress controller, you can add the following annotations:
# 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-test-svc # The name of the backend Service.
port:
number: 80 # The port of the backend Service.
tls: # Optional. Used to enable HTTPS.
- hosts:
- foo.bar.com # Replace with your domain name.
secretName: tls-secret # The name of the Secret that contains the TLS certificate.
Referência
Para aplicações que requerem armazenamento persistente e estável, como bancos de dados, use um StatefulSet. Para mais informações, consulte Create a stateful workload (StatefulSet).
Se encontrar problemas ao criar um workload, consulte Workloads FAQ.
Se um Pod estiver em um estado anormal, consulte Troubleshoot Pod exceptions.







