Partimos de la base de tres sistemas operativos basados en Ubuntu 16.04LTS. Las funcionalidades de los equipos serán las siguientes:
- ub-nodo0-sbd: en este servidor instalaremos Kubernetes y realizará las funcionalidades de Master. Desde este servidor realizaremos todas las operaciones de Kubernetes, que serán lanzadas contra los nodos ub-nodo1-sbd y ub-nodo2-sbd
- ub-nodo1-sbd y ub-nodo2-sbd: son los servidores encargados de gestionar nuestros pods (containers)
Para todo el procedimiento, he usado tres equipos virtuales basados en Ubuntu 16.04 LTS, en una plataforma de virtualización, pero podéis usar la que más os guste o incluso equipos físicos:
El esquema lógico quedaría de la siguiente manera:
Como podréis observar solamente he desplegado un servidor que realizará las funcionalidades de Master y es que la alta disponibilidad del nodo Master, no esta del todo testeada actualmente, así que no os lo aconsejo. Os dejo la captura donde lo indican:
Como siempre, antes de proceder a instalar ningún tipo de software, actualizaremos nuestros tres sistemas operativos:
root@ub-nodo2-sbd:~# apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt -y autoremove && reboot
Una vez actualizados, añadiremos los repositorios de Kubernetes a nuestros tres equipos y procederemos a la instalación de los paquetes necesarios:
root@ub-nodo2-sbd:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - root@ub-nodo2-sbd:~# echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list root@ub-nodo2-sbd:~# apt-get update && apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni
En vista de que Kubernetes desde la versión 1.8 no soporta que tengamos habilitada la SWAP en nuestro equipo, añadiremos la siguiente línea a nuestro fichero de configuración en los tres equipos:
root@ub-nodo2-sbd:~# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
Seguidamente reiniciaremos los servicios de los tres equipos para que se apliquen los cambios que hemos modificado y verificaremos que el servicio de Kubernetes esté arrancado en los tres equipos.
root@ub-nodo0-sbd:~# systemctl daemon-reload && systemctl restart kubelet root@ub-nodo0-sbd:~# systemctl status kubelet
Una vez arrancados los servicios, gestionaremos Kubernetes desde una cuenta que no sea la de root, en mi caso he escogido el usuario rootdevel.
Este comando se ha de lanzar únicamente desde el servidor master (ub-nodo0-sbd)
rootdevel@ub-nodo0-sbd:~$ sudo kubeadm init --pod-network-cidr=10.0.0.0/16
Una vez acabado obtendremos el siguiente mensaje, el cual nos indica que Kubernetes se ha instalado correctamente:
Es importante pero no vital, apuntarnos el token que se muestra en la anterior captura, para posteriormente poder añadir los otros dos nodos (ub-nodo1-sbd y ub-nodo2-sbd) a nuestra infraestructura de Kubernetes.
Para poder trabajar con la plataforma de Kubernetes desde nuestro usuario, copiaremos los ficheros de configuración, tal como nos han indicado cuando hemos acabado la instalación de Kubernetes:
rootdevel@ub-nodo0-sbd:~$ mkdir -p $HOME/.kube rootdevel@ub-nodo0-sbd:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config rootdevel@ub-nodo0-sbd:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Una vez copiados los ficheros, para saber que todo está funcionando correctamente, lanzaremos el siguiente comando, el cual nos mostrará el estado de nuestro servidor:
rootdevel@ub-nodo0-sbd:~$ kubectl get nodes
Como podréis observar, que el “STATUS” de Kubernetes, está “NotReady”. Nos falta instalar el Sistema de networking. En mi caso he escogido el Sistema de calico, pero podéis escoger cualquier otro. Toda la información la podéis encontrar en la siguiente URL: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network
rootdevel@ub-nodo0-sbd:~$ kubectl apply -f http://docs.projectcalico.org/v2.4/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
Una vez aplicados los cambios, podremos observar que el “STATUS” de nuestro servidor ya está “Ready”
rootdevel@ub-nodo0-sbd:~$ kubectl get nodes
Ahora ya podemos añadir nuestros dos servidores (ub-nodo1-sbd y ub-nodo2-sbd), en los cuales se crearan los pods. Por si acaso no nos hemos apuntado el token, lo podemos saber mediante el siguiente comando:
rootdevel@ub-nodo0-sbd:~$ sudo kubeadm token list
Ahora es el momento de añadir nuestros dos servidores (ub-nodo1-sbd y ub-nodo2-sbd) a la infraestructura de Kubernetes, esto lo realizaremos lanzado en comando que nos han mostrado en el momento de instalar el sistema en nuestro nodo master (ub-nodo0-sbd):
root@ub-nodo1-sbd:~# kubeadm join --token 350120.fdd5be57c172dca1 192.168.0.216:6443 --discovery-token-ca-cert-hash sha256:d7b06c32c6c414606aa573ea86124e843497676e69867cf2a76420d4107a238e root@ub-nodo2-sbd:~# kubeadm join --token 350120.fdd5be57c172dca1 192.168.0.216:6443 --discovery-token-ca-cert-hash sha256:d7b06c32c6c414606aa573ea86124e843497676e69867cf2a76420d4107a238e
Una vez acabados de añadir nuestros dos servidores a nuestra infraestructura de Kubernetes, verificaremos desde nuestro nodo master (ub-nodo0-sbd) que se han añadido correctamente los dos servidores. Para ello en la columna de “STATUS” nos ha de indicar que los servidores están “Ready”, tal como se muestra en la siguiente captura:
rootdevel@ub-nodo0-sbd:~$ kubectl get nodes
Una vez instalado nuestro sistema de Kubernetes, realizaremos un SnapShot de todos los equipos que forman parte de Kubernetes, ya que cada post lo empezaré desde este SnapShot
No te pierdas la serie completa sobre Kubernetes de Oscar Mas:
- Kubernetes – Introducción a Kubernetes
- Kubernetes – Instalación
- Kubernetes – RollingUpdate con Kubernetes
- Kubernetes – Dashboard
- Kubernetes – Volúmenes NFS
- Kubernetes – Registry
- Kubernetes – Traefik
- Kubernetes – Systemd con Traefik y Proxy de Kubernetes
- Kubernetes – Heapster Influx Grafana
- Kubernetes – Labels de Kubernetes
- Kubernetes – API: Swagger
- Kubernetes – API: Creando nuestro primer POD
- Kubernetes – API: Seguridad con Token

Hola me funciona todo perecto lo estoy haciendo en maquina virtual y me sale todo conectado incluso los nodos con el maste todos ready.
Pero ahora hago un reboot al servidor master intento poner el mismo comando para ver los nodos disponible y no me deja me sale algo de conection port localhost como si se perdiera la configuración ya echa de antes.
Espero respuestas.
On Ubuntu 16.04:
Add key for new repository:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
Add repository:
sudo vim /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
Install Kubernetes:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni