K3s Apuntes - Parte 2

Continuamos con las pruebas en nuestro pequeño cluster con K3s armado en las Raspberry Pi (RPI v3, RPI v4) que tengo en mi laboratorio, para las pruebas utlizamos la documentación oficial de K3s - Rancher y también la documentación oficial de Kubernetes.

En la imagen tenemos como detalle:

  1. Tres Raspberry Pi 4, Modelo B (1 Server Node y 2 Worker Nodes).
  2. Dos Raspberry Pi 3, Modelo B (2 Worker Nodes, ).
  3. Un Switch Desktop Gigabit Tp-Link TL-SG1008D de 8 puertos.

Conceptos Básicos

Con los componentes de Kubernetes:

Podemos describir algunos componentes importantes:

  1. kube-apiserver: El servidor de API es un componente del plano de control de Kubernetes que expone la API de Kubernetes. El servidor de API es la interfaz del plano de control de Kubernetes.

  2. etcd: Base de datos de tipo clave-valor consistente y de alta disponibilidad utilizado como almacén de respaldo de Kubernetes para todos los datos del clúster.

  3. kube-scheduler: Componente del plano de control que busca pods recién creados sin un nodo asignado y selecciona un nodo para que se ejecuten.

  4. kube-controller-manager: Componente del plano de control que ejecuta los procesos del controlador.

    • Controlador de nodo: Responsable de notar y responder cuando los nodos se caen.
    • Controlador de trabajo: Busca objetos de trabajo que representan tareas únicas y luego crea pods para ejecutar esas tareas hasta su finalización.
    • Controlador de puntos finales: Completa el objeto de puntos finales (es decir, se une a servicios y pods).
    • Controladores de cuentas de servicio y tokens: Crea cuentas predeterminadas y tokens de acceso a la API para nuevos espacios de nombres.
  5. cloud-controller-manager: Un componente del plano de control de Kubernetes que incorpora una lógica de control específica de la nube (se ejecuta en un solo proceso con kube-controller-manager).

    • Controlador de nodo: Para verificar el proveedor de la nube para determinar si un nodo se ha eliminado en la nube después de que deja de responder.
    • Controlador de ruta: Para configurar rutas en la infraestructura de nube subyacente.
    • Controlador de servicio*: Para crear, actualizar y eliminar equilibradores de carga de proveedores de nube.
  6. kubelet: Un agente que se ejecuta en cada nodo del clúster, se asegura de que los contenedores se ejecuten en un Pod.

  7. kube-proxy: Es un proxy de red que se ejecuta en cada nodo de su clúster, implementando parte del concepto de servicio de Kubernetes.

  8. container runtime: El tiempo de ejecución del contenedor es el software responsable de ejecutar los contenedores.

  9. kube-scheduler: Componente del plano de control que busca pods recién creados sin un nodo asignado y selecciona un nodo para que se ejecuten.

Instalación Kubectl

Para poder trabajar con nuestro cluter RPI de K3s, podemos trabajar desde el Server Node o instalar kubectl en nuestra computadora personal, para este caso instalaremos el paquete para una distribución GNU/Linux, Debian Buster 10 agregando el repositorio de la siguiente forma:

 1# Actualizar e instalar los paquetes necesarios
 2$ sudo apt-get update
 3$ sudo apt-get install -y apt-transport-https ca-certificates curl
 4# Descargamos la clave de firma pública
 5$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
 6# Agregar el repositorio oficial
 7$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
 8# Actualizar nuevamente e instalamos el paquete
 9$ sudo apt install update
10$ sudo apt install -y kubectl

Configuración de Kubectl con el Cluster K3s

Para trabajar desde nuestra computadora personal, tenemos que crear un archivo de configuración dentro de la carpeta .kube el archivo de configuración debe tener el nombre config, la carpeta y el archivo deben ser creados con los permisos adecuados:

1$ mkdir ~/.kube
2$ touch ~/.kube/config
3$ chmod 775 ~/.kube
4$ chmod 420 ~/.kube/config

El contenido del archivo config debe ser similar a este:

 1apiVersion: v1
 2clusters:
 3- cluster:
 4    certificate-authority-data: CONTENIDO_DEL_CERTIFICADO
 5    server: https://IP_O_DOMINIO:6443
 6  name: default
 7contexts:
 8- context:
 9    cluster: default
10    user: default
11  name: default
12current-context: default
13kind: Config
14preferences: {}
15users:
16- name: default
17  user:
18    client-certificate-data: CONTENIDO_DEL_CERTIFICADO
19    client-key-data: CONTENIDO_DE_LA_CLAVE_DEL_CERTIFICADO

Estos datos se pueden obtener desde el Server Node, exactamente el dato se encuentra en /etc/rancher/k3s/k3s.yaml.

Pruebas Después de la Instalación

Desde nuestra computadora local podemos ejecutar los siguientes comandos:

1$ kubectl version
2# Si existe algún problema con el anterior comando podemos ejecutar:
3$ kubectl version --client=true

Si todo está correcto tendremos una salida similar a esta:

Comandos útiles para iniciar:

1# Obtener ayuda
2$ kubectl --help
3# Listar todos los contextos en su archivo kubeconfig
4$ kubectl config get-contexts
5# Listar todos los nodos disponibles
6$ kubectl get nodes

Artículos K3s

  1. K3s - Parte 1
  2. K3s - Parte 2
  3. K3s - Parte 3
  4. K3s - Parte 4

Referencias

Traducciones: