Cómo desplegar un clúster de Kubernetes en 60 segundos con k3sup

Si crees que poner a correr una instancia de Kubernetes para desarrollo es, de alguna manera complejo, es porque no probaste k3sup.

Kubernetes tiene una fama de ser complejo y particularmente, no lo voy a negar, lo es, sobre todo cuando querés armarte tu propio clúster on-premise y no depender de nubes de públicas, que en mi opinión lo simplifican bastante.

Pero K3sup vino a cambiar eso, si no conocías sobre este proyecto, el mismo es un desarrollo de Alex Ellis, el fundador de Open FaaS e Inlets. Pueden saber más sobre Alex en el siguiente enlace:

Confident, Considerate, Cloud Native
Alex Ellis offers Consulting on Cloud Native, Leading Content, and Community Management.

También pueden saber más y contribuir a k3sup desde aquí:

alexellis/k3sup
bootstrap Kubernetes with k3s over SSH < 1 min 🚀. Contribute to alexellis/k3sup development by creating an account on GitHub.

Quiero ver ese clúster correr

Vamos a ver que tan fácil es tener up and running un clúster de Kubernetes con k3sup.

Primero, vamos a descargar el cliente:

$ curl -sLS https://get.k3sup.dev | sh

Si todo sale bien, en apenas unos segundos, veremos esto:

x86_64
Downloading package https://github.com/alexellis/k3sup/releases/download/0.9.2/k3sup as /home/nacho/k3sup
Download complete.

============================================================
  The script was run as a user who is unable to write
  to /usr/local/bin. To complete the installation the
  following commands may need to be run manually.
============================================================

  sudo cp k3sup /usr/local/bin/k3sup

Corremos esto:

sudo install k3sup /usr/local/bin/

No nos devolverá nada, pero podremos correr lo siguiente para saber si k3sup efectivamente se instalo:

$ k3sup 

La respuesta de la terminal debería ser algo como esto:

 _    _____
| | _|___ / ___ _   _ _ __
| |/ / |_ \/ __| | | | '_ \
|   < ___) \__ \ |_| | |_) |
|_|\_\____/|___/\__,_| .__/
                     |_|
Usage:
  k3sup [flags]
  k3sup [command]

Available Commands:
  app         Install Kubernetes apps from helm charts or YAML files
  help        Help about any command
  install     Install k3s on a server via SSH
  join        Install the k3s agent on a remote host and join it to an existing server
  update      Print update instructions
  version     Print the version

Flags:
  -h, --help   help for k3sup

Use "k3sup [command] --help" for more information about a command.

Hasta acá todo maravilloso. Ahora vamos a instalarlo en un servidor, para esto, preparé una maquina virtual con Ubuntu Server 18.04 que desplegué en Multipass. Si querés saber más sobre esta herramienta de Canonical, te dejo un enlace a un artículo que escribí hace unos días:

Cómo correr instancias virtualizadas de Ubuntu Server con Multipass
Canonical tiene una solución que te permite correr instancias frescas de Ubuntu Server desde tu línea de comando preferida, no importa si estás en Windows, Linux o Mac.

Ahora bien, en nuestra terminal, vamos a pasar como variable de entorno la dirección IP de nuestro servidor objetivo:

$ export IP=172.30.227.191

Luego, solo debemos ejecutar:

 k3sup install --ip $IP --user ubuntu

El proceso se verá algo así:

Running: k3sup install
Public IP: 172.30.227.191
ssh -i /home/nacho/.ssh/id_rsa -p 22 ubuntu@172.30.227.191
ssh: curl -sLS https://get.k3s.io | INSTALL_K3S_EXEC='server  --tls-san 172.30.227.191 ' INSTALL_K3S_VERSION='v1.17.2+k3s1' sh -

[INFO]  Using v1.17.2+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.2+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.2+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[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
Result: [INFO]  Using v1.17.2+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.2+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.2+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[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
[INFO]  systemd: Starting k3s
 Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.

ssh: sudo cat /etc/rancher/k3s/k3s.yaml

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWekNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFU1TlRrNE1ETXhOekFlRncweU1EQTNNamd5TXpVeE5UZGFGdzB6TURBM01qWXlNelV4TlRkYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFU1TlRrNE1ETXhOekJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQk4zSXVjNmJJMDJxR0pwZ2NWQUl1ejBkbW1UMXEvejhJandnMEYzSS8ra2oKODhiQ1E0K3lET1VITHJvUmdqeTlQZUlYRlpKbENjeTlZenJxZmpVZ0pEYWpJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUVTaTBlaVFwa0VhCnNndCtFQnhnY3lwcjRXcG96Uk9oU3h3NUhMdTAvSzBFQWlFQXl2aS9kaDFoM0drOWdLUmhVTFc4WUZsMlh1TkoKaDk3dW5TNm9XdWppMjNJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: e383e7b2c0c16d3f57db8923268cb098
    username: admin
Result: apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWekNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFU1TlRrNE1ETXhOekFlRncweU1EQTNNamd5TXpVeE5UZGFGdzB6TURBM01qWXlNelV4TlRkYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFU1TlRrNE1ETXhOekJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQk4zSXVjNmJJMDJxR0pwZ2NWQUl1ejBkbW1UMXEvejhJandnMEYzSS8ra2oKODhiQ1E0K3lET1VITHJvUmdqeTlQZUlYRlpKbENjeTlZenJxZmpVZ0pEYWpJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUVTaTBlaVFwa0VhCnNndCtFQnhnY3lwcjRXcG96Uk9oU3h3NUhMdTAvSzBFQWlFQXl2aS9kaDFoM0drOWdLUmhVTFc4WUZsMlh1TkoKaDk3dW5TNm9XdWppMjNJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: e383e7b2c0c16d3f57db8923268cb098
    username: admin

Saving file to: /home/nacho/kubeconfig

# Test your cluster with:
export KUBECONFIG=/home/nacho/kubeconfig
kubectl get node -o wide

Por último, veremos entramos por SSH a nuestro servidor target y ejecutamos lo siguiente, lo cual, nos indicará si Kubernetes está instalado en ese servidor:

sudo kubectl get nodes

La respuesta en mi caso, es algo como esto:

NAME    STATUS   ROLES    AGE    VERSION
k3sup   Ready    master   110s   v1.17.2+k3s1

Y eso es todo. Así como así, tenemos un clúster de K8S.

Para ir cerrando

Como pudiste ver, K3sup, hace que correr un clúster de k8s para desarrollo sea algo sumamente sencillo.

Pero esto no termina ahí, podés sumar más nodos a este clúster y tener bruto entorno de desarrollo corriendo en Kubernetes.

En próximos artículos les hablaré sobre una solución llamada Arkade que fue hecha por la misma persona  y también veremos cómo desplegar una herramienta para la administración gráfica de este clúster.

¿Te sirvió?, ¿te gusto?, ¿tuviste algún problema? no dudes en dejar un comentario.