kubectl

Es una herramienta para administrar kubernetes (k8) por la terminal, y es parte del proyecto.

Para facilitar la escritura del comando en la terminal, le asigno un alias en .bash_profile para ser llamado por la letra k en vez de usar el nombre del comando completo, lo hago de la siguiente forma:

1
alias k="kubectl"

Configuración

Muestra la configuración del comando, lo que esta en ~/.kube/config.

1
kubectl config view

Lista los cluster que están configurados:

1
kubectl config get-contexts

Renombre un cluster:

1
kubectl config rename-context arn:aws:eks:eu-west-1:000000000000:cluster/com-prd-k8 prd

Define temporalmente un cluster a usar:

1
kubectl config use-context prd

Muestra la información del cluster seleccionado:

1
kubectl cluster-info

Definir un namespace por defecto:

1
kubectl config set-context --current --namespace=demo

Note

Si no define un namespace por defecto, deberá especificarlo cada vez que ejecuta el comando de la siguiente forma: --namespace demo o -n demo.

Manifiestos

Si queremos aplicar un manifiesto en k8 que esta definido en el fichero api.yaml por ejemplo, tenemos los siguientes comandos:

Para crear los recursos:

1
kubectl create -f api.yaml

Para actualizar el recurso:

1
kubectl apply -f api.yaml

Para eliminar el recurso:

1
kubectl delete -f api.yaml

Namespaces

Listar todos los namespaces del cluster:

1
kubectl get namespace

Crear un nuevo namespace llamado demo:

1
kubectl create namespace demo

Eliminar un namespace llamado demo:

1
kubectl delete namespace demo

Warning

NO USAR --all, borra todos los namespaces.

Escalar y Desescalar

Solo debe cambiar el número definido en --replicas=3 al deseado.

1
kubectl scale --replicas=3 deployment/api

Para conocer los HPA disponibles:

1
kubectl get hpa

Definir el minimo y maximo del HPA:

1
kubectl patch hpa api -p '{"spec":{"minReplicas": 10}}'

Reiniciar

1
kubectl rollout restart deployment/api

Logs

1
kubectl logs pod demo-api-598f6c5bb6-mmg4d

Connect

1
kubectl exec --stdin --tty demo-api-598f6c5bb6-mmg4d -- /bin/sh

Hay distribuciones que no tienen /bin/bash y hay que usar /bin/sh.

Desplegar

Cómo ejecutar un pod de una imagen cualquiera en el cluster, muy útil para depurar.

1
kubectl run tmp-alpine-shell --restart=Never --rm --stdin --tty --image=alpine -- /bin/sh

Describir

1
2
kubectl describe deployment demo-api
kubectl describe pod demo-api-598f6c5bb6-mmg4d

Eliminar

1
kubectl delete replicaset demo-api-598f6c5bb6-mmg4d

ConfigMap

1
kubectl describe configmap demo

Volumenes

Lista los volumenes persistentes

1
kubectl get pvc

Containers

Un pod puede estar ejecutando uno o varios contenedores, lo puedes describir escribiendo:

1
kubectl get pods -o=jsonpath="{.items[*].spec.containers[*].name}"

Para poder ver los logs de un determinado contenedor usando -c container_name, escribir:

1
kubectl logs pod/demo-api-598f6c5bb6-mmg4d -c grafana -n monitor