Índice
Documentación oficial: https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
Lo primero que debemos hacer para instalar kubectl es descargamos los paquetes.
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:
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
Comprobamos
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
Ahora ya podemos instalar
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Para asegurarnos de que tenemos una versión actualizada.
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]
Podemos encontrar muy buena documentación oficial, pero también se puede ver la ayuda del cliente con
kubectl --help
Trascripción traducida de la ayuda de kubectl
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 <command> --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., Muestra los contenedores de una manera clara y también tiene gráficas (memoria, CPU, etc).
Para mostrar los namespaces:
kubectl get ns
Con el clúster recien creado aparecerán los namespaces por defecto que vienen con cualquier clúster.
Para ver los pods que están corriendo
kubectl -n kube-system get pods
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.
Vamos a probar lo que dicen de kubernetes de que si se borra un pod se creará uno nuevo.
kubectl -n kube-system delete pod do-node-agent-9rt5c
Inmediatamente muestro los pods y se puede ver como lo está creando de nuevo.
El pod es nuevo, tiene otro hash. Así que esto asegura que siempre estén el mismo número de pods.
Para mostrar los contextos que están en el fichero kubeconfig o el archivo de configuración de kubectl
kubectl config get-contexts
Para ver más detalles
kubectl config view
Para ver el contexto actual
kubectl config current-context
Para usar un context ya introducido
kubectl config use-context Nombre-clúster
Introducir un contexto
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.
kubectl config set-context --current --namespace=ggckad-s2
Borrar el usuario foo
kubectl config unset users.foo
Para verlo con colores se puede instalar el plugin de kubectl que se llama kubecolors
En ubuntu:
wget http://archive.ubuntu.com/ubuntu/pool/universe/k/kubecolor/kubecolor_0.0.20-1_amd64.deb
sudo dpkg -i kubecolor_0.0.20-1_amd64.deb
sudo apt update && sudo apt install kubecolor -y
kubecolor --context=[tu_contexto] get pods -o json
kubecolor --context=do-ams3-k8s-1-24-4-do-0-ams3-..... get pods -o json
alias kubectl="kubecolor"
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.
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
.
k get events -w --field-selector=type=Warning -A
Podemos ver las variables de entorno de un pod con el siguiente comando
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
kubectl top pods -A
Y podemos ordenarlos con --sort-by
kubectl top pods -A --sort-by='memory'
Puedes seguir con la guía 02 Clústers.
Todas las guías: