Cómo instalar y configurar Kubernetes y Docker en Ubuntu 18.04 LTS
Kubernetes es una plataforma de código abierto para gestionar aplicaciones en contenedores. Te permite gestionar, escalar y desplegar automáticamente tus aplicaciones en contenedores en el entorno de clústeres. Kubernetes está desarrollado por Google.
Con Kubernetes, puedes orquestar contenedores en varios hosts, escalar las aplicaciones en contenedores con todos los recursos sobre la marcha, y tener un entorno de gestión de contenedores centralizado.
En este tutorial, te mostraré paso a paso cómo instalar y configurar Kubernetes en Ubuntu 18.04. Utilizaremos 1 servidor ‘k8s-master’ como maestro de Kubernetes, y 2 servidores como trabajadores de Kubernetes, ‘worker01’ y ‘worker02’.
Requisitos previos
- 3 servidores Ubuntu
- 10.0.15.10 k8s-master
- 10.0.15.21 worker01
- 10.0.15.22 worker02
- Privilegios de root
Qué vamos a hacer
- Instalación de Kubeadm
- Configurar los Hosts
- Instalar Docker
- Desactivar SWAP
- Instalar paquetes Kubeadm
- Inicialización del Clúster Kubernetes
- Añadir nodos de trabajo al clúster de Kubernetes
- Prueba de
Paso 1 – Instalación de Kubeadm
En este primer paso, prepararemos los 3 servidores para la instalación de Kubernetes, por lo que ejecutaremos todos los comandos en los nodos maestro y trabajador.
Prepararemos todos los servidores para la instalación de Kubernetes cambiando la configuración existente en los servidores, y también instalando algunos paquetes, incluyendo docker y el propio kubernetes.
Configurar los Hosts
Edita el archivo hosts en todos los servidores utilizando el editorvim.
sudo vim /etc/hosts
Pega la configuración de hosts a continuación.
10.0.15.10 k8s-master 10.0.15.21 worker01 10.0.15.22 worker02
Guarda y sal.
Ahora haz una prueba de ping a todos los nombres de host de los servidores.
ping -c 3 k8s-master
ping -c 3 worker01
ping -c 3 worker02
Asegúrate de que todas las direcciones IP se resuelven como un nombre de host.
Instalar Docker
En este tutorial, instalaremos Docker desde el repositorio de Ubuntu.
Instala Docker utilizando el comando apt que aparece a continuación.
sudo apt install docker.io -y
Una vez completada la instalación, inicia el servicio Docker y habilítalo para que se inicie siempre al arrancar el sistema.
sudo systemctl start docker
sudo systemctl enable docker
La instalación de Docker se ha completado.
Desactiva el SWAP
Para configurar los servidores Linux Kubernetes, necesitamos desactivar el SWAP.
Comprueba la lista de intercambio y desactívalo.
sudo swapon -s
sudo swapoff -a
Para desactivar el SWAP de forma permanente, tenemos que editar el archivo ‘/etc/fstab’.
sudo vim /etc/fstab
Haz un comentario sobre el tipo de partición SWAP.
#/dev/mapper/hakase--labs--vg-swap_1 none swap sw 0 0
Guarda y sal, luego reinicia el sistema.
sudo reboot
Instalar los paquetes Kubeadm
En este tutorial, utilizaremos los paquetes Kubeadm para configurar el clúster de Kubernetes. Instalaremos los paquetes Kubeadm desde el repositorio oficial de Kubernetes.
Instala apt-transport-https.
sudo apt install -y apt-transport-https
Añade la Clave de Kubernetes.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Y añade el Repositorio de Kubernetes creando un nuevo archivo repo.list en el directorio ‘/etc/apt/sources.list.d’.
cd /etc/apt/
sudo vim sources.list.d/kubernetes.list
pega el repositorio de kubernetes abajo.
deb http://apt.kubernetes.io/ kubernetes-xenial main
Nota:
Seguimos utilizando el repositorio Xenial de Ubuntu 16.04 para nuestra instalación de Kubeadm.
Ahora actualiza el repositorio e instala los paquetes kubeadm utilizando los comandos apt que aparecen a continuación.
sudo apt update
sudo apt install -y kubeadm kubelet kubectl
Espera a que se instalen los paquetes kubeadm.
Paso 2 – Inicialización del Cluster Kubernetes
En este paso, inicializaremos Kubernetes en el nodo ‘k8s-master’. Ejecuta todos los comandos de esta etapa sólo en el servidor ‘k8s-master’.
Inicializa el clúster de Kubernetes utilizando el comando kubeadm que aparece a continuación.
sudo kubeadm init --pod-network-cidr=10.244.10.0/16 --apiserver-advertise-address=10.0.15.10 --kubernetes-version "1.11.0"
Ten en cuenta:
- –apiserver-advertise-address = determina la dirección IP en la que Kubernetes debe anunciar su servidor API.
- –pod-network-cidr = especifica el rango de direcciones IP para la red del pod. Nosotros estamos utilizando la red virtual «flannel». Si quieres utilizar otra red de pods, como weave-net o calico, cambia el rango de direcciones IP.
Cuando se complete la inicialización de Kubernetes, obtendrás el resultado que se muestra a continuación.
Copia el comando‘kubeadm join … … …‘ en tu editor de texto. El comando se utilizará para registrar nuevos nodos trabajadores en el clúster de Kubernetes.
Ahora, para utilizar Kubernetes, necesitamos ejecutar algunos comandos como se muestra en el resultado.
Crea un nuevo directorio de configuración ‘.kube’ y copia la configuración ‘admin.conf’ del directorio ‘/etc/kubernetes’.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
A continuación, despliega la red flannel en el clúster kubernetes mediante el comando kubectl.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
La red flannel se ha desplegado en el clúster Kubernetes.
Espera un minuto y luego comprueba el nodo y los pods de kubernetes utilizando los siguientes comandos.
kubectl get nodes
kubectl get pods --all-namespaces
Y obtendrás que el nodo «k8s-master» se está ejecutando como clúster «maestro» con el estado «listo», y todos los pods «kube-system» que se necesitan para el clúster están en marcha.
La inicialización y configuración del clúster Kubernetes maestro se ha completado.
Paso 3 – Añadir nodos trabajadores al clúster de Kubernetes
En este paso, añadiremos dos nodos trabajadores ‘worker01’ y ‘worker02’ al Cluster de Kubernetes.
Conéctate al servidor ‘worker01’ y ejecuta el comando kubeadm join que obtienes de la inicialización del clúster.
kubeadm join 10.0.15.10:6443 --token daync8.5dcgj6c6xc7l8hay --discovery-token-ca-cert-hash sha256:65a3e69531d323c335613dea1e498656236bba22e6cf3d5c54b21d744ef97dcd
Conéctate al servidor ‘worker02’ y ejecuta el comando kubeadm join que obtienes de la inicialización del clúster..
kubeadm join 10.0.15.10:6443 --token daync8.5dcgj6c6xc7l8hay --discovery-token-ca-cert-hash sha256:65a3e69531d323c335613dea1e498656236bba22e6cf3d5c54b21d744ef97dcd
Espera unos minutos y vuelve al nodo maestro ‘k8s-master’ y comprueba el estado del nodo.
kubectl get nodes
Verás que los nodos trabajadores ‘worker01’ y ‘worker02’ forman parte del Cluster Kubernetes.
Paso 4 – Prueba
En este paso, desplegaremos el servidor web Nginx dentro del clúster. Desplegaremos el servidor web Nginx utilizando la plantilla YAML.
Crea un nuevo directorio llamado ‘nginx’ y ve a ese directorio.
mkdir -p nginx/
cd nginx/
Ahora crea el archivo YAML de despliegue de Nginx ‘nginx-deployment.yaml’ utilizando el editor vim.
sudo vim nginx-deployment.yaml
Pega las configuraciones de abajo.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.0 ports: - containerPort: 80
Guarda y sal.
Nota:
- Estamos creando un nuevo ‘Deployment’ llamado ‘nginx-deployment’.
- Configura la etiqueta de la aplicación como ‘nginx’ con ‘3’ réplicas.
- El ‘despliegue-nginx’ tendrá contenedores llamados ‘nginx’, basados en la imagen docker ‘nginx:1.14.0’, y expondrá el puerto HTTP 80 por defecto.
Ahora crea el despliegue ejecutando el siguiente comando kubectl.
kubectl create -f nginx-deployment.yaml
Después de crear un nuevo ‘nginx-deployment’, comprueba la lista de despliegues dentro del clúster.
kubectl get deployments
kubectl describe deployment nginx-deployment
Ahora comprueba Kubernetes Pods y verás el pod ‘nginx-deployment-xxx’, comprueba los detalles del pod.
kubectl get pods
kubectl describe pods nginx-deployment-6cb5f7bf4f-t5xfh
Obtendrás los pods nginx-deployment con 3 réplicas en los nodos trabajadores.
A continuación, tenemos que crear un nuevo servicio para nuestro ‘nginx-deployment’.
Crea un nuevo archivo YAML llamado ‘nginx-service.yaml’.
vim nginx-service.yaml
Pega la configuración de abajo.
apiVersion: v1 kind: Service metadata: name: nginx-service labels: run: nginx-service spec: type: NodePort ports: - port: 80 protocol: TCP selector: app: nginx
Guarda y sal.
Nota:
- Estamos creando un nuevo servicio kubernetes llamado ‘nginx-service’.
- El tipo de servicio es ‘NodePort’ con el puerto HTTP predeterminado 80.
- El servicio pertenece a la aplicación llamada ‘nginx’ basada en nuestro despliegue ‘nginx-deployment’.
Crea el servicio kubernetes utilizando el comando kubectl que aparece a continuación.
kubectl create -f nginx-service.yaml
Ahora comprueba todos los servicios disponibles en el clúster y obtendrás el ‘nginx-service’ en la lista, luego comprueba los detalles del servicio.
kubectl get service
kubectl describe service nginx-service
Y verás que el NodePort de ‘nginx-service’ se está ejecutando en el puerto ‘32649’.
Comprueba utilizando el comando curl a todos los nodos trabajadores.
En el worker01.
curl worker01:32649
Verás la página por defecto de Nginx.
En el worker02.
curl worker02:32649
La instalación y configuración del Cluster Kubernetes en Ubuntu 18.04 se ha completado con éxito.