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