Kubernetes 常用命令
- 2026-02-18
- Kubernetes Linux
- k8s kubernetes
记录一下K8s常用的一些命令
管理和维护k8s集群的核心工具是其命令行客户端
kubectl。 掌握kubectl的常用命令对于开发者和运维人员至关重要。
kubectl 的命令语法通常遵循以下格式:
kubectl [command] [TYPE] [NAME] [flags]
其中:
- command: 指定要执行的操作,例如
create、get、delete。 - TYPE: 指定资源类型,例如
pod、deployment、service。 - NAME: 指定具体资源的名称。
- flags: 指定可选参数,例如
-n指定命名空间。
以下是按功能分类的常用 kubectl 命令及其解释。
一、集群信息与配置 (Cluster Info & Config)
在对集群进行操作之前,首先需要了解集群的基本信息。
| 命令 | 解释 |
|---|---|
kubectl version | 显示客户端和服务端的版本信息。 |
kubectl cluster-info | 显示集群的详细信息,包括控制平面和服务的URL。 |
kubectl config view | 查看当前的 kubeconfig 配置。 |
kubectl get namespaces | 列出所有的命名空间 (namespace)。 |
kubectl api-resources | 列出所有支持的资源类型。 |
二、资源管理:查看与检索 (Get & Describe)
查看资源是日常使用最频繁的操作之一。
| 命令 | 解释 |
|---|---|
kubectl get <资源类型> | 列出指定类型的所有资源。例如 kubectl get pods。 |
kubectl get <资源类型> <资源名称> | 获取特定资源的详细信息。例如 kubectl get pod my-pod。 |
kubectl get all | 列出当前命名空间中所有常见的资源。 |
kubectl get pods -o wide | 以更详细的格式列出Pod,包括所在的节点IP。 |
kubectl get pods --show-labels | 显示Pod的标签。 |
kubectl describe <资源类型> <资源名称> | 提供指定资源的非常详细的信息,通常用于排错。 |
许多资源类型都有简写形式,以提高效率,例如 pods 可以简写为 po,services 可以简写为 svc,deployments 可以简写为 deploy。
三、资源管理:创建、更新与删除 (Create, Apply, Delete)
对于应用的部署和生命周期管理,以下命令至关重要。
| 命令 | 解释 |
|---|---|
kubectl create -f <文件名.yaml> | 通过YAML或JSON文件创建一个或多个资源。 |
kubectl apply -f <文件名.yaml> | 声明式地创建或更新资源,这是推荐的做法。 |
kubectl delete -f <文件名.yaml> | 删除YAML文件中定义的资源。 |
kubectl delete <资源类型> <资源名称> | 删除指定的资源。 |
kubectl run <名称> --image=<镜像> | 快速创建一个Deployment来运行一个或多个容器镜像。 |
kubectl expose deployment <名称> --port=<端口> | 为Deployment创建一个Service,以便外部可以访问。 |
kubectl edit <资源类型> <资源名称> | 使用默认编辑器直接编辑线上资源的配置。 |
四、应用部署与伸缩 (Deployment & Scaling)
Deployment是管理应用部署的核心资源。
| 命令 | 解释 |
|---|---|
kubectl get deployments | 列出所有的Deployment。 |
kubectl scale deployment <名称> --replicas=<数量> | 动态地扩展或缩减Deployment的副本数量。 |
kubectl rollout status deployment/<名称> | 查看Deployment的部署状态。 |
kubectl rollout history deployment/<名称> | 查看Deployment的部署历史记录。 |
kubectl rollout undo deployment/<名称> | 回滚到上一个版本的Deployment。 |
kubectl autoscale deployment <名称> --min=<最小副本数> --max=<最大副本数> --cpu-percent=<CPU阈值> | 自动为Deployment设置水平Pod自动伸缩 (HPA)。 |
五、故障排查与调试 (Troubleshooting & Debugging)
当应用出现问题时,以下命令可以帮助快速定位问题。
| 命令 | 解释 |
|---|---|
kubectl logs <Pod名称> | 查看指定Pod的日志。 |
kubectl logs -f <Pod名称> | 实时跟踪并输出Pod的日志。 |
kubectl logs <Pod名称> -c <容器名称> | 如果一个Pod中有多个容器,可以通过此命令查看特定容器的日志。 |
kubectl exec -it <Pod名称> -- /bin/bash | 进入正在运行的容器内部进行交互式操作。 |
kubectl top pods | 查看各个Pod的CPU和内存使用情况。 |
kubectl top nodes | 查看各个节点的资源使用情况。 |
六、节点管理 (Node Management)
对于集群的底层节点,也可以进行管理操作。
| 命令 | 解释 |
|---|---|
kubectl get nodes | 列出集群中所有的节点。 |
kubectl describe node <节点名称> | 查看节点的详细信息,包括其上的Pod列表。 |
kubectl cordon <节点名称> | 将节点标记为不可调度,新的Pod不会被调度到该节点上。 |
kubectl uncordon <节点名称> | 取消节点的不可调度标记。 |
kubectl drain <节点名称> | 安全地驱逐节点上的所有Pod,通常用于节点维护好的,除了上一回答中提到的基础命令,kubectl 还提供了许多高级和专门的命令,可以进一步提升您在管理和排查 Kubernetes 集群时的效率。以下是更详尽的补充命令和技巧: |
七、高级调试与诊断 (Advanced Debugging & Diagnostics)
当 logs 和 describe 不足以解决问题时,这些命令能提供更深层次的洞察。
| 命令 | 解释 |
|---|---|
kubectl get events --sort-by='.lastTimestamp' | 查看当前命名空间中所有资源相关的事件,并按最新时间排序。这对于诊断 Pod 启动失败、镜像拉取错误等问题至关重要。 |
kubectl port-forward <Pod或Service名称> <本地端口>:<目标端口> | 将本地端口的流量转发到 Pod 或 Service 的指定端口,便于在本地直接访问和调试集群内部的应用。 |
kubectl debug <Pod名称> -it --image=<调试工具镜像> | (较新版本) 启动一个临时的 “ephemeral container” 附加到正在运行的 Pod 中,可以让你在不重启 Pod 的情况下加入调试工具(如 net-tools, curl 等)。 |
kubectl debug node/<节点名称> -it --image=<镜像> | 在指定节点上创建一个可访问该节点文件系统和命名空间的特权 Pod,用于低级别的节点问题排查。 |
kubectl cp <本地路径> <Pod名称>:<Pod内路径> | 在本地文件系统和 Pod 内的容器之间复制文件,方便上传配置文件或下载日志、dump 文件。 |
kubectl auth can-i <动词> <资源类型> [--namespace <命名空间>] | 检查当前用户是否具有执行特定操作的权限,是排查 RBAC 权限问题的利器。 |
八、高效输出与查询 (Efficient Output & Querying)
kubectl get 的默认输出格式有限,通过自定义输出可以精确获取所需信息。
| 命令 | 解释 |
|---|---|
kubectl get <资源> -o jsonpath='{.spec.containers[0].image}' | 使用 JSONPath 表达式从返回的 JSON 对象中提取特定字段的值,非常适合脚本自动化。 |
kubectl get pods -o custom-columns=名称:.metadata.name,IP:.status.podIP | 自定义输出的列,可以清晰地展示你最关心的信息。 |
kubectl get pods --field-selector status.phase=Running | 根据资源的字段值(而非标签)来过滤资源。例如,只显示处于 “Running” 状态的 Pod。 |
kubectl get pods -l app=my-app | 使用标签选择器 (label selector) 过滤资源,这是 Kubernetes 中资源分组和筛选的核心机制。 |
kubectl get pods -A 或 kubectl get pods --all-namespaces | 列出所有命名空间下的 Pod,适用于全局视角查看资源。 |
九、多集群与配置管理 (Multi-Cluster & Configuration Management)
对于需要操作多个 Kubernetes 集群的用户,上下文管理至关重要。
| 命令 | 解释 |
|---|---|
kubectl config get-contexts | 列出 kubeconfig 文件中定义的所有上下文(集群、用户和命名空间的组合)。 |
kubectl config current-context | 显示当前的活动上下文。 |
kubectl config use-context <上下文名称> | 切换到指定的上下文,后续所有 kubectl 命令都将针对该上下文执行。 |
kubectl config set-context <上下文名称> --namespace=<命名空间> | 修改指定上下文的默认命名空间。 |
十、资源修改与维护 (Resource Modification & Maintenance)
除了 apply 和 edit,还有其他方式可以对线上资源进行精细操作。
| 命令 | 解释 |
|---|---|
kubectl patch <资源类型> <资源名称> -p '{"spec":{"replicas":3}}' | 在不打开编辑器的情况下,直接对线上资源进行局部更新。 |
kubectl label <资源类型> <资源名称> <标签名>=<标签值> | 为资源添加或更新标签。 |
kubectl annotate <资源类型> <资源名称> <注解名>=<注解值> | 为资源添加或更新注解。 |
kubectl taint nodes <节点名称> <键>=<值>:<效果> | 为节点添加污点 (Taint),可以阻止某些 Pod 被调度到该节点上,常用于节点维护。 |
十一、效率技巧 (Productivity Tips)
这些并非命令,但却是极大提升 kubectl 使用体验的最佳实践。
| 技巧 | 解释 |
|---|---|
kubectl explain <资源类型>[.字段] | 显示关于特定资源及其字段的详细文档。例如,kubectl explain pod.spec.containers 会解释容器的 spec 包含哪些字段。 |
kubectl create <资源> --dry-run=client -o yaml | 不实际创建资源,而是生成对应的 YAML 文件输出到标准输出。这是学习和编写 YAML 配置文件的绝佳方式。 |