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:
También pueden saber más y contribuir a k3sup desde aquí:
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:
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.