GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo implementar el equilibrio de carga de Nginx en el clúster de Kubernetes en Ubuntu 18.04 LTS

Kubernetes es un sistema de orquestación de contenedores gratuito y de código abierto que se puede usar para implementar y administrar contenedores. Fue desarrollado por Google y especialmente diseñado para escalado automático e implementaciones automatizadas. Kubernetes puede ejecutarse en cualquier infraestructura de nube y bare metal. Kubernetes le permite distribuir varias aplicaciones en un grupo de nodos. Kubernetes viene con un amplio conjunto de funciones, que incluyen recuperación automática, escalabilidad automática, equilibrio de carga, ejecución por lotes, escalado horizontal, detección de servicios, orquestación de almacenamiento y muchas más.

En este tutorial, aprenderemos a configurar el equilibrio de carga de Nginx con Kubernetes en Ubuntu 18.04.

Requisitos

  • Dos servidores con Ubuntu 18.04 instalado.
  • Mínimo 2 GB de RAM instalados en cada servidor.
  • Se configura una contraseña raíz en ambos servidores.

Cómo empezar

Primero, deberá actualizar ambos servidores con la última versión estable. Puede actualizarlos ejecutando el siguiente comando:

apt-get update -y
apt-get upgrade -y

Una vez que ambos servidores estén actualizados, reinícielos para aplicar todos los cambios.

De forma predeterminada, Kuberenetes no admite la memoria de intercambio y no funcionará si el intercambio está activo. Por lo tanto, deberá desactivar la memoria de intercambio en ambos servidores.

Para deshabilitar la memoria de intercambio temporal, ejecute el siguiente comando:

swapoff -a

Para deshabilitar la memoria de intercambio permanentemente, abra el archivo /etc/fstab:

nano /etc/fstab

Comente la última línea:

# /etc/fstab: static file system information.
#
# use 'blkid' to print the universally unique identifier for a
# device; this may be used with uuid= as a more robust way to name devices
# that works even if disks are added and removed. see fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
# swap was on /dev/sda4 during installation #UUID=65se21r-1d3t-3263-2198-e564c275e156 none swap sw 0 0

Guarde y cierre el archivo. Luego, ejecute el siguiente comando para aplicar los cambios de configuración:

mount -a

A continuación, deberá configurar la resolución de nombre de host en ambos servidores. Entonces, cada servidor puede comunicarse entre sí usando el nombre de host.

Para hacerlo, abra el archivo /etc/hosts usando su editor preferido:

nano /etc/hosts

Agregue las siguientes líneas:

192.168.0.103 master
192.168.0.100 slave

Guarde y cierre el archivo cuando haya terminado. Luego, continúe con el siguiente paso.

Instalar Docker y Kubernetes

A continuación, deberá instalar la herramienta Docker y Kubernetes kubelet, kubeadm y kubectl en ambos servidores.

Primero, instale los paquetes necesarios y agregue la clave GPG con el siguiente comando:

apt-get install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

A continuación, agregue el repositorio Docker CE en ambos servidores ejecutando el siguiente comando:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

A continuación, actualice el repositorio e instale Docker CE con el siguiente comando:

apt-get update -y
apt-get install docker-ce -y

Una vez completada la instalación, verifique el estado de Docker CE con el siguiente comando:

systemctl status docker

Debería ver el siguiente resultado:

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-07-19 07:05:50 UTC; 1h 24min ago
     Docs: https://docs.docker.com
 Main PID: 3619 (dockerd)
    Tasks: 8
   CGroup: /system.slice/docker.service
           ??3619 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.574491681Z" level=warning msg="Your kernel does not support swap memory limit"
Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.575196691Z" level=warning msg="Your kernel does not support cgroup rt period"
Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.575733336Z" level=warning msg="Your kernel does not support cgroup rt runtime"
Jul 19 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.582517104Z" level=info msg="Loading containers: start."
Jul 19 07:05:49 master dockerd[3619]: time="2019-07-19T07:05:49.391255541Z" level=info msg="Default bridge (docker0) is assigned with an IP add
Jul 19 07:05:49 master dockerd[3619]: time="2019-07-19T07:05:49.681478822Z" level=info msg="Loading containers: done."
Jul 19 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.003776717Z" level=info msg="Docker daemon" commit=0dd43dd graphdriver(s)=overla
Jul 19 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.009892901Z" level=info msg="Daemon has completed initialization"
Jul 19 07:05:50 master systemd[1]: Started Docker Application Container Engine.
Jul 19 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.279284258Z" level=info msg="API listen on /var/run/docker.sock"

Los paquetes de Kubernetes no están disponibles en el repositorio predeterminado de Ubuntu 18.04. Por lo tanto, deberá agregar el repositorio de Kubernetes en ambos servidores.

Puede agregarlo con los siguientes comandos:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | tee /etc/apt/sources.list.d/kubernetes.list

A continuación, actualice el repositorio e instale los paquetes de Kubernetes con el siguiente comando:

apt-get install kubelet kubeadm kubectl -y

Una vez que todos los paquetes estén instalados, puede proceder a configurar el servidor maestro.

Configurar servidor maestro de Kubernetes

Primero, deberá inicializar su clúster con su dirección IP privada en el servidor maestro:

Puedes hacerlo con el comando kubeadm:

kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.0.103

Una vez que el clúster se inicializó correctamente, debería ver el siguiente resultado:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u \
    --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c 

A continuación, deberá configurar la herramienta kubectl en su servidor maestro. Puedes hacerlo con el siguiente comando:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

A continuación, deberá implementar una interfaz de red de contenedores (CNI) en su servidor. Porque el clúster no tiene un CNI.

Puede implementar el CNI en su clúster con el siguiente comando:

kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml

Debería ver el siguiente resultado:

configmap/calico-config created
daemonset.extensions/calico-etcd created
service/calico-etcd created
daemonset.extensions/calico-node created
deployment.extensions/calico-kube-controllers created
deployment.extensions/calico-policy-controller created
clusterrolebinding.rbac.authorization.k8s.io/calico-cni-plugin created
clusterrole.rbac.authorization.k8s.io/calico-cni-plugin created
serviceaccount/calico-cni-plugin created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
serviceaccount/calico-kube-controllers created

Ahora puede verificar sus espacios de nombres ejecutando el siguiente comando:

kubectl get namespaces

Si todo va bien, debería ver el siguiente resultado:

NAME          STATUS    AGE
default       Active    4h
kube-public   Active    4h
kube-system   Active    4h

A continuación, verifique si el nodo maestro ahora se está ejecutando correctamente con el siguiente comando:

kubectl get nodes

Debería ver el siguiente resultado:

name          status    roles     age       version
master   Ready     master    12m       v1.15.3

Agregar esclavo al clúster de Kubernetes

A continuación, inicie sesión en su servidor esclavo y ejecute el siguiente comando para agregar el esclavo al clúster de Kubernetes:

kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c

A continuación, vaya al servidor maestro y verifique si el esclavo se agrega a su clúster de Kubernetes con el siguiente comando:

kubectl get nodes

Debería ver el siguiente resultado:

name status roles age version
master ready master 25m v1.15.3
slave ready 2m v1.15.3

Una vez que haya terminado, puede continuar con el siguiente paso.

Implementar NGINX en el clúster de Kubernetes

El clúster de Kubernetes ahora está instalado, configurado y funcionando correctamente. Es hora de implementar Nginx en el clúster de Kubernetes.

Vaya al servidor maestro y cree una implementación de Nginx con el siguiente comando:

kubectl create deployment nginx --image=nginx

Ahora puede enumerar la implementación de Nginx con el siguiente comando:

kubectl get deployments

Debería ver el siguiente resultado:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           99s

Una vez que Nginx se ha implementado, la aplicación se puede exponer con el siguiente comando:

kubectl create service nodeport nginx --tcp=80:80

Ahora puede ver una nueva dirección IP de servicio y clúster asignada con el siguiente comando:

kubectl get svc

Debería ver el siguiente resultado:

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1             443/TCP   15m
nginx        ClusterIP   10.152.183.199           80:32456/TCP    60s

¡Felicidades! ha implementado con éxito Nginx en el clúster de Kubernetes. También puede agregar fácilmente otro nodo al clúster de Kubernetes. Para obtener más información, consulte el documento oficial de Kubernetes en Kubernetes Doc. Siéntase libre de preguntarme si tiene alguna pregunta.


Ubuntu
  1. Cómo implementar NGINX Reverse Proxy en Docker

  2. Cómo implementar Redis Cluster en Kubernetes

  3. Cómo instalar Kubernetes en Ubuntu 18.04

  4. Cómo implementar Modsecurity con Nginx en Ubuntu 20.04 LTS

  5. Implemente Modsecurity con Nginx en Ubuntu 20.04 LTS

Cómo instalar Docker en Ubuntu 18.04 LTS

Cómo instalar Nginx en Ubuntu 18.04 LTS

Cómo instalar Kubernetes en Ubuntu 18.04 LTS

Cómo instalar Docker en Ubuntu 20.04 LTS

Cómo instalar Kubernetes en Ubuntu 20.04 LTS

Cómo instalar Kitematic en Ubuntu 20.04 LTS