🐕️ Instalación y Configuración de K9s¶
K9s es un CLI visual para Kubernetes que te permitirá gestionar tus clusters de forma eficiente 🚀. En esta guía verás todos los métodos de instalación, configuración avanzada y comandos esenciales ⚡.
🎯 ¿Por qué usar K9s?¶
| Característica | 📝 Descripción |
|---|---|
| Interfaz visual | Navega por tus recursos Kubernetes sin necesidad de recordar infinitos comandos kubectl |
| Gestión de recursos | Ver, editar, eliminar y crear recursos directamente desde la terminal |
| Logs en tiempo real | Follow de logs de múltiples pods simultáneamente |
| Port forwarding | Configura port-forwards de forma visual |
| Plugin system | Extiende funcionalidad con plugins personalizados |
| Skin customizable | themes yPersonaliza el aspecto visual |
📌 Nota: K9s requiere Kubernetes 1.28+ y conexión a un cluster configurado en
~/.kube/config
📦 Métodos de Instalación¶
🐧 Linux¶
🔧 Método 1: Binary directa (Recomendado 🔥)¶
Instalar K9s
# Descargar la última versión
K9S_VERSION=$(curl -sS https://api.github.com/repos/derailed/k9s/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/v//')
curl -sL "https://github.com/derailed/k9s/releases/download/v${K9S_VERSION}/k9s_linux_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/k9s /usr/local/bin/k9s
k9s version
🔧 Método 2: APT/Dpkg (Ubuntu/Debian) 🐞¶
Instalar vía .deb (Script directo)
wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb && sudo apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb
O versión manual:
Instalar vía .deb (Manual)
K9S_VERSION=$(curl -sS https://api.github.com/repos/derailed/k9s/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/v//')
wget -q "https://github.com/derailed/k9s/releases/download/v${K9S_VERSION}/k9s_linux_amd64.deb" -O k9s.deb
sudo apt install ./k9s.deb -y
rm k9s.deb
🔧 Método 3: Pacman (Arch Linux) 🦌¶
sudo pacman -S k9s
🔧 Método 4: Snap 🟦¶
sudo snap install k9s --devmode
🔧 Método 5: Homebrew (Linux/macOS) 🍺¶
brew install derailed/k9s/k9s
🍎 macOS¶
🍏 Método 1: Homebrew¶
brew install derailed/k9s/k9s
🍏 Método 2: MacPorts¶
sudo port install k9s
🍏 Método 3: Binary directa¶
K9S_VERSION=$(curl -sS https://api.github.com/repos/derailed/k9s/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/v//')
curl -sL "https://github.com/derailed/k9s/releases/download/v${K9S_VERSION}/k9s_darwin_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/k9s /usr/local/bin/k9s
⚠️ macOS Silicon (Apple Silicon): Usa el binary
k9s_darwin_arm64.tar.gz
🪟 Windows¶
🖥️ Método 1: Winget¶
winget install k9s
🖥️ Método 2: Scoop¶
scoop install k9s
🖥️ Método 3: Chocolatey¶
choco install k9s
🖥️ Método 4: Powershell directa¶
$version = (Invoke-RestMethod -Uri "https://api.github.com/repos/derailed/k9s/releases/latest" | Select-Object -ExpandProperty tag_name).TrimStart('v')
Invoke-WebRequest -Uri "https://github.com/derailed/k9s/releases/download/v$version/k9s_windows_amd64.tar.gz" -OutFile k9s.tar.gz
tar -xf k9s.tar.gz
Move-Item -Path k9s_windows_amd64\k9s.exe -Destination "$env:LOCALAPPDATA\Programs\k9s\k9s.exe"
🐳 Docker (Sin instalar 🐋)¶
# Opción 1: Dockerhub/Quay
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
# Opción 2: Docker Desktop Extension
docker extension install spurin/k9s-dd-extension:latest
📌 Nota: Asegúrate de tener
KUBECONFIGconfigurado correctamente o mounta tu~/.kube/config
🛠️ Pre requisitos¶
✅ Verificar configuración de Kubernetes¶
# Verifica que kubectl funciona antes de usar k9s
kubectl cluster-info
kubectl get nodes
🖥️ Configurar variables de entorno¶
# Terminal con soporte 256 colores (OBLIGATORIO)
export TERM=xterm-256color
# Editor para editar recursos (opcional pero recomendado)
export KUBE_EDITOR=vim # o nano, code, etc.
export EDITOR=vim
# Añadir a tu ~/.bashrc o ~/.zshrc
echo 'export TERM=xterm-256color' >> ~/.bashrc
echo 'export KUBE_EDITOR=vim' >> ~/.bashrc
⚙️ Configuración Avanzada¶
📁 Estructura de directorios¶
| 🖥️ Sistema Operativo | 📂 Ubicación por defecto |
|---|---|
| Linux | ~/.config/k9s |
| macOS | ~/Library/Application Support/k9s |
| Windows | %LOCALAPPDATA%\k9s |
📝 Archivo de configuración principal¶
~/.config/k9s/config.yaml
k9s:
# Refresh automático de recursos (default: false)
liveViewAutoRefresh: false
# Intervalo de refresh en segundos (min: 2.0)
refreshRate: 2
# Timeout conexión al API server
apiServerTimeout: 15s
# Intentos de reconexión
maxConnRetry: 5
# Modo solo lectura (desactiva edición/eliminación)
readOnly: false
# Salir con Ctrl+C (default: false)
noExitOnCtrlC: false
# UI
ui:
# Soporte de mouse
enableMouse: false
# Ocultar header/logo
headless: false
logoless: false
# Ocultar breadcrumbs
crumbsless: false
# Ocultar splash inicial
splashless: false
# Usar iconos
noIcons: false
# UI reactiva (watch cambios en disco)
reactive: false
# Skin por defecto
skin: dracula
# Vistas a pantalla completa por defecto
defaultsToFullScreen: false
# Configuración de logs
logger:
# Líneas a mostrar
tail: 200
# Buffer total
buffer: 500
# Segundos hacia atrás (-1 = tail)
sinceSeconds: 300
# Wrap de texto
textWrap: false
# Autoscroll
disableAutoscroll: false
# Timestamps
showTime: false
🎨 Skins/Temas disponibles¶
# Listar skins disponibles
ls ~/.config/k9s/skins/ # o la ruta configurada
K9s incluye varias skins por defecto. Para usar una:
k9s:
ui:
skin: nord # Cambia a tu skin favorita
🔑 Aliases personalizados¶
~/.config/k9s/aliases.yaml
aliases:
# Formato: alias: gvr (Group/Version/Resource)
pp: v1/pods
svc: v1/services
dp: apps/v1/deployments
rs: apps/v1/replicasets
sts: apps/v1/statefulsets
ds: apps/v1/daemonsets
cm: v1/configmaps
sec: v1/secrets
pvc: v1/persistentvolumeclaims
ing: networking.k8s.io/v1/ingresses
crb: rbac.authorization.k8s.io/v1/clusterrolebindings
cr: rbac.authorization.k8s.io/v1/clusterroles
rb: rbac.authorization.k8s.io/v1/rolebindings
# Alias con filtros
system: pod -n kube-system
events: events --sort-by='.lastTimestamp'
⌨️ Hotkeys personalizados¶
~/.config/k9s/hotkeys.yaml
hotKeys:
# Prefix personalizado + número
shift-0:
shortCut: Shift-0
description: Ver pods
command: pods
shift-1:
shortCut: Shift-1
description: Ver deployments
command: dp
shift-2:
shortCut: Shift-2
description: XRay Deployments
command: xray deploy
shift-s:
shortCut: Shift-S
override: true
description: Ver recursos en namespace actual
command: "$RESOURCE_NAME $NAMESPACE"
keepHistory: true
🔌 Plugins personalizados¶
~/.config/k9s/plugins.yaml
plugins:
# Plugin básico con Ctrl+L para ver logs
pod-logs:
shortCut: Ctrl-L
description: Ver logs del pod
scopes:
- pods
confirm: false
command: kubectl
background: false
args:
- logs
- -f
- $NAME
- -n
- $NAMESPACE
# Plugin para describir recurso
describe-resource:
shortCut: Ctrl-D
description: Describir recurso
scopes:
- all
command: kubectl
args:
- describe
- $RESOURCE_NAME
- -n
- $NAMESPACE
# Plugin para Port Forward
port-forward:
shortCut: Shift-F
description: Port Forward
scopes:
- pods
- svc
command: kubectl
background: true
args:
- port-forward
- $NAME
- $CONTAINER
⌨️ Atajos de Teclado Esenciales¶
🎯 Navegación General¶
| 🏷️ Atajo | 📝 Acción |
|---|---|
? |
Mostrar ayuda |
ctrl-a |
Mostrar todos los aliases |
:q, :quit, ctrl-c |
Salir de k9s |
esc |
Volver atrás / cancelar |
[ |
Historial anterior |
] |
Historial siguiente |
/ |
Filtrar recursos |
- |
Volver al recurso anterior |
🔍 Búsqueda de Recursos¶
| 🏷️ Atajo | 📝 Acción |
|---|---|
:pod |
Ver pods (acepta singular/plural/alias) |
:pod ns-namespace |
Ver pods en namespace |
:pod /texto |
Filtrar pods por texto |
:pod app=label,env=dev |
Filtrar por labels |
:pod @contexto |
Ver pods en otro contexto |
/:!filter |
Filtrar inverso (excluir) |
/:-l label-selector |
Filtrar por label |
/:-f filtro |
Fuzzy find |
📊 Gestión de Recursos¶
| 🏷️ Atajo | 📝 Acción |
|---|---|
d |
Describe recurso |
v |
Ver recurso (YAML/JSON) |
e |
Editar recurso |
l |
Ver logs |
s |
Shell en contenedor |
ctrl-d |
Eliminar recurso (con confirmación) |
ctrl-k |
Kill recurso (sin confirmación) |
ctrl-f |
Port forward |
tab |
Seleccionar en tablas |
🔄 Vistas Especiales¶
| 🏷️ Atajo | 📝 Acción |
|---|---|
:ctx |
Ver/Switch de contexto |
:ns |
Ver/Switch de namespace |
:pulses o :pu |
Ver métricas en tiempo real |
:xray [recurso] |
XRay del recurso |
:popeye o :pop |
Sanitizer de cluster |
:screendump o :sd |
Guardar screenshot |
🔧 Comandos CLI¶
# Version
k9s version
# Info (directorios, configuración)
k9s info
# Help
k9s help
# En namespace específico
k9s -n mi-namespace
# En contexto específico
k9s --context mi-contexto
# Modo solo lectura
k9s --readonly
# Logs
k9s info logs
k9s -l debug # Modo debug
🐛 Solución de Problemas¶
❌ Error: "Unable to locate Kubeconfig"¶
# Verificar que existe el archivo
ls -la ~/.kube/config
# Definir manualmente
export KUBECONFIG=/ruta/custom/config
❌ Error: "Invalid configuration"¶
# Validar formato de kubeconfig
kubectl config view
kubectl cluster-info
❌ Error: "K9s no muestra nada"¶
# Verificar versión de kubeconfig
kubectl version --client
# Actualizar k9s
k9s version
❌ Error: "Colores raros/Pantalla corrupta"¶
# Verificar variable TERM
echo $TERM # Debe ser xterm-256color
# Forzar en .bashrc/.zshrc
export TERM=xterm-256color
🐞 Debug mode¶
# Arrancar en modo debug
k9s -l debug
# Ver logs
k9s info # Muestra ubicación de logs
tail -f ~/.local/state/k9s/k9s.log
📊 Compatibilidad K8s¶
| 📦 Versión K9s | 🎯 Versión K8s mínima |
|---|---|
| >= v0.27.0 | 1.26.1 |
| v0.26.7 - v0.26.6 | 1.25.3 |
| v0.26.5 - v0.26.4 | 1.25.1 |
| v0.26.3 - v0.26.1 | 1.24.3 |
| v0.26.0 - v0.25.19 | 1.24.2 |
| v0.25.18 - v0.25.3 | 1.22.3 |
| <= v0.24 | 1.21.3 |
🧹 Desinstalación¶
# Linux
sudo rm /usr/local/bin/k9s
rm -rf ~/.config/k9s
# macOS (Homebrew)
brew uninstall k9s
# macOS (Ports)
sudo port uninstall k9s
# Snap
sudo snap remove k9s
# Windows (Scoop)
scoop uninstall k9s
# Windows (Chocolatey)
choco uninstall k9s
# Windows (Winget)
winget uninstall k9s
📚 Recursos¶
- 📖 Documentación oficial
- 🐙 GitHub
- 💬 Slack
🔔 Tip: Usa
:qo:quitpara salir de k9s de forma limpia.Ctrl+C pregunta si quieres salir depending de la configuración
¡Happy K8s-ing! 🎉