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:
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,
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,
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