# 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=//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)