Un Deployment es un tipo común de carga de trabajo de Kubernetes que se utiliza para gestionar aplicaciones sin estado. Garantiza que un número específico de Pods réplica se ejecute siempre en el clúster con el estado definido. Este tema describe cómo crear una aplicación sin estado en un clúster de Container Service for Kubernetes (ACK) mediante la consola de ACK y kubectl.
Antes de empezar
Antes de crear una carga de trabajo, lea Workloads para comprender los conceptos básicos y las consideraciones clave. Este tema se divide en las siguientes secciones:
Create a Deployment: Proporciona guías de inicio rápido sobre cómo crear un Deployment mediante la consola y kubectl.
Configuration parameters: Explica los parámetros de configuración de la consola y proporciona un archivo YAML de ejemplo para kubectl.
Los ejemplos de este tema utilizan una imagen pública. Para extraer una imagen pública, el clúster o los nodos deben tener acceso a Internet público. Puede habilitar esto de una de las siguientes maneras:
Enable public network access for a cluster (Recomendado): Cree una puerta de enlace NAT para la VPC donde se despliega el clúster. Esto proporciona acceso a Internet público para todos los recursos del clúster.
Asigne una static public IP address a un nodo: Los nodos con una dirección IP pública pueden extraer imágenes públicas. Sin embargo, debe asignar una dirección IP pública a cada nodo donde despliegue la carga de trabajo.
Crear un Deployment
Usar la consola
Los siguientes pasos presentan un proceso simplificado para crear una carga de trabajo. Siga estos pasos para desplegar y verificar rápidamente su aplicación. Una vez que esté familiarizado con las operaciones básicas, consulte Configuration parameters para personalizar su carga de trabajo.
-
Configure basic application information
-
Inicie sesión en la consola de ACK y haga clic en Clusters en el panel de navegación izquierdo. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, elija . En la página Deployments, haga clic en Create from Image.

-
En la página Basic Information, configure los ajustes básicos de la aplicación. Luego, haga clic en Next.

-
-
Configure the container
En la sección Container Configuration, configure el Image Name y el Port. Las demás configuraciones son opcionales y puede mantener los valores predeterminados. A continuación, haga clic en Next para abrir la página del asistente Advanced Settings. La dirección de la imagen es la siguiente.
ImportantePara extraer esta imagen, debe habilitar el acceso a Internet público para su clúster. Si mantuvo seleccionada la opción Configure SNAT for VPC al crear el clúster, el acceso a Internet público ya está habilitado. De lo contrario, 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
En la página Advanced, configure el control de acceso, el escalado y la programación. En la sección Access Control, configure cómo exponer los Pods del backend y haga clic en OK. Después, haga clic en Create en la parte inferior de la página.
ImportanteEste paso crea un Service de tipo LoadBalancer para exponer la carga de trabajo. La instancia de Server Load Balancer (SLB) asociada genera costos. Para obtener más información, consulte Pay-as-you-go. Si ya no necesita la instancia de SLB, libérela de inmediato para evitar cargos innecesarios.

-
View the application
Una vez creada la aplicación, aparece la página Complete. En el panel Creation Task Submitted, haga clic en View Details. Haga clic en la pestaña Access Method, busque el Service recién creado (nginx-test-svc) y luego haga clic en el enlace de la columna External Endpoint para acceder a la página de bienvenida de NGINX.


Puede View, Edit o Redeploy la carga de trabajo creada.

Usar kubectl
Antes de crear una carga de trabajo, conéctese a su clúster de ACK mediante kubectl. Para obtener más información, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Copie la siguiente configuración YAML y guárdela en deployment.yaml. Esta configuración define un Deployment y un Service de tipo
LoadBalancerpara acceso 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). -
Ejecute el siguiente comando para crear el Deployment y el Service:
kubectl apply -f deployment.yamlSalida esperada:
deployment.apps/nginx-test created service/nginx-test-svc created -
Ejecute el siguiente comando para consultar la dirección IP pública del Service:
kubectl get svcSalida 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 -
Introduzca la dirección IP pública de Nginx (
106.14.**.***) en un navegador para acceder al contenedor Nginx de la carga de trabajo.
Parámetros de configuración
Parámetros de la consola
Información básica

|
Parámetro |
Descripción |
|
Name |
Nombre de la carga de trabajo. Los nombres de los Pods se derivan de este valor. |
|
Namespace |
Namespace que contiene la carga de trabajo. |
|
Replicas |
Número de réplicas del Pod. Valor predeterminado: 2. |
|
Type |
Tipo de carga de trabajo. Para obtener más información sobre cómo seleccionar un tipo de carga de trabajo, consulte Create a workload. |
|
Label |
Etiquetas de la carga de trabajo. |
|
Annotations |
Anotaciones de la carga de trabajo. |
|
Synchronize Timezone |
Especifica si el contenedor utiliza la misma zona horaria que su nodo host. |
Configuración del contenedor
Configuración avanzada
Tarjeta de configuración | Parámetro | Descripción |
Access Control | Services | Un Service proporciona un endpoint estable y unificado de capa 4 (capa de transporte) para un grupo de Pods. Es un recurso obligatorio para exponer una carga de trabajo. Los Services admiten varios tipos, incluidos Cluster IP, Node Port y Load Balancer. Antes de configurar un Service, consulte Service management para comprender los conceptos básicos. |
Ingresses | Un Ingress proporciona un punto de entrada de capa 7 (capa de aplicación) para múltiples Services en un clúster y reenvía solicitudes a diferentes Services según la coincidencia de nombres de dominio. Antes de usar un Ingress, debe instalar un controlador de Ingress. ACK ofrece varias opciones para diferentes escenarios. Para obtener más información, consulte Comparison of NGINX Ingress Controller, ALB Ingress Controller, and MSE Ingress gateways. | |
Scaling | Horizontal Pod Autoscaler (HPA) | Horizontal Pod Autoscaler (HPA) escala automáticamente el número de Pods según las métricas de rendimiento del contenedor. Esto le ayuda a ajustar los recursos totales utilizados por su carga de trabajo en respuesta a fluctuaciones en la carga de negocio, escalando horizontalmente para manejar cargas altas y reduciendo la escala para ahorrar recursos durante cargas bajas. Para obtener más información, consulte Use a HorizontalPodAutoscaler to automatically scale Pods. |
Cron Horizontal Pod Autoscaler (CronHPA) | Cron Horizontal Pod Autoscaler (CronHPA) escala las cargas de trabajo en horarios programados. Es adecuado para escenarios con cambios cíclicos predecibles en la carga de negocio, como los picos de tráfico en plataformas de redes sociales después del almuerzo y la cena. Para obtener más información, consulte Use a CronHPA to automatically scale Pods. | |
Scheduling | Upgrade strategy | Estrategia utilizada para reemplazar Pods antiguos por nuevos cuando cambia la configuración del Pod.
|
| La afinidad, antiafinidad y tolerancias se utilizan para controlar cómo se programan los Pods en los nodos. Estas operaciones son complejas y requieren planificación previa. Para obtener más información, consulte Scheduling. | |
Labels and annotations | Pod labels | Agregue una etiqueta a cada Pod que pertenezca a la carga de trabajo. En un clúster, recursos como cargas de trabajo y Services usan etiquetas para coincidir con los Pods. De forma predeterminada, ACK agrega una etiqueta con el formato |
Pod annotations | Agrega anotaciones a cada Pod en esta carga de trabajo. Algunas funciones en ACK utilizan anotaciones, que puede agregar o modificar según sea necesario al usar esas funciones. |
YAML de carga de trabajo de ejemplo
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.
Referencia
Para aplicaciones que requieren almacenamiento persistente y estable, como bases de datos, utilice un StatefulSet. Para obtener más información, consulte Create a stateful workload (StatefulSet).
Si encuentra problemas al crear una carga de trabajo, consulte Workloads FAQ.
Si un Pod se encuentra en un estado anómalo, consulte Troubleshoot Pod exceptions.







