Cómo instalar y configurar Kubernetes (k8s) en Ubuntu 18.04 LTS

Kubernetes es una herramienta de orquestación de contenedores gratuita y de código abierto. Se utiliza para implementar aplicaciones basadas en contenedores automáticamente en un entorno de clúster, además de esto también se utiliza para administrar Contenedores Docker en los hosts del clúster de kubernetes. Kubernetes también se conoce como k8s.

En este artículo demostraré cómo instalar y configurar dos nodos Kubernetes (1.13) usando kubeadm en sistemas Ubuntu 18.04 / 18.10. Los siguientes son los detalles de la configuración de mi laboratorio:

Usaré tres sistemas Ubuntu 18.04 LTS, donde un sistema actuará como Nodo maestro de Kubernetes y otros dos nodos actuarán como Asiente esclavoe y se unirá al clúster de Kubernetes. Asumo que se instala un mínimo de 18.04 LTS en estos tres sistemas.

  • Nodo maestro de Kubernetes – (Nombre de host: k8s-master, IP: 192.168.1.70, SO: Ubuntu mínimo 18.04 LTS)
  • Kubernetes Slave Node 1 – (Nombre de host: k8s-worker-node1, IP: 192.168.1.80, SO: Minimal Ubuntu 18.04 LTS)
  • Kubernetes Slave Node 2 – (Nombre de host: k8s-worker-node2, IP: 192.168.1.90, SO: Minimal Ubuntu 18.04 LTS)

Nota: Kubernetes Slave Node también se conoce como Worker Node

Pasemos a los pasos de instalación y configuración de k8s.

Paso: 1) Establecer nombre de host y actualizar el archivo de hosts

Inicie sesión en el nodo principal y configure su nombre de host con el comando hostnamectl

[email protected]:~$ sudo hostnamectl set-hostname "k8s-master"
[email protected]:~$ exec bash
[email protected]:~$

Inicie sesión en Slave / Worker Nodes y configure su nombre de host respectivamente usando el comando hostnamectl,

[email protected]:~$ sudo hostnamectl set-hostname k8s-worker-node1
[email protected]:~$ exec bash
[email protected]:~$

[email protected]:~$ sudo hostnamectl set-hostname k8s-worker-node2
[email protected]:~$ exec bash
[email protected]:~$

Agregue las siguientes líneas en el archivo /etc/hosts en los tres sistemas,

192.168.1.70     k8s-master
192.168.1.80     k8s-worker-node1
192.168.1.90     k8s-worker-node2

Paso: 2) Instale e inicie el servicio Docker en los nodos maestro y esclavo

Ejecute el siguiente comando apt-get para instalar Docker en el nodo maestro,

[email protected]:~$ sudo apt-get install docker.io -y

Ejecute el siguiente comando apt-get para instalar la ventana acoplable en los nodos esclavos,

[email protected]:~$ sudo apt-get install docker.io -y
[email protected]:~$ sudo apt-get install docker.io -y

Una vez que los paquetes Docker estén instalados en los tres sistemas, inicie y habilite el servicio docker usando los siguientes comandos systemctl, estos comandos deben ejecutarse en los nodos maestro y esclavo.

~$ sudo systemctl start docker
~$ sudo systemctl enable docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
~$

Use el siguiente comando docker para verificar qué versión de Docker se ha instalado en estos sistemas,

~$ docker --version
Docker version 18.06.1-ce, build e68fc7a
~$

Paso: 3) Configurar el repositorio de paquetes de Kubernetes en los nodos maestro y esclavo

Nota: Todos los comandos en este paso tienen el mandato de ejecutarse en nodos maestros y esclavos.

Primero instalemos algunos paquetes necesarios, ejecute los siguientes comandos en todos los nodos, incluido el nodo maestro

~$ sudo apt-get install apt-transport-https curl -y

Ahora agregue la clave del repositorio del paquete de Kubernetes con el siguiente comando:

:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
OK
:~$

Ahora configure el repositorio de Kubernetes usando los siguientes comandos apt, en este momento el repositorio de paquetes de Kubernetes de Ubuntu 18.04 (bionic weaver) no está disponible, por lo que usaremos el repositorio de paquetes de Xenial Kubernetes.

:~$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

Paso: 4) Deshabilite el intercambio e instale Kubeadm en todos los nodos

Nota: Todos los comandos en este paso tienen el mandato de ejecutarse en nodos maestros y esclavos.

Kubeadm es uno de los métodos más comunes que se utilizan para implementar un clúster de kubernetes o, en otras palabras, podemos decir que se utiliza para implementar varios nodos en un clúster de kubernetes.

Según el sitio web oficial de Kubernetes, se recomienda deshabilitar el intercambio en todos los nodos, incluido el nodo principal.

Ejecute el siguiente comando para deshabilitar el intercambio temporal,

:~$ sudo swapoff -a

Para deshabilitar el intercambio permanente, comente el archivo de intercambio o la entrada de la partición de intercambio en el archivo /etc/fstab.

Ahora instale el paquete Kubeadm en todos los nodos, incluido el maestro.

:~$ sudo apt-get install kubeadm -y

Una vez que los paquetes de kubeadm se hayan instalado correctamente, verifique la versión de kubeadm con el comando debajo.

:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:33:30Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}
:~$

Paso: 5) Inicialice e inicie el clúster de Kubernetes en el nodo principal mediante Kubeadm

Use el siguiente comando kubeadm en el nodo maestro solo para inicializar Kubernetes

[email protected]:~$ sudo kubeadm init --pod-network-cidr=172.168.10.0/24

En el comando anterior, puede usar la misma red de pods o elegir su propia red de pods que se adapte a su entorno. Una vez que el comando se ejecute con éxito, obtendremos un resultado similar al siguiente:

Kubeadm-Command-Output-Ubuntu18

El resultado anterior confirma que el nodo maestro se ha inicializado con éxito, por lo que para iniciar el clúster, ejecute los siguientes comandos uno tras otro,

[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
[email protected]:~$

Verifique el estado del nodo maestro usando el siguiente comando,

[email protected]:~$ kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   18m   v1.13.2
[email protected]:~$

Como podemos ver en el resultado del comando anterior, nuestro nodo maestro no está listo porque hasta ahora no hemos implementado ningún pod.

Implementemos la red de pods. La red de pods es la red a través de la cual los nodos de nuestro clúster se comunicarán entre sí. desplegaremos Franela como nuestra red pod, Flannel proporcionará la red superpuesta entre los nodos del clúster.

Paso: 6) Implemente Flannel como red de pods desde el nodo principal y verifique los espacios de nombres de los pods

Ejecute lo siguiente kubectl comando para implementar la red de pod desde el nodo maestro

[email protected]:~$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

La salida del comando anterior debería ser algo como a continuación

clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created
[email protected]:~$

Ahora verifique el estado del nodo maestro y los espacios de nombres de los pods usando el comando kubectl,

[email protected]:~$ sudo  kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   78m   v1.13.2
[email protected]:~$

[email protected]:~$ sudo  kubectl get pods --all-namespaces
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-86c58d9df4-px4sj             1/1     Running   0          79m
kube-system   coredns-86c58d9df4-wzdzk             1/1     Running   0          79m
kube-system   etcd-k8s-master                      1/1     Running   1          79m
kube-system   kube-apiserver-k8s-master            1/1     Running   1          79m
kube-system   kube-controller-manager-k8s-master   1/1     Running   1          79m
kube-system   kube-flannel-ds-amd64-9tn8z          1/1     Running   0          14m
kube-system   kube-proxy-cjzz2                     1/1     Running   1          79m
kube-system   kube-scheduler-k8s-master            1/1     Running   1          79m
[email protected]:~$

Como podemos ver en el resultado anterior, el estado de nuestro nodo maestro ha cambiado a «Listo” y todos los espacios de nombres del pod están en estado de ejecución, por lo que esto confirma que nuestro nodo maestro está en buen estado y listo para formar un clúster.

Paso: 7) Agregar nodos esclavos o trabajadores al clúster

Nota: En el Paso 5, la salida del comando kubeadm obtuvimos el comando completo que tendremos que usar en el nodo esclavo o trabajador para unirnos a un clúster

Inicie sesión en el primer nodo esclavo (k8s-worker-node1) y ejecute el siguiente comando para unirse al clúster,

[email protected]:~$ sudo kubeadm join 192.168.1.70:6443 --token cwxswk.hbkuu4jua82o80d1 --discovery-token-ca-cert-hash sha256:ff1b0cfe5aec94f90a42bdb45d2b8bfde34006017c0e3f3026a84388f46a5495

La salida del comando anterior debería ser algo como esto,

kubeadm-join-command-output-worker-node1

Del mismo modo, ejecute el mismo comando kubeadm join en el segundo nodo trabajador,

[email protected]:~$ sudo kubeadm join 192.168.1.70:6443 --token cwxswk.hbkuu4jua82o80d1 --discovery-token-ca-cert-hash sha256:ff1b0cfe5aec94f90a42bdb45d2b8bfde34006017c0e3f3026a84388f46a5495

La salida de arriba debería ser algo como abajo,

kubeadm-join-command-output-worker-node2

Ahora vaya al nodo maestro y ejecute el siguiente comando para verificar el estado del nodo maestro y esclavo

[email protected]:~$ kubectl get nodes
NAME               STATUS   ROLES    AGE    VERSION
k8s-master         Ready    master   100m   v1.13.2
k8s-worker-node1   Ready    <none>   10m    v1.13.2
k8s-worker-node2   Ready    <none>   4m6s   v1.13.2
[email protected]:~$

El comando anterior confirma que hemos agregado con éxito nuestros dos nodos de trabajo en el clúster y su estado es Listo. Esto concluye que hemos instalado y configurado correctamente el clúster de Kubernetes de dos nodos en los sistemas Ubuntu 18.04.

Lea más en: Implementar pod, controlador de replicación y servicio en Kubernetes

Entradas relacionadas

Deja una respuesta

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