En este tercer capítulo de la serie vamos a ver la configuración y despliegue inicial del cluster.
Aunque es técnicamente posible hacer una instalación manual en cada nodo, los desarrolladores de k0s nos proporcionan k0sctl que es una herramienta para crear, configurar y manejar clusters de forma muy sencilla y unificada.

Este documento está fuertemente basado en la documentación oficial a la que añadiré algunas anotaciones.
En el momento de escribir este post la versión de k0s es la v1.33.3+k0s.0. No se esperan grandes cambios en el uso de k0sctl o k0s así que estas instrucciones deberían estar vigentes por bastante tiempo.
Instalación local de k0sctl
k0sctl es un binario que debemos instalar en nuestro sistema. Dependiendo de nuestro sistema operativo las instrucciones sobre cómo hacerlo variarán notablemente. Podemos ampliar más información en la sección de instalación en Github.
En mi caso particular la máquina desde desde donde se va a controlar el cluster es una Ubuntu 22.04 así que simplemente descargaré la última versión estable disponible en releases y lo colocaré en un directorio en el $PATH del usuario con el permiso de ejecución activado.
En mi arquitectura el nombre del binario descargado es k0sctl-linux-amd64 así que lo renombraré simplemente a k0sctl para mayor comodidad.
Finalmente comprobaremos que todo funciona correctamente con el parámetro version.

Configuración del cluster
k0sctl utiliza un paradigma declarativo, es decir, nosotros definimos en un fichero de configuración el estado al que queremos llegar y es la herramienta la que realiza los ajustes necesarios para lograrlo.
Al ser este un cluster de producción es más que recomendable que la configuración esté dentro de un repositorio git para tener trazabilidad de los cambios.
La configuración de k0sctl se guarda en un fichero yaml que por defecto se llamará k0sctl.yaml. Si el fichero tiene otro nombre diferente al de por defecto tendremos que explicitarlo en todas las llamadas así que lo dejamos por defecto para simplificar.
Podremos generar uno de ejemplo con el siguiente comando:
k0sctl init > k0sctl.yaml
El fichero generado tendremos que editarlo para adaptarlo a nuestra configuración particular. En general tiene bastantes más opciones listadas de las que son verdaderamente necesarias y lo hace un poco confuso.
La configuración del cluster que estamos desplegando es la siguiente:
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s-cluster
spec:
hosts:
- role: controller
ssh:
address: 10.240.217.17
- role: controller
ssh:
address: 10.240.217.20
- role: controller
ssh:
address: 10.240.217.51
- role: worker
ssh:
address: 10.240.217.60
- role: worker
ssh:
address: 10.240.217.85
- role: worker
ssh:
address: 10.240.217.97
k0s:
version: v1.33.3+k0s.0
config:
apiVersion: k0s.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s
# spec:
# api:
# externalAddress: x.x.x.x
# sans:
# - x.x.x.x
Hay que hacer una aclaración con las directivas que están comentadas al final del fichero. Estas opciones configurar la alta disponibilidad en el control plane.
Están comentadas porque para activar HA en nuestro cluster necesitamos un balanceador externo que no está disponible. Más adelante cuando lo esté sólo tendremos que descomentarlas y hacer un k0sctl apply para que se active la nueva configuración.
k0s:
config:
spec:
api:
externalAddress: <load balancer public ip address>
sans:
- <load balancer public ip address>
Despliegue del cluster
Para hacer una primera comprobación haremos:
$ k0sctl apply --dry-run
Si la conexión a los nodos es correcta y no se produce ningún error de otro tipo podremos crear finalmente el cluster eliminando la opción --dry-run.
$ k0sctl apply
k0sctl comenzará la instalación que tardará unos minutos. Entre otros muchos mensajes veremos cómo se descarga el software en todas las máquinas.

Si se produjese algún error por timeout podremos lanzar nuevamente el comando hasta que finalmente se despliegue y configure el cluster.
Cuando termine el proceso veremos un mensaje similar a este:

Conexión al cluster con kubectl
Para conectarnos al cluster necesitaremos el cliente estandar de Kubernetes que es kubectl.
Si no lo tenemos instalado en la máquina de control lo haremos con:
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
Y colocaremos el binario con el permiso de ejecución en algún directorio del $PATH.
Para añadir la configuración del cluster a nuestra configuración haremos:
$ k0sctl kubeconfig > ~/.kube/config
Es posible que tengamos que crear el directorio ~/.kube si no existiese.
Mostraremos información del cluster con kubectl cluster-info.

Y finalmente podremos listar los nodos con kubectl get nodes.

Y finalmente tenemos una primera versión del cluster desplegada. En próximos capítulos veremos todas las configuraciones que son necesarias para que nos sea de verdadera utilidad.
Comments