[De la entrada al abandono-Kubernetes] Escala de la aplicación sin estado de entrada de Kubernetes

Prólogo

En lo anterior [desde la entrada hasta el abandono-Kubernetes] Implementación de la aplicación de entrada Kubernetes , aprendimos cómo implementar la aplicación a través de la línea de comandos. En este artículo, aprendemos cómo implementar la aplicación a través del archivo de configuración yaml y expandir y reducir la aplicación.

Objetos Kubernetes

Este párrafo se refiere a las notas de estudio del manual oficial de kubernetes . Se recomienda obtener una comprensión preliminar. Si ya comprende los conceptos relevantes, puede omitir este párrafo y mirar directamente las siguientes operaciones.

Los objetos de Kubernetes son entidades persistentes. Kubernetes utiliza estas entidades para representar el estado de todo el clúster.
Se describe la siguiente información:

  • Qué aplicaciones en contenedores se están ejecutando (y en qué nodo)
  • Recursos que pueden ser utilizados por las aplicaciones.
  • Estrategias sobre el rendimiento del tiempo de ejecución de la aplicación, como la estrategia de reinicio, la estrategia de actualización y la estrategia de tolerancia a fallas

Una vez que se crea el objeto, el clúster k8s continuará trabajando para garantizar que el objeto cumpla con el estado deseado.

Especificación de objeto (Spec) y estado (Estado)

Cada objeto de Kubernetes contiene dos campos de objeto anidados, que son responsables de administrar la configuración del objeto: la especificación del objeto y el estado del objeto. Se requiere especificación, describe el estado deseado del objeto (estado deseado), las características del objeto deseado. El estado describe el estado real del objeto (Estado real), que es proporcionado y actualizado por el sistema Kubernetes. En cualquier momento, el plano de control de Kubernetes se esfuerza por administrar el estado real del objeto para que coincida con el estado deseado.

Describir los objetos de Kubernetes.

Generalmente, yaml se usa para describir un objeto k8s. Yaml es un lenguaje específicamente usado para escribir la configuración.

Las reglas gramaticales básicas son las siguientes:

  • Mayúsculas y minúsculas
  • Use sangría para representar relaciones jerárquicas
  • Las pestañas no están permitidas para sangría, solo espacios
  • El número de espacios sangrados no es importante, siempre que los elementos del mismo nivel se mantengan alineados
  • '#' Significa comentario

Para usar yaml para describir objetos k8s, se requieren los siguientes campos obligatorios:

  • apiVersion: la versión de la API de Kubernetes utilizada para crear el objeto
  • tipo: el tipo de objeto que desea crear
  • metadata-data para ayudar a identificar la unicidad de un objeto, incluida una cadena de nombre, UID y espacio de nombres opcional
  • spec-Describe el estado deseado del objeto (estado deseado), el clúster k8s continuará asegurando que el objeto cumpla con el estado descrito.

Gestionar objetos Kubernetes

Hay tres formas de administrar objetos k8s

Comandos imperativos

Es la forma en que utilizamos anteriormente, operar directamente en la línea de comando.
Tales como:

kubectl create deployment nginx --image nginx

Ventajas en comparación con la configuración de objetos:

  • Los comandos son simples, fáciles de aprender y fáciles de recordar.
  • El comando solo da un paso para realizar cambios en el clúster.

Desventajas en comparación con la configuración de objetos:

  • El pedido no está integrado con el proceso de revisión de cambios.
  • El comando no proporciona una pista de auditoría asociada con el cambio.
  • Excepto por el contenido en tiempo real, el comando no proporciona una fuente de registro.
  • El comando no proporciona una plantilla para crear nuevos objetos.

Configuración de objeto imperativo

Se requieren instrucciones de operación y archivos de configuración para cooperar.
Tales como:

kubectl create -f nginx.yaml

Ventajas en comparación con los comandos imperativos:

  • La configuración de objetos se puede almacenar en el sistema de control de origen, como Git.
  • La configuración de objetos se puede integrar con procesos, como la búsqueda de actualizaciones antes de enviar y auditar.
  • La configuración de objetos proporciona una plantilla para crear nuevos objetos.

Desventajas en comparación con los comandos imperativos:

  • La configuración de objetos requiere una comprensión básica de la arquitectura de objetos.
  • La configuración de objetos requiere pasos adicionales para escribir archivos YAML.

Ventajas en comparación con la configuración de objetos declarativos:

  • El comportamiento de configuración de objetos imperativo es más simple y fácil de entender.
  • A partir de la versión 1.5 de Kubernetes, la configuración de objetos imperativa es más madura.

Desventajas en comparación con la configuración de objetos declarativos:

  • La configuración imperativa de objetos es más adecuada para archivos que directorios.
  • Las actualizaciones de los objetos activos deben reflejarse en el archivo de configuración; de lo contrario, se perderán en el próximo reemplazo.

Configuración de objeto declarativo

Con la configuración de objetos declarativos, no necesita especificar las operaciones que se muestran en el comando, por lo que puede colocar el archivo de configuración en el directorio y realizar diferentes operaciones en los archivos en el directorio.

Por ejemplo:

kubectl apply -f configs/

Ventajas en comparación con la configuración de objetos imperativa:

  • Los cambios realizados en el objeto activo se conservarán incluso si no se fusionan en el archivo de configuración.
  • La configuración de objetos declarativos admite mejor las operaciones en directorios y detecta automáticamente el tipo de operación (crear, parchear, eliminar) de cada archivo.

Desventajas en comparación con la configuración imperativa de objetos:

  • La configuración de objetos declarativos es difícil de depurar y el resultado es difícil de entender cuando ocurre una excepción.
  • Las actualizaciones parciales generadas mediante diff crean operaciones complejas de fusión y parche.

Práctico

Crear implementación

Cree el archivo node-despliegue.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-deployment
  labels:
    app: node
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node
  template:
    metadata:
      labels:
        app: node
    spec:
      containers:
      - name: node
        image: registry.cn-hangzhou.aliyuncs.com/larswang/hello-node:1.0
        ports:
        - containerPort: 80

Crear

kubectl apply -f node-deployment.yaml

Ver implementaciones

kubectl get deployments

Ver pods

kubectl get pods --show-labels

Despliegue de escala

Expandir a diez copias

kubectl scale deployment.v1.apps/node-deployment --replicas=10

La expansión está completa para ver implementaciones y pods

kubectl get deployments

kubectl get pods --show-labels

Reducir a tres copias

kubectl scale deployment.v1.apps/node-deployment --replicas=3

En este punto, puede ver que 7 de los pods están en el estado de terminación. Después de un tiempo, verifique nuevamente, solo 3 pods están funcionando.

Recuperación automática

Primero revise la lista de pods

kubectl get pods --show-labels

Seleccione uno de los pods y elimine

kubectl delete pod node-deployment-57df45c5bf-d8xst

Después de que la eliminación sea exitosa, revise la lista de pods nuevamente

kubectl get pods --show-labels

Encontrará que el pod eliminado ya no existe, pero la implementación ha creado un nuevo pod.

Esta es la característica de que k8s siempre intentará garantizar que el estado de ejecución del clúster y el estado de la descripción de la configuración sean consistentes.

Obtenga información de descripción de implementación

kubectl describe deployment node-deployment

Puede ver la descripción actual de la implementación y el historial de cambios de pod.
NewReplicaSet:

  • Cuando se creó la implementación por primera vez, creó un ReplicaSet (node-implementación-57df45c5bf) y creó 3 copias.

Eventos:

  • Primero expandido a 10 vainas
  • Reducido a 3 vainas
  • Reducido a 1 vainas
  • Ampliado a 3 vainas

Ver estado de implementación

kubectl get deployment node-deployment -o yaml

Muestra la configuración de implementación y el estado actual en formato yaml

Resumen

En este artículo, presentamos qué es un objeto k8s y cómo usar la configuración de yaml para crear una implementación.
Después de escalar la implementación a través de la escala y demostrar la característica de eliminar manualmente un pod, k8s mantiene el estado de ejecución consistente con la descripción de acuerdo con la descripción.

Después de que termine la operación, mire hacia atrás en el concepto, y habrá una sensación de apuro.

El archivo de configuración en este artículo se puede encontrar en AloofJr .

Más artículos

Ver mi blog: https://nc2era.com

escrito por AloofJr , indique la fuente

Supongo que te gusta

Origin yq.aliyun.com/articles/756392
Recomendado
Clasificación