Container Compute Service (ACS) permite crear aplicaciones sin estado mediante imágenes de contenedor, plantillas de orquestación en YAML o la herramienta de línea de comandos kubectl. Este tema toma como ejemplo una aplicación Nginx para mostrar cómo crear una aplicación sin estado en un clúster de ACS.
Consola
Crear a partir de una imagen
Paso 1: Configurar la información básica de la aplicación
Inicie sesión en la consola de ACS. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo, seleccione Workloads > Deployments.
En la página Deployments, haga clic en Create from Image.
-
En el asistente Basic Information, configure los ajustes básicos de su aplicación.
Elemento de configuración
Descripción
Application Name
Introduzca un nombre para la aplicación.
Replicas:
Número de pods de la aplicación. El valor predeterminado es 2.
Workloads
Seleccione Deployment.
Label
Agregue una etiqueta para identificar esta aplicación.
Annotations
Agregue una anotación a la aplicación.
Instance Type
Seleccione un tipo de cómputo. Para más detalles sobre los tipos de cómputo, consulte Overview of ACS pod instances.
QoS Type
Seleccione una clase de calidad de servicio (QoS).
Haga clic en Next para ir al asistente Container.
Paso 2: Configurar los contenedores
En la página del asistente Container, configure la imagen del contenedor, los recursos, los puertos, las variables de entorno, las comprobaciones de estado, el ciclo de vida, los volúmenes y el registro.
Para agregar varios contenedores al pod, haga clic en Add Container junto a la pestaña Container 1.
-
En la sección General, complete la configuración básica del contenedor.
Elemento de configuración
Descripción
Image Name
-
Seleccione una imagen.
Haga clic en Select Image para elegir la imagen obligatoria.
-
Container Registry Enterprise Edition: seleccione una imagen de Enterprise Edition alojada en Alibaba Cloud Container Registry (ACR). Debe seleccionar la región y la instancia de ACR donde se encuentra la imagen. Para obtener más información sobre ACR, consulte What is Container Registry?.
-
Container Registry Personal Edition (debe activarse primero): seleccione una imagen de Personal Edition alojada en ACR. Debe seleccionar la región y la instancia de ACR donde se encuentra la imagen.
-
Artifact center: incluye imágenes base de sistemas operativos para aplicaciones en contenedores, imágenes de entornos de ejecución de lenguajes e imágenes relacionadas con inteligencia artificial y big data. Este ejemplo utiliza una imagen de Nginx de Artifact Center. Para obtener más información, consulte Artifact Center.
-
-
(Opcional) Establezca la política de extracción de imágenes.
En la lista desplegable Image Pull Policy, seleccione una política de extracción. De forma predeterminada, no se establece ninguna política y Kubernetes utiliza IfNotPresent.
-
IfNotPresent: si la imagen ya existe de forma local (se extrajo previamente al host), no se vuelve a extraer. En caso contrario, se extrae la imagen.
-
Always: siempre extrae la imagen durante el despliegue o el escalado horizontal, e ignora cualquier copia local.
-
Never: utiliza únicamente la imagen local.
-
-
(Opcional) Establezca un secreto de extracción de imágenes.
Haga clic en Set Image Pull Secret para acceder de forma segura a las imágenes privadas.
-
En las instancias de ACR Personal Edition, puede extraer imágenes de contenedores mediante la configuración de un secreto de extracción de imágenes. Para obtener más información, consulte Manage secrets.
-
En las instancias de ACR Enterprise Edition, puede extraer imágenes sin contraseñas mediante el componente passwordless. Para obtener más detalles, consulte Pull ACR images without passwords.
-
Required Resources
Establezca las cuotas de recursos del contenedor.
-
CPU: especifique los valores de solicitud y límite de CPU. De forma predeterminada, la solicitud es igual al límite y la facturación utiliza el método pay-as-you-go. Si establece un límite distinto mediante YAML, la solicitud se sobrescribe para coincidir con dicho límite. Para obtener más detalles, consulte Resource specifications.
-
Memory: especifique los valores de solicitud y límite de memoria. De forma predeterminada, la solicitud es igual al límite y la facturación utiliza el método pay-as-you-go. Si establece un límite distinto mediante YAML, la solicitud se sobrescribe para coincidir con dicho límite. Para obtener más detalles, consulte Resource specifications.
Interactive Session
(Opcional) Configure las opciones de inicio del contenedor.
-
stdin: envía la entrada de la consola al contenedor.
-
tty: adjunta la consola de entrada estándar como entrada de consola del contenedor.
NotaPor lo general, se seleccionan stdin y tty de manera conjunta para vincular la terminal (tty) a la entrada estándar (stdin) del contenedor. Por ejemplo, un programa interactivo lee la entrada del usuario desde stdin y muestra la salida en la terminal.
Init Containers
(Opcional) Seleccione esta opción para crear un contenedor de inicialización.
Los contenedores de inicialización proporcionan un mecanismo que bloquea o retrasa el inicio de los contenedores de aplicación hasta que finalizan correctamente. Tras ejecutarse con éxito, los contenedores de aplicación del pod se inician en paralelo. Por ejemplo, puede utilizar contenedores de inicialización para comprobar la disponibilidad de los servicios dependientes. Estos contenedores pueden incluir utilidades o scripts de instalación que no están presentes en la imagen de la aplicación para inicializar el entorno de ejecución; por ejemplo, establecer parámetros del kernel o generar archivos de configuración. Para obtener más información, consulte Init Containers.
-
-
(Opcional) En la sección Ports, haga clic en Add para configurar los puertos del contenedor.
Elemento de configuración
Descripción
Name
Especifique un nombre para el puerto del contenedor.
Container Port
Especifique el puerto de acceso expuesto del contenedor. El número de puerto debe estar entre 1 y 65535.
Protocol
Los protocolos compatibles son TCP y UDP.
-
(Opcional) En la sección Environments, haga clic en Add para configurar las variables de entorno.
Puede configurar variables de entorno para el pod mediante pares clave-valor para agregar indicadores de entorno o pasar configuraciones. Para obtener más información, consulte Variables de entorno del pod.
Parámetro
Descripción
Type
Establezca el tipo de variable de entorno:
-
Custom
-
ConfigMaps
-
Secrets
-
Value/ValueFrom
-
ResourceFieldRef
ConfigMap y Secret admiten hacer referencia a archivos completos.
Este ejemplo utiliza un Secret. Cuando seleccione el tipo Secrets y elija un Secret de destino, se hará referencia de forma predeterminada a todos los archivos de ese Secret. Después de seleccionar Secret, introduzca un Variable Name y seleccione el nombre del Secret y la clave correspondientes en las dos listas desplegables de la derecha.
El YAML correspondiente hace referencia al Secret completo:
envFrom: - secretRef: name: testVariable Key
Establezca el nombre de la variable de entorno.
Value/ValueFrom
Establezca el valor de la variable referenciada.
-
-
(Opcional) En la sección Health Check, habilite Liveness, Readiness y Startup según sea necesario.
Liveness: se usa para determinar si un contenedor se ejecuta con normalidad. Si falla un número específico de comprobaciones, kubelet reinicia el contenedor. Las sondas Liveness detectan problemas que dejan al contenedor en ejecución pero sin capacidad de respuesta, como un interbloqueo.
Readiness: se usa para determinar si un contenedor está listo para recibir tráfico. Un pod se adjunta al backend de un servicio solo después de que su sonda Readiness se completa correctamente.
Startup: se ejecuta únicamente cuando inicia el contenedor para comprobar si este arrancó correctamente. La Liveness Probe y la Readiness Probe se ejecutan solo después de que la sonda Startup se completa correctamente.
Para obtener más información, consulte Configure liveness, readiness, and startup probes.
Parámetro
Descripción
HTTP
Envía una solicitud HTTP GET al contenedor. Los parámetros compatibles incluyen los siguientes:
-
Protocol: HTTP o HTTPS.
-
Path: La ruta para acceder al servidor HTTP.
-
Port: El puerto expuesto del contenedor o el nombre del puerto. El número de puerto debe estar entre 1 y 65535.
-
HTTP Header: Encabezados personalizados en la solicitud HTTP. HTTP permite encabezados duplicados. Configúrelos como pares clave-valor.
-
Initial Delay (s): El parámetro initialDelaySeconds especifica cuántos segundos se espera después de que inicia el contenedor antes de ejecutar la primera comprobación. El valor predeterminado es 3 segundos.
-
Period (s): El parámetro periodSeconds especifica el intervalo de tiempo entre las comprobaciones. El valor predeterminado es 10 segundos. El mínimo es 1 segundo.
-
Timeout (s): El parámetro timeoutSeconds especifica la duración del tiempo de espera de la comprobación. El valor predeterminado es 1 segundo. El mínimo es 1 segundo.
-
Healthy Threshold: El número mínimo de comprobaciones exitosas consecutivas obligatorias tras un error para marcar el contenedor como saludable. El valor predeterminado es 1. El mínimo es 1. Para las comprobaciones de disponibilidad (liveness), este valor debe ser 1.
-
Unhealthy Threshold: El número mínimo de comprobaciones con errores consecutivas obligatorias tras un éxito para marcar el contenedor como no saludable. El valor predeterminado es 3. El mínimo es 1.
TCP
Abre un socket TCP hacia el contenedor. Kubelet intenta abrir un socket en el puerto especificado. Si lo logra, el contenedor se considera saludable; de lo contrario, se marca con errores. Los parámetros compatibles incluyen los siguientes:
-
Port: El puerto expuesto del contenedor o el nombre del puerto. El número de puerto debe estar entre 1 y 65535.
-
Initial Delay (s): El parámetro initialDelaySeconds especifica cuántos segundos se espera después de que inicia el contenedor antes de ejecutar la primera comprobación. El valor predeterminado es 15 segundos.
-
Period (s): El parámetro periodSeconds especifica el intervalo de tiempo entre las comprobaciones. El valor predeterminado es 10 segundos. El mínimo es 1 segundo.
-
Timeout (s): El parámetro timeoutSeconds especifica la duración del tiempo de espera de la comprobación. El valor predeterminado es 1 segundo. El mínimo es 1 segundo.
-
Healthy Threshold: El número mínimo de comprobaciones exitosas consecutivas obligatorias tras un error para marcar el contenedor como saludable. El valor predeterminado es 1. El mínimo es 1. Para las comprobaciones de disponibilidad (liveness), este valor debe ser 1.
-
Unhealthy Threshold: El número mínimo de comprobaciones con errores consecutivas obligatorias tras un éxito para marcar el contenedor como no saludable. El valor predeterminado es 3. El mínimo es 1.
Command
Ejecuta un comando dentro del contenedor para comprobar su estado. Los parámetros compatibles incluyen los siguientes:
-
Command: El comando que se usa para comprobar el estado del contenedor.
-
Initial Delay (s): El parámetro initialDelaySeconds especifica cuántos segundos se espera después de que inicia el contenedor antes de ejecutar la primera comprobación. El valor predeterminado es 5 segundos.
-
Period (s): El parámetro periodSeconds especifica el intervalo de tiempo entre las comprobaciones. El valor predeterminado es 10 segundos. El mínimo es 1 segundo.
-
Timeout (s): El parámetro timeoutSeconds especifica la duración del tiempo de espera de la comprobación. El valor predeterminado es 1 segundo. El mínimo es 1 segundo.
-
Healthy Threshold: El número mínimo de comprobaciones exitosas consecutivas obligatorias tras un error para marcar el contenedor como saludable. El valor predeterminado es 1. El mínimo es 1. Para las comprobaciones de disponibilidad (liveness), este valor debe ser 1.
-
Unhealthy Threshold: El número mínimo de comprobaciones con errores consecutivas obligatorias tras un éxito para marcar el contenedor como no saludable. El valor predeterminado es 3. El mínimo es 1.
-
(Opcional) En la sección Lifecycle, configure el ciclo de vida del contenedor.
Para el ciclo de vida del contenedor, puede configurar comandos previos al inicio, controladores posteriores al inicio y controladores previos a la detención. Para obtener más información, consulte Configure lifecycle.
Parámetro
Descripción
Start
Especifique un comando y sus argumentos para ejecutar antes de que inicie el contenedor.
Post-start Hook
Especifique un comando para ejecutar después de que inicie el contenedor.
Pre-stop Hook
Especifique un comando para ejecutar antes de que finalice el contenedor.
-
(Opcional) En la sección Volume, monte volúmenes en el contenedor.
Almacenamiento local: monte ConfigMaps, Secrets o directorios temporales en las rutas del contenedor. Para obtener más información, consulte volúmenes.
Almacenamiento en la nube: admite discos en la nube, NAS, entre otros. Para más detalles, consulte Storage overview.
-
(Opcional) En la sección Log, configure los campos Collection Configuration y Custom Tag.
Parámetro
Descripción
Collection Settings
-
Logstore: crea un logstore correspondiente en Simple Log Service para almacenar los registros recopilados.
-
Log Path in Container (Can be set to stdout): admite registros de salida estándar (stdout) y de texto.
-
Stdout: recopila los registros de salida estándar del contenedor.
-
Registros de texto: recopila registros desde una ruta específica dentro del contenedor. Este ejemplo recopila todos los registros de texto en
/var/log/nginxy admite caracteres comodín.
-
Custom Tags
También puede establecer etiquetas personalizadas. Una vez configuradas, estas etiquetas se incluyen junto con los registros del contenedor. Las etiquetas personalizadas le ayudan a categorizar los registros para facilitar las estadísticas y el filtrado durante el análisis.
-
Haga clic en Next para ir al asistente Advanced.
Paso 3: Completar la configuración avanzada
En la página del asistente Advanced, configure el control de acceso, el escalado, la programación y las etiquetas o anotaciones.
-
En la sección Access Control, configure cómo se expondrán los pods del backend.
Este ejemplo utiliza ClusterIP e Ingress para crear una aplicación Nginx con acceso público.
-
Configure un Service: haga clic en Create junto a Services para establecer los parámetros del servicio.
-
Configure Ingress: haga clic en Create junto a Ingresses para establecer las reglas de enrutamiento de los pods del backend.
-
-
(Opcional) En la sección Scaling, habilite HPA para atender las distintas demandas de carga.
-
Container Compute Service admite el escalado automático según el uso de CPU y memoria de los pods.
NotaPara habilitar el escalado automático, debe especificar los recursos solicitados para el contenedor. De lo contrario, esta función no operará correctamente.
Elemento de configuración
Descripción
Metric
Admite CPU y memoria. Debe coincidir con el tipo de recurso solicitado.
Trigger Condition
El umbral del porcentaje de uso de recursos. Al superarse, el sistema escala horizontalmente.
Max. Replicas
El número máximo de contenedores que se pueden escalar horizontalmente para este tipo de carga.
Min. Replicas
El límite inferior para reducir la escala de esta carga de trabajo.
Container Compute Service también admite el escalado programado (CronHPA) para escalar automáticamente los clústeres de Kubernetes en momentos específicos. Antes de habilitar el escalado programado, instale el componente ack-kubernetes-cronhpa-controller. Para más información, consulte Scheduled scaling (CronHPA).
-
(Opcional) En la sección Labels and Annotations, haga clic en Add para establecer las etiquetas y anotaciones del pod.
Haga clic en Create.
Paso 4: Consultar la información de la aplicación
Una vez que se crea correctamente, el sistema lo redirige a la página de finalización. Haga clic en View Details para ir a la página de detalles del Deployment.
También puede consultar la información del Deployment en la página Deployments. Haga clic en el nombre del Deployment correspondiente o en Details, dentro de la columna Actions, para ir a la página de detalles de la aplicación.
Crear mediante YAML
En la orquestación de plantillas de ACS, usted define los objetos de recurso obligatorios para su aplicación. Después, los combina en una aplicación completa mediante mecanismos como los selectores de etiquetas.
Este ejemplo muestra cómo crear una aplicación Nginx con una plantilla de orquestación que contiene un Deployment y un Service. El Deployment crea los recursos de pod y el Service se vincula a esos pods para formar una aplicación Nginx completa.
Inicie sesión en la consola de ACS. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo, elija Workloads > Deployments.
En la página Deployments, haga clic en Create from YAML en la esquina superior derecha.
-
En la Create página, configure la plantilla y haga clic en Create.
Sample Template: ACS proporciona ejemplos de YAML de Kubernetes para diversos tipos de recursos con el fin de agilizar el despliegue. También puede escribir su propio archivo YAML conforme a los estándares de Kubernetes.
Create Workload: Defina rápidamente una plantilla YAML mediante esta función.
Use Existing Template: Importe una plantilla de orquestación existente.
Save Template: Guarde la plantilla de orquestación que configuró.
A continuación se muestra un ejemplo de YAML para una aplicación Nginx. Con este ejemplo se crea rápidamente un Deployment de Nginx y un servicio LoadBalancer de tipo CLB.
NotaACS admite la orquestación con YAML de Kubernetes. Utilice el separador
---para definir varios objetos de recurso en una sola plantilla.(Opcional) Al montar volúmenes mediante Volume, los archivos del directorio de montaje se sobrescriben de forma predeterminada. Para conservar los archivos existentes, configure el parámetro
subPath.
Después de hacer clic en Create, se muestran los mensajes de estado del despliegue.
kubectl
Use los comandos de kubectl para crear y consultar aplicaciones.
Conéctese a su clúster. Para más detalles, consulte Obtain cluster kubeconfig and connect using kubectl o Manage Kubernetes clusters using kubectl in CloudShell.
-
Ejecute el siguiente comando para iniciar un contenedor (por ejemplo, un servidor web Nginx).
kubectl create deployment nginx --image=registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest -
Ejecute el siguiente comando para crear un endpoint de servicio para el contenedor. Si especifica
--type=LoadBalancer, se crea un SLB de Alibaba Cloud que enruta el tráfico al contenedor Nginx.kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer -
Ejecute el siguiente comando para listar los contenedores nginx en ejecución.
kubectl get pod |grep nginxResultado esperado:
NAME READY STATUS RESTARTS AGE nginx-2721357637-d**** 1/1 Running 1 9h