K8S常用命令和脚本

本文档介绍了Kubernetes集群管理中的一些常用命令和实用脚本,包括快速查看Pod和Node信息、统计Node上的Pod分布、监控Node资源使用率、POD按重启顺序排序、查看及编辑资源请求与限制、缩容操作等,旨在帮助管理员更高效地管理和维护K8S集群。

查看信息篇

# 快速查看容器镜像版本
#查看一个Labe的的镜像版本信息
kubectl get pods -l labelname=$1 -o jsonpath="{..image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c

#查看一个Label的的镜像版本信息
kubectl get pods -l labelname=$1 -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |sort

#查看单个pod的镜像版本信心
kubectl get pods $1 -o jsonpath="{..image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c

快速查看pod & node 信息

# 查看容器label,快速获取服务Label label
kubectl get pods --show-labels
# 查看节点label
kubectl get nodes --show-labels
# 查看节点就绪状态,部署服务POD出现pending状态,可以使用此命令判断节点的哪些资源不够了
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \ && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# 输出结果
192.168 .2 .13: MemoryPressure = False;
DiskPressure = False;
PIDPressure = False;
CPUPressure = False;
Ready = True;

查看Node资源使用率情况

kubectl describe nodes | grep -A 3 "Name:\|Resource .*Requests .*Limits" | grep -v "Roles:"

Name:               docker-desktop
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
--
  Resource           Requests    Limits
  --------           --------    ------
  cpu                750m (12%)  0 (0%)
  memory             140Mi (7%)  340Mi (18%)

按照重启顺序排序POD

kubectl get pods -A --sort-by='.status.containerStatuses[0].restartCount'
NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE
default       busybox-sleep                            1/1     Running   0          45h
kube-system   kube-proxy-lkwfs                         1/1     Running   1          45h
kube-system   coredns-66bff467f8-8mpdg                 1/1     Running   1          45h
kube-system   coredns-66bff467f8-vvw5c                 1/1     Running   1          45h
kube-system   etcd-docker-desktop                      1/1     Running   1          45h
kube-system   kube-apiserver-docker-desktop            1/1     Running   1          45h
kube-system   kube-controller-manager-docker-desktop   1/1     Running   1          45h
kube-system   kube-scheduler-docker-desktop            1/1     Running   1          45h
kube-system   storage-provisioner                      1/1     Running   1          45h
kube-system   vpnkit-controller                        1/1     Running   1          45h
default       busybox-sleep-less                       1/1     Running   18         45h

统计每个Node的POD分布数量

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.spec.nodeName}{"\n"}' |sort |uniq -c |sort -k1nr
  11 docker-desktop
   1

脚本篇

按Node查看所有POD的CPU和MEM的Request和Limits数值脚本

#!/bin/bash
set -euo pipefail
echo -e "Iterating...\n"
nodes=$(kubectl get node --n
<think>我们正在收集Kubernetes常用运维命令。根据引用[1]引用[2]的内容,我们可以整理出以下常用命令,并补充更多常用命令。 注意:引用[1]中提到了重启Pod、查看日志、进入Pod、查看Pod状态等命令。引用[2]提到了通过标签筛选Pod以及节点调度与污点相关命令。 我们将按照功能分类整理命令,并补充其他常用命令。</think>### Kubernetes 常用运维命令大全(分类整理) 以下是 Kubernetes 日常运维的核心命令,按功能分类整理,涵盖 Pod 管理、节点调度、日志排查等场景: --- ### 一、Pod 管理 1. **基础操作** ```bash # 查看所有 Pod(默认命名空间) kubectl get pods # 查看指定命名空间的 Pod kubectl get pods -n <namespace> # 查看 Pod 详情(含事件、资源申请、环境变量等)[^1] kubectl describe pod <pod-name> -n <namespace> # 重启 Pod(通过删除重建) kubectl delete pod <pod-name> -n <namespace> [^1] ``` 2. **标签筛选** ```bash # 精确匹配标签 kubectl get pods -l app=nginx # 多值匹配(OR 逻辑) kubectl get pods -l 'env in (prod, staging)' # 存在某标签即可 kubectl get pods -l tier [^2] ``` 3. **日志排查** ```bash # 查看 Pod 日志(最后 100 行) kubectl logs <pod-name> --tail=100 [^1] # 实时流式日志 kubectl logs <pod-name> -f # 查看多容器 Pod 的指定容器日志 kubectl logs <pod-name> -c <container-name> ``` --- ### 二、节点与调度 1. **节点管理** ```bash # 查看所有节点状态 kubectl get nodes # 检查节点资源分配(CPU/Memory/磁盘) kubectl describe node <node-name> # 节点资源监控 kubectl top nodes ``` 2. **污点 (Taint) 与容忍 (Toleration)** ```bash # 给节点添加污点 kubectl taint nodes <node-name> key=value:NoSchedule # 查看节点污点 kubectl describe node <node-name> | grep Taints # 移除污点 kubectl taint nodes <node-name> key:NoSchedule- [^2] ``` --- ### 三、配置与调试 1. **进入容器** ```bash # 进入 Pod 的默认容器 kubectl exec -it <pod-name> -- bash [^1] # 进入指定容器 kubectl exec -it <pod-name> -c <container-name> -- sh [^1] ``` 2. **资源管理** ```bash # 查看 Deployment 状态 kubectl get deployments # 扩容副本数 kubectl scale deployment/<deploy-name> --replicas=5 # 查看 Service Endpoints kubectl get svc,ep ``` --- ### 四、高级运维 1. **事件监控** ```bash # 查看集群事件(按时间排序) kubectl get events --sort-by=.metadata.creationTimestamp # 过滤 Warning 事件 kubectl get events --field-selector type=Warning ``` 2. **配置文件操作** ```bash # 导出 Pod 的 YAML 配置 kubectl get pod <pod-name> -o yaml > pod.yaml # 应用配置更新 kubectl apply -f deployment.yaml ``` 3. **网络诊断** ```bash # 检查 DNS 解析 kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup kubernetes.default # 测试跨 Pod 网络连通性 kubectl run -it --rm network-test --image=alpine --restart=Never -- ping <target-ip> ``` --- ### 五、命令速查表 | **场景** | **命令示例** | |-------------------|-----------------------------------------------------------------------------| | **快速重启** | `kubectl rollout restart deployment/<name>` | | **资源监控** | `kubectl top pod -l app=nginx` | | **批量删除** | `kubectl delete pods -l tier=test` | | **端口转发** | `kubectl port-forward svc/<service-name> 8080:80` | | **配置历史** | `kubectl rollout history deployment/<name>` | > **提示**: > - 使用 `--help` 查看子命令详情(如 `kubectl describe --help`) > - 复杂操作建议保存为脚本(如批量清理 Evicted 状态的 Pod:`kubectl delete pods --field-selector=status.phase=Failed`) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值