1. 概述
kubectl 命令是操作 Kubernetes 集群的最直接和最高效的途径,熟练掌握命令的使用能起到事半功倍的效果,整理命令有助于加深记忆,该文仅记录关于pod常用的操作运维命令。
2. 查看namespaces
查看k8s集群中目前存在的namespaces
kubectl get namespaces
输入如下
3. 查看pods
3.1 查看所有的pods列表
查看k8s集群中所有的pods
kubectl get pods -A
3.2 查看指定namespace的pods列表
查看namespace为ceph的pods列表
kubectl get pods -n ceph
3.3 查看pods列表详细信息
kubectl get pods -n ceph -o wide
3.4 查看某一个pod详细信息
kubectl describe pod rook-ceph-mon-a-7cc457848f-pzfbt -n ceph
4. 查看 pod 中的容器
4.1 此命令不包括 init 容器
kubectl get pods POD_NAME_HERE -o jsonpath={.spec.containers[*].name} -n namespace
查看pod rook-ceph-mon-a-7cc457848f-pzfbt 不包含init 容器
kubectl get pods rook-ceph-mon-a-7cc457848f-pzfbt -o jsonpath={.spec.containers[*].name} -n ceph
4.2 查看 init 容器
kubectl get pods POD_NAME_HERE -o jsonpath={.spec.initContainers[*].name} -n namespace
查看pod rook-ceph-mon-a-7cc457848f-pzfbt init 容器
kubectl get pods rook-ceph-mon-a-7cc457848f-pzfbt -o jsonpath={.spec.initContainers[*].name} -n ceph
4.3 查看所有容器
kubectl get pod POD_NAME_HERE -o jsonpath="{.spec['containers','initContainers'][*].name}" -n namespace
查看pod rook-ceph-mon-a-7cc457848f-pzfbt 所有容器
kubectl get pods rook-ceph-mon-a-7cc457848f-pzfbt -o jsonpath="{.spec['containers','initContainers'][*].name}" -n ceph
5. 在 pod 中的执行命令
在容器内部执行命令
kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
5.1 进入一个容器的交互式 shell
kubectl exec -it <POD_NAME> -- /bin/bash
进入rook-ceph-tools pod容器执行命令
kubectl exec -it rook-ceph-tools-5dd99c4497-xmpkv -n ceph -- /bin/bash
5.2 在指定命名空间的容器内执行命令
kubectl exec -n <NAMESPACE> <POD_NAME> -- ceph -s
在指定命名空间的容器内执行命令
kubectl exec rook-ceph-tools-5dd99c4497-xmpkv -n ceph -- ceph -s
5.3 在 Pod 中含有多个容器的情况下,指定容器执行命令
kubectl exec <POD_NAME> -c <CONTAINER_NAME> -- ls /
kubectl exec rook-ceph-mon-a-7cc457848f-pzfbt -c mon -n ceph -- ls /
5.4 查看容器内的环境变量
kubectl exec <POD_NAME> -- env
kubectl exec rook-ceph-tools-5dd99c4497-xmpkv -n ceph -- env
5.5 与容器内的数据库进行交互(例如 MySQL)
kubectl exec -it <POD_NAME> -- mysql -u root -p
kubectl exec -it mariadb-server-0 -c mariadb -n openstack -- mysql -u root -p
6. 查看pod的日志
输出pod中一个容器的日志。如果pod只包含一个容器则可以省略容器名
kubectl logs [-f] [-p] POD [-c CONTAINER]
6.1 返回仅包含一个容器的的日志快照
kubectl logs rook-ceph-tools-5dd99c4497-xmpkv -n ceph
6.2 在 Pod 中含有多个容器的情况下,返回指定容器执行命令日志快照
kubectl logs rook-ceph-mon-a-7cc457848f-pzfbt -c mon -n ceph
6.3 持续输出容器的日志
kubectl logs -f rook-ceph-mon-a-7cc457848f-pzfbt -c mon -n ceph
6.4 仅输出中最近的20条日志
kubectl logs --tail=20 rook-ceph-mon-a-7cc457848f-pzfbt -c mon -n ceph
6.5 输出最近一小时内产生的所有日志
kubectl logs --since=1h rook-ceph-mon-a-7cc457848f-pzfbt -c mon -n ceph
7. 参考文献
https://www.kubernetes.org.cn/doc-64