213 lines
6.9 KiB
Markdown
213 lines
6.9 KiB
Markdown
# Clústers
|
|
|
|
**Índice**
|
|
|
|
- [Clústers](#clústers)
|
|
- [Clústers en local](#clústers-en-local)
|
|
- [kind](#kind)
|
|
- [minikube](#minikube)
|
|
- [MicroK8s](#microk8s)
|
|
- [Instalación MicroK8s](#instalación-microk8s)
|
|
- [Unirse al grupo](#unirse-al-grupo)
|
|
- [Comprobar estado](#comprobar-estado)
|
|
- [Acceso a Kubernetes](#acceso-a-kubernetes)
|
|
- [Desplegar una aplicación](#desplegar-una-aplicación)
|
|
- [Utilizar complementos](#utilizar-complementos)
|
|
- [Iniciando y deteniendo MicroK8s](#iniciando-y-deteniendo-microk8s)
|
|
- [Clúster remoto](#clúster-remoto)
|
|
- [Digital Ocean](#digital-ocean)
|
|
- [Resumen conexión de cluster Digital Ocean](#resumen-conexión-de-cluster-digital-ocean)
|
|
|
|
|
|
## Clústers en local
|
|
|
|
### kind
|
|
|
|
En **Linux**, podemos instalar [kind](https://kind.sigs.k8s.io/)
|
|
|
|
![](../img/kind.png)
|
|
|
|
[Guía de instalación de Kind](https://kind.sigs.k8s.io/docs/user/quick-start)
|
|
|
|
En Linux tan solo hay que usar los siguientes comandos:
|
|
|
|
```shell
|
|
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.16.0/kind-linux-amd64
|
|
chmod +x ./kind
|
|
sudo mv ./kind /usr/local/bin/kind
|
|
```
|
|
|
|
Una vez instalado, la creación de un clúster es tan sencillo como este comando:
|
|
|
|
```shell
|
|
kind create cluster
|
|
```
|
|
|
|
Para listar los clústeres:
|
|
|
|
```shell
|
|
kind get clusters
|
|
```
|
|
|
|
Para eliminarlo:
|
|
|
|
```shell
|
|
kind delete cluster
|
|
```
|
|
|
|
En este punto puede interesar crear un cluster con varios nodos y con un controlador de ingress con nginx. Este script lo hará todo por ti: [config_kind_with_ingress.sh](files/config_kind_with_ingress.sh)
|
|
|
|
Se le debe dar los permisos adecuados al script.
|
|
|
|
```shell
|
|
chmod +x config_kind_with_ingress.sh
|
|
```
|
|
|
|
### minikube
|
|
También podemos instalar minikube https://minikube.sigs.k8s.io/docs/ que instala todos los componentes de kubernetes en una MV y además tiene una serie de plugins para darle funcionalidades con una serie de paquetes precinfigurados.
|
|
|
|
![](../img/minikube.png)
|
|
|
|
### MicroK8s
|
|
|
|
MicroK8s instalará un Kubernetes mínimo y ligero que puede ejecutar y utilizar en prácticamente cualquier máquina.
|
|
|
|
[*Instalación microk8s*](https://microk8s.io/docs/getting-started)
|
|
#### Instalación MicroK8s
|
|
Se puede instalar con un snap:
|
|
```shell
|
|
sudo snap install microk8s --classic --channel=1.25
|
|
```
|
|
|
|
#### Unirse al grupo
|
|
|
|
MicroK8s crea un grupo para permitir el uso sin problemas de los comandos que requieren privilegios de administrador. Para añadir su usuario actual al grupo y obtener acceso al directorio de caché .kube, ejecute los siguientes dos comandos:
|
|
```shell
|
|
sudo usermod -a -G microk8s $USER
|
|
```
|
|
```shell
|
|
sudo chown -f -R $USER ~/.kube
|
|
```
|
|
También tendrá que volver a entrar en la sesión para que la actualización del grupo se lleve a cabo:
|
|
```shell
|
|
su - $USER
|
|
```
|
|
Y se comprueba examinando los grupos de pertenencia del usuario:
|
|
```shell
|
|
id -nG
|
|
```
|
|
|
|
#### Comprobar estado
|
|
|
|
MicroK8s tiene un comando incorporado para mostrar su estado. Durante la instalación puede utilizar el indicador --wait-ready para esperar a que los servicios de Kubernetes se inicialicen:
|
|
```shell
|
|
microk8s status --wait-ready
|
|
```
|
|
|
|
#### Acceso a Kubernetes
|
|
|
|
MicroK8s incluye su propia versión de kubectl para acceder a Kubernetes. Utilícelo para ejecutar comandos para monitorear y controlar su Kubernetes. Por ejemplo, para ver su nodo:
|
|
```shell
|
|
microk8s kubectl get nodes
|
|
```
|
|
...o para ver los servicios en ejecución:
|
|
```shell
|
|
microk8s kubectl get services
|
|
```
|
|
MicroK8s utiliza un comando kubectl con espacio de nombre para evitar conflictos con cualquier instalación existente de kubectl. Si usted no tiene una instalación existente, es más fácil añadir un alias (añadir a ~/.bash_aliases) como este:
|
|
```shell
|
|
alias kubectl='microk8s kubectl'
|
|
```
|
|
#### Desplegar una aplicación
|
|
|
|
Por supuesto, Kubernetes está pensado para desplegar aplicaciones y servicios. Puedes usar el comando kubectl para hacerlo como con cualquier Kuberenetes. Prueba a instalar una app de demostración:
|
|
```shell
|
|
microk8s kubectl create deployment nginx --image=nginx
|
|
```
|
|
Puede tardar uno o dos minutos en instalarse, pero puedes comprobar el estado:
|
|
```shell
|
|
microk8s kubectl get pods
|
|
```
|
|
#### Utilizar complementos
|
|
|
|
MicroK8s utiliza el mínimo de componentes para un Kubernetes puro y ligero. ¡Sin embargo, hay un montón de características adicionales disponibles con unas pocas pulsaciones de teclas utilizando "add-ons" - componentes pre-empaquetados que proporcionarán capacidades adicionales para su Kubernetes, desde la simple gestión de DNS hasta el aprendizaje automático con Kubeflow!
|
|
|
|
Para empezar se recomienda añadir la gestión de DNS para facilitar la comunicación entre servicios. Para las aplicaciones que necesitan almacenamiento, el complemento "storage" proporciona espacio de directorio en el host. Esto es fácil de configurar:
|
|
```shell
|
|
microk8s enable dns storage
|
|
```
|
|
[Lista completa de complementos](https://microk8s.io/docs/addons#heading--list)
|
|
|
|
#### Iniciando y deteniendo MicroK8s
|
|
|
|
MicroK8s continuará funcionando hasta que usted decida detenerlo. Puede detener e iniciar MicroK8s con estos simples comandos:
|
|
```shell
|
|
microk8s stop
|
|
```
|
|
... detendrá MicroK8s y sus servicios. Puede iniciar de nuevo en cualquier momento ejecutando
|
|
```shell
|
|
microk8s start
|
|
```
|
|
Tenga en cuenta que **si deja MicroK8s funcionando, se reiniciará automáticamente después de un reinicio.** Si no quiere que esto ocurra, simplemente recuerde ejecutar microk8s stop antes de apagar.
|
|
|
|
## Clúster remoto
|
|
|
|
### Digital Ocean
|
|
En esta guía utilizaré [DigitalOcean](https://m.do.co/c/98c9ca613f37), con 3 nodos kubernetes de los baratitos.
|
|
|
|
![](../img/DigitalOcean.png)
|
|
|
|
Para conectar kubectl con el cluster de kubernetes se debe desarcargar el fichero *kubeconfig* que es donde están declarados los contextos de kubernetes. Es una combinación de la url del servidor con las credenciales de lo que se haya instalado.
|
|
|
|
![](../img/kubeconfig.png)
|
|
|
|
*Con minikube no tendríamos que hacer nada porque se configura automáticamente.*
|
|
|
|
Se exporta en una variable de entorno
|
|
```shell
|
|
kubectl --kubeconfig=/<pathtodirectory>/k8s-1-24-4-do-0...........yaml get nodes
|
|
```
|
|
Y podremos comprobar los nodos con
|
|
```shell
|
|
kubectl get nodes
|
|
```
|
|
|
|
![](../img/get-nodes.png)
|
|
|
|
#### Resumen conexión de cluster Digital Ocean
|
|
Para que tenga el color y todo
|
|
```shell
|
|
export KUBECONFIG=~/Downloads/k8s-1-20.... get nodes
|
|
```
|
|
Comprobamos
|
|
```shell
|
|
kubectl get nodes
|
|
```
|
|
Vemos el contexto
|
|
```shell
|
|
kubectl config get-contexts
|
|
```
|
|
Añadimos el contexto en el plugin del color
|
|
```shell
|
|
kubecolor --context=do-ams3-k8s-1-24-4-do-...... get pods -o json
|
|
```
|
|
Nos aseguramos del alias y volvemos a comprobar
|
|
```shell
|
|
alias kubectl="kubecolor"
|
|
```
|
|
```shell
|
|
kubectl get nodes
|
|
```
|
|
|
|
---
|
|
|
|
Puedes seguir con la guía [03 manifiestos](03-manifiestos.md).
|
|
|
|
Todas las guías:
|
|
|
|
- [01 Instalación kubctl](01-kubectl.md)
|
|
- [02 Clústers](02-clusters.md)
|
|
- [03 manifiestos](03-manifiestos.md)
|
|
- [04 Cheatsheet kubernetes](04-cheatsheet.md)
|
|
- [05 Helm: Control de despliegues en Kubernetes](05-helm.md)
|
|
- [06 K9s: Otro estilo de CLI para k8s](06-k9s.md) |