YAML: La lingua franca del mundo Kubernetes

El lenguaje YAML utilizado por Kubernetes tiene una característica muy importante llamada "Declarativo", que corresponde a otra palabra: "Imperativo".

La mayoría de los lenguajes de programación también son imperativos. Se caracteriza por una fuerte interactividad y énfasis en la secuencia y el proceso. Debe "decirle" a la computadora qué hacer en cada paso, y todos los pasos están claramente enumerados para que el programa pueda continuar. paso a paso Finalmente completó la tarea, parece que la computadora es un poco "estúpida".

"Declarativo" era relativamente raro antes de la aparición de Kubernetes. Es completamente opuesto a "imperativo". No se preocupa por el proceso específico y presta más atención al resultado. No necesitamos "enseñarle" a la computadora qué hacer, solo dígale un estado objetivo, y encontrará una manera de completar la tarea por sí misma, que es más automatizada e inteligente de lo que es.

YAML es un superconjunto de JSON y admite tipos de datos como enteros, flotantes, booleanos, cadenas, matrices y objetos. Dicho esto, cualquier documento JSON legal también es un documento YAML, y aprender YAML es mucho más fácil si conoce JSON.

Sin embargo, en comparación con JSON, YAML tiene una sintaxis más simple y una forma más clara y compacta, como por ejemplo:

  • Use espacios en blanco y sangría para representar niveles (algo similar a Python), sin llaves ni corchetes.
  • Puede usar # para escribir comentarios, lo cual es una gran mejora con respecto a JSON.
  • El formato del objeto (diccionario) es básicamente el mismo que JSON, pero la clave no necesita usar comillas dobles.
  • La matriz (lista) tiene la forma de una lista que comienza con - (algo similar a MarkDown).
  • Ambos: para objetos y - para matrices deben ir seguidos de un espacio.
  • Puede usar --- para separar varios objetos YAML en un archivo.

Como sistema operativo de clúster, Kubernetes resume los años de experiencia de Google y abstrae muchos conceptos a nivel teórico para describir la gestión y el funcionamiento del sistema. Estos conceptos se denominan "objetos API".

Debido a que el servidor ap es la única entrada del sistema Kubernetes, tanto los usuarios externos como los componentes internos deben comunicarse con él, y adopta el concepto de recurso URL del protocolo HTTP, y el estilo API también usa RESTful GET/POST/DELETE, etc. , por lo que estos conceptos son muy Naturales, se denomina "objeto API".

Debido a que el objeto API adopta el protocolo HTTP estándar, para facilitar la comprensión, podemos aprender del formato del mensaje HTTP y dividir la descripción del objeto API en dos partes: "encabezado" y "cuerpo".

"header" contiene la información básica del objeto API y tiene tres campos: apiVersion, tipo y metadatos.

  • apiVersion indica el número de versión de la API que opera este recurso. Debido a la rápida velocidad de iteración de Kubernetes, los objetos creados por diferentes versiones serán diferentes. Para distinguir estas versiones, debe usar el campo apiVersion, como v1 , v1alfa1, v1beta1, etc.
  • kind indica el tipo de objeto de recurso, que debe entenderse bien, como Pod, Node, Job, Service, etc.
  • El campo de metadatos, como su nombre lo indica, representa cierta "metainformación" de los recursos, es decir, cierta información utilizada para marcar objetos y facilitar la gestión de Kubernetes.

Dos parámetros especiales de kubectl --dry-run=client y -o yaml, el primero es ejecución en seco y el segundo es para generar formato YAML. Cuando se usan juntos, kubectl no tendrá acciones de creación reales, sino que solo generará archivos YAML.

Por ejemplo, para generar un ejemplo repetitivo de Pod YAML, puede agregar estos dos parámetros después de ejecutar kubectl:

kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml

generará un archivo YAML absolutamente correcto:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: ngx
  name: ngx
spec:
  containers:
  - image: nginx:alpine
    name: ngx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

Lo siguiente que tienes que hacer es consultar la documentación del objeto, agregar o eliminar campos para personalizar este YAML.

Este artículo es una nota de estudio para el día 11 de julio. El contenido proviene del "Curso práctico introductorio de Kubernetes" de Geek Time . Se recomienda este curso.

Guess you like

Origin blog.csdn.net/key_3_feng/article/details/131665531