lunes, 19 de marzo de 2018

Herramientas básicas para administrar Kubernetes desde el terminal



Actualmente el auge de Kubernetes ha hecho present la necesidad de facilitar su administración, dado que la orquestación es distribuida y en la mayoría de los casos se dispone de varios clusters, además de varios namespace, es necesario conocer cuales son las mejores herramientas de que disponemos para facilitar y agilizar el uso de Kubernetes.

Es importante remarcar también que existe una componente de seguridad, no tanto en cuanto a las medidas de seguridad que aplica Kubernetes o las aplicaciones que desplegamos, sino seguridad de que lo que estamos haciendo lo hacemos en el lugar correcto. Este problema es antiguo ya que en el terminal de Linux siempre ha existido ese miedo de "estoy donde toca", eso los más antiguos del lugar lo recordarán bien, es un miedo que nunca te quitas del todo, pero solo con la práctica y el tiempo consigues dominarlo.


kubectl

Esta herramienta es la base de la administración de un cluster en Kubernetes, nos permite conectarnos al cluster para realizar todas las tareas que necesitemos, tanto de lectura de estados, como de creación de nuevos recursos o modificación de los ya existentes.


Primeramente debes instalarte esta herramienta y como siempre existen muchas formas de hacerlo dependiendo del sistema operativo que uses. La referencia principal para instalar kubectl es la propia página del proyecto kubernetes, en ella encontraremos las intrucciones para los distintos sistemas operativos, solo hay que elegir una opción y listo, aunque para mi la más recomendada es la de instalar con el SDK de Google Cloud Platform, basta con tener previamente instalada la SDK, puede consultarse aquí y ejecutar el siguiente comando:

gcloud components install kubectl
Lo primero que deberíamos hacer una vez instalado es activar el autocompletado de la terminal, esto es fundamental debido a la gran cantidad de opciones que tiene, para ellos también en la página del proyecto Kubernetes tenemos las instrucciones para activar en distintas shells aquí, en mi caso como uso zsh sería sencillo, bastaría con añadir los siguiente a mi fichero ~/.zshrc:


if [ $commands[kubectl] ]; then
  source <(kubectl completion zsh)
fi

Como indicaba antes este comando es la base de la administración de Kubernetes, una vez lo tengamos instalado lo primero que deberemos hacer es conectarlo con nuestro cluster, para ello debemos seguir las instrucciones según donde tengamos instalado el cluster, en mi caso al estar en Google Cloud Platform es tan sencillo como ir a la consola y seleccionar el botón conectar del cluster que queremos.



Nos mostrará una linea que podemos copiar y pegar en nuestro terminal para tener conectado el cluster y empezar a trabajar.

Hasta aquí lo básico que todo administrador o desarrollador que quiere usar Kubernetes necesita, pero tal como decía al principio es difícil saber sin más con que cluster estás conectado y en que namespace, esto además hace que si se tiene varios clusters con varios namespace, pero que tienen los mismos despliegues y servicios, puede ser peligroso ejecutar una orden de escalado donde no toca. Por ejemplo si tenemos un cluster de QA, uno de pre-producción y otro de producción, los tres van a tener los mismos servicios, despliegues y nombres de los ingress por ejemplo, si nos equivocamos y escalamos producción pensando que es QA tensmos un problema.

Como podemos mitigar esto? existen un par de herramientas que nos pueden ayudar de forma visiual ha estar seguros de en que entorno estamos, son kubectx, kubens y kube-ps1.


kubectx

Básicamente se trata de una herramienta escrita en bash que nos permite saber cuantos contextos tenemos configurados y cambiar rápidamente entre ellos, de forma que podamos conectarnos a cada cluster sin necesidad de acordarnos de todos los párametros necesarios cada vez.

Podemos instalarlo siguiendo las instrucciones en su repositorio de github.

https://github.com/ahmetb/kubectx



Para todos aquellos que tienen que administrar varios clusters, este comando les va ha facilitar muchísimo las distintas tareas en los distintos contextos, ya que sin necesidad de acordarse de toda la sintaxis puede conectar con todos los clusters o simplemente saber que clusters hay configurados en la sesión.

kubens

Conjuntamente con kubectx también se instalará kubens, también escrita en bash, esta nos permitirá cambiar entre los distintos namespaces disponibles en el contexto actual.


Con esta herramienta el cambio entre los distintos nasmespaces, así como el listado de los mismos se vuelve un juego de niños, permitiendo hacer un cambio rápido y repetir comandos entre namespaces de forma ágil.

kube-ps1

Este último, pese a no ser una herramienta como tal, he querido añadirlo ya que es la perfecta combinación con los anteriores, permitiendo saber en to momento tanto el cluster en el que estamos como namespaces activo, mostrando en el PROMPT toda la información del contexto actual que necesitamos para tener la seguridad de que vamos a ejecutar los distintos comandos en el cluster y namespace correcto.

https://github.com/jonmosco/kube-ps1