En nuestro post "Introducción a Kubernetes (I)" veíamos como montar un entorno demo para probar un cluster de Kubernetes. Como ya explicamos, un cluster Kubernetes nos permite desplegar aplicaciones abstrayéndonos de la infraestructura física.
Pero además de poder desplegar aplicaciones complejas con métodos complejos, balanceadores, replication controllers, deployments y demás conceptos de Kubernetes, también podemos usar el cluster como un simple gestor de contenedores Docker. Al igual que utilizamos en nuestro local docker-engine podemos usar de manera similar nuestro cluster Kubernetes. Esta funcionalidad nos puede permitir hacer pruebas con nuestras imágenes Docker o incluso hacer pilotos básicos para pruebas de concepto.
Creación de un namespace
Por defecto en Kubernetes nos vamos a encontrar 2 namespaces: kube-system, que es el namespace de todos los componentes core del cluster Kubernetes; y el namespace default que es un namespace para empezar a trabajar y que está definido como por defecto para poder empezar a utilizarlo. Nosotros vamos a crear un namespace para nuestras pruebas y así dejar de usar el por defecto default. Para ello ejecutaremos el siguiente comando:
kubectl create namespace enmilocalfunciona
Una vez creado nuestro namespace podemos ver todos los namespaces y comprobar que existe el nuevo:
$ cluster/kubectl.sh get namespaces
NAME STATUS AGE
default Active 7d
enmilocalfunciona Active 1m
kube-system Active 7d
Para poder utilizar y crear pods, réplicas, etc. en este namespace deberemos especificarlo en cada comando con la opcion --namespace=enmilocalfunciona
Creación de un contenedor ubuntu
kubectl run ubuntu-test --image=ubuntu --restart=Never --namespace=enmilocalfunciona -- sleep infinity
Esto crea un pod. Si pusieramos --restart=Always
o no pusiéramos esta opción, Kubernetes crea un "Replica set" y un "Deployment" para asegurar que ese pod/contenedor esté siempre funcionando. Un "Replica Set" es la siguiente generación de un "Replication Controller" que veíamos en el articulo anterior. Kubernetes soporta ambos motores de replicación. La única diferencia entre un "Replica Set" y un "Replication Controller" es que el primero soporta el nuevo tipo de selector (ver la documentación de labels), el segundo solo soporta etiquetas tipo clave-valor.
Troubleshooting de contenedor
Nos podemos conectar para hacer operaciones. De este modo podemos abrir un terminal:
kubectl --namespace=enmilocalfunciona exec -it ubuntu-test bash
Para ver que ocurre o eventos relacionados con nuestro pod, podemos ejecutar:
$ cluster/kubectl.sh describe pod ubuntu-test --namespace=enmilocalfunciona
Name: ubuntu-test
Namespace: enmilocalfunciona
Node: kubernetes-node-1/10.245.1.3
Start Time: Wed, 13 Jul 2016 16:15:31 +0200
Labels: <none>
Status: Running
IP: 10.246.71.3
Controllers: <none>
Containers:
ubuntu-test:
Container ID: docker://8de74b8675cacf6195fbf1f85eb2ba5aebe329feefd4af4e5ff65ee889e58972
Image: ubuntu
Image ID: docker://sha256:cf62323fa025e4e73960df25ed10af56d8ddbb1b3f5ef1842738f2891f9e416e
Port:
Args:
sleep
infinity
State: Running
Started: Thu, 14 Jul 2016 11:49:57 +0200
Ready: True
Restart Count: 0
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-558pu:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-558pu
QoS Tier: BestEffort
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
27m 27m 1 {kubelet kubernetes-node-1} spec.containers{ubuntu-test} Normal Pulled Container image "ubuntu" already present on machine
27m 27m 1 {kubelet kubernetes-node-1} spec.containers{ubuntu-test} Normal Created Created container with docker id 8de74b8675ca
27m 27m 1 {kubelet kubernetes-node-1} spec.containers{ubuntu-test} Normal Started Started container with docker id 8de74b8675ca
Con este comando podemos ver toda la información relacionada con el pod, así como los últimos eventos.
Para ver los eventos en tiempo real podemos ejecutar el siguiente comando:
cluster/kubectl.sh --namespace=enmilocalfunciona get events -w
Una guía para hacer troubleshooting podéis encontrarla aquí.
Para ver los logs de un contenedor tendremos que ejecutar el siguiente comando:
kubectl logs ubuntu-test ubuntu-test --namespace=enmilocalfunciona
No os asustéis si no veis ninguna linea de log, ya que el ejemplo que hicimos fue con una máquina Ubuntu que, si recordamos, está ejecutando como entrypoint sleep infinity
Monitorizacion de Kubernetes
Para poder monitorizar los recursos en Kubernetes podemos acceder al Cockpit que viene preinstalado en nuestra instalación del piloto:
Usuario: vagrant, password: vagrant
Aquí encontraremos gráficas e información tanto del nodo master como del cluster en general.
Esperemos que con esta guía os animéis a empezar a hacer vuestras pruebas y laboratorios en Kubernetes.
Si quieres estar al día de nuevos capítulos de esta serie sobre Kubernetes, ¡síguenos en Twitter!