‫Hay dos piezas de metadatos en este YAML
‫que probablemente haya visto en los
‫ejemplos y haya pensado, preguntándose para qué etiquetas y anotaciones
‫realmente existen.
‫Probablemente no te hayas dado cuenta de su importancia.
‫Son un componente clave de Kubernetes y cómo las cosas
‫se conectan entre sí.
‫Mucho más que Enjambre.
‫El primero son las etiquetas. Las etiquetas van debajo de
‫la clave de metadatos en la raíz del archivo, por lo
‫que son opcionales allí. No tiene que ponerlos, pero
‫son un valor clave, o una lista de valores clave, debajo del encabezado
‫de las etiquetas.
‫Esos están ahí por múltiples razones.
‫No siempre son necesarios, pero puede necesitarlos
‫para seleccionar los objetos, agruparlos e
‫incluso filtrarlos más adelante.
‫Esto puede ser cualquier cosa que describa el
‫objeto o el recurso.
‫Puede ser un par de valores clave que el valor sea simplemente
‫verdadero o falso.
‫Las llaves pueden ser lo que quieras.
‫Simplemente no puede haber más de una clave en cada objeto,
‫por lo que no puede tener dos claves seguidas en el
‫YAML para el mismo objeto que tiene el nombre
‫de la clave, digamos aplicación, correcto. Estos se utilizan realmente para
‫describir el objeto. Estos recursos que estamos
‫creando tienen diferentes propiedades para ellos.
‫Tal vez sea el entorno como prod, dev o test.
‫Tal vez sea la ubicación como dmz,
‫o backend o frontend. Tal vez sea el nombre de la
‫aplicación, o tal vez sea el nombre del cliente, si está alojando sitios de
‫clientes o algo así. Podría ser lo que
‫quieras y no hay muchos estándares.
‫La documentación de Kubernetes enumerada en los recursos aquí le
‫da algunos ejemplos, pero esos son solo ejemplos.
‫No hay muchos estándares en la industria.
‫Realmente depende de su equipo y su
‫compañía, cómo desea describir esto.
‫También tenemos anotaciones. Son una especie de yin y yang.
‫Las etiquetas son muy simples.
‫Son muy limitados en tamaño y qué personajes
‫puedes poner en ellos. Están destinados a describir el recurso.
‫Con anotaciones, esto es para datos más complejos y
‫datos de valores múltiples, cosas así.
‫Por lo general, verá anotaciones que se usan cuando
‫agrega cosas personalizadas a Kubernetes que pueden hablar con
‫Kubernetes y obtener datos de él.
‫Las anotaciones están ahí para tal vez almacenar
‫datos de configuración, como proxies y cosas de ingreso a
‫menudo pueden almacenar diferentes configuraciones, dentro de diferentes anotaciones.
‫Entonces, esos no están necesariamente
‫allí para describir, sino más para la configuración.
‫Volvamos a las etiquetas por un minuto, porque hay
‫mucho más que eso es clave para entender cómo funciona todo
‫esto en Kubernetes.
‫Lo primero es que podemos hacer filtros simples limitando las
‫etiquetas desde la línea de comandos.
‫Podemos obtener pods y solo decir, solo muéstrame los
‫pods con esta etiqueta.
‫Incluso puede usar una coma allí para agregar varias etiquetas.
‫De hecho, hay un nivel completo de sintaxis para esto en
‫el que puedes hacer diferentes tipos de sintaxis, diferentes
‫o's y and's.
‫Realmente, es una de esas cosas
‫en las que no quiero enseñarte todo eso porque
‫será como aprender Regex. Es algo en lo que realmente no
‫lo aprenderá simplemente probándolo una vez.
‫Es solo cuando lo necesitas que realmente lo
‫vas a entender. La documentación de Kubernetes
‫es realmente genial. Tienen varios enlaces que he
‫puesto en los recursos que lo llevarán a través de la ruta de todas
‫las diferentes formas en que podría necesitar etiquetas.
‫Francamente, realmente no necesita aprender eso hasta que sepa
‫que lo necesita para resolver un problema.
‫Incluso puede usarlo para aplicar comandos.
‫Si tenía un montón de cosas en un gran archivo
‫YAML y solo deseaba aplicar ciertas partes de
‫ese archivo YAML.
‫No hago esto mucho, pero es allí
‫donde puedes limitarlo para decir, solo aplica los cambios o
‫la información que has puesto en el YAML para
‫etiquetas específicas.
‫Por supuesto, de nuevo con este, puede poner
‫la misma sintaxis. Solo puede tener una sola etiqueta.
‫Puede poner comas, tener múltiples etiquetas y
‫valores allí. Tu decides.
‫Hay otra cosa que hacen las etiquetas que es importante
‫para el funcionamiento de Kubernetes.
‫Todo se reduce a que hay ciertos recursos que hablan con
‫otros recursos, o se conectan a ellos, o
‫están relacionados con ellos.
‫Como quieras decirlo. El buen ejemplo
‫es que los servicios necesitan saber a qué
‫pods enviar su tráfico. Te preguntarás cómo lo sabe.
‫Quiero decir, cuando lo escribes, si haces un comando de servicio
‫kubectl y lo estás apuntando a la
‫implementación, ¿qué está usando exactamente para identificar esa implementación?
‫Bueno, en la CLI, pensarías que en realidad está apuntando
‫al objeto de implementación.
‫Pero realmente, el servicio necesita hablar con los pods, no con
‫la implementación en sí.
‫Está usando algo llamado selectores de etiquetas.
‫Esto es común con muchos de los diferentes recursos que son
‫niveles más altos de abstracción de pods.
‫Para que se relacionen con las vainas, o para saber cuáles son
‫las suyas, usan selectores de etiquetas. Verá eso en el
‫YAML dentro de nuestro repositorio que ha estado
‫usando durante las últimas conferencias.
‫Si miras en la aplicación. yml, notarán que todo el tiempo
‫hemos tenido un par de cosas de las
‫que no hemos hablado. El primero está en
‫la parte superior con el servicio, tenemos bajo la especificación un selector.
‫Eso tiene que estar ahí.
‫Le estamos diciendo la clave y el valor de una etiqueta para
‫las cápsulas a las que necesita dirigir el tráfico.
‫Eso es solo un partido simple.
‫Necesita encontrar vainas con eso.
‫Luego, en la implementación debajo, verá
‫que nuestra especificación tiene su propio
‫selector, matchLabels, app, app-nginx.
‫Lo que sucede es que ambos objetos están
‫seleccionando pods en función de esa coincidencia.
‫Eso significa que en la plantilla debajo de
‫nuestra especificación, donde diseñamos los pods, es necesario que
‫tenga esa etiqueta para que esos recursos puedan encontrar
‫sus pods.
‫Lo bueno de las versiones posteriores de Kubernetes
‫es que, al menos con una sola implementación,
‫deben estar sincronizadas. En realidad, no se implementará
‫si ve que las etiquetas de coincidencia del selector no coinciden
‫con las etiquetas de metadatos de la plantilla porque tienen
‫que hacerlo para que incluso pueda desplegar los
‫pods y poder controlarlos.
‫Está ahí para evitar que lo hagas accidentalmente de
‫la manera incorrecta. Esperará que
‫tengas esas piezas allí. En versiones anteriores, solía haber una
‫forma en la que los generaba automáticamente, de forma predeterminada, para
‫que pudiera omitir las cosas. Han dejado de hacerlo ahora,
‫y te obligan a poner esto allí. Creo que es
‫algo bueno, especialmente lo importante que son
‫estos selectores de etiquetas. Técnicamente, si volviste a
‫Swarm, Swarm hace un poco de esta caja lista para
‫usar donde tiene etiquetas que combinan cosas desde pilas hasta
‫servicios, y pilas a sus volúmenes, y cosas así.
‫Realmente no podemos controlarlo, y no lo vemos mucho
‫en la interfaz. De alguna manera está hecho
‫en el fondo para nosotros en Swarm.
‫Pero, también es muy limitante.
‫No puedes cambiar las cosas sobre la marcha.
‫No necesariamente puede ir y personalizarlos para configuraciones
‫realmente únicas.
‫Aquí, podríamos tener una charla de servicio
‫con múltiples implementaciones si quisiéramos
‫cambiar esos selectores.
‫Los selectores no son solo para vincular recursos juntos.
‫También se trata de controlar a dónde van.
‫En los nodos, puede usar etiquetas y selectores para controlar
‫a dónde van.
‫Puede utilizar aún más la personalización con cosas llamadas manchas y
‫tolerancia que son más o menos lo contrario
‫de eso cuando le está diciendo a los nodos que no pueden
‫hacer ciertas cosas para que Kubernetes sepa dónde
‫controlar básicamente dónde van sus cápsulas.
‫Estas cosas se vuelven realmente personalizadas y realmente
‫avanzan bastante rápido. Hacerlos todos juntos puede
‫volverse un poco peludo y loco.
‫Definitivamente recomiendo que te lo tomes con calma.
‫Mantenga todo simple fuera de la caja.
‫Evite las manchas y las tolerancias hasta que
‫realmente necesite analizarlas.
‫Todo bien. Vamos a limpiar para toda esta sección.
‫Si tiene algo ejecutándose en un espacio de nombres predeterminado para
‫su clúster, si solo hace un kubectl, obtiene todo
‫y ve cosas más allá de la API de Kubernetes,
‫luego continúe y elimine todos esos recursos porque vamos a seguir
‫adelante . No los necesitaremos.