Comandos comunes de kubectl
Pasos iniciales
get
El comando get muestra uno o varios recursos de un clúster.
Este comando imprime una tabla con la información más importante sobre todos los recursos, incluidos los nodos del clúster, los pods en ejecución, las Deployments y los Services.
Un clúster puede tener varios espacios de nombres. Si no se especifica ningún espacio de nombres, este comando se ejecutará con el indicador --namespace=default.
Por ejemplo:
Para enumerar todos los pods con información detallada:
kubectl get po -o wide
Para mostrar los pods en todos los espacios de nombres:
kubectl get po --all-namespaces
Para enumerar las etiquetas de los pods en todos los espacios de nombres:
kubectl get po --show-labels
Para listar todos los espacios de nombres del nodo:
kubectl get namespace
Para listar información de otros nodos, ejecute este comando con el indicador -s. Para mostrar un tipo de recurso especificado, agregue el tipo de recurso a este comando, por ejemplo, kubectl get svc, kubectl get nodes y kubectl get deploy.
Para enumerar un pod con un nombre especificado en el formato de salida YAML:
kubectl get po <podname> -o yaml
Para enumerar un pod con un nombre especificado en formato de salida JSON:
kubectl get po <podname> -o json
kubectl get po rc-nginx-2-btv4j -o=custom-columns=LABELS:.metadata.labels.app
LABELS indica una lista separada por comas de títulos de columna definidos por el usuario. metadata.labels.app indica los datos a listar en formato de salida YAML o JSON.
create
El comando create crea un recurso de clúster a partir de un archivo o entrada.
Si ya hay un descriptor de recurso (un archivo YAML o JSON), puede crear el recurso desde el archivo ejecutando el siguiente comando:
kubectl create -f filename
expose
El comando expose expone un recurso como un nuevo servicio de Kubernetes. Los recursos posibles incluyen un pod, Service y Deployment.
kubectl expose deployment deployname --port=81 --type=NodePort --target-port=80 --name=service-name
En el comando anterior, --port indica el puerto expuesto por el Service, --type indica el tipo de Service y --target-port indica el puerto del pod que respalda el Service. Visitar ClusterIP:Port le permite acceder a las aplicaciones del clúster.
run
Por ejemplo:
Para ejecutar una imagen concreta en el clúster:
kubectl run deployname --image=nginx:latest
Para ejecutar una imagen concreta con un comando especificado:
kubectl run deployname -image=busybox --command -- ping baidu.com
set
El comando set configura los recursos de objeto.
Por ejemplo:
Para cambiar la imagen de un despliegue con el nombre especificado en deployname a la imagen 1.0:
kubectl set image deploy deployname containername=containername:1.0
edit
El comando edit edita un recurso del editor predeterminado.
Por ejemplo:
Para actualizar un pod:
kubectl edit po po-nginx-btv4j
El comando de ejemplo produce el mismo efecto que el siguiente comando:
kubectl get po po-nginx-btv4j -o yaml >> /tmp/nginx-tmp.yaml vim /tmp/nginx-tmp.yaml /*do some changes here */ kubectl replace -f /tmp/nginx-tmp.yaml
explain
El comando explain visualiza documentos o documentos de referencia.
Por ejemplo:
Para obtener la documentación de los pods:
kubectl explain pod
delete
El comando delete elimina los recursos por nombre de recurso o etiqueta.
Por ejemplo:
Para eliminar un pod con un retraso mínimo:
kubectl delete po podname --now
kubectl delete -f nginx.yaml kubectl delete deployment deployname
Comandos de despliegue
rolling-update*
rolling-update es un comando muy importante. Actualiza un servicio en ejecución sin tiempo de inactividad. Los pods son reemplazados incrementalmente por otros nuevos. Un pod se actualiza a la vez. El pod antiguo se elimina solo después de que el nuevo pod esté activado. Los pods nuevos deben ser distintos de los pods antiguos por nombre, versión y etiqueta. De lo contrario, se informará de un mensaje de error.
kubectl rolling-update poname -f newfilename kubectl rolling-update poname -image=image:v2
Si se produce algún problema durante la actualización continua, ejecute el comando con el indicador -rollback para cancelar la actualización continua y volver al pod anterior.
kubectl rolling-update poname -rollback
rollout
El comando rollout gestiona el lanzamiento de un recurso.
Por ejemplo:
Para comprobar el estado de despliegue de un lanzamiento concreto:
kubectl rollout status deployment/deployname
Para ver el historial de despliegue de un lanzamiento concreto:
kubectl rollout history deployment/deployname
Para volver al despliegue anterior: (de forma predeterminada, un recurso se revierte a la versión anterior)
kubectl rollout undo deployment/test-nginx
scale
El comando scale establece un nuevo tamaño para un recurso ajustando el número de réplicas de recursos.
kubectl scale deployment deployname --replicas=newnumber
autoscale
El comando autoscale selecciona y establece automáticamente el número de pods. Este comando especifica el rango para el número de réplicas de pod mantenidas por un controlador de replicación. Si hay demasiados pods, el controlador de replicación termina los pods adicionales. Si hay muy pocos, el controlador de replicación inicia más pods.
kubectl autoscale deployment deployname --min=minnumber --max=maxnumber
Comandos de gestión de clústeres
cordon, drain, uncordon*
Si un nodo que se va a actualizar está ejecutando muchos pods o ya está inactivo, realice los siguientes pasos para preparar el nodo para el mantenimiento:
- Ejecute el comando cordon para marcar un nodo como no programado. Esto significa que los nuevos pods no se programarán en el nodo.
kubectl cordon nodename
Nota: En CCE, el nodename indica la dirección IP de red privada de un nodo.
- Ejecute el comando drain para migrar sin problemas los pods en ejecución desde el nodo a otro nodo.
kubectl drain nodename --ignore-daemonsets --ignore-emptydir
ignore-emptydir ignora los pods que usan emptyDirs.
- Realice operaciones de mantenimiento en el nodo, como actualizar el núcleo y actualizar Docker.
- Una vez completado el mantenimiento del nodo, ejecute el comando uncordon para marcar el nodo como programable.
kubectl uncordon nodename
cluster-info
Para mostrar los complementos que se ejecutan en el clúster:
kubectl cluster-info
Para volcar la información actual del clúster a stdout:
kubectl cluster-info dump
top*
El comando top muestra el uso de recursos (CPU/memoria/almacenamiento). Este comando requiere que Heapster esté configurado correctamente y funcione en el servidor.
taint*
El comando taint actualiza las manchas en uno o más nodos.
certificate*
El comando certificate modifica los recursos del certificado.
Comandos de diagnóstico y depuración de fallas
describe
El comando describe es similar al comando get. La diferencia es que el comando describe muestra detalles de un recurso o grupo de recursos específicos, mientras que el comando get enumera uno o más recursos de un clúster. El comando describe no admite el indicador -o. Para los recursos del mismo tipo, los detalles de los recursos se imprimen en el mismo formato.
Si se consulta la información sobre un recurso, puede utilizar el comando get para obtener información más detallada. Si desea comprobar el estado de un recurso específico, por ejemplo, para comprobar si un pod está en estado en ejecución, ejecute el comando describe para mostrar información de estado más detallada.
kubectl describe po <podname>
logs
El comando logs imprime los logs de un contenedor en un pod o recurso especificado en stdout. Para mostrar los logs en el modo tail -f, ejecute este comando con el indicador -f.
kubectl logs -f podname
exec
El comando de kubectl exec es similar al comando de Docker exec y ejecuta un comando en un contenedor. Si hay varios contenedores en un pod, utilice el indicador -c para elegir un pod.
kubectl exec -it podname bash kubectl exec -it podname -c containername bash
port-forward*
El comando port-forward reenvía uno o más puertos locales a un pod.
Por ejemplo:
Para escuchar en los puertos 5000 y 6000 localmente, reenviando datos hacia/desde los puertos 5000 y 6000 en el pod:
kubectl port-forward podname 5000:6000
proxy*
El comando proxy crea un servidor proxy entre localhost y el servidor de API de Kubernetes.
Por ejemplo:
Para habilitar las API de REST HTTP en el nodo principal:
kubectl proxy -accept-hosts= '.*' -port=8001 -address= '0.0.0.0'
cp
El comando cp copia archivos y directorios desde y hacia contenedores.
cp filename newfilename
auth*
El comando auth inspecciona la autorización.
attach*
El comando attach es similar al comando logs -f y se conecta a un proceso que ya se está ejecutando dentro de un contenedor existente. Para salir, ejecute el comando ctrl-c. Si un pod contiene los contenedores múltiples, para ver la salida de un contenedor específico, utilice el indicador -c y el containername después de podname para especificar un contenedor.
kubectl attach podname -c containername
Comandos avanzados
replace
El comando replace actualiza o reemplaza un recurso existente por atributos, incluido el número de réplicas, etiquetas, versiones de imagen y puertos. Puede modificar directamente el archivo YAML original y luego ejecutar el comando replace.
kubectl replace -f filename
Los nombres de recursos no se pueden actualizar.
apply*
El comando apply proporciona un control más estricto sobre la actualización de recursos que los comandos patch y edit. El comando apply aplica una configuración a un recurso y mantiene un conjunto de archivos de configuración en el control de origen. Siempre que hay una actualización, el archivo de configuración se envía al servidor y, a continuación, el comando apply kubectl aplica la última configuración al recurso. Kubernetes compara el nuevo archivo de configuración con el original y actualiza solo la configuración modificada en lugar de todo el archivo. La configuración que no está contenida en el indicador -f permanecerá sin cambios. A diferencia del comando replace que elimina el recurso y crea uno nuevo, el comando apply actualiza directamente el recurso original. Similar a la operación git, el comando apply agrega una anotación al recurso para marcar la aplicación actual.
kubectl apply -f
patch
Si desea modificar los atributos de un contenedor en ejecución sin eliminar primero el contenedor o usar el comando replace, el comando patch es para el rescate. El comando patch actualiza los campo(s) de un recurso mediante un parche de fusión estratégica, un parche de fusión JSON o un parche JSON. Por ejemplo, para cambiar una etiqueta de pod de app=nginx1 a app=nginx2 mientras el pod se está ejecutando, utilice el siguiente comando:
kubectl patch pod podname -p '{"metadata":{"labels":{"app":"nginx2"}}}'
convent*
El comando convert convierte los archivos de configuración entre diferentes versiones de API.
Comandos de configuración
label
El comando label actualiza las etiquetas de un recurso.
kubectl label pods my-pod new-label=newlabel
annotate
El comando annotate actualiza las anotaciones de un recurso.
kubectl annotate pods my-pod icon-url=http://......
completion
El comando completion proporciona autocompletado para el shell.
Otros Comandos
api-versions
El comando api-versions imprime las versiones de API admitidas.
kubectl api-versions
api-resources
El comando api-resources imprime los recursos de API admitidos.
kubectl api-resources
config*
El comando config modifica los archivos kubeconfig. Un ejemplo de caso de uso de este comando es configurar la información de autenticación en las invocaciones a la API.
help
El comando help obtiene todas las referencias de comandos.
version
El comando version imprime la información de la versión del cliente y del servidor para el contexto actual.
kubectl version