# Instalación kubectl **Índice** - [Instalación kubectl](#instalación-kubectl) - [Ayuda de kubeclt](#ayuda-de-kubeclt) - [Contenido por defecto de un clúster](#contenido-por-defecto-de-un-clúster) - [Manejando contextos](#manejando-contextos) - [Resultados de kubectl con colores: kubecolors](#resultados-de-kubectl-con-colores-kubecolors) - [Posibles resultados listando](#posibles-resultados-listando) --- *Documentación oficial: https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/* Lo primero que debemos hacer para instalar kubectl es descargamos los paquetes. ```shell curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" ``` Descargamos validador kubectl checksum: ```shell curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" ``` Comprobamos ```shell echo "$(cat kubectl.sha256) kubectl" | sha256sum --check ``` ![](../img/kubernete-01.png) Ahora ya podemos instalar ```shell sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl ``` Para asegurarnos de que tenemos una versión actualizada. ```shell kubectl version --client=true --output=yaml ``` Ponemos `--cliente=true` porque si no se intentaría conectar a un clúster kubernetes y trataría de descargar la versión kubernetes del clúster. Para un formato más legible controlamos la salida con `--output=yaml|json]` ## Ayuda de kubeclt Podemos encontrar muy buena [documentación oficial](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands), pero también se puede ver la ayuda del cliente con ```shell kubectl --help ``` ![](../img/ayuda.png) > *Trascripción traducida de la ayuda de kubectl* ```shell kubectl controla el gestor de clústeres de Kubernetes. Encontrará más información en: https://kubernetes.io/docs/reference/kubectl/ Comandos básicos (principiante): create Crear un recurso desde un archivo o desde stdin expose Tomar un controlador de replicación, servicio, despliegue o pod y exponerlo como un nuevo servicio Kubernetes run Ejecutar una imagen particular en el cluster set Establecer características específicas en los objetos Comandos básicos (Intermedio): explain Obtener la documentación de un recurso get Mostrar uno o varios recursos edit Editar un recurso en el servidor delete Eliminar recursos por nombres de archivo, stdin, recursos y nombres, o por recursos y selector de etiqueta Comandos de despliegue: rollout Gestionar el despliegue de un recurso scale Establecer un nuevo tamaño para un despliegue, conjunto de réplicas o controlador de replicación autoscale Escala automáticamente un despliegue, un conjunto de réplicas, un conjunto con estado o un controlador de replicación Comandos de gestión del clúster: certificate Modificar los recursos del certificado. cluster-info Mostrar información del cluster top Mostrar el uso de recursos (CPU/memoria) cordon Marcar un nodo como no programable uncordon Marcar el nodo como programable drain Drenar el nodo en preparación para el mantenimiento taint Actualizar los taints de uno o más nodos Comandos de solución de problemas y depuración: describe Mostrar los detalles de un recurso específico o de un grupo de recursos logs Imprimir los registros de un contenedor en un pod attach Adjuntar a un contenedor en ejecución exec Ejecutar un comando en un contenedor port-forward Reenviar uno o más puertos locales a un pod proxy Ejecutar un proxy al servidor de la API de Kubernetes cp Copiar archivos y directorios hacia y desde los contenedores auth Inspeccionar la autorización debug Crear sesiones de depuración para la resolución de problemas de cargas de trabajo y nodos Comandos avanzados: diff Comparar una versión en vivo contra una versión aplicada apply Aplicar una configuración a un recurso por nombre de archivo o stdin patch Actualizar los campos de un recurso replace Reemplazar un recurso por nombre de archivo o stdin wait Experimental: Esperar una condición específica en uno o varios recursos kustomize Construir un objetivo de kustomize a partir de un directorio o una URL. Settings Commands: label Actualizar las etiquetas de un recurso annotate Actualiza las anotaciones de un recurso completion Imprimir el código de finalización del shell para el shell especificado (bash, zsh, fish o powershell) Otros Comandos: alpha Comandos para funciones en alpha api-resources Imprime los recursos de la API soportados en el servidor api-versions Imprime las versiones de la API admitidas en el servidor, en forma de "grupo/versión" config Modifica los archivos kubeconfig plugin Proporciona utilidades para interactuar con los plugins version Imprime la información de la versión del cliente y del servidor Uso: kubectl [flags] [options] Utilice "kubectl --help" para obtener más información sobre un determinado comando. Utilice "kubectl options" para obtener una lista de opciones globales de la línea de comandos (se aplica a todos los comandos). ``` Una herramienta gráfica para kubectl es *[lens](https://k8slens.dev/)*., Muestra los contenedores de una manera clara y también tiene gráficas (memoria, CPU, etc). ## Contenido por defecto de un clúster Para mostrar los namespaces: ```shell kubectl get ns ``` Con el clúster recien creado aparecerán los namespaces por defecto que vienen con cualquier clúster. ![](../img/get-ns.png) Para ver los pods que están corriendo ```shell kubectl -n kube-system get pods ``` ![](../img/kube-system-n-get-pods.png) `kube-system` es un namespace que utiliza kubernetes para correr los pods de sistema. Tomando un ejemplo, `do-node-agent-9rt5c` es un agente que corre DigitalOcean en sus nodos para hacer algún tipo de recolección de datos o monitoreo. El final alfanumérico es porque ha sido generado por el template de pods *deployment*, todos los pods tendrá ese hash en el nombre. La segunda columna indica el número de pods activos y los que existen. El estado, está claro, después están las columnas de los reinicios efectuados y la de el tiempo que lleva arrancado. Con la opción `-o wide` mostrará un poco más de información. ![](../img/kube-system-n-get-pods-o-wide.png) Vamos a probar lo que dicen de kubernetes de que si se borra un pod se creará uno nuevo. ```shell kubectl -n kube-system delete pod do-node-agent-9rt5c ``` Inmediatamente muestro los pods y se puede ver como lo está creando de nuevo. ![](../img/delete-pod-agent.png) El pod es nuevo, tiene otro hash. Así que esto asegura que siempre estén el mismo número de pods. ## Manejando contextos Para mostrar los contextos que están en el fichero kubeconfig o el archivo de configuración de kubectl ```shell kubectl config get-contexts ``` Para ver más detalles ```shell kubectl config view ``` Para ver el contexto actual ```shell kubectl config current-context ``` Para usar un context ya introducido ```shell kubectl config use-context Nombre-clúster ``` Introducir un contexto ```shell kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword ``` Guardar permanentemente un namespace para todos los comandos kubectl posteriores en ese contexto. ```shell kubectl config set-context --current --namespace=ggckad-s2 ``` Borrar el usuario foo ```shell kubectl config unset users.foo ``` ## Resultados de kubectl con colores: kubecolors Para verlo con colores se puede instalar el plugin de kubectl que se llama *[kubecolors](https://github.com/hidetatz/kubecolor)* *En ubuntu:* ```shell wget http://archive.ubuntu.com/ubuntu/pool/universe/k/kubecolor/kubecolor_0.0.20-1_amd64.deb ``` ```shell sudo dpkg -i kubecolor_0.0.20-1_amd64.deb ``` ```shell sudo apt update && sudo apt install kubecolor -y ``` ```shell kubecolor --context=[tu_contexto] get pods -o json ``` ```shell kubecolor --context=do-ams3-k8s-1-24-4-do-0-ams3-..... get pods -o json ``` ```shell alias kubectl="kubecolor" ``` ![](../img/get-nodes-color.png) ## Posibles resultados listando Podemos ver los eventos Con la opción `--watch` podremos mantener el listado que pidamos en stream, se actualizará cada n segundos. Si además introducimos `--output-watch-events` veremos los eventos del pod. `-A` es para seleccionarlos todos. ```shell k get pods --watch --output-watch-events -A ``` Se puede seleccionar eventos según un tipo de resultado. Por ejemplo, para seleccionar los que tengan de tipo `Warning`. ```shell k get events -w --field-selector=type=Warning -A ``` Podemos ver las variables de entorno de un pod con el siguiente comando ```shell kubectl -n main set env pod/nombre-del-pod --list ``` Se verán las variables seteadas en el manfiesto y las que tiene el pod por otros mecanismos. Podemos ver un listado ordenado de los pods por el uso de memoria y de CPU ```shell kubectl top pods -A ``` Y podemos ordenarlos con `--sort-by` ```shell kubectl top pods -A --sort-by='memory' ``` --- Puedes seguir con la guía [02 Clústers](02-clusters.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)