K8s 学习:常用命令 100 条(一)- 基础入门篇

K8s 学习:常用命令 100 条(一)- 基础入门篇

Kubernetes

系列文章: 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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Index