加载中...

Kubernetes 常用命令

记录一下K8s常用的一些命令

管理和维护k8s集群的核心工具是其命令行客户端 kubectl。 掌握 kubectl 的常用命令对于开发者和运维人员至关重要。

kubectl 的命令语法通常遵循以下格式: kubectl [command] [TYPE] [NAME] [flags]

其中:

  • command: 指定要执行的操作,例如 creategetdelete
  • TYPE: 指定资源类型,例如 poddeploymentservice
  • 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 可以简写为 poservices 可以简写为 svcdeployments 可以简写为 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)

logsdescribe 不足以解决问题时,这些命令能提供更深层次的洞察。

命令解释
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 -Akubectl 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)

除了 applyedit,还有其他方式可以对线上资源进行精细操作。

命令解释
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 配置文件的绝佳方式。
L-Pig
L-Pig
© 2025 by L-Pig 本文基于 CC BY-NC-SA 4.0 许可 CC 协议 必须注明创作者 仅允许将作品用于非商业用途 改编作品必须遵循相同条款进行共享 最后更新:2026/2/18