一、kubectl 核心命令

类型 命令 语法 描述
基础命令 create kubectl create -f FILENAME [flags] 通过文件或标准输入创建一个或多个资源
expose kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] 将现有资源(如 Pod、Deployment)公开为新的 Service
run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags] 创建 Pod 并运行指定镜像
set kubectl set SUBCOMMAND [options] 配置现有应用的资源(如镜像、副本数)
explain kubectl explain [-recursive=false] [flags] 获取资源(如 Pod、Deployment)的官方文档说明
get kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o|--output]=OUTPUT_FORMAT] [flags] 列出一个或多个资源(支持过滤、排序、监听更新)
edit kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] 通过系统编辑器直接修改资源配置
delete kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] 根据文件、标签或名称删除资源
部署命令 rollout kubectl rollout SUBCOMMAND [options] 管理 Deployment/StatefulSet/ DaemonSet 的发布(状态、回滚、记录)
scale kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas COUNT [--resource-version version] [--current-replicas-count] [flags] 调整 Deployment/StatefulSet 的 Pod 副本数
autoscale kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] 创建 HPA 自动扩缩容,根据 CPU / 自定义指标调整副本数
集群管理命令 certificate kubectl certificate SUBCOMMAND [options] 修改证书资源配置
cluster-info kubectl cluster-info [flags] 显示 Kubernetes 集群主节点和服务信息
top kubectl top [flags] [options] 显示节点 / Pod 的 CPU、内存使用率(依赖 metrics-server)
cordon kubectl cordon NODE [options] 标记节点为不可调度(禁止新 Pod 调度到该节点)
uncordon kubectl uncordon NODE [options] 标记节点为可调度(恢复新 Pod 调度)
drain kubectl drain NODE [options] 驱逐节点上的 Pod 并标记为不可调度(用于节点维护)
taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ...KEY_N=VAL_N:TAINT_EFFECT_N [options] 为节点添加 / 删除污点,控制 Pod 调度策略
故障诊断和调试命令 describe kubectl describe (-f FILENAME | TYPE [NAME | PREFIX/NAME | -l label]) [flags] 显示资源的详细状态(含事件、配置、容器信息)
logs kubectl logs POD [-c CONTAINER] [--follow] [flags] 查看 Pod 中容器的日志(支持实时跟踪)
attach kubectl attach POD -c CONTAINER [-i] [-t] [flags] 连接到运行中的容器(查看标准输入 / 输出)
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] 在容器中执行命令(常用于进入容器终端)
port-forward kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [... [LOCAL_PORT_N:]REMOTE_PORT_N] [flags] 将本地端口转发到 Pod 端口,用于访问集群内服务
proxy kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] 启动本地 HTTP 代理,访问 Kubernetes API
cp kubectl cp <file-spec-src> <file-spec-dest> [options] 在容器与本地文件系统之间复制文件 / 目录
auth kubectl auth [flags] [options] 检查用户对资源的授权权限
debug kubectl debug (POD|TYPE[VERSION, GROUP]/NAME) [-COMMAND [args...]] [options] 创建共享 Pod 命名空间的临时容器,用于调试排障
events kubectl events 列出集群事件(如调度、镜像拉取、容器启动事件)
diff kubectl diff -f FILENAME [flags] 对比资源文件与集群中当前资源配置的差异
高级命令 apply kubectl apply -f FILENAME [flags] 通过文件 / 标准输入创建或更新资源(声明式管理)
patch kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] 部分更新资源字段(如修改镜像、环境变量)
replace kubectl replace -f FILENAME 通过文件 / 标准输入替换现有资源(完整覆盖配置)
wait kubectl wait (-f FILENAME | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] 等待资源达到指定状态(如就绪、删除完成)
kustomize kubectl kustomize [flags] [options] 将 Kustomization 配置转换为标准 Kubernetes YAML 资源
设置命令 label kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ...KEY_N=VAL_N [--overwrite] [-all] [--resource-version=version] [flags] 添加 / 更新 / 删除资源标签
annotate kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ...KEY_N=VAL_N [--overwrite] [-all] [--resource-version=version] [flags] 添加 / 更新 / 删除资源注释
completion kubectl completion SHELL [options] 生成 Shell(bash/zsh/fish)的 kubectl 自动补全脚本
其他命令 api-resources kubectl api-resources [flags] 列出 Kubernetes 支持的所有 API 资源类型
api-versions kubectl api-versions [flags] 列出集群支持的所有 API 版本(group/version 格式)
config kubectl config SUBCOMMAND [flags] 管理 kubeconfig 文件(集群、用户、上下文配置)
plugin kubectl plugin [flags] [options] 管理 kubectl 插件(扩展功能)
version kubectl version [-client] [flags] 查看 kubectl 客户端和 Kubernetes 集群版本

二、kubectl 输出格式选项

输出格式 描述
-o custom-columns=<spec> 自定义列配置输出(如指定字段、别名)
-o custom-columns-file=<filename> 从文件中读取自定义列配置并输出
-o json 以 JSON 格式输出资源完整配置
-o jsonpath=<template> 使用 JSONPath 模板提取并输出特定字段
-o jsonpath-file=<filename> 从文件中读取 JSONPath 模板并输出结果
-o name 仅输出资源名称(格式:资源类型 / 资源名)
-o wide 输出更多资源信息(如节点、IP、标签)
-o yaml 以 YAML 格式输出资源完整配置

kubectl基础命令常用选项(Create, Run, Expose)

1. kubectl run

用途:直接创建一个 Pod 或 Deployment 来运行特定的镜像。

  • --image=IMAGE_NAME(必选) 指定要运行的容器镜像。
  • --dry-run=client:试运行,不真正提交给 API Server,通常配合 -o yaml 用于生成配置文件模板。
  • -o yaml:输出 YAML 格式的配置,而不是直接创建资源。
  • --restart=Never:创建一个普通的 Pod(而不是默认的 Deployment)。
  • --port:指定容器暴露的端口。
  • --env="KEY=VALUE":设置环境变量。
  • --replicas:指定副本数量(默认是 1,仅适用于创建 Deployment 时)。
2. kubectl create

用途:通过命令行参数或文件创建资源。

  • -f FILENAME(最常用) 通过指定的 YAML 或 JSON 文件创建资源(例如:kubectl create -f deployment.yaml)。
  • --namespace / -n:指定在哪个命名空间下创建。
  • --record:记录当前命令在资源的 annotation 中(方便后续查看版本变更历史)。
3. kubectl expose

用途:将已有的 Pod 或 Deployment 暴露为 Service。

  • --port:Service 对外暴露的端口。
  • --target-port:容器内部实际监听的端口。
  • --type:指定 Service 类型,常用的有 ClusterIP(默认)、NodePortLoadBalancer
  • --name:指定创建的 Service 的名称。
  • --protocol:指定协议(TCP 或 UDP)。

资源查看与调试 (Get, Explain, Edit)

这些命令用于查看集群状态、排查问题和修改配置。

4. kubectl get

用途:列出一种或多种资源。

  • -o wide:输出更多列信息,例如 Pod 所在的节点 IP、容器镜像版本等。
  • -o yaml:以 YAML 格式输出资源的完整定义(包含状态信息)。
  • -o json:以 JSON 格式输出。
  • -n NAMESPACE:指定命名空间。如果不加,默认是 default
  • --all-namespaces / -A:查看所有命名空间的资源。
  • -l LABEL_SELECTOR:通过标签筛选资源(例如:-l app=nginx)。
  • --watch / -w:持续监听资源的变化,实时刷新列表。
5. kubectl explain

用途:查看资源字段的文档说明(相当于内置的帮助手册)。

  • --recursive:递归打印所有字段,不仅仅是顶层字段。
  • 用法示例kubectl explain deployment.spec.replicas
6. kubectl edit

用途:在线编辑集群中已存在的资源。

  • -n NAMESPACE:指定命名空间。
  • 注意:执行该命令后,系统会打开默认编辑器(通常是 vi/vim),修改保存后会自动应用到集群。

资源更新与删除 (Set, Delete)

这些命令用于修改现有资源的属性或将其移除。

7. kubectl set

用途:对资源进行特定的配置更新(子命令很多,这里列举最常用的 image 和 env)。

  • image 子命令
    • 用法kubectl set image deployment/my-app container-name=image:v2
    • 作用:用于滚动更新镜像版本。
  • env 子命令
    • 用法kubectl set env deployment/my-app KEY=VALUE
    • 作用:更新环境变量。
  • resources 子命令:用于设置 CPU/内存的 Requests 和 Limits。
8. kubectl delete

用途:删除资源。

  • -f FILENAME:根据文件删除资源(kubectl delete -f deployment.yaml)。
  • --force:强制删除(通常用于删除卡在 Terminating 状态的资源)。
  • --grace-period=0:立即删除,不等待优雅终止期(通常与 --force 配合使用)。
  • -n NAMESPACE:指定命名空间。
  • -l LABEL_SELECTOR:批量删除带有特定标签的资源。

部署与更新管理 (rollout, scale, autoscale)

1. kubectl rollout

用途:管理资源的发布过程(主要用于 Deployment、DaemonSet 等)。

  • history:查看发布历史记录(例如:kubectl rollout history deployment/my-app)。
  • undo:回滚到上一个版本(例如:kubectl rollout undo deployment/my-app)。
  • status:查看发布状态,确认更新是否卡住。
  • pause / resume:暂停或恢复 Deployment,用于在进行多次修改后再统一触发一次更新。
2. kubectl scale

用途:手动调整资源的副本数(扩容或缩容)。

  • --replicas=NUM(必选) 指定目标的副本数量(例如:kubectl scale deployment/my-app --replicas=5)。
  • --current-replicas:可选,用于检查当前副本数是否符合预期,防止覆盖别人的操作。
  • --record:记录缩放命令,方便在 rollout history 中查看。
3. kubectl autoscale

用途:创建水平 Pod 自动伸缩器(HPA),让系统根据 CPU/内存自动调整副本数。

  • --min:指定最小副本数。
  • --max:指定最大副本数。
  • --cpu-percent:指定目标 CPU 利用率,超过这个值就会触发扩容。

集群管理与节点维护 (Node Management)

这部分命令主要用于对 Kubernetes 节点(Node)进行维护操作。

4. kubectl top

用途:查看资源使用情况(需要安装 Metrics Server)。

  • node:查看节点的资源使用(例如:kubectl top node)。
  • pod:查看 Pod 的资源使用(例如:kubectl top pod -n kube-system)。
5. kubectl drain

用途节点维护神器。在重启或维修节点前,安全地驱逐(Evict)该节点上的所有 Pod,并标记节点不可调度。

  • --ignore-daemonsets(常用) 忽略 DaemonSet 管理的 Pod(因为 DaemonSet 会在节点一恢复就立刻重建,不忽略会导致 drain 失败)。
  • --delete-emptydir-data:允许删除使用了 emptyDir 的数据(默认 drain 会为了保护数据而报错)。
  • --force:强制驱逐没有控制器管理的 Pod。
6. kubectl cordon & uncordon

用途

  • cordon:标记节点为“不可调度”(Unschedulable)。注意:它不会驱逐现有 Pod,只是不让新 Pod 调度上来。
  • uncordon:恢复节点为“可调度”状态。
7. kubectl taint

用途:给节点打“污点”,让 Pod 不愿意(或不能)调度到该节点上。

  • KEY=VALUE:EFFECT:定义污点。
    • NoSchedule:新的 Pod 不会调度上来(最常用)。
    • PreferNoSchedule:尽量不调度上来。
    • NoExecute:不仅不调度,还会把现有的不符合污点的 Pod 驱逐掉。
  • - (减号):用于移除污点(例如:kubectl taint nodes node1 key:NoSchedule-)。

其他常用命令

8. kubectl cluster-info

用途:查看集群的主节点(Master)和插件(如 KubeDNS, Kibana)的地址信息。

  • 通常直接运行即可,选项较少。
9. kubectl certificate

用途:管理集群证书(通常用于节点证书轮换)。

  • approve:批准节点的证书签名请求(CSR)。
  • deny:拒绝 CSR。

高级资源管理(apply, patch, replace, wait)

这部分是 GitOps 和 CI/CD 流程中最核心的命令。

1. kubectl apply

用途声明式管理资源(最推荐的方式)。通过文件或标准输入对资源进行创建或更新。

  • -f FILENAME(必选) 指定 YAML/JSON 文件或目录(例如:kubectl apply -f deployment.yaml)。
  • -k DIRECTORY:直接使用 Kustomize 目录来应用资源。
  • --record:在 annotation 中记录当前命令,方便查看变更历史。
  • --prune:自动删除那些在之前应用过、但现在文件中不存在的资源(慎用,通常配合标签选择器 -l)。
  • --dry-run=client/server:试运行,验证配置文件的正确性而不实际提交。
2. kubectl patch

用途:直接对资源进行局部更新,不需要修改完整的 YAML 文件。

  • --type:指定补丁类型,常用值包括 jsonmerge (策略合并) 或 strategic (策略性合并)。
  • -p / --patch(必选) 指定具体的补丁内容(例如:kubectl patch pod my-pod -p '{"spec":{"nodeSelector":{"disk":"ssd"}}}')。
3. kubectl replace

用途替换现有的资源。与 apply 不同,它需要完整的资源定义,且通常用于强制覆盖。

  • -f FILENAME:指定新的完整资源定义文件。
  • --force:强制替换,通常会执行删除并重新创建的操作(用于不可变字段的更新)。
  • --grace-period:配合 --force 使用,指定优雅终止的时间。
4. kubectl wait

用途:阻塞等待某个资源达到特定条件(常用于脚本中)。

  • --for=CONDITION(必选) 指定等待的条件,如 deletecondition=Ready
  • --timeout:指定超时时间(例如:--timeout=60s),超时则报错。
5. kubectl kustomize (或 kubectl apply -k)

用途:根据 Kustomize 目录生成定制化的 YAML。

  • DIR:指定包含 kustomization.yaml 的目录。

资源元数据设置 (label, annotate)

用于给资源打标签或添加注解,这是 Kubernetes 组织资源的核心方式。

1. kubectl label

用途:更新资源上的标签。

  • --overwrite:如果标签已存在,强制覆盖其值。
  • -l / --selector:批量选择资源进行操作(例如:给所有 app=nginx 的 Pod 加标签)。
2. kubectl annotate

用途:更新资源上的注解(通常用于记录非标识性的元数据)。

  • --overwrite:强制覆盖已有的注解。
  • --list:列出资源的所有注解。

其他辅助命令 (config, version, api-resources)

1. kubectl config

用途:修改 kubeconfig 文件,管理集群访问权限(切换集群、用户、上下文)。

  • use-context CONTEXT_NAME(最常用) 切换当前操作的集群上下文。
  • view:查看当前的配置详情。
  • set-context:修改或创建上下文。
  • current-context:查看当前使用的是哪个上下文。
2. kubectl version

用途:查看版本信息。

  • --short:仅显示简要版本信息。
  • --client:仅显示客户端版本(不连接服务器)。
3. kubectl api-resources

用途:列出服务器上所有支持的资源类型(Pod, Service, CRD 等)。

  • --namespaced:仅列出命名空间级别的资源。
  • --verbs:显示资源支持的操作(如 list, create, delete)。
4. kubectl completion

用途:生成 Shell 自动补全脚本(Bash 或 Zsh)。

  • 通常用法是将输出重定向到配置文件(例如:source <(kubectl completion bash))。


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐