Cómo configurar un clúster de Kubernetes K3s en Ubuntu 22.04
Introducción
Kubernetes es una de las herramientas favoritas de la industria para la orquestación de contenedores. Sin embargo, configurar un clúster de Kubernetes desde cero puede ser una tarea abrumadora y requiere mucha configuración. Además, existen varias maneras de comenzar a configurar un clúster de Kubernetes, pero muchas de ellas pueden requerir mucho tiempo, a menos que se desee crear un clúster de producción.
Para simplificar la configuración de un clúster de Kubernetes y permitir su implementación en ubicaciones remotas con recursos limitados (lo que lo convierte en un buen candidato para la computación de borde), Rancher Labs desarrolló K3s. K3s es una distribución ligera de Kubernetes que permite instalar un clúster de Kubernetes con un binario pequeño en minutos.
En este tutorial, aprenderá cómo instalar K3s en Ubuntu y las opciones de configuración adicionales disponibles en K3s.
Requisitos previos
Para completar este tutorial, necesitarás:
Se ha configurado un servidor Ubuntu 22.04 con al menos 1 GB de RAM siguiendo la guía de configuración inicial del servidor Ubuntu 22.04.
Paso 1: Instalar K3s
En este paso, instalará la última versión de K3s en su máquina Ubuntu.
Si utiliza un inicio de sesión basado en contraseña, inicie sesión en su servidor como su usuario sudo (en este tutorial, será sammy) usando el siguiente comando:
$ ssh sammy@your_server_ipسپس با استفاده از دستور زیر K3 را نصب کنید.
$ curl -sfL https://get.k3s.io | sh -Se le pedirá que ingrese la contraseña de usuario para ejecutar el script.
Este comando usa curl para descargar el script ubicado en https://get.k3s.io y lo ejecuta canalizándolo a –sh. Tras ejecutar el script, la instalación del clúster de K3s comienza con las opciones de configuración predeterminadas que crean un clúster de Kubernetes de un solo nodo.
Obtendrás un resultado similar a este:
[secondary_label Output]
[INFO] Finding release for channel stable
[INFO] Using v1.27.7+k3s2 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.27.7+k3s2/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.27.7+k3s2/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Skipping installation of SELinux RPM
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
...La salida del script muestra los pasos del script de instalación para instalar e iniciar el clúster. A continuación, comprobará el estado del servicio K3s con systemctl para comprobar si se está ejecutando. Para ello, utilice el siguiente comando.
$ systemctl status k3sEste comando muestra el estado como activo (en ejecución):
[secondary_label Output]
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-11-27 16:52:01 UTC; 19s ago
Docs: https://k3s.io
Process: 8396 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exi>
Process: 8398 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 8399 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 8400 (k3s-server)
Tasks: 20
Memory: 467.3M
CPU: 12.952s
CGroup: /system.slice/k3s.service
├─8400 "/usr/local/bin/k3s server"
└─8421 "containerd " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
...En este punto, ha instalado K3s en Ubuntu para crear un clúster de Kubernetes de un solo nodo. A continuación, revisará los objetos de Kubernetes predeterminados implementados en el clúster.
Paso 2: Revisar los objetos predeterminados de Kubernetes
En este paso, revisará los objetos de Kubernetes predeterminados que se implementaron después de instalar K3s.
Ejecute el siguiente comando para ver todos los objetos de Kubernetes implementados en el clúster en el espacio de nombres kube. kubectl se instala automáticamente durante la instalación de K3s y, por lo tanto, no requiere una instalación separada.
$ sudo kubectl get all -n kube-systemObtendrás un resultado similar a este:
[secondary_label Output]
NAME READY STATUS RESTARTS AGE
pod/local-path-provisioner-957fdf8bc-t8vpx 1/1 Running 0 4m34s
pod/coredns-77ccd57875-4hrd9 1/1 Running 0 4m34s
pod/helm-install-traefik-crd-j2sqs 0/1 Completed 0 4m34s
pod/helm-install-traefik-mvxhw 0/1 Completed 1 4m34s
pod/metrics-server-648b5df564-gqxcz 1/1 Running 0 4m34s
pod/svclb-traefik-18597fcd-2cf68 2/2 Running 0 4m6s
pod/traefik-768bdcdcdd-srb8d 1/1 Running 0 4m7s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 4m44s
service/metrics-server ClusterIP 10.43.69.115 <none> 443/TCP 4m43s
service/traefik LoadBalancer 10.43.149.125 159.65.159.115 80:32266/TCP,443:32628/TCP 4m7s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/svclb-traefik-18597fcd 1 1 1 1 1 <none> 4m7s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/local-path-provisioner 1/1 1 1 4m44s
deployment.apps/coredns 1/1 1 1 4m44s
deployment.apps/metrics-server 1/1 1 1 4m44s
deployment.apps/traefik 1/1 1 1 4m7s
NAME DESIRED CURRENT READY AGE
replicaset.apps/local-path-provisioner-957fdf8bc 1 1 1 4m34s
replicaset.apps/coredns-77ccd57875 1 1 1 4m34s
replicaset.apps/metrics-server-648b5df564 1 1 1 4m34s
replicaset.apps/traefik-768bdcdcdd 1 1 1 4m7s
NAME COMPLETIONS DURATION AGE
job.batch/helm-install-traefik-crd 1/1 28s 4m41s
job.batch/helm-install-traefik 1/1 31s 4m41s
... El resultado anterior muestra los distintos objetos implementados en el clúster de Kubernetes. Por ejemplo, hay cuatro implementaciones en ejecución: una para coredns, una para local-path-provisioner, una para metrics-server y una para traefik.
Si ejecuta el comando sin usar sudo, puede encontrar el siguiente error.
Output
WARN[0000] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied
...Para evitar requerir sudo al ejecutar comandos kubectl, cambie los permisos del archivo de configuración con chmod, como se muestra a continuación.
$ sudo chmod 644 /etc/rancher/k3s/k3s.yamlEn este punto, ha verificado el estado de los objetos de Kubernetes implementados en el clúster de K3s de forma predeterminada. A continuación, comprenderá y modificará las opciones de configuración de K3s durante la instalación.
Paso 3: Comprender y modificar las opciones de configuración en K3S
Instalaste K3s con la configuración predeterminada; sin embargo, puedes ajustar la configuración para lograr un comportamiento personalizado específico del clúster. En este paso, aprenderás a usar variables de entorno en K3 para configurar la configuración en el script de instalación.
Por ejemplo, la configuración predeterminada viene con la instalación del controlador de ingreso traefik; en algunos casos, es posible que desee deshabilitar el controlador de ingreso durante la instalación.
La variable de entorno INSTALL_K3S_EXEC permite pasar indicadores al servicio K3s. El siguiente comando permite deshabilitar traefik durante la instalación de K3.
$ curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik" sh -Verifique los objetos de Kubernetes. Los recursos del controlador no existirán en este caso.
$ sudo kubectl get all -n kube-systemAdemás de modificar las opciones de configuración mediante variables de entorno, esto también se puede hacer en el archivo de configuración de K3s. Se pueden especificar las opciones necesarias en el archivo de configuración y, a continuación, reiniciar el servidor de K3s para que los cambios surtan efecto.
K3s utiliza el archivo de configuración ubicado en etc/rancher/k3s/config.yaml/.
Ejecute el siguiente comando para crear y escribir el archivo de configuración.
$ sudo nano /etc/rancher/k3s/config.yamlEscriba lo siguiente en el archivo de configuración.
$ disable: traefikPresione Ctrl+X para escribir y salir del archivo. La línea deshabilitada: traefik indica al servicio K3s que elimine los recursos asociados con la instalación de traefik.
Luego reinicie el servicio K3s usando el siguiente comando para aplicar los cambios.
$ sudo systemctl restart k3sAhora puede verificarlo enumerando todos los objetos de Kubernetes en el espacio de nombres del sistema kube. No debería haber recursos asociados a la instalación de traefik en este momento.
$ sudo kubectl get all -n kube-systemEn este paso, aprendió a cambiar la configuración de K3s durante y después de la instalación. A continuación, eliminará el clúster de K3s para limpiar las máquinas virtuales.
Paso 4 – Desinstalar K3s
Para desinstalar K3S, debe ejecutar un script de shell llamado "usr/local/bin/k3s-uninstall.sh/". Este script se genera automáticamente tras la instalación de K3S y puede usarse para realizar una limpieza completa. Durante la desinstalación, se eliminan todas las herramientas de configuración y clúster de K3S creadas o instaladas durante la instalación.
Para eliminar K3, ejecute el siguiente comando:
$ /usr/local/bin/k3s-uninstall.shConfirme la desinstalación verificando el estado del servicio K3s usando el siguiente comando:
$ systemctl status k3sObtendrás un resultado similar a este:
[secondary_label Output]
Unit k3s.service could not be found.Resultado
En este artículo, instaló un clúster de K3s en Ubuntu y comprendió las opciones de configuración disponibles en K3s y su mecanismo de uso. Ahora que ha configurado su clúster de Kubernetes, debería explorar los diferentes tipos de objetos y su funcionalidad en Kubernetes.









