Cómo instalar Kubernetes (k8s) en el servidor Ubuntu 20.04 LTS

Kubernetes (k8s) es una herramienta de orquestación de contenedores gratuita y de código abierto. Se utiliza para implementar, escalar y administrar aplicaciones basadas en contenedores. En este artículo, demostraremos cómo instalar Kubernetes Cluster en Ubuntu 20.04 LTS Server (Focal Fossa) usando kubeadm. En la configuración de mi laboratorio, he usado tres servidores Ubuntu 20.04 LTS. Los siguientes son los requisitos del sistema en cada sistema Ubuntu.

  • Mínimo de 2 GB de RAM
  • 2 núcleos (2 vCPU)
  • 15 GB de espacio libre en /var
  • Usuario privilegiado con derechos sudo
  • Conexión estable a Internet

Los siguientes son los detalles de la configuración de mi laboratorio:

  • Máquina 1 (Servidor Ubuntu 20.04 LTS) – K8s-master – 192.168.1.40
  • Máquina 2 (Servidor Ubuntu 20.04 LTS) – K8s-node-0 – 192.168.1.41
  • Máquina 3 (Servidor Ubuntu 20.04 LTS) – K8s-node-1 – 192.168.1.42

k8s-cluster-setup-ubuntu-20-04-lts-servidor

Ahora pasemos a los pasos de instalación de Kubernetes.

Paso 1) Establecer nombre de host y agregar entradas en el archivo /etc/hosts

Use el comando hostnamectl para establecer el nombre de host en cada nodo, el ejemplo se muestra a continuación:

$ sudo hostnamectl set-hostname "k8s-master"     // Run this command on master node
$ sudo hostnamectl set-hostname "k8s-node-0"     // Run this command on node-0
$ sudo hostnamectl set-hostname "k8s-node-1"     // Run this command on node-1

Agregue las siguientes entradas en los archivos /etc/hosts en cada nodo,

192.168.1.40    k8s-master
192.168.1.41    k8s-node-0
192.168.1.42    k8s-node-1

Paso 2) Instale Docker (Container Runtime) en los 3 nodos

Inicie sesión en cada nodo y ejecute los siguientes comandos para instalar Docker,

$ sudo apt update
$ sudo apt install -y docker.io

Ahora inicie y habilite el servicio docker en cada nodo usando el comando systemctl debajo,

$ sudo systemctl enable docker.service --now

Ejecute el siguiente comando para verificar el estado del servicio docker y su versión,

$ systemctl status docker
$ docker --version

Docker-Versión-Servicio-Estado-Ubuntu-20-04

Paso 3) Deshabilite el intercambio y habilite el reenvío de IP en todos los nodos

Para deshabilitar el intercambio, edite el archivo /etc/fstab y comente la línea que incluye la entrada, ya sea la partición de intercambio o el archivo de intercambio.

$ sudo vi /etc/fstab

Intercambiar-deshabilitar-Ubuntu-20-04

Guardar y salir del archivo

Ejecute el comando swapoff para deshabilitar el intercambio sobre la marcha

$ sudo swapoff -a

Para habilitar el reenvío de ip de forma permanente, edite el archivo “/etc/sysctl.conf” y busque la línea “net.ipv4.ip_forward=1” y descoméntalo. Después de realizar los cambios en el archivo, ejecute el siguiente comando

$ sudo sysctl -p
net.ipv4.ip_forward = 1
$

Paso 4) Instale Kubectl, kubelet y kubeadm en todos los nodos

Ejecute los siguientes comandos en los 3 nodos para instalar la utilidad kubectl, kubelet y kubeadm

$ sudo apt install -y apt-transport-https curl
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
$ sudo apt update
$ sudo apt install -y kubelet kubeadm kubectl

Nota : Al momento de escribir este artículo, el repositorio Kubernetes de Ubuntu 16.04 (Xenial Xerus) estaba disponible, pero en el futuro, cuando el repositorio de Kubernetes esté disponible para Ubuntu 20.04, reemplace xenial con la palabra focal en el comando anterior ‘apt-add-repository’.

Paso 4) Inicialice el clúster de Kubernetes mediante kubeadm (desde el nodo principal)

Inicie sesión en su nodo maestro (k8s-master) y ejecute debajo del comando ‘kubeadm init’ para inicializar el clúster de Kubernetes,

$ sudo kubeadm init

Una vez que el clúster se inicialice correctamente, obtendremos el siguiente resultado

Kubernetes-Cluster-Con éxito-Ubuntu-20-04

Para comenzar a usar el clúster como un usuario normal, ejecutemos los siguientes comandos, los comandos ya están allí en la salida, simplemente copie y pegue.

[email protected]:~$  mkdir -p $HOME/.kube
[email protected]:~$  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[email protected]:~$  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Ahora una los nodos trabajadores (k8s-node-0/1) al clúster, el comando para unirse al clúster ya está en la salida. Copie el comando «kubeadm join» y péguelo en ambos nodos (nodos de trabajo).

Inicie sesión en Node-0 y ejecute el siguiente comando,

[email protected]:~$ sudo kubeadm join 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b989d29caaa4d58c28d0e4e

Nodo-0-Unirse-Cluster-Ubuntu-20-04

Inicie sesión en Node-1 y ejecute el siguiente comando para unirse al clúster,

[email protected]:~$ sudo kubeadm join 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b989d29caaa4d58c28d0e4e

Nodo-1-Unirse-Cluster-Ubuntu-20-04

Desde el nodo principal, ejecute el comando «kubectl get nodes» para verificar el estado de los nodos

[email protected]:~$ kubectl get nodes
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   27m     v1.18.3
k8s-node-0   NotReady   <none>   8m3s    v1.18.3
k8s-node-1   NotReady   <none>   7m19s   v1.18.3
[email protected]:~$

Como podemos ver, tanto los nodos trabajadores como el nodo maestro se han unido al clúster, pero el estado de cada nodo es «No está listo”. Para hacer el estado “Listo” debemos implementar complementos de red Pod basados ​​en la interfaz de red de contenedores (CNI) como calicó, enrutador kube y red de tejido. Como sugiere el nombre, los complementos de red de pod permiten que los pods se comuniquen entre sí.

Paso 5) Implementar el complemento Calico Pod Network (nodo principal)

Desde el nodo maestro, ejecute el siguiente comando para instalar el complemento de red Calico pod,

[email protected]:~$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

calico-pod-network-complemento-ubuntu-20-04

Una vez que se haya implementado correctamente, el estado de los nodos estará listo, volvamos a ejecutar el comando kubectl para verificar el estado de los nodos.

[email protected]:~$ kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   39m   v1.18.3
k8s-node-0   Ready    <none>   19m   v1.18.3
k8s-node-1   Ready    <none>   19m   v1.18.3
[email protected]:~$

Ejecute el siguiente comando para verificar el estado de los pods de todos los espacios de nombres

pods-estado-k8s-ubuntu-20-04

Perfecto, lo anterior confirma que todos los pods están funcionando y en buen estado. Intentemos implementar pods, servicios e implementaciones para ver si nuestro clúster de Kubernetes funciona bien o no.

Nota: Para habilitar la función de finalización de bash en su nodo maestro, ejecute lo siguiente

[email protected]:~$ echo 'source <(kubectl completion bash)' >>~/.bashrc
[email protected]:~$ source .bashrc

Leer también : Cómo configurar el clúster de Kubernetes en Google Cloud Platform (GCP)

Paso 6) Probar y verificar el clúster de Kubernetes

Vamos a crear una implementación llamada nginx-web con la imagen del contenedor nginx en el espacio de nombres predeterminado, ejecute el siguiente comando kubectl desde el nodo principal,

[email protected]:~$ kubectl create deployment nginx-web --image=nginx
deployment.apps/nginx-web created
[email protected]:~$

Ejecute el siguiente comando para verificar el estado de la implementación

[email protected]:~$ kubectl get deployments.apps
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-web   1/1     1            1           41s
[email protected]:~$ kubectl get deployments.apps  -o wide
NAME        READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
nginx-web   1/1     1            1           56s   nginx        nginx    app=nginx-web
[email protected]:~$
[email protected]:~$ kubectl get  pods
NAME                         READY   STATUS    RESTARTS   AGE
nginx-web-7748f7f978-nk8b2   1/1     Running   0          2m50s
[email protected]:~$

Como podemos ver, la implementación se ha creado correctamente con la réplica predeterminada.

Ampliemos la implementación, configure las réplicas como 4. Ejecute el siguiente comando,

[email protected]:~$ kubectl scale --replicas=4 deployment nginx-web
deployment.apps/nginx-web scaled
[email protected]:~$

Ahora verifique el estado de su implementación usando los siguientes comandos,

[email protected]:~$ kubectl get deployments.apps nginx-web
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-web   4/4     4            4           13m
[email protected]:~$
[email protected]:~$ kubectl describe deployments.apps nginx-web

implementación-describe-kubectl-command

Lo anterior confirma que la implementación basada en nginx se ha escalado con éxito.

Realicemos una prueba más, creemos un pod llamado «http-web» y expóngalo a través del servicio llamado «http-service» con el puerto 80 y NodePort como tipo.

Ejecute el siguiente comando para crear un pod,

[email protected]:~$ kubectl run http-web --image=httpd --port=80
pod/http-web created
[email protected]:~$

Cree un servicio usando el comando debajo y exponga el pod creado arriba en el puerto 80,

[email protected]:~$ kubectl expose pod http-web --name=http-service --port=80 --type=NodePort
service/http-service exposed
[email protected]:~$
[email protected]:~$ kubectl get service http-service
NAME           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
http-service   NodePort   10.101.152.138   <none>        80:31098/TCP   10s
[email protected]:~$

Kubectl-servicio-describe-ubuntu

Obtenga la IP del nodo o el nombre de host en el que se implementa el módulo web http y luego acceda al servidor web a través de NodePort (31098)

[email protected]:~$ kubectl get pods http-web -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
http-web   1/1     Running   0          59m   172.16.11.196   k8s-node-0   <none>           <none>
[email protected]:~$
[email protected]:~$ curl http://k8s-node-0:31098
<html><body><h1>It works!</h1></body></html>
[email protected]:~$

Perfecto, está funcionando bien como se esperaba. Esto concluye el artículo y confirma que hemos configurado correctamente el clúster de Kubernetes en el servidor Ubuntu 20.04 LTS.

Leer también : Cómo configurar el controlador de entrada NGINX en Kubernetes

Leer también : Cómo configurar el registro privado de Docker en Kubernetes (k8s)

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *