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
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" // Ejecute este comando en el nodo maestro$ sudo hostnamectl set-hostname "k8s-node-0" // Ejecute este comando en el nodo-0$ sudo hostnamectl set-hostname "k8s-node-1" // Ejecute este comando en el nodo-1
Agregue las siguientes entradas en los archivos /etc/hosts en cada nodo,
192.168.1.40 k8s-master192.168.1.41 k8s-nodo-0192.168.1.42 k8s-nodo-1
Paso 2) Instalar Docker (Tiempo de ejecución del contenedor) 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,
$ sudo systemctl enable docker.service --ahora
Ejecute el siguiente comando para verificar el estado del servicio docker y su versión,
$ systemctl status docker$ docker --version
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
Guardar y salir del archivo
Ejecute el comando swapoff para deshabilitar el intercambio sobre la marcha
$ sudo intercambio -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 -pnet.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 haya inicializado correctamente, obtendremos el siguiente resultado
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 péguelos.
[correo electrónico protegido]:~$ mkdir -p $HOME/.kube[correo electrónico protegido]:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[correo electrónico protegido]:~ $ 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 trabajadores).
Inicie sesión en Node-0 y ejecute el siguiente comando,
[correo electrónico protegido]:~$ sudo kubeadm unirse a 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b98d9d58c2aaapre>e4
Inicie sesión en Node-1 y ejecute el siguiente comando para unirse al clúster,
[correo electrónico protegido]:~$ sudo kubeadm unirse a 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b98d9d58c2aaapre>e4
Desde el nodo principal, ejecute el comando "kubectl get nodes" para verificar el estado de los nodos
[correo electrónico protegido]:~ $ kubectl get nodesname roles de estado edad versionk8s-master noade Master 27m v1.18.3k8s-nodo-0 nodoewread8m3s v1.18.3k8s-nodo-1 nodo notade 7m19s v1. 18.3[correo electrónico protegido]:~$ 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 listo ”. Para hacer que el estado sea "Listo ” debemos implementar complementos de red Pod basados en la interfaz de red de contenedores (CNI) como calico , enrutador Kube y tejido-red . 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,
[correo electrónico protegido]:~$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
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 nodesNAME STATUS ROLES AGE VERSIONk8s-master Ready master 39m v1.18.3k8s-node-0 Ready19m v1.18.3k8s-node-1 Ready 18.3[correo electrónico protegido]:~$ Ejecute el siguiente comando para verificar el estado de los pods de todos los espacios de nombres
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 complete bash)'>>~/.bashrc[email protected]:~$ source .bashrcPaso 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,
[correo electrónico protegido]:~$ kubectl create deployment nginx-web --image=nginxdeployment.apps/nginx-web created[correo electrónico protegido]:~$Ejecute el siguiente comando para verificar el estado de implementación
[email protected]:~$ kubectl get deployments.appsNAME READY UPTO-DATE DISPONIBLE AGenginx-web 1/1 1 1 41s[email protected]:~$ kubectl get deployments. -Conos de la edad de contenedores de edad disponibles SELECTORNORNX-WEB 1/1 1 1 56S nginx nginx app =nginx-web [correo electrónico protegido]:~ $ [correo electrónico protegido]:~ $ kubectl get podsname listado status se reinicia Agenginx-Web-7748f7f978-nk8b2 1 1 /1 En ejecución 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-webdeployment.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-webNAME READY ACTUALIZADO DISPONIBLE AGEnginx-web 4/4 4 4 13m[email protected]:~$[email protected describe]:~$ deployments.apps nginx-web
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,
[correo electrónico protegido]:~$ kubectl ejecutar http-web --image=httpd --port=80pod/http-web creado[correo electrónico protegido]:~$Cree un servicio usando el comando debajo y exponga el pod creado arriba en el puerto 80,
[correo electrónico protegido]:~$ kubectl exposición pod http-web --name=servicio-http --port=80 --type=NodePortservice/servicio-http expuesto[correo electrónico protegido]:~$[correo electrónico protegido]:~$ kubectl get service http-serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PUERTO(S) AGEhttp-service NodePort 10.101.152.13880:31098/TCP 10 s[e~ $proteted]
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)
[correo electrónico protegido]:~ $ kubectl get pods http-web -o wideename listos estatus reiniciados edad del nodo ip nodo nodo nodo>[correo electrónico protegido]:~$[correo electrónico protegido]:~$ curl http://k8s-node-0:31098¡Funciona!
[correo electrónico protegido]:~$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.
Lea 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)