1、查看所有 pod 列表
kubectl get pod
kubectl get pod -n kube -n 后跟 namespace, 查看指定的命名空间
kubectl get pod -o wide
2、查看 RC 和 service 列表
kubectl get pod,svc -o wide -o wide 查看详细信息
kubectl get rc,svc
3、查看pod配置文件
kubectl get pod -o yaml
4、显示 Node 的详细信息
kubectl describe node 192.168.0.212
5、显示 Pod 的详细信息
kubectl describe pod 特别是查看 pod 无法创建的时候的日志
6、根据 yaml 创建资源,(apply 可以重复执行,create 不行)
kubectl create -f pod.yaml
kubectl apply -f pod.yaml
7、删除管理
(1)基于 pod.yaml 定义的名称删除 pod
kubectl delete -f pod.yaml
(2)删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=
(3)删除所有 Pod
kubectl delete pod --all
8、查看 endpoint 列表
kubectl get endpoints
9、执行 pod 的 date 命令
kubectl exec – date
kubectl exec – bash
kubectl exec – ping 10.24.51.9
10、登录容器
kubectl exec -it -c – bash
11、查看日志
kubectl logs pod
kubectl logs -f # 实时查看日志
kubectl log -c <container_name> # 若 pod 只有一个容器,可以不加 -c
kubectl logs -l app=frontend # 返回所有标记为 app=frontend 的 pod 的合并日志。
查看已经停止的Pod的日志:kubectl logs <pod-name> --previous
查看指定时间段日志 kubectl logs <pod_name> --since=<yyyy-MM-ddT00:00:00Z> --until=<yyyy-MM-ddT00:00:00Z>
查看注释
kubectl explain pod
kubectl explain pod.apiVersion
12、标签
(1)查看节点 labels
kubectl get node --show-labels
(2)添加节点标签
kubectl kubectl label node 节点的名称 mo/gpu=enabled
(3)查看节点选择器
kubectl get pod -n moqi 名称 -o yaml | grep ‘node-selectors’
(4)删除标签 kubectl label nodes <node-name> <label-key>- <node-name> 是要删除标签的节点名称,<label-key> 是要删除的标签的键。
13、重启 pod
kubectl get pod <POD名称> -n <NAMESPACE名称> -o yaml | kubectl replace --force -f -
14、修改网络类型
kubectl patch service istio-ingressgateway -n istio-system -p ‘{“spec”:{“type”:“NodePort”}}’
15、伸缩 pod 副本
可用于将Deployment/statefulset及其Pod缩小为零个副本,实际上杀死了所有副本。当您将其缩放回1/1时,将创建一个新的Pod,重新启动您的应用程序。
kubectl scale deploy/nginx-1 --replicas=0
kubectl scale deploy/nginx-1 --replicas=1
16、临时关闭某个节点
kubectl cordon命令:
这个命令会将节点标记为不可调度状态,阻止新的Pod被调度到该节点,但不会对现有Pod产生影响。这是最温和的方法,适用于需要短时间隔离节点的情况。引用:“cordon命令将节点标记为不可调度状态 (SchedulingDisabled)。执行该命令后,新创建的Pod不会被调度到该节点,但现有的Pod继续运行,不受影响。”
kubectl cordon <node-name> 将指定的节点<node-name>设置为不可调度状态。
kubectl uncordon <node-name> 恢复节点的调度状态,使其重新接受新的Pod
kubectl cordon -l <label-selector> 根据节点的标签来选择节点
kubectl cordon --force <node-name> 节点上的某些Pod无法被正常驱逐,可以使用--force选项强制执行
kubectl drain命令:
这个命令不仅会将节点标记为不可调度,还会逐步安全地驱逐节点上的Pods,将它们迁移到其他健康的节点。这个过程会考虑PodDisruptionBudgets (PDB),以确保应用的连续性和稳定性。引用:“drain命令会触发节点驱逐操作,并且将节点上的Pod迁移到其他节点上。”
kubectl drain <node-name> --ignore-daemonsets --ignore-daemonsets选项会确保守护进程集(DaemonSet)的Pods不会被删除。
kubectl drain <node-name> --ignore-daemonsets --grace-period 来设置每个 Pod 体面终止的时间段长度(默认为 30 秒)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data 参数来强制驱逐节点上绑定了本地存储的 Pod
kubectl uncordon 回复节点命令,这将使节点再次可调度。
使用kubectl-safe-drain工具:
这是一个kubectl插件,它根据Deployment和StatefulSet的更新策略安全地排空节点上的Pods。引用:“kubectl safe-drain是一个kubectl插件,用于更为安全的排空节点。”