kubectl命令整理
在重启或维修节点前,安全地驱逐(Evict)该节点上的所有 Pod,并标记节点不可调度。:查看集群的主节点(Master)和插件(如 KubeDNS, Kibana)的地址信息。:管理资源的发布过程(主要用于 Deployment、DaemonSet 等)。:列出服务器上所有支持的资源类型(Pod, Service, CRD 等)。:对资源进行特定的配置更新(子命令很多,这里列举最常用的。:更新资
一、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(默认)、NodePort、LoadBalancer。--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:指定补丁类型,常用值包括json、merge(策略合并) 或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:(必选) 指定等待的条件,如delete、condition=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))。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)