Saludos amigos, en los días que corren, escuchamos Kubernetes más y más, es probable que algunos ya hayáis tocado un clúster de Kubernetes, si bien ha podido ser directamente en cloud usando los Kubernetes de AWS, Google Cloud o Azure, o quizá en Digitalocean, pero quizá no tantos en local.
También recordaros la serie de blogs paso-a-paso de Oscar Más sobre este tema:
Microk8s, la imagen snap de Ubuntu que te lo monta todo en segundos
Hoy os traigo algo más sencillo, se trata de microk8s, que se tarda unos segundos en instalar y nos va ha dejar un single-node de Kubernetes ya listo para ser desplegado con los siguientes componentes:
- Istio
- GPGPU bindings
- Daily builds
- Local storage
- Local registry
- Updates
- Dashboard
- Metrics
- Upgrades
- IngressDNS
- Conformant
Vamos a ver el procedimiento de instalación.
Desplegar y configurar Microk8s desde Ubuntu snap
En este tutorial he omitido los pasos sobre cómo desplegar una VM Linux sobre VMware, ya que podemos encontrar estos pasos en muchos otros tutoriales por la red. Una vez que tenemos nuestra VM instalada, con las open-vm-tools e IP estática, lanzaremos el siguiente comando como usuario no root:
sudo snap install microk8s --edge --classic
El proceso que tardará unos segundos, se encargará de instalar y configurar todo lo necesario, cuando acabe, nos mostrará algo similar a este output:
2019-07-30T22:14:03+01:00 INFO Waiting for restart... microk8s (edge) v1.15.1 from Canonical✓ installed
Ya una vez descargado en instalado, podremos arrancar micro8ks con el siguiente comando:
sudo microk8s.start
Que nos mostrará un output similar al siguiente pasados unos segundos:
enable of [microk8s.daemon-apiserver microk8s.daemon-apiserver-kicker microk8s.daemon-containerd microk8s.daemon-controller-manager microk8s.daemon-etcd microk8s.daemonâStarted. Enabling pod scheduling node/micro-k8s already uncordoned
Podremos ahora arrancar diferentes servicios que necesitemos, en nuestro caso vamos a desplegar DNS y Dashboard, con un comando tan sencillo como el siguiente:
microk8s.enable dns dashboard
El output que este comando nos mostrará será similar al siguiente:
Enabling DNS Applying manifest serviceaccount/coredns created configmap/coredns created deployment.apps/coredns created service/kube-dns created clusterrole.rbac.authorization.k8s.io/coredns created clusterrolebinding.rbac.authorization.k8s.io/coredns created Restarting kubelet DNS is enabled Applying manifest secret/kubernetes-dashboard-certs created serviceaccount/kubernetes-dashboard created role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created deployment.apps/kubernetes-dashboard created service/kubernetes-dashboard created service/monitoring-grafana created service/monitoring-influxdb created service/heapster created deployment.extensions/monitoring-influxdb-grafana-v4 created serviceaccount/heapster created clusterrolebinding.rbac.authorization.k8s.io/heapster created configmap/heapster-config created configmap/eventer-config created deployment.extensions/heapster-v1.5.2 created If RBAC is not enabled access the dashboard using the default token retrieved with: token=$(microk8s.kubectl -n kube-system get secret | grep default-token | cut -d " " -f1) microk8s.kubectl -n kube-system describe secret $token In an RBAC enabled setup (microk8s.enable RBAC) you need to create a user with restricted permissions as shown in https://github.com/kubernetes/dashboard/wiki/Creating-sample-user
Si quisiéramos jugar con más servicios, os dejo una lista que podemos habilitar si queremos:
- storage – nos permite usar el almacenamiento local de la VM
- ingress – creará un controlador de tráfico Ingress
- gpu – habilita el runtima de nvidia-dockery set de dameons de nvidia-device-plugin
- istio – habilita los servicios de core de Istio
- registry – despliega un registro privado de Docker
Accediendo al Dashboard de Kubernetes
Ya cuando tenemos todo arriba, podremos comprobar la IP del Dashboard haciendo uso de los comandos normales de Kubernetes, en este caso para mostrar los namespaces disponibles y sus configuraciones de red:
microk8s.kubectl get all --all-namespaces
El output de este comando variará respecto a lo que tengáis desplegado, en mi caso se ve así:
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/coredns-86c94466cc-5v6v6 1/1 Running 0 6m42s kube-system pod/heapster-v1.5.2-844b564688-f4kkj 4/4 Running 0 5m34s kube-system pod/kubernetes-dashboard-7d75c474bb-cqddh 1/1 Running 0 6m35s kube-system pod/monitoring-influxdb-grafana-v4-6b6954958c-vg2f4 2/2 Running 0 6m35s NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 15m kube-system service/heapster ClusterIP 10.152.183.186 <none> 80/TCP 6m35s kube-system service/kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 6m42s kube-system service/kubernetes-dashboard ClusterIP 10.152.183.190 <none> 443/TCP 6m35s kube-system service/monitoring-grafana ClusterIP 10.152.183.36 <none> 80/TCP 6m35s kube-system service/monitoring-influxdb ClusterIP 10.152.183.53 <none> 8083/TCP,8086/TCP 6m35s NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system deployment.apps/coredns 1/1 1 1 6m42s kube-system deployment.apps/heapster-v1.5.2 1/1 1 1 6m35s kube-system deployment.apps/kubernetes-dashboard 1/1 1 1 6m35s kube-system deployment.apps/monitoring-influxdb-grafana-v4 1/1 1 1 6m35s NAMESPACE NAME DESIRED CURRENT READY AGE kube-system replicaset.apps/coredns-86c94466cc 1 1 1 6m42s kube-system replicaset.apps/heapster-v1.5.2-6b794f77c8 0 0 0 6m35s kube-system replicaset.apps/heapster-v1.5.2-6f5d55456 0 0 0 5m40s kube-system replicaset.apps/heapster-v1.5.2-844b564688 1 1 1 5m34s kube-system replicaset.apps/kubernetes-dashboard-7d75c474bb 1 1 1 6m35s kube-system replicaset.apps/monitoring-influxdb-grafana-v4-6b6954958c 1 1 1 6m35s
Antes de continuar, si estamos corriendo este Kubernetes en una VM, no en nuestro equipo propio, no podremos acceder al rango de red de los namespaces, pero podemos montar un proxy rápido para que rediriga el tráfico de los namespaces y podamos saltar a ellos, el comando muy sencillo, la & del final es aposta para mantener el proxy arriba:
microk8s.kubectl proxy --accept-hosts=.* --address=0.0.0.0 &
Si nos vamos a la IP que nos está mostrando el servicio de Dashboard, con el puerto 443, podremos ver el Dashboard:
http://IPDEVUESTROUBUNTU:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
Opción menos segura – Añadir el Skip login a la interfaz del Dashboard
Si estamos accediendo desde la red, como os estoy contando, seguramente queramos saltarnos este login, ya que no podemos acceder sin HTTPS, para ello tendremos que editar el namespace del Dashboard en caliente, de la siguiente manera:
microk8s.kubectl edit deployment/kubernetes-dashboard --namespace=kube-system
Y añadir el enable-skip-login después de la siguiente opción:
spec:
containers:
- args:
- --auto-generate-certificates
- --enable-skip-login
Y ya estaría, en nuestro Dashboard tendremos el botón de Skip:
Una vez lo presionamos, ya podremos acceder al Dashboard de Kubernetes, y ver el estado de todos los Namespaces, etc:
Además de poder ver el consumo de memoria RAM y CPU del single-node de Kubernetes: 
Opción segura – Generar un token para logearnos al Dashboard
Si estamos accediendo mediante HTTPS desde la propia VM de Ubuntu, porque tenemos un navegador allí e interfaz gráfica. Para generar un token para poder acceder al Dashboard, será tan sencillo como lanzar lo siguiente desde la consola:
microk8s.kubectl -n kube-system describe secret $token
Y ya podremos ver algo similar al siguiente output:
Name: coredns-token-kzh76
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: coredns
kubernetes.io/service-account.uid: 60732ed0-390e-4136-9dc2-0e043edb8a36
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1094 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjb3JlZG5zLXRva2VuLWt6aDc2Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNvcmVkbnMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2MDczMmVkMC0zOTBlLTQxMzYtOWRjMi0wZTA0M2VkYjhhMzYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06Y29yZWRucyJ9.kc-_R6__NS3pqYLUR6DBCIpSNrnDP-tMscjRchdPaiFcfneqvBROuhd8q-tVY5HTTrxJ1pi40lL0prSTHw4Gi4DtH-WXEur7Y2lMVzrD5UuzLHUCPCGzuqmyH_1VOrwZTPhOe-_KKzyFcxEDjAWgIP-BcYRUGpvODX5HKD4PW5MIlgG49gGF5dxZM_5_vX3Ts2iIt5xVQuTdA5s6cjv0yXe5I1wwO5-h2DpsbKAe7ILZQYnlYhYnP2Bnjuuxc41-n7-YSx3ealfAeHT_ibE5c8k86P9ojtfMZNP1DshmbTmdb5499eri65D764FXEo58LIMCilT1rElWjk2aWAwF7g
etc
Entonces en la siguiente pantalla del Dashboard seleccionaremos la opción de Token:
Una vez lo presionamos, ya podremos acceder al Dashboard de Kubernetes, y ver el estado de todos los Namespaces, etc:
Además de poder ver el consumo de memoria RAM y CPU del single-node de Kubernetes: 
Comandos adicionales de Microk8s
Si queréis jugar mucho más con el potencial de microk8s, os dejo a continuación los siguientes comandos para que exploréis un poco más con la herramienta:
- microk8s.status: Proporciona una visión general del estado de MicroK8s (en ejecución/no en ejecución), así como del conjunto de complementos habilitados.
- microk8s.enable: Habilita el addon
- microk8s.disable: Deshbailita el addon
- microk8s.kubectl: Interactua con kubernetes
- microk8s.config: muestra la configuración del fichero de configuración de kubernetes
- microk8s.istioctl: Interactuar con los servicios de istio. Necesitamos habilitar el complemento istio
- microk8s.inspect: Realiza una rápida inspección de la instalación de MicroK8s. Ofrece consejos sobre lo que puede estar fallando
- microk8s.reset: Hace un reset de la plataforma a cómo estaba al incio
- microk8s.stop: Para todos los servicios de microk8s
- microk8s.start: Arranca todos los servicios de microk8s
Nada más amigos, muy sencillo y para toda la familia, desplegado en unos 5 minutos máximo todo con la configuración adicional, etc. ¡Es el momento de aprender Kubernetes!

Hola, he seguido tu tutorial para poder desplegar microk8s en una vm con ubuntu18, pero al intentar acceder me muestra el siguiente error
{
“kind”: “Status”,
“apiVersion”: “v1”,
“metadata”: {
},
“status”: “Failure”,
“message”: “no endpoints available for service \”kubernetes-dashboard\””,
“reason”: “ServiceUnavailable”,
“code”: 503
}
gracias
Saludos,
Has seguido todos los pasos uno a uno? Estas accediendo desde tu pc o desde el propio server?