Guide

Segunda parte Kubernetes Usando Minikube

Segunda parte Kubernetes usando Minikube

Este post es la continuación de este post Como empezar con Kubernetes usando Minikube, pero ahora mostraremos otras funcionalidades de Minikube y empezaremos a hacer mas cosas con Kubernetes, por cierto les agradecemos por la contribución de nuestra comunidad de esta guía para usar diferentes Container runtimes en Minikube

Veamos algunos otros comandos disponibles in Minikube.


minikube dashboard

Este comando brinda acceso al tablero de Kubernetes que correr dentro de nuestra instancia de Minikube, el comando abrira una ventana en tu navegador para mostart el tablero de Kubernetes.

minikube dashboard

output:

🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:54775/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ in your default browser...

Si ya tienes algunos pods en tu instancia podras verlos en el tablero, sino corre este comando para crear un deployment de nginx con 2 replicas:

kubectl run mi-primer-deployment --restart=Always --image=nginx:1.17.3 --replicas=2

Ahora ve al tablero y veras tu deployment en la seccion de Deployments y abajo los 2 pods, explora el tablero con el podras ver los recursos de Kubernetes como Namespaces, Nodes, Persistenr Volumes, etc. Puedes filtrar por namespace para ver los objetos en tal Namespace. Esta es la forma visual con la cual puedes visualizar tus recursos en tu cluster, para clusters en la nube tambien esta disponible, algunos proveedores lo tienen disponible como Google Cloud Platform (GCP) o Azure, para AWS no es asi y solo muestran un simple dashboard sobre el estado de tu cluster. Algo a consiserar es la exposición de tu tablero al internet, siempre es bueno restringirlo como a la red de tu oficina estando conectado a ella fisicamente o usando algun service de VPN, tambien generar roles para asignarlos las personas adecuadas.


minikube addons

Minikube suporta addons para agregar mas funcionalidad, para mostrar los que actualmente soporta executa el siguiente comando:

minikube addons list

Lista de addons:

- addon-manager: enabled
- dashboard: enabled
- default-storageclass: enabled
- efk: disabled
- freshpod: disabled
- gvisor: disabled
- heapster: enabled
- ingress: disabled
- logviewer: disabled
- metrics-server: enabled
- nvidia-driver-installer: disabled
- nvidia-gpu-device-plugin: disabled
- registry: disabled
- registry-creds: disabled
- storage-provisioner: enabled
- storage-provisioner-gluster: disabled

Para habilitar algun addon:

minikube addons enable heapster

Output:

✅  heapster was successfully enabled

Para deshabilitar:

minikube addons disable heapster

Output:

✅  "heapster" was successfully disabled

Ahora con Heapster habilitado podemos hacer uso de mas resoursos en nuestro cluster:

kubectl top pods

Output:

NAME                                    CPU(cores)   MEMORY(bytes)
mi-primer-deployment-7f86999b4c-bxvx6   0m           2Mi
mi-primer-deployment-7f86999b4c-qtmqn   0m           2Mi

Ahora revisando los nodos:

kubectl top nodes

Output:

NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
minikube   125m         6%     1320Mi          69%

minikube ip

Este comando muestra la IP de nuestro minikube cluster, entonces podemos intentar hacer llamadas al API server de Kubernetes, para ello tenemos que usar el certificado, la llave y la autoridad que emitio dichos certificados y llaves publicas, como mencionamos en nuestro pasado post Como empezar con Kubernetes usando Minikube, Minikube se encarga de generar y configurar dichos certificados y llaves, ahora como nos queremos comunicar con el API server tenemos que usar el ese certificado y su llave.

Ahora para saber que pods estan corriendo en el default namespace tenemos que llamar el siguiente endpoint /api/v1/namespaces/default/pods; entonces el comando completo es:

curl --cacert ~/.minikube/ca.crt --cert ~/.minikube/apiserver.crt --key ~/.minikube/apiserver.key https://$(minikube ip):8443/api/v1/namespaces/default/pods

El resultado es un json con información de tus pods, no muestro la salida porque el json es enorme, pero seguro veras la respuesta json.

Para saber otros endpoints revisa la documentación de referencia


minikube logs

Para saber que esta pasando en nuestro Minikube cluster podemos ver los logs:

minikube logs -f

minikube service

Con este comando Minikube te muestra las URL de sus servicios de tu cluster, este comando tiene varios sub-comandos.

Para mostrar los servicios que tienes usa:

minikube service list

Y veras todos los servicios expuestos:

|---------------|-----------------------|-----------------------------|
|   NAMESPACE   |         NAME          |             URL             |
|---------------|-----------------------|-----------------------------|
| default       | kubernetes            | No node port                |
| kube-system   | heapster              | No node port                |
| kube-system   | kube-dns              | No node port                |
| kube-system   | kubernetes-dashboard  | No node port                |
| kube-system   | monitoring-grafana    | http://192.168.99.100:30002 |
| kube-system   | monitoring-influxdb   | No node port                |
|---------------|-----------------------|-----------------------------|

Para exponer nuestro deployment creado anteriormente:

kubectl expose deployment mi-primer-deployment --type=NodePort --port=80

Verificamos nuestro service:

kubectl get services

Output:

NAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes            ClusterIP   10.96.0.1      <none>        443/TCP        118d
mi-primer-deployment  NodePort    10.103.32.75   <none>        80:31268/TCP   19m

Ahora para saber cual es la URL de nuestro service:

minikube service mi-primer-deployment

Output:

|-----------|----------------------|-----------------------------|
| NAMESPACE |         NAME         |             URL             |
|-----------|----------------------|-----------------------------|
| default   | mi-primer-deployment | http://192.168.99.100:31268 |
|-----------|----------------------|-----------------------------|
🎉  Opening kubernetes service  default/mi-primer-deployment in default browser...

Y como lo mentiona la salida, abrira tu navegador con la pagina por default de Ngixn.

Si observas la IP es exactamente igual a la que obtenemos con minikube ip pero diferente a la que vemos de nuestro service (10.103.32.75) esto es porque la IP de nuestro service pertenece a la red interna de nuestro cluster.

Por ahora no iremos a los detalles sobre la exposición de nuestro deployment y porque cuando lo hicimos especificamos que el tipo sea un NodePort ya que lo haremos en otro post totalmente dedicado a services


minikube docker-env

Este comando nos permitira tener acceso al Docker deamon que esta corriendo dentro de Minikube, si lo corremos generará unas variables de ambiente de Docker

minikube docker-env

Output:

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/markox/.minikube/certs"
# Run this command to configure your shell:
# eval $(minikube docker-env)

Como lo menciona la salida puedes evaluar la salida del comando para configurar automaticamente las variables, asegurate de tener instalado el cliente de Docker y no tener corriendo el servidor Docker en tu maquina.

Entonces:

eval $(minikube docker-env)

Y con ellos puedes ejecutar cualquier comando de Docker y tendras acceso al Docker que corre dentro de Minikube

docker image ls

Output:

EPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE
nginx                                        1.17.3              5a3221f0137b        11 days ago         126MB
k8s.gcr.io/kube-proxy                        v1.15.2             167bbf6c9338        3 weeks ago         82.4MB
k8s.gcr.io/kube-scheduler                    v1.15.2             88fa9cb27bd2        3 weeks ago         81.1MB
k8s.gcr.io/kube-apiserver                    v1.15.2             34a53be6c9a7        3 weeks ago         207MB
k8s.gcr.io/kube-controller-manager           v1.15.2             9f5df470155d        3 weeks ago         159MB
k8s.gcr.io/kube-proxy                        v1.15.0             d235b23c3570        2 months ago        82.4MB
k8s.gcr.io/kube-apiserver                    v1.15.0             201c7a840312        2 months ago        207MB
k8s.gcr.io/kube-controller-manager           v1.15.0             8328bb49b652        2 months ago        159MB

La salida es solo una version muy pequeña de lo que obtuve en mi consola, veras diferentes versiones de los componentes si haz actualizado tu Minikube.

Ahora intenta correr este comando para ver los contenedores corriendo en tu cluster Minikube:

docker ps

minikube ssh

Por ultimo este comando nos permite log in dentro de nuestro cluster de Minikube

minikube ssh

Output:

                         _             _
            _         _ ( )           ( )
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$

Puedes probar los comandos anteriores de Docker y funcionaran sin problema, otra prueba es intentar llamar a nuestro Nginx de mi-primer-deployment, en este caso porque estamos dentro de nuestro cluster le podemos pegar directo a la IP de nuestro service, en mi caso es 10.103.32.75:

wget -O - 10.103.32.75

Y veras la pagina por default de Nginx


Finalmente

Espero les haya agradado esta mini guía, si les interesa algo mas sobre Minikube dejenos sus comentarios en nuestras redes.

Por ahora nos enfocaremos a Kubernetes en nuestros siguientes posts, espero no tardarme tanto para el siguiente.