Una introducción a Kubespray | Activar el administrador del sistema

En este artículo, les presento una nueva herramienta llamada Kubespray que despliega clústeres de Kubernetes. antes de discutir kubespray, sin embargo, daré una pequeña introducción a Kubernetes, incluida su función y funcionalidad.

Índice

Introducción a Kubernetes

Kubernetes es una herramienta de orquestación que se utiliza para administrar contenedores en diferentes hosts al mismo tiempo. Docker solo puede administrar contenedores en un solo host. Para administrar contenedores en múltiples hosts, tenemos docker-swarm, pero Kubernetes proporciona funcionalidad adicional. Tenemos esta nueva herramienta de orquestación llamada kubespray para administrar contenedores en múltiples hosts. Kubernetes también tiene algunas características clave que lo hacen especial en comparación con otras herramientas de orquestación. Estas características incluyen escalabilidad automática horizontal, una GUI de Kubernetes, autosupervisión, orquestación de almacenamiento, implementación y recuperación automatizadas, y más.

Hay muchas formas de instalar clústeres de Kubernetes. Acá hay uno.

Kubespray: una nueva forma de instalar clústeres de Kubernetes

Los clústeres de Kubernetes se pueden crear utilizando una variedad de herramientas de automatización. Kubespray es una combinación de Kubernetes y Ansible. Esto significa que podemos instalar Kubernetes usando Ansible. También podemos implementar clústeres usando kubespray en servicios de computación en la nube como EC2 (AWS).

¿Cuáles son las ventajas de usar kubespray?

  • Kubespray ofrece flexibilidad de implementación. Le permite implementar un clúster rápidamente y personalizar todos los aspectos de la implementación.
  • Kubespray logra un equilibrio entre flexibilidad y facilidad de uso.
  • Solo necesita ejecutar un playbook de Ansible y su clúster está listo para funcionar.

El diagrama anterior muestra la arquitectura de implementación de kubespray.

Kubeadm frente a Kubespray

De acuerdo a Documentos de Kubespray, Kubeadm proporciona conocimientos sobre la gestión del ciclo de vida de los clústeres de Kubernetes, incluidos diseños autohospedados, servicios de descubrimiento dinámico y más. Si hubiera pertenecido al nuevo mundo de los operadores, podría haberlo llamado “Operador de clúster de Kubernetes”. kubespray, sin embargo, realiza tareas de administración de configuración genéricas del mundo Ansible de "operadores de sistemas operativos", con algunos clústeres K8 iniciales (con complementos de red incluidos) y arranque del plano de control. kubespray soportado kubeadm para la creación de clústeres desde v2.3 (y obsoletos nokubeadm implementación de v2.8) para usar el conocimiento del dominio de administración del ciclo de vida y descargar tareas de configuración genéricas del sistema operativo, lo que se espera que beneficie a ambas partes.

Comencemos la demostración

Antes de comenzar la demostración, me gustaría recordarles que kubespray está en desarrollo, así que asegúrese de usar una versión estable. En esta demostración, creé tres máquinas virtuales que constan de una maestra y dos nodos en instancias informáticas de AWS. Los pasos que realicé en la demostración se realizan en instancias de AWS.

Comencemos la demostración ahora.

Cree tres instancias virtuales en AWS, una para el maestro y dos para los nodos. Como ya hemos mencionado, kubespray usa Ansible para instalar clústeres de Kubernetes, por lo que comenzamos con la instalación de Ansible. Elegí las máquinas virtuales Linux CentOS 7 para instalar Ansible usando el yum gerente de empaque

$ yum install epel-release -y 
$ yum install ansible -y

Después de instalar Ansible, debemos instalar algunos de los paquetes que pueden ser necesarios en los siguientes pasos. Ellos son:

$ yum install python36 -y
$ yum install python-pip -y
$ pip2 install jinja2

Después de instalar estos paquetes de requisitos previos, configuramos Ansible. Sabemos que Ansible funciona con conectividad SSH, por lo que debemos ejecutar ssh-keygen en el nodo principal, luego copie las claves en todas las máquinas, incluido el nodo principal (para la autenticación sin clave).

Luego clona el repositorio oficial de kubespray de GitHub:

$ git clone https://github.com/kubernetes-incubator/kubespray.git

Ahora entra en el kubespray directorio e instalar dependencias desde requirement.txt archivo usando pip:

$ pip install -r requirement.txt

Instala todas las dependencias.

Si tiene un problema con el paquete de solicitud, intente los siguientes pasos:

  • Descarga lo último paquete de "solicitudes" (archivo .tar.gz)
  • Descomprima el archivo tar, vaya a este directorio y ejecute el python setup.py install pedido

De esta manera instalamos todos los paquetes de requisitos.

Ahora cópialo inventory/sample me gusta inventory/my-cluster:

$ cp -rfp inventory/sample inventory/my-cluster

Después de eso, declare una variable que incluya la IP privada de sus máquinas virtuales y llame a esta variable:

$ declare -a IPS=(10.0.0.210 10.0.0.12 10.0.0.213)

También debe instalar algunos requisitos útiles para los siguientes pasos:

$ pip3 install -r contrib/inventory_builder/requirements.txt/requirements.txt

Si no completa la instalación de los paquetes requeridos anteriormente, el siguiente comando muestra un error.

Ejecute el siguiente comando:

$ CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

Ahora debería generar el inventory/mycluster/hosts.yml con la siguiente asignación de host. Puede cambiarlo según sea necesario (solo cambie los nombres de los nodos de acuerdo con sus nombres de host):

all:
hosts:
  master:
     ansible_host: 10.0.0.210
     ip: 10.0.0.210
     access_ip: 10.0.0.210
   node1:
     ansible_host: 10.0.0.12
     ip: 10.0.0.12
     access_ip: 10.0.0.12
   node2:
     ansible_host: 10.0.0.213
     ip: 10.0.0.213
     access_ip: 10.0.0.213
 children:
   kube-master:
     hosts:
       master:
   kube-node:
     hosts:
       master:
       node1:
       node2:
   etcd:
     hosts:
       master:
       node1:
       node2:
   k8s-cluster:
     children:
       kube-master:
       kube-node:
   calico-rr:
     hosts: {}

Después de configurar el hosts.yml dependiendo de su configuración, necesitamos modificar algunos archivos de variables que se encuentran en las siguientes ubicaciones:

$ inventory/my-cluster/group_vars/all.yml
$ inventory/my-cluster/group_vars/k8s-cluster.yml

Primero, abra el inventory/mycluster/group_vars/all.yml archivo y elimine el comentario de la línea que contiene el siguiente texto:

# The read-only port for the kubelet to serve on with no authentication/authorization

Descomente esta línea para habilitar:

Kube_read_only_port: 10255

Abre el inventory/my-cluster/group_vars/k8s-cluster.yml archivo y modifíquelo con la siguiente información:

# Choose network plugin (cilium, calico, contiv, weave or flannel)
# Can also be set to 'cloud', which lets the cloud provider setup appropriate routing
kube_network_plugin: weave

Estamos todos listos. Correr ansible-playbook -i inventory/my-cluster/hosts.yml reset.yml para ejecutar el libro de jugadas para el clúster e implementar kubespray con el libro de jugadas de Ansible. El comando se ve así:

$ ansible-playbook -i inventory/my-cluster/hosts.yml cluster.yml

El libro de jugadas tarda entre cinco y siete minutos en ejecutarse, según las configuraciones de su máquina virtual. Una vez que el libro de jugadas esté terminado, puede verificar si su clúster está listo.

# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready  master 4m v1.18.5
node1 Ready   node 4m v1.18.5
node2 Ready   node 4m v1.18.5

Estos son algunos pasos adicionales para agregar o eliminar un nodo en su clúster de Kubernetes. Usted hace esto actualizando su hosts.yml archivar.

Aquí agregamos nodo3 a nuestro clúster de Kubernetes. Para esto necesitamos editar el inventory/my-cluster/hosts.yml archivar.

En el [all] sección agrega tu nodo3:

  [all]
master ansible_host=10.0.0.210
node1 ansible_host=10.0.0.12
node2 ansible_host=10.0.0.213
node3 ansible_host=10.0.0.252

Y en el [kube-node] sección:

  [kube-node]
master
node1
node2
node3

Luego ejecute el siguiente comando para agregar un nodo en su clúster:

$ ansible-playbook -i inventory/my-cluster/hosts.yml scale.yml

Después de completar este libro de jugadas, puede verificar que nodo3 se agregó con éxito a su clúster:

$ kubectl get nodes

NAME STATUS ROLES AGE VERSION
master Ready   master 4m v1.18.5
node1 Ready    node 4m v1.18.5
node2 Ready    node 4m v1.18.5
node3 Ready    node 4m v1.18.5

Eliminar nodo3, invertimos el proceso anterior. Esto significa que estamos eliminando todas las referencias a nodo3 desde hosts.yml archivo, es decir, de [all] y [kube-node] secciones.

Luego ejecutamos el libro de jugadas para eliminar el nodo3 del racimo:

$ ansible-playbook -i inventory/my-cluster/hosts.yml remove-node.yml

Después de completar este libro de jugadas, verifique que nodo3 se ha ido de su clúster de Kubernetes.

También puede restablecer el clúster, es decir, vaciar el clúster para una nueva instalación. Para eso, simplemente ejecute el libro de jugadas como se muestra a continuación:

$ ansible-playbook -i inventory/my-cluster/hosts.yml reset.yml

Conclusión

Kubernetes es una de las últimas herramientas de orquestación de contenedores de la industria para contenedores. La creación de un clúster de Kubernetes de múltiples nodos es un proceso muy agitado y lento para múltiples clústeres. Entonces, para ahorrar tiempo, puede automatizar la instalación de Kubernetes usando Kubespray. Kubespray es una combinación de Kubernetes y Ansible y utiliza la automatización de Ansible para crear clústeres de múltiples nodos en minutos.


Nota del editor: enlace agregado a la documentación de Kubespray, 6/8/2021.

Artículos de interés

Subir