Despliega un clúster de Kubernetes en segundos con k3sup
Tags: ec2, kubernetes, aws, community
Published: 2023-01-10 03:33:22

Kubernetes es una herramienta de código abierto que se encarga de la orquestación de contenedores. Automatiza la implementación de contenedores, el escalado y desescalado continuo, el equilibrio de carga de contenedores, etc.

Hay varias plataformas en la nube que ofrecen Kubernetes como servicio. Estas plataformas facilitan el trabajo al proporcionar una interfaz que facilita el despliegue de aplicaciones en Kubernetes sin tener que preocuparse por la configuración y gestión de los distintos componentes del clúster. Algunas de ellas son: Amazon EKS, Digitalocean, OpenShift o Rancher, entre otras.

Cito a José Yapur, Senior Developer Advocate en AWS

> Un orquestador de containers es el que está a cargo de manejar todos los containers, réplicas, redes, almacenamiento y en general la infraestructura necesaria. El orquestador de contenedores más popular es Kubernetes gracias a su comunidad activa, soporte y ecosistema de integración.

https://aws.amazon.com/es/blogs/aws-spanish/picturesocial-que-es-kubernetes-y-por-que-deberia-importarme/

Pero en nuestra ruta de aprendizaje necesitamos comenzar a conocer sobre este gran ecosistema de forma local.

## Top 6 de Herramientas para desplegar un cluster local

✅️1- Minikube

https://lnkd.in/dfXaQ2kN

✅️2- K3s: Kubernetes más simple

https://k3s.io/

✅️3- K3D

https://k3d.io/

✅️4-K0s

https://docs.k0sproject.io/v1.25.4+k0s.0/

✅️5- Microk8s

https://microk8s.io/

✅️6- Kind

https://kind.sigs.k8s.io/

No recomiendo para uso en un ambiente de producción donde se requiere una alta disponibilidad y rendimiento; es más que todo para realizar pruebas y aprender todo lo necesario de K8s.

Ahora bien, estamos ansiosos por comenzar y bueno queremos todo en 3...2...1 y aparece K3sup te permite desplegar en tan solo segundos , más rapido que escribir Hello World , 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:

https://github.com/alexellis/k3sup

## Arquitectura
Conceptual architecture, showing k3sup running locally against any VM such as AWS EC2 or a VPS such as DigitalOcean.

[](https://github.com/alexellis/k3sup/raw/master/docs/k3sup-cloud.png)

Conceptual architecture

## Vamos al fuego creando el clúster

k3supse distribuye como un binario en GO. Puede usar el instalador en MacOS y Linux, o visitar la página de Versiones para descargar el ejecutable para Windows.

Paso 1: Instalamos k3sup
```
curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

k3sup --help
```
Si todo sale bien...

```
$ curl -sLS https://get.k3sup.dev | sh
x86_64
Downloading package https://github.com/alexellis/k3sup/releases/download/0.12.12/k3sup as /home/ec2-user/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
================================================================
  alexellis's work on k3sup needs your support
  https://github.com/sponsors/alexellis
================================================================
No nos devolverá nada, pero podremos correr lo siguiente para saber si k3sup efectivamente se instalo:
```
```
$ k3sup --help
Usage:
  k3sup [flags]
  k3sup [command] 
🐳 k3sup needs your support: https://github.com/sponsors/alexellis

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  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
  ready       Check if a cluster is ready using kubectl.
  update      Print update instructions
  version     Print the version
```

Por acá vamos excelente xD

Paso 2:

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

```
$ export IP=192.168.0.1
$ export USER=root`
```
Paso 3:

Solo debemos ejecutar:

`k3sup install --ip $IP --user $USER`

El proceso de creacion del cluster:
```
$ k3sup install --ip $IP --user $USER
Running: k3sup install
2023/01/10 01:10:17 44.204.142.40
Public IP: 192.168.0.1
[INFO]  Finding release for channel stable
[INFO]  Using v1.25.4+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.25.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.25.4+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 from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s
Result: [INFO]  Finding release for channel stable
[INFO]  Using v1.25.4+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.25.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.25.4+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 from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.

Saving file to: /home/ec2-user/kubeconfig

# Test your cluster with:
export KUBECONFIG=/home/roxsross/kubeconfig
kubectl config use-context default
kubectl get node -o wide

🐳 k3sup needs your support: https://github.com/sponsors/alexellisll
```

Paso 4:

Nos conectamos a nuestro servidor via SSH y listo

```
$ kubectl get nodes
NAME                           STATUS   ROLES                  AGE   VERSION
172-31-8-210.                  Ready    control-plane,master   47s   v1.25.4+k3s1
```
Super Simple =)

Ahora probemos en AWS , desplegando en una EC2

Requisitos Principales

- Instancia AWS EC2, capa gratuita t2.micro
- AMI Amazon Linux, Ubuntu, etc.
- Key pairs
- Install Kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
- SSH client ó AWS CloudShell

Requisitos adicionales:
Instalación de más nodos usando el agente en la documentación oficial estan los pasos https://github.com/alexellis/k3sup

Security Groups:

- 22 [SSH]
- 6443 [ Kubernetes API Server]
- 2379-2380 [ ETCD server]
- 10250 [Kubelet health check]
- 10252 [Kube controller manager]
- 10255 [ read only kubelet API]
- 30000-32767 [external applications] Sin embargo, es más probable que exponga aplicaciones externas fuera del clúster a través de balanceadores de carga y restrinja el acceso a estos puertos dentro de su vpc.

Pasos del 1 al 4

Copie la llave ssh en la ubicación 'vi /root/.ssh/id_rsa' en la ec2, exporte la IP e instale k3 usando k3ups

Otra opcion subir la .pem en la ec2 de forma temporal

`k3sup install --ip $IP --user $USER --ssh-key llave.pem`

Recuerda la IP Publica

`export IP=$(curl icanhazip.com)

`k3sup install --ip $IP --user $USER`

## Solo 46 Segundos.

```
kubectl run nginx --image nginx:alpine
kubectl port-forward --address 0.0.0.0 pod/nginx 8080:80
```
{% embed https://youtu.be/Id6SlqCddq4 %}

Visita mi blog https://blog.295devops.com/despliega-un-cluster-de-kubernetes-en-segundos-con-k3sup