K8s 学习:常用命令 100 条(一)- 基础入门篇
系列文章: K8s 命令实战指南
适用人群: 运维工程师、开发人员、DevOps 工程师
阅读时间: 15 分钟
前言
Kubernetes(K8s)作为容器编排的行业标准,掌握其命令行工具 kubectl 是必备技能。本文整理了最常用的 K8s 命令,按场景分类,方便查阅和实战使用。
一、集群信息查看
1.1 基础信息
# 查看集群信息
kubectl cluster-info
# 查看集群节点
kubectl get nodes
# 查看节点详细信息
kubectl describe node <node-name>
# 查看集群版本
kubectl version
# 查看集群 API 资源
kubectl api-resources
# 查看集群 API 版本
kubectl api-versions
使用场景:
- 刚接入新集群时,了解集群基本信息
- 排查集群连接问题时,验证集群状态
- 升级集群前,检查当前版本
1.2 命名空间管理
# 查看所有命名空间
kubectl get namespaces
kubectl get ns
# 创建命名空间
kubectl create namespace <namespace-name>
kubectl create ns <namespace-name>
# 删除命名空间
kubectl delete namespace <namespace-name>
# 切换命名空间(需要安装 kubens)
kubens <namespace-name>
# 查看当前命名空间
kubectl config view --minify --format '{{.contexts[0].context.namespace}}'
使用场景:
- 多环境隔离(dev/test/prod)
- 多团队协作时,按命名空间划分资源
- 按项目或服务分类管理资源
二、资源查看
2.1 基础资源查看
# 查看 Pod
kubectl get pods
kubectl get po
# 查看 Pod(指定命名空间)
kubectl get pods -n <namespace>
# 查看 Pod(所有命名空间)
kubectl get pods --all-namespaces
kubectl get pods -A
# 查看 Pod 详细信息(包括 IP、节点)
kubectl get pods -o wide
# 查看 Pod 标签
kubectl get pods --show-labels
# 按标签筛选 Pod
kubectl get pods -l app=nginx
# 查看 Deployment
kubectl get deployments
kubectl get deploy
# 查看 Service
kubectl get services
kubectl get svc
# 查看 ConfigMap
kubectl get configmaps
kubectl get cm
# 查看 Secret
kubectl get secrets
# 查看 Ingress
kubectl get ingress
kubectl get ing
# 查看所有资源
kubectl get all
# 查看所有资源(包括事件)
kubectl get all,events
使用场景:
- 检查服务部署状态
- 排查 Pod 启动问题
- 查看资源分布情况
- 按标签筛选特定应用
2.2 详细信息查看
# 查看 Pod 详细信息
kubectl describe pod <pod-name>
# 查看 Deployment 详细信息
kubectl describe deployment <deployment-name>
# 查看 Service 详细信息
kubectl describe service <service-name>
# 查看节点详细信息
kubectl describe node <node-name>
# 以 YAML 格式查看资源
kubectl get pod <pod-name> -o yaml
# 以 JSON 格式查看资源
kubectl get pod <pod-name> -o json
# 查看资源的特定字段
kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'
使用场景:
- 排查 Pod 启动失败原因
- 查看资源配置详情
- 提取特定字段用于脚本
- 深入了解资源状态
三、资源创建与删除
3.1 创建资源
# 通过 YAML 文件创建资源
kubectl apply -f <yaml-file>
kubectl create -f <yaml-file>
# 创建命名空间
kubectl create namespace <namespace-name>
# 创建 Deployment
kubectl create deployment <deployment-name> --image=<image>
# 创建 Service(暴露端口)
kubectl expose deployment <deployment-name> --port=<port> --target-port=<target-port>
# 创建 ConfigMap(从文件)
kubectl create configmap <configmap-name> --from-file=<file-path>
# 创建 ConfigMap(从字面值)
kubectl create configmap <configmap-name> --from-literal=key1=value1 --from-literal=key2=value2
# 创建 Secret(从文件)
kubectl create secret generic <secret-name> --from-file=<file-path>
# 创建 Secret(从字面值)
kubectl create secret generic <secret-name> --from-literal=username=admin --from-literal=password=secret
# 创建 CronJob
kubectl create cronjob <cronjob-name> --image=<image> --schedule="*/1 * * * *"
使用场景:
- 部署新应用
- 创建配置和密钥
- 快速创建测试资源
- 从文件导入配置
3.2 删除资源
# 删除 Pod
kubectl delete pod <pod-name>
# 删除 Deployment
kubectl delete deployment <deployment-name>
# 删除 Service
kubectl delete service <service-name>
# 通过 YAML 文件删除资源
kubectl delete -f <yaml-file>
# 删除指定标签的所有 Pod
kubectl delete pods -l app=nginx
# 删除命名空间(及其下所有资源)
kubectl delete namespace <namespace-name>
# 强制删除 Pod(不等待优雅关闭)
kubectl delete pod <pod-name> --force --grace-period=0
# 删除所有 Pod(慎用!)
kubectl delete pods --all
使用场景:
- 清理测试资源
- 删除废弃应用
- 强制删除卡住的 Pod
- 批量删除资源
四、资源编辑与更新
4.1 编辑资源
# 编辑资源(打开编辑器)
kubectl edit pod <pod-name>
kubectl edit deployment <deployment-name>
kubectl edit service <service-name>
# 编辑 ConfigMap
kubectl edit configmap <configmap-name>
# 编辑 Secret
kubectl edit secret <secret-name>
# 编辑并保存到文件
kubectl edit deployment <deployment-name> -o yaml > deployment.yaml
使用场景:
- 快速修改配置
- 调试资源设置
- 更新环境变量
- 修改副本数
4.2 更新资源
# 更新 Deployment 镜像
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
# 更新 Deployment 副本数
kubectl scale deployment <deployment-name> --replicas=<number>
# 更新资源(通过 YAML 文件)
kubectl apply -f <yaml-file>
# 更新 ConfigMap
kubectl create configmap <configmap-name> --from-file=<file-path> --dry-run=client -o yaml | kubectl apply -f -
# 更新 Secret
kubectl create secret generic <secret-name> --from-literal=key=value --dry-run=client -o yaml | kubectl apply -f -
# 标记 Deployment 为暂停(暂停自动部署)
kubectl rollout pause deployment/<deployment-name>
# 恢复 Deployment 部署
kubectl rollout resume deployment/<deployment-name>
使用场景:
- 滚动更新应用版本
- 水平扩展/缩容
- 更新配置文件
- 更新密钥
五、日志查看与调试
5.1 日志查看
# 查看 Pod 日志
kubectl logs <pod-name>
# 查看 Pod 日志(指定容器)
kubectl logs <pod-name> -c <container-name>
# 查看 Pod 日志(实时跟踪)
kubectl logs -f <pod-name>
# 查看 Pod 日志(最近 N 行)
kubectl logs --tail=100 <pod-name>
# 查看 Pod 日志(指定时间范围)
kubectl logs --since=1h <pod-name>
kubectl logs --since-time=2024-01-01T00:00:00Z <pod-name>
# 查看 Pod 日志(保存到文件)
kubectl logs <pod-name> > pod.log
# 查看前一个容器的日志(容器重启后)
kubectl logs <pod-name> --previous
# 查看多个 Pod 的日志(需要安装 stern)
stern <pod-name-pattern>
使用场景:
- 排查应用错误
- 监控应用运行状态
- 收集日志用于分析
- 查看容器启动日志
5.2 进入容器
# 进入容器(交互式)
kubectl exec -it <pod-name> -- /bin/bash
kubectl exec -it <pod-name> -- /bin/sh
# 进入容器(指定容器)
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
# 在容器中执行命令
kubectl exec <pod-name> -- ls /app
kubectl exec <pod-name> -- cat /etc/config/app.conf
# 复制文件到容器
kubectl cp <local-file> <pod-name>:<remote-path>
# 从容器复制文件
kubectl cp <pod-name>:<remote-path> <local-file>
# 端口转发(本地端口映射到 Pod 端口)
kubectl port-forward <pod-name> <local-port>:<pod-port>
# 端口转发(Service)
kubectl port-forward service/<service-name> <local-port>:<service-port>
使用场景:
- 调试应用问题
- 查看容器内文件
- 临时修改配置
- 本地访问集群服务
六、资源扩缩容
6.1 手动扩缩容
# 扩容 Deployment
kubectl scale deployment <deployment-name> --replicas=5
# 缩容 Deployment
kubectl scale deployment <deployment-name> --replicas=1
# 基于条件扩容(当前副本数为 3 时才扩容)
kubectl scale deployment <deployment-name> --current-replicas=3 --replicas=5
# 扩容 StatefulSet
kubectl scale statefulset <statefulset-name> --replicas=3
# 扩容 ReplicaSet
kubectl scale replicaset <replicaset-name> --replicas=5
使用场景:
- 应对流量高峰
- 节省资源成本
- 测试水平扩展
- 紧急扩容
6.2 自动扩缩容(HPA)
# 创建 HPA(基于 CPU)
kubectl autoscale deployment <deployment-name> --cpu-percent=50 --min=2 --max=10
# 查看 HPA
kubectl get hpa
# 查看 HPA 详细信息
kubectl describe hpa <hpa-name>
# 删除 HPA
kubectl delete hpa <hpa-name>
# 编辑 HPA
kubectl edit hpa <hpa-name>
使用场景:
- 自动应对流量波动
- 优化资源使用
- 保证服务可用性
- 降低运维成本
七、滚动更新与回滚
7.1 滚动更新
# 更新镜像(触发滚动更新)
kubectl set image deployment/<deployment-name> <container-name>=<new-image>:<tag>
# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name>
# 查看滚动更新历史
kubectl rollout history deployment/<deployment-name>
# 查看特定版本历史
kubectl rollout history deployment/<deployment-name> --revision=2
# 暂停滚动更新
kubectl rollout pause deployment/<deployment-name>
# 恢复滚动更新
kubectl rollout resume deployment/<deployment-name>
使用场景:
- 发布新版本应用
- 灰度发布
- 金丝雀发布
- 蓝绿部署
7.2 回滚
# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name>
# 回滚到指定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=2
# 查看回滚状态
kubectl rollout status deployment/<deployment-name>
# 查看回滚历史
kubectl rollout history deployment/<deployment-name>
使用场景:
- 新版本有问题,快速回滚
- 灰度发布失败,回退版本
- 紧急修复生产问题
- 版本切换
八、网络调试
8.1 DNS 调试
# 创建 DNS 调试 Pod
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup kubernetes
# 测试 Service DNS
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup <service-name>
# 测试跨命名空间 DNS
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- nslookup <service-name>.<namespace>.svc.cluster.local
# 查看 CoreDNS 日志
kubectl logs -n kube-system -l k8s-app=kube-dns
使用场景:
- 排查服务发现问题
- 验证 DNS 解析
- 调试跨命名空间访问
- CoreDNS 故障排查
8.2 网络连通性测试
# 测试 Pod 之间连通性
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- ping <pod-ip>
# 测试 Service 连通性
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- wget -qO- <service-name>:<port>
# 测试外部网络连通性
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- wget -qO- http://www.google.com
# 查看网络策略
kubectl get networkpolicy
kubectl get netpol
使用场景:
- 排查网络不通问题
- 验证 Service 访问
- 测试跨节点网络
- 网络策略调试
九、资源配额与限制
9.1 查看资源使用
# 查看节点资源使用
kubectl top node
# 查看 Pod 资源使用
kubectl top pod
# 查看 Pod 资源使用(指定命名空间)
kubectl top pod -n <namespace>
# 查看 Pod 资源使用(所有命名空间)
kubectl top pod --all-namespaces
# 查看资源配额
kubectl get resourcequota
kubectl get quota
# 查看限制范围
kubectl get limitrange
kubectl get limits
使用场景:
- 监控资源使用情况
- 排查资源不足问题
- 优化资源配置
- 容量规划
9.2 设置资源配额
# 创建资源配额
kubectl create quota <quota-name> --hard=cpu=2,memory=4Gi,pods=10
# 查看资源配额详情
kubectl describe quota <quota-name>
# 编辑资源配额
kubectl edit quota <quota-name>
# 删除资源配额
kubectl delete quota <quota-name>
使用场景:
- 限制命名空间资源使用
- 防止资源过度使用
- 多团队资源分配
- 成本控制
十、安全与权限
10.1 RBAC 管理
# 查看 Role
kubectl get roles
# 查看 RoleBinding
kubectl get rolebindings
# 查看 ClusterRole
kubectl get clusterroles
# 查看 ClusterRoleBinding
kubectl get clusterrolebindings
# 创建 Role
kubectl create role <role-name> --verb=get,list,watch --resource=pods
# 创建 RoleBinding
kubectl create rolebinding <rolebinding-name> --role=<role-name> --user=<username>
# 创建 ClusterRole
kubectl create clusterrole <clusterrole-name> --verb=get,list,watch --resource=pods
# 创建 ClusterRoleBinding
kubectl create clusterrolebinding <clusterrolebinding-name> --clusterrole=<clusterrole-name> --user=<username>
使用场景:
- 配置用户权限
- 服务账号授权
- 最小权限原则
- 多租户隔离
10.2 服务账号管理
# 查看服务账号
kubectl get serviceaccounts
kubectl get sa
# 创建服务账号
kubectl create serviceaccount <serviceaccount-name>
# 删除服务账号
kubectl delete serviceaccount <serviceaccount-name>
# 查看 Token
kubectl describe secret <secret-name>
使用场景:
- 为 Pod 配置权限
- CI/CD 流水线访问集群
- 应用访问 K8s API
- 自动化脚本认证
十一、配置管理
11.1 ConfigMap 管理
# 创建 ConfigMap(从文件)
kubectl create configmap <configmap-name> --from-file=<file-path>
# 创建 ConfigMap(从目录)
kubectl create configmap <configmap-name> --from-file=<directory-path>
# 创建 ConfigMap(从字面值)
kubectl create configmap <configmap-name> --from-literal=key1=value1 --from-literal=key2=value2
# 查看 ConfigMap
kubectl get configmap <configmap-name> -o yaml
# 编辑 ConfigMap
kubectl edit configmap <configmap-name>
# 删除 ConfigMap
kubectl delete configmap <configmap-name>
# 更新 ConfigMap(不删除 Pod)
kubectl create configmap <configmap-name> --from-file=<file-path> --dry-run=client -o yaml | kubectl apply -f -
使用场景:
- 管理应用配置文件
- 环境变量注入
- 配置热更新
- 多环境配置管理
11.2 Secret 管理
# 创建 Secret(通用)
kubectl create secret generic <secret-name> --from-literal=key1=value1
# 创建 Secret(TLS)
kubectl create secret tls <secret-name> --cert=<cert-file> --key=<key-file>
# 创建 Secret(Docker Registry)
kubectl create secret docker-registry <secret-name> --docker-server=<server> --docker-username=<username> --docker-password=<password> --docker-email=<email>
# 查看 Secret
kubectl get secret <secret-name> -o yaml
# 解码 Secret
kubectl get secret <secret-name> -o jsonpath='{.data.key1}' | base64 --decode
# 编辑 Secret
kubectl edit secret <secret-name>
# 删除 Secret
kubectl delete secret <secret-name>
使用场景:
- 存储敏感信息(密码、密钥)
- TLS 证书管理
- 镜像拉取认证
- API 密钥管理
十二、故障排查
12.1 事件查看
# 查看所有事件
kubectl get events
# 查看事件(指定命名空间)
kubectl get events -n <namespace>
# 查看事件(排序)
kubectl get events --sort-by=.metadata.creationTimestamp
# 查看事件(监视模式)
kubectl get events --watch
# 查看事件(宽输出)
kubectl get events -o wide
# 查看特定资源的事件
kubectl describe <resource-type> <resource-name>
使用场景:
- 排查 Pod 启动失败
- 查看调度问题
- 监控集群事件
- 定位资源冲突
12.2 节点故障排查
# 查看节点状态
kubectl get nodes
# 查看节点详情
kubectl describe node <node-name>
# 查看节点资源使用
kubectl top node
# 标记节点为不可调度
kubectl cordon <node-name>
# 标记节点为可调度
kubectl uncordon <node-name>
# 驱逐节点上的 Pod
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
# 查看节点标签
kubectl get nodes --show-labels
# 给节点添加标签
kubectl label node <node-name> key=value
# 删除节点标签
kubectl label node <node-name> key-
使用场景:
- 节点维护
- 排查节点问题
- 节点升级
- 资源调度控制
十三、持久化存储
13.1 PV 和 PVC 管理
# 查看 PV
kubectl get pv
# 查看 PVC
kubectl get pvc
# 查看 PV 详情
kubectl describe pv <pv-name>
# 查看 PVC 详情
kubectl describe pvc <pvc-name>
# 删除 PV
kubectl delete pv <pv-name>
# 删除 PVC
kubectl delete pvc <pvc-name>
# 查看 StorageClass
kubectl get storageclass
kubectl get sc
使用场景:
- 数据持久化
- 存储容量管理
- 动态卷供给
- 存储类选择
13.2 存储调试
# 查看 Pod 挂载信息
kubectl describe pod <pod-name> | grep -A 10 Mounts
# 进入 Pod 查看挂载点
kubectl exec -it <pod-name> -- df -h
# 查看 PVC 绑定状态
kubectl get pvc <pvc-name> -o jsonpath='{.status.phase}'
# 查看 PV 绑定状态
kubectl get pv <pv-name> -o jsonpath='{.status.phase}'
使用场景:
- 排查存储挂载问题
- 验证数据持久化
- 存储容量规划
- 数据备份恢复
十四、高级操作
14.1 批量操作
# 批量删除 Pod
kubectl delete pods -l app=nginx
# 批量删除所有资源
kubectl delete all --all
# 批量标记节点
kubectl label nodes -l env=prod type=worker
# 批量添加注解
kubectl annotate pods -l app=nginx owner=devops
# 批量导出资源
kubectl get pods -o yaml > all-pods.yaml
使用场景:
- 批量清理资源
- 批量标记资源
- 批量更新配置
- 资源备份
14.2 资源补丁
# 使用 JSON 补丁
kubectl patch deployment <deployment-name> -p '{"spec":{"replicas":3}}'
# 使用 strategic merge 补丁
kubectl patch deployment <deployment-name> -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.19"}]}}}}'
# 使用 YAML 补丁
kubectl patch deployment <deployment-name> --patch "$(cat patch.yaml)"
# 删除字段
kubectl patch deployment <deployment-name> --type json -p '[{"op": "remove", "path": "/spec/replicas"}]'
使用场景:
- 精确修改资源字段
- 自动化脚本更新
- CI/CD 集成
- 批量更新
十五、实用技巧
15.1 快捷别名
# 添加到 ~/.bashrc 或 ~/.zshrc
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kl='kubectl logs'
alias ke='kubectl exec -it'
alias ka='kubectl apply -f'
alias kd='kubectl delete -f'
alias kgp='kubectl get pods'
alias kgs='kubectl get svc'
alias kaf='kubectl apply -f'
alias kdf='kubectl delete -f'
# 重新加载配置
source ~/.bashrc
使用场景:
- 提高命令行效率
- 减少输入错误
- 快速执行常用命令
15.2 自动补全
# 启用 kubectl 自动补全(bash)
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 启用 kubectl 自动补全(zsh)
source <(kubectl completion zsh)
echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc
# 为别名也启用补全
complete -o default -F __start_kubectl k
使用场景:
- 快速输入命令
- 减少记忆负担
- 提高效率
15.3 常用组合命令
# 查看所有 Pod 的镜像版本
kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}'
# 查看所有 Pod 的重启次数
kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.containerStatuses[0].restartCount}{"\n"}{end}'
# 查看 Pod 的资源请求和限制
kubectl get pods -o custom-columns='NAME:metadata.name,CPU_REQ:spec.containers[*].resources.requests.cpu,MEM_REQ:spec.containers[*].resources.requests.memory'
# 批量删除 Evicted Pod
kubectl get pods --all-namespaces --field-selector=status.phase=Failed -o json | kubectl delete -f -
# 查看节点上运行的 Pod
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<node-name>
使用场景:
- 快速获取信息
- 批量操作
- 自动化脚本
- 监控统计
总结
本文整理了 100+ 条 K8s 常用命令,涵盖了:
- 集群信息查看
- 资源管理(创建、删除、更新)
- 日志查看与调试
- 滚动更新与回滚
- 网络调试
- 资源配额与限制
- 安全与权限
- 配置管理
- 故障排查
- 持久化存储
- 高级操作
- 实用技巧
下一篇预告: K8s 命令实战指南(二)- 生产环境故障排查
参考资料
作者: PaPaBot
发布时间: 2026-03-07
标签: #Kubernetes #K8s #DevOps #运维
本文属于《K8s 命令实战指南》系列文章第一篇
Views: 0
