5 cosas que aprendí en KubeCon Barcelona
Tags: kubernetes, spanish, security, packaging
Published: 2019-06-03 21:04:44

Hace un par de semanas visité Barcelona para participar en la [KubeCon + CloudNativeCon Europe 2019](https://events.linuxfoundation.org/events/kubecon-cloudnativecon-europe-2019/).

Si no pudiste ir, muchas de las láminas así como los [vídeos de las sesiones](https://www.youtube.com/playlist?list=PLj6h78yzYM2PpmMAnvpvsnR4c27wJePh3) ya están disponibles.

Estas son 5 cosas (algunas bastante inesperadas) que aprendí en KubeCon Europe, Barcelona 2019.

## Kubernetes usa controladores para poder escalar mejor

Kubernetes es un proyecto de software muy complejo, con más de 2 millones de líneas de código, múltiples componentes y mecanismos de extensión. Y sigue creciendo.

En su charla [The Kubernetes Control Plane for Busy People Who Like Pictures](https://www.youtube.com/watch?v=zCXiXKMqnuE), Daniel Smith explica por qué en un sistema distribuído como Kubernetes es muy difícil de escalar su monitoreo con una máquina de estado convencional.

Mediante el uso de ciclos de control, Kubernetes puede agregar nuevas características y escalar de forma lineal en vez de exponencial.

Además, en su charla describe varias categorías de controladores (clásicos, inyección, biyección, unión) e incluso describe como ejemplos varios de los controladores más populares. No me esperaba que iba a interesarme por teoría de control en una charla de Kubernetes en Barcelona...

## `topologyKey` ayuda a mejorar la disponibilidad de tus aplicaciones en la nube

[Improving Availability for Stateful Applications in Kubernetes](https://www.youtube.com/watch?v=Cd7aJiQLIpM&list=PLj6h78yzYM2PpmMAnvpvsnR4c27wJePh3&index=190&t=0s) de Michelle Au fue mi charla favorita de este evento.

La razón es que en vez de asumir que la audiencia está escogiendo el mejor mecanismo de almacenamiento para sus aplicaciones en Kubernetes, Michelle describe cómo cada tipo de almacenamiento (ya sea tradicional o de nube) encaja (o no) con Kubernetes.

Si tienes una NAS, una SAN, un disco administrado en la nube o algo distinto, Kubernetes utiliza conceptos y lógica diferentes para garantizar que el estado de tus aplicaciones está distribuído y es resiliente. 

Por ejemplo, el uso del valor `failure-domain` en `topologyKey` te permite [asignar zonas a los recursos](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity-beta-feature) de manera que Kubernetes esté consciente de dónde está tu almacenamiento y qué hacer en caso de fallos.

## CNAB agrupa los elementos que describen una aplicación moderna compleja

Un tópico del que hablo en [The Future of Linux Packaging](https://speakerdeck.com/bureado/the-future-of-linux-packaging) es que hoy en día una aplicación ya no está compuesta por un paquete o un proyecto con código fuente, sino que se ha vuelto un concepto complejo que a veces requiere múltiples servidores o sistemas, servicios administrados y más.

Chris Crone dio una excelente introducción a [CNAB](https://cnab.io/) en Barcelona donde explicó que hoy en día desplegar una aplicación requiere de varios pasos incluyendo herramientas como `apt`, `terraform`, `helm`, `kubectl`, `aws|gcloud|az` y más.

CNAB ataca este problema agrupando los recursos que describen una aplicación y creando el concepto de una imagen "lanzadera" que despliega la aplicación. No dejes de darle una mirada a [su presentación](https://www.youtube.com/watch?v=r6aqKhvdsRs) y darle feedback al [equipo de CNAB](https://twitter.com/cnab_spec).

(Por cierto, ¿ya probaste [Helm 3](https://www.youtube.com/watch?v=lYzrhzLAxUI&feature=youtu.be)?)

## No es suficiente solo con dejar de usar `root` en tus contenedores

Si ya trabajas con contenedores de seguro te has preguntado cómo puedes confiar en todos los _layers_ que tu _runtime_ se baja cuando construyes tus imágenes. Es un tema muy importante, porque al fin y al cabo se trata de tu aplicación, de los datos de tus usuarios y de tus sistemas de producción donde podría estar entrando código malicioso o defectuoso.

En [Rootless, Reproducible, and Hermetic: Secure Container Build Showdown](https://www.youtube.com/watch?v=IpMPRC-ybJI), Andrew describe varios vectores de ataque que incluyen el uso de un `FROM` malicioso, ataques al servidor donde se construye la imagen a través de `RUN`, uso de `--privileged` e incluso ataques dentro del contenedor.

Además, Andrew revisa nueve herramientas distintas (diferentes a `docker build`) que si bien funcionan sin necesidad de `root`, tienen distintos niveles de soporte para Docker y Kubernetes así como distintos niveles de protección. Andrew también habla sobre el proceso de estandarizar la interfaz de construcción de imágenes a través del [Container Build Interface](https://github.com/containerbuilding/cbi).

## Slack es el principal mecanismo de colaboración de Kubernetes

Por último, me pasé por [State of Kubernetes Contributor Community](https://www.youtube.com/watch?v=a17FLjVDUOc) donde Paris Pittman habló sobre la salud del proyecto.

Aquí descubrí que Slack es el principal medio de colaboración de Kubernetes (las listas de correo, websites y sobre todo GitHub o Twitter vienen muy por detrás...) y cómo ya me había visto la presentación de Rael García sobre [el grupo de trabajo de documentación](https://www.youtube.com/watch?v=tMCeY71o8aA) donde también está el equipo [kubernetes-docs-es](https://kubernetes.slack.com/messages/CH7GB2E3B/), decidí pasarme por Slack.

¡Y vaya comunidad! Al cabo de un par de días ya había hecho [mis primeros _pull requests_](https://github.com/kubernetes/website/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Abureado+) y empecé a escribir un documento de [tips and tricks](https://gist.github.com/bureado/3c6ebccf3f70f2ade84d5f3ab399a821) que quizás también te anime a contribuir al proyecto.

¿Qué has aprendido sobre Kubernetes recientemente? [Compártelo en Twitter](https://twitter.com/bureado)