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.
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
✅️2- K3s: Kubernetes más simple
✅️3- K3D
✅️4-K0s
https://docs.k0sproject.io/v1.25.4+k0s.0/
✅️5- Microk8s
✅️6- Kind
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.
Vamos al fuego creando el clúster
k3sup
se 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