Kubernetes技术入门与实践(二):常用命令

Kubernetes 技术入门与实践(二):常用命令详细讲解

环境说明 :本文所有命令适用于 openEuler 24.03 LTS SP3 系统上部署的 Kubernetes 集群(支持 v1.30 至 v1.33 版本),部分命令参数在不同版本间有细微差异,请以实际环境版本为准。

一、kubectl 命令概述与基本语法

1.1 什么是 kubectl

kubectl 是 Kubernetes 官方提供的命令行工具,用于对 Kubernetes 集群进行管理。它通过调用 Kubernetes API Server 的 RESTful 接口,实现对集群资源的增删改查及状态监控。在 openEuler 24.03 SP3 系统中,kubectl 通常随 Kubernetes 组件一同安装,也可通过 yum install -y kubectl 独立安装。

1.2 基本语法格式

text

复制代码
kubectl [command] [TYPE] [NAME] [flags]

各部分含义:

组成部分 说明
command 操作指令,如 getcreatedeletedescribeapply
TYPE 资源类型(不区分大小写),支持单数、复数及缩写形式,如 pod/pods/po
NAME 资源对象的名称,名称区分大小写;省略时列出该类型的所有资源
flags 可选参数标识,如 -n namespace 指定命名空间、-o wide 指定扩展输出格式

1.3 命令分类概览

根据官方文档,kubectl 命令按功能分为以下几大类:

类别 命令 说明
基础命令(初级) createexposerunset 资源的创建与管理
基础命令(中级) explaingeteditdelete 资源的查看、编辑、删除
部署命令 rolloutscaleautoscale 管理 Deployment 的发布与扩缩容
集群管理命令 cluster-infotopcordonuncordondraintaint 集群信息查看与节点管理
故障排除与调试命令 describelogsattachexecport-forwardeventsdebug 资源状态诊断与 Pod 交互
高级命令 applypatchreplacediffwaitkustomize 声明式管理与高级配置
设置命令 labelannotatecompletion 标签与注解管理
身份认证命令 authcertificate 权限与证书管理
其他命令 api-resourcesapi-versionsconfigpluginversionoptions 工具与系统信息

二、全局参数(通用选项)

所有 kubectl 命令都继承自一组全局参数,可以通过 kubectl options 查看完整列表。以下整理最常用的全局参数。

2.1 连接与认证参数

参数 类型 默认值 功能描述
--kubeconfig string "" 指定 CLI 请求使用的 kubeconfig 文件路径。如果设置此标志,则仅加载该文件,不进行合并。若不设置,则按顺序查找:① $KUBECONFIG 环境变量指定的路径列表(路径合并)② 默认路径 ~/.kube/config
--server / -s string "" Kubernetes API Server 的地址和端口,如 https://192.168.1.100:6443。设置此参数会覆盖 kubeconfig 中的服务器地址
--token string "" 用于向 API Server 进行身份认证的 Bearer Token。适用于 ServiceAccount 或 OIDC 身份验证场景
--username string "" 用于基础认证的用户名
--password string "" 用于基础认证的密码
--client-certificate string "" TLS 客户端证书文件的路径。用于基于证书的身份认证
--client-key string "" TLS 客户端密钥文件的路径。与 --client-certificate 配对使用
--certificate-authority string "" 证书机构的证书文件路径,用于验证 API Server 的 TLS 证书
--tls-server-name string "" 用于服务器证书验证的服务器名称。当 API Server 证书中的 CN 与访问地址不一致时使用
--insecure-skip-tls-verify bool false 设置为 true 时,跳过 API Server 的 TLS 证书验证。⚠️ 不推荐在生产环境使用

2.2 请求控制参数

参数 类型 默认值 功能描述
--cluster string "" 指定 kubeconfig 中要使用的集群名称。支持按名称切换不同集群
--context string "" 指定 kubeconfig 中要使用的上下文名称。上下文封装了集群、用户和命名空间的组合
--user string "" 指定 kubeconfig 中要使用的用户名称
--namespace / -n string "" 指定操作的命名空间。若未设置,使用当前上下文中配置的默认命名空间(通常为 default
--request-timeout string "0" 放弃单个服务器请求之前等待的时间长度。非零值应包含时间单位(如 1s2m3h)。零值表示不设置超时
--cache-dir string "~/.kube/cache" 默认的 HTTP 缓存目录。kubectl 会在此目录缓存 API 发现信息等数据以提高响应速度
--as string "" 为操作模拟的用户名。用户可以是常规用户或命名空间中的 ServiceAccount。常用于权限测试与调试
--as-group stringArray [] 为操作模拟的用户组。此标志可以重复设置以指定多个组。与 --as 配合使用

2.3 日志与输出参数

参数 类型 默认值 功能描述
--output / -o string "" 指定输出格式。常用值包括:json(JSON 格式)、yaml(YAML 格式)、wide(扩展表格格式)、name(仅打印资源名称)、jsonpath(JSONPath 模板)、jsonpath-file(从文件读取 JSONPath 模板)、go-template(Go 模板自定义输出)
--v / --verbosity int 0 日志详细程度的数字等级。范围通常为 0-10,数值越大输出越详细。0 为仅输出关键信息,6 显示请求详情,8 显示完整 HTTP 请求/响应体
--alsologtostderr bool false 设置为 true 时,将日志同时输出到日志文件和标准错误输出(stderr)
--log-dir string "" 日志文件存储目录。非空时,日志将同时写入此目录下的日志文件
--logtostderr bool true 将日志输出到标准错误输出(stderr),而不是文件
--stderrthreshold string "2" 设置日志输出到 stderr 的阈值,达到或超过此级别的日志才会输出到 stderr

2.4 kubectl 自身的帮助信息

命令 说明
kubectl --help 打印 kubectl 命令的总体帮助信息,列出所有可用子命令
kubectl <command> --help 打印指定命令的详细帮助信息,包括所有参数和示例
kubectl options 打印所有命令都支持的共有参数列表(即上述全局参数)

三、基础命令详解

kubectl api-resources

功能作用:打印 API Server 上所有支持的 API 资源列表。该命令列出每种资源的名称、短名称(缩写)、API 版本、是否支持命名空间隔离和资源类别。这是编写资源清单和探索集群能力的基础工具。

语法

text

复制代码
kubectl api-resources [flags]

参数列表

参数 类型 默认值 功能描述
--api-group string "" 限制为指定 API 组中的资源。例如 --api-group=apps 只显示 apps 组的资源(Deployment、StatefulSet 等)。空值表示显示所有组的资源
--cached bool false 如果可用,使用缓存的资源列表。启用此参数可加快执行速度,但可能返回过时信息
--categories strings [] 限制为属于指定类别的资源。Kubernetes 为资源预定义了类别,如 all(所有常用工作负载资源)
--namespaced bool true 设置为 true 时,只返回支持命名空间隔离的资源(如 Pod、Service)。设置为 false 时,只返回集群级别的资源(如 Node、Namespace)
--verbs strings [] 限制为支持指定动作(verb)的资源。例如 --verbs=get,list 只显示支持读取操作的资源
-o / --output string "" 指定输出格式。支持:wide(包含更多列)、name(仅资源名称)、jsonyaml
--sort-by string "" 按指定字段进行排序。例如 --sort-by=.name 按资源名称排序
--no-headers bool false 设置为 true 时,输出中不打印列标题

常用示例

bash

复制代码
# 列出所有支持的 API 资源
kubectl api-resources

# 仅列出 apps API 组的资源
kubectl api-resources --api-group=apps

# 仅列出集群级别的资源(非命名空间隔离)
kubectl api-resources --namespaced=false

# 以 wide 格式输出更多信息
kubectl api-resources -o wide

# 按名称排序并仅输出资源名称
kubectl api-resources --sort-by=.name -o name

典型输出示例

text

复制代码
NAME                SHORTNAMES   APIVERSION   NAMESPACED   KIND
pods                po           v1           true         Pod
services            svc          v1           true         Service
deployments         deploy       apps/v1      true         Deployment
nodes               no           v1           false        Node
namespaces          ns           v1           false        Namespace

kubectl api-versions

功能作用 :打印当前集群支持的 API 版本列表(格式为 group/version)。该命令帮助你了解集群提供了哪些 API 版本,这对于编写适配不同版本 Kubernetes 的资源清单非常重要。

语法

text

复制代码
kubectl api-versions [flags]

参数列表:此命令没有专用参数,仅继承全局参数(见第二章)。

常用示例

bash

复制代码
# 列出集群支持的所有 API 版本
kubectl api-versions

# 以 YAML 格式输出(供程序解析)
kubectl api-versions -o yaml

典型输出示例

text

复制代码
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
certificates.k8s.io/v1
networking.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
storage.k8s.io/v1
v1

kubectl get

功能作用kubectl get 是最常用、最基础的查询命令,用于从集群中检索和显示一种或多种资源的信息。它支持丰富的参数来自定义输出格式(表格、YAML、JSON、JSONPath 等),并能通过 -l 标签选择器过滤、通过 --watch 实时监控资源变化。

语法

text

复制代码
kubectl get [(-o|--output=)json|yaml|name|go-template|...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE/NAME ...) [flags]

专用参数列表

参数 类型 默认值 功能描述
-A / --all-namespaces bool false 列出所有命名空间中的请求对象。如果指定了 --namespace,此标志将覆盖该设置。适用于查看全局资源分布
--allow-missing-template-keys bool true 设置为 true 时,当模板中引用的字段或映射键在当前对象中不存在时,静默忽略(不报错)。设置为 false 时,缺失的键会触发错误输出
--chunk-size int 500 从 API Server 分块获取大型列表时的每块大小。当资源数量巨大时,通过分页获取避免单次请求过载。设置为 0 表示不分块,一次性获取全部
--field-selector string "" 基于字段值进行精确筛选的选择器(标签查询)。例如 status.phase=Running 只显示运行中的 Pod。支持 ===!= 运算符
-f / --filename stringArray [] 通过文件名、目录或 URL 来标识要获取的资源。通常与 createapply 结合使用来预览资源
--ignore-not-found bool false 如果请求的对象不存在,命令返回退出码 0(表示无错误)。适用于脚本中条件性地检查资源存在性
-k / --kustomize string "" 指定 kustomization.yaml 目录路径,处理 kustomization 目录中定义的资源并输出。与 -o 配合使用可预览最终配置
-L / --label-columns stringArray [] 在输出中追加显示指定标签的列。例如 -L app,env 会在输出中增加 APPENV
--no-headers bool false 设置为 true 时,输出中不打印列标题。适用于将输出传递给其他命令进行进一步处理
-o / --output string "" 指定输出格式:jsonyamlwidenamecustom-columnscustom-columns-filego-templatego-template-filejsonpathjsonpath-as-jsonjsonpath-file
--raw string "" 对指定 URI 发起原始 HTTP 请求并输出返回结果。例如 --raw=/api/v1/nodes
-l / --selector string "" 基于标签进行筛选(标签选择器)。支持 ===!= 运算符,支持逗号分隔的多条件(AND 关系)。例如 -l app=nginx,env=prod
--server-print bool true 设置为 true 时,使用服务器端默认的表格输出。某些自定义资源可能不支持此功能
--show-labels bool false 设置为 true 时,在所有输出记录中追加显示标签列
--sort-by string "" 按 JSONPath 表达式指定的字段进行排序。例如 --sort-by=.metadata.name 按名称排序、--sort-by=.metadata.creationTimestamp 按创建时间排序
--template string "" Go 模板字符串,用于自定义输出格式。与 -o=go-template 等价
-w / --watch bool false 设置为 true 时,持续监听资源的变化(类似 Linux watch 命令的效果)。每次资源状态变更都会打印新行。使用 Ctrl+C 停止
--watch-only bool false --watch 类似,但首先等待事件发生后再开始输出(不会先打印当前状态)

资源类型缩写对照表

缩写 完整资源类型 缩写 完整资源类型
po pods svc services
deploy deployments rs replicasets
sts statefulsets ds daemonsets
no nodes ns namespaces
cm configmaps secret secrets
sa serviceaccounts ing ingresses
pv persistentvolumes pvc persistentvolumeclaims
cj cronjobs job jobs
hpa horizontalpodautoscalers ep endpoints

常用示例

bash

复制代码
# 查看所有命名空间的 Pod
kubectl get pods -A

# 以扩展格式查看 Pod 详情(含节点 IP、容器镜像)
kubectl get pods -o wide

# 查看所有命名空间的 Pod 并显示其标签
kubectl get pods -A --show-labels

# 按标签选择器筛选
kubectl get pods -l app=nginx,env=production

# 输出 JSON 格式(可配合 jq 进一步解析)
kubectl get pod my-pod -o json

# 输出 YAML 格式
kubectl get deployment nginx-deploy -o yaml

# 仅输出资源名称
kubectl get pods -o name

# 使用自定义列输出
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName

# 实时监控资源变化
kubectl get pods -w

# 按创建时间排序
kubectl get pods --sort-by=.metadata.creationTimestamp

kubectl describe

功能作用 :显示某个或某组资源的详细描述信息,包括资源的配置属性、相关事件(Events)、状态变更历史、关联资源等。与 kubectl get 侧重于列表展示不同,describe 侧重于深入分析单个或多个资源的状态和配置,是故障排查的首选命令。

语法

text

复制代码
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)

参数列表

参数 类型 默认值 功能描述
-f / --filename stringArray [] 指定文件名、目录或 URL,用于描述文件中定义的资源。支持多个文件的逗号分隔列表
-l / --selector string "" 使用标签选择器筛选资源。例如 -l app=nginx 会描述所有带有该标签的资源
--show-events bool true 设置为 true 时,在输出中包含与资源关联的 Events。Events 对于排查 Pod 调度失败、镜像拉取失败等问题非常重要

describe 不同资源的输出内容

资源类型 输出内容
Node 名称、角色、标签、污点(Taints)、条件(Conditions:MemoryPressure/DiskPressure/PIDPressure/Ready)、容量和可分配资源(CPU/内存/存储)、系统信息(OS/内核/Docker 版本)、运行的 Pod 列表、分配的资源量、Events
Pod 名称、命名空间、优先级、节点名称、启动时间、标签、注解、状态(Phase)、IP 地址、受控者(由哪个 Deployment/ReplicaSet 管理)、容器列表(容器 ID、镜像、端口、状态、就绪探针、资源限制/请求)、挂载的卷、Conditions(PodScheduled/Initialized/ContainersReady/Ready)、Events
Deployment 名称、命名空间、创建时间、标签、选择器、副本数/就绪数/可用数、更新策略(RollingUpdate/Recreate)、Pod 模板、Conditions、Events
Service 名称、命名空间、标签、注解、选择器、类型(ClusterIP/NodePort/LoadBalancer)、IP、端口映射、Endpoint、Events

常用示例

bash

复制代码
# 描述指定 Pod 的详细信息
kubectl describe pod nginx-pod

# 描述指定命名空间中的 Pod
kubectl describe pod nginx-pod -n production

# 描述指定节点
kubectl describe node worker-node-1

# 描述所有带有特定标签的 Pod
kubectl describe pods -l app=nginx

# 按名称前缀描述多个 Pod(所有名称以 nginx 开头的 Pod)
kubectl describe po nginx

kubectl logs

功能作用 :打印 Pod 中某容器的日志输出(stdout 和 stderr)。支持实时跟踪日志(-f)、按时间过滤(--since)、查看终止容器的上一实例日志(--previous)、选择多容器 Pod 中的特定容器(-c)等功能。这是调试容器内应用运行状态的核心工具。

语法

text

复制代码
kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [flags]

参数列表

参数 类型 默认值 功能描述
--all-containers bool false 获取 Pod 中所有容器的日志。适用于多容器 Pod 的统一日志查看
-c / --container string "" 指定容器名称。如果 Pod 只有一个容器,则此参数可省略。多容器 Pod 中必须指定此参数
-f / --follow bool false 设置为 true 时,持续跟踪日志输出(类似 Linux tail -f 的效果),实时显示新产生的日志。使用 Ctrl+C 停止跟踪
--ignore-errors bool false 设置为 true 时,即使日志查看过程中发生错误也继续(不因错误而中断跟踪)
--insecure-skip-tls-verify-backend bool false 设置为 true 时,跳过对 kubelet 服务端 TLS 证书的验证。仅当 kubelet 使用自签名证书且无法验证时使用
--limit-bytes int 0 从容器日志返回的最大字节数。设置为 0 表示无限制。用于截取指定大小的日志内容
--max-log-requests int 5 当通过选择器查询多个 Pod 的日志时,允许的同时跟踪的最大并发数。默认值为 5。超出此数量的 Pod 日志将排队等待
--pod-running-timeout duration 1m0s 等待至少一个 Pod 运行的最长时间。超过此时间若仍无 Pod 运行则返回错误。仅在选择器模式下有效
-p / --previous bool false 设置为 true 时,打印容器上一终止实例的日志(而非当前运行实例)。当容器频繁重启需要查看崩溃前日志时非常有用
-l / --selector string "" 使用标签选择器筛选 Pod,获取所有匹配 Pod 的日志
--since duration 0s 仅返回指定时间段内的日志,支持相对时间(如 5s2m3h)。设置为 0s 表示无时间限制
--since-time string "" 仅返回指定时间点(RFC3339 格式,如 2024-01-01T00:00:00Z)之后的日志
--tail int -1 仅显示日志末尾的指定行数。设置为 -1 表示显示全部日志
--timestamps bool false 设置为 true 时,在每行日志前面添加时间戳

常用示例

bash

复制代码
# 查看 Pod 日志
kubectl logs nginx-pod

# 持续跟踪日志输出
kubectl logs -f nginx-pod

# 查看指定容器的日志(多容器 Pod)
kubectl logs nginx-pod -c sidecar-container

# 查看 Pod 崩溃前(上一实例)的日志
kubectl logs nginx-pod --previous

# 查看最近 1 小时内的日志
kubectl logs nginx-pod --since=1h

# 查看最后 100 行日志
kubectl logs nginx-pod --tail=100

# 查看最后 100 行并带时间戳
kubectl logs nginx-pod --tail=100 --timestamps

# 通过标签选择器查看多个 Pod 的日志
kubectl logs -l app=nginx --all-containers

# 查看日志的最大 1MB 内容
kubectl logs nginx-pod --limit-bytes=1048576

kubectl exec

功能作用 :在 Pod 的指定容器内执行命令。常用于进入容器内部交互式操作(如 -- /bin/bash)或执行一次性诊断命令(如 -- ls-- cat-- curl 等)。使用 -- 双破折号分隔 kubectl 的参数和容器内执行的命令。

语法

text

复制代码
kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]

参数列表

参数 类型 默认值 功能描述
-c / --container string "" 指定容器名称。若 Pod 只有一个容器则可选;若多容器 Pod 则建议明确指定。若未指定,kubectl 会按照以下优先级选择:① 使用 kubectl.kubernetes.io/default-container 注解指定的容器 ② 选择 Pod 中的第一个容器
-f / --filename stringArray [] 指定文件名、目录或 URL,用于标识 Pod。与直接指定 Pod 名称互斥
--pod-running-timeout duration 1m0s 等待 Pod 进入运行状态的最长时间。超时则返回错误
-i / --stdin bool false 设置为 true 时,将标准输入(stdin)传递给容器。用于交互式会话(如运行 bash shell),通常与 -t 配合使用
-t / --tty bool false 设置为 true 时,分配伪终端(TTY)。与 -i 配合使用可获得完整的终端体验
-q / --quiet bool false 设置为 true 时,安静模式:在 exec 执行期间不打印任何消息,仅输出容器进程的输出
--privileged bool false 设置为 true 时,以特权模式执行命令(在容器内拥有 root 权限)

⚠️ 特别说明exec 命令中,-- 之后是传递给容器的命令和参数,不要用引号将命令及其参数括起来(除非这是你正常在容器内执行工具的标准方式)。例如:kubectl exec my-pod -- ls -la /tmp(正确),而非 kubectl exec my-pod -- "ls -la /tmp"

常用示例

bash

复制代码
# 进入 Pod 的交互式 bash 终端
kubectl exec -it nginx-pod -- /bin/bash

# 在 Pod 内执行单次命令
kubectl exec nginx-pod -- ls -la /usr/share/nginx/html

# 指定容器执行命令
kubectl exec nginx-pod -c sidecar-container -- cat /var/log/app.log

# 通过 stdin 向容器内命令传递输入
echo "hello" | kubectl exec -i nginx-pod -- cat > /tmp/hello.txt

# 查看容器内进程
kubectl exec nginx-pod -- ps aux

# 在 Pod 内测试网络连接
kubectl exec nginx-pod -- curl -s http://internal-service:8080/health

# 在 Pod 内查看环境变量
kubectl exec nginx-pod -- env

kubectl create

功能作用 :通过 YAML/JSON 配置文件或子命令直接创建 Kubernetes 资源。create 是命令式操作(Imperative),每次执行都会创建新资源,如果资源已存在则报错。相比之下,apply 是声明式操作,会自动判断创建或更新。create 包含丰富的子命令用于快速创建常见资源类型。

语法

text

复制代码
kubectl create -f FILENAME [flags]

通用参数

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中缺失键时忽略错误
--dry-run string "none" 试运行模式:"none"(执行)、"client"(客户端试运行,仅验证不发送到服务器)、"server"(服务器端试运行,验证但不持久化)
--edit bool false 创建前先使用默认编辑器编辑资源的 API 对象
-f / --filename stringArray [] 包含资源定义的 YAML/JSON 文件路径、目录或 URL
--field-manager string "kubectl-create" 用于跟踪字段所有权的管理器名称(服务端应用相关)
-o / --output string "" 输出格式:jsonyamlnamego-template
--raw string "" 向指定 URI 发送原始 HTTP POST 请求
--record bool false 在当前命令的资源注解中记录命令内容(历史兼容功能)
-R / --recursive bool false 递归处理 -f 指定目录下的所有文件
--save-config bool false 将当前配置保存到资源的注解中(供后续 apply 使用)
-l / --selector string "" 按标签选择器筛选资源
--validate string "strict" 验证策略:"strict"(严格验证)、"warn"(警告但不阻止)、"ignore"(跳过验证)
--windows-line-endings bool false 处理 Windows 换行符

主要子命令

子命令 说明
kubectl create namespace <name> 创建命名空间
kubectl create deployment <name> --image=<image> 创建 Deployment
kubectl create configmap <name> --from-file=<path> 基于文件或字面量创建 ConfigMap
kubectl create secret generic <name> --from-literal=<key>=<value> 创建通用 Secret
kubectl create secret docker-registry <name> --docker-server=... 创建 Docker 镜像仓库身份认证 Secret
kubectl create secret tls <name> --cert=... --key=... 创建 TLS 证书 Secret
kubectl create service clusterip <name> --tcp=<port>:<targetPort> 创建 ClusterIP 类型的 Service
kubectl create service nodeport <name> --tcp=<port>:<targetPort> 创建 NodePort 类型的 Service
kubectl create serviceaccount <name> 创建 ServiceAccount
kubectl create role <name> --verb=get,list --resource=pods 创建 Role
kubectl create rolebinding <name> --role=<role> --serviceaccount=... 创建 RoleBinding
kubectl create clusterrole <name> --verb=get --resource=nodes 创建 ClusterRole
kubectl create clusterrolebinding <name> --clusterrole=... 创建 ClusterRoleBinding
kubectl create cronjob <name> --image=<image> --schedule="*/5 * * * *" 创建 CronJob
kubectl create job <name> --image=<image> 创建 Job
kubectl create ingress <name> --rule="host/path=service:port" 创建 Ingress
kubectl create pvc <name> --storage-class=... --access-modes=... 创建 PersistentVolumeClaim
kubectl create quota <name> --hard=cpu=10,memory=20Gi 创建 ResourceQuota

常用示例

bash

复制代码
# 通过 YAML 文件创建资源
kubectl create -f nginx-deployment.yaml

# 通过目录创建所有资源
kubectl create -f ./manifests/

# 命令行快速创建命名空间
kubectl create namespace production

# 命令行快速创建 Deployment
kubectl create deployment nginx --image=nginx:1.21 --replicas=3

# 通过字面量创建 ConfigMap
kubectl create configmap app-config --from-literal=APP_ENV=production --from-literal=LOG_LEVEL=info

# 从文件创建 ConfigMap
kubectl create configmap nginx-config --from-file=nginx.conf

# 创建 Docker 配置的 Secret
kubectl create secret docker-registry regcred \
  --docker-server=my-registry.example.com \
  --docker-username=admin \
  --docker-password=pass123

# 试运行验证 YAML 文件(不实际创建)
kubectl create -f nginx-deployment.yaml --dry-run=client

# 试运行并输出 YAML
kubectl create deployment test --image=nginx --dry-run=client -o yaml

kubectl apply

功能作用 :基于配置文件(YAML/JSON)以声明式 方式将资源应用到集群。如果资源尚不存在则创建,如果已存在则计算差异并更新。apply 是 Kubernetes 推荐的标准资源管理方式,它通过保存最后一次应用的配置注解(kubectl.kubernetes.io/last-applied-configuration)来支持增量更新。

语法

text

复制代码
kubectl apply -f FILENAME [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 选择指定资源类型的所有资源(在当前命名空间中)
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--cascade string "background" 级联删除策略:"background"(后台级联)、"foreground"(前台级联)、"orphan"(孤立资源,不级联删除)。仅当与 --prune 配合使用时有效
--dry-run string "none" 试运行模式:"none""client""server"
--field-manager string "kubectl-client-side-apply" 字段所有权管理器的名称(服务端应用相关)
-f / --filename stringArray [] 包含资源定义的文件、目录或 URL
--force bool false 设置为 true 时,强制替换(先删除再创建)冲突资源
--force-conflicts bool false 设置为 true 时,在服务端应用模式下,强制接管字段的冲突所有权
-k / --kustomize string "" 指定 kustomization.yaml 目录路径,对该目录进行 kustomize 处理后应用
--openapi-patch bool true 设置为 true 时,使用 OpenAPI 计算差异和合并补丁。这要求服务端支持 OpenAPI
-o / --output string "" 输出格式
--overwrite bool true 控制是否覆盖已存在的注解
--prune bool false 设置为 true 时,自动删除上次 apply 操作中创建但当前配置中不再定义的资源(实现配置与集群状态的完全同步)
--prune-allowlist stringArray [] --prune 配合使用,指定可以被自动删除的资源类型列表
--record bool false 在资源注解中记录当前命令(历史兼容功能)
-R / --recursive bool false 递归处理目录
-l / --selector string "" 按标签选择器筛选
--server-side bool false 设置为 true 时,使用服务端应用(Server-Side Apply),由 API Server 执行合并逻辑
--validate string "strict" 验证策略:"strict""warn""ignore"
--wait bool false 设置为 true 时,等待资源完全就绪后才返回

常用示例

bash

复制代码
# 应用单个 YAML 文件
kubectl apply -f nginx-deployment.yaml

# 应用整个目录的资源
kubectl apply -f ./k8s-manifests/

# 通过 URL 应用
kubectl apply -f https://example.com/kubernetes/deployment.yaml

# 验证配置而不实际应用
kubectl apply -f deployment.yaml --dry-run=client

# 应用并开启自动清理(删除已从配置中移除的资源)
kubectl apply -f ./manifests/ --prune -l app=nginx

# 通过 kustomize 目录应用
kubectl apply -k ./kustomize/overlays/production/

# 服务端应用
kubectl apply -f deployment.yaml --server-side

# 强制应用(当资源被其他管理器修改时)
kubectl apply -f deployment.yaml --force

kubectl delete

功能作用 :通过文件名、标准输入、资源名或标签选择器删除 Kubernetes 资源。支持强制删除(--force)、优雅终止期限调整(--grace-period)和级联删除策略控制。

语法

text

复制代码
kubectl delete (-f FILENAME | TYPE [NAME | -l label | --all]) [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 删除指定资源类型的所有资源(在当前命名空间内)。⚠️ 谨慎使用
-A / --all-namespaces bool false 删除所有命名空间中指定资源类型的所有资源
--cascade string "background" 级联删除策略:"background"(默认,立即删除主资源,后台异步删除依赖资源)、"foreground"(先删除所有依赖资源,再删除主资源)、"orphan"(仅删除主资源,保留依赖资源)
--dry-run string "none" 试运行模式
--field-selector string "" 基于字段值筛选要删除的资源。例如 status.phase=Failed
-f / --filename stringArray [] 指定文件名、目录或 URL,删除文件中定义的资源
--force bool false 设置为 true 时,立即从 API Server 删除资源,绕过优雅终止流程。⚠️ 可能导致数据丢失
--grace-period int -1 优雅终止等待秒数。设置为 -1 使用资源默认值(通常为 30 秒),设置为正值覆盖默认值,设置为 0 表示立即终止(效果类似 --force
--ignore-not-found bool false 要删除的资源不存在时,返回退出码 0(无错误)
-k / --kustomize string "" 指定 kustomization 目录,删除 kustomization 目标对应的资源
--now bool false 设置为 true 时,立即请求删除资源(相当于 --grace-period=0
-o / --output string "" 输出格式
--raw string "" 向指定 URI 发送原始 HTTP DELETE 请求
-R / --recursive bool false 递归处理目录
-l / --selector string "" 按标签选择器筛选要删除的资源
--timeout duration 0s 等待删除完成的最长时间。0s 表示不等待立即返回
--wait bool true 设置为 true 时,等待资源完全删除后才返回成功。设置为 false 时,删除请求发送后立即返回

常用示例

bash

复制代码
# 按名称删除 Pod
kubectl delete pod nginx-pod

# 按名称删除多个资源
kubectl delete pod,service nginx-pod nginx-svc

# 通过 YAML 文件删除
kubectl delete -f nginx-deployment.yaml

# 按标签选择器删除
kubectl delete pods -l app=nginx

# 删除命名空间中某类型的所有资源
kubectl delete pods --all

# 强制立即删除 Pod(跳过优雅终止)
kubectl delete pod nginx-pod --force --grace-period=0

# 仅删除资源不级联(孤立其子资源)
kubectl delete deployment nginx-deploy --cascade=orphan

# 试运行查看删除效果
kubectl delete -f deployment.yaml --dry-run=client

# 删除并等待完成
kubectl delete pod nginx-pod --wait=true --timeout=60s

kubectl edit

功能作用 :通过默认文本编辑器直接编辑集群中的 API 资源。编辑器由 KUBE_EDITOREDITOR 环境变量决定(Linux 上默认为 vi)。编辑完成后,保存并退出编辑器即会提交变更到 API Server。

语法

text

复制代码
kubectl edit (RESOURCE/NAME | -f FILENAME) [flags]

参数列表

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--dry-run string "none" 试运行模式
-f / --filename stringArray [] 指定文件名、目录或 URL,编辑文件中定义的资源
--field-manager string "kubectl-edit" 字段所有权管理器名称
-k / --kustomize string "" kustomization 目录路径
-o / --output string "" 输出格式
--output-patch bool false 设置为 true 时,输出补丁内容而不是应用变更
--record bool false 在资源注解中记录命令
-R / --recursive bool false 递归处理目录
--save-config bool false 保存配置到注解
--show-managed-fields bool false 设置为 true 时,在编辑器中显示字段所有权元数据
--subresource string "" 指定要编辑的子资源(如 /status
--template string "" Go 模板字符串
--validate string "strict" 验证策略
--windows-line-endings bool false 处理 Windows 换行符

常用示例

bash

复制代码
# 编辑 Deployment
kubectl edit deployment nginx-deploy

# 编辑 Service
kubectl edit svc nginx-svc

# 使用指定编辑器
KUBE_EDITOR="nano" kubectl edit pod nginx-pod

# 编辑后输出补丁内容而不实际应用
kubectl edit deployment nginx-deploy --output-patch

kubectl replace

功能作用 :通过文件名或标准输入替换 现有资源。与 apply 的区别在于:replace 要求提供资源的完整规约,并且目标资源必须已存在;如果资源不存在则会报错。这是一个命令式操作,不保留增量合并历史。

语法

text

复制代码
kubectl replace -f FILENAME [flags]

参数列表

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--cascade string "background" 级联删除策略
--dry-run string "none" 试运行模式
--field-manager string "kubectl-replace" 字段所有权管理器名称
-f / --filename stringArray [] 指定包含替换配置的文件名、目录或 URL
--force bool false 设置为 true 时,先删除原有资源再创建新资源(绕过版本冲突限制)。⚠️ 使用此选项会将资源完全重建
--grace-period int -1 优雅终止等待秒数(--force 模式下有效)
-k / --kustomize string "" kustomization 目录路径
-o / --output string "" 输出格式
--raw string "" 向指定 URI 发送原始 HTTP PUT 请求
-R / --recursive bool false 递归处理目录
--save-config bool false 保存配置到注解
--subresource string "" 指定要替换的子资源
--template string "" Go 模板字符串
--timeout duration 0s 等待替换完成的最长时间
--validate string "strict" 验证策略
--wait bool true 等待替换完成后才返回

常用示例

bash

复制代码
# 通过文件替换资源(目标必须已存在)
kubectl replace -f nginx-deployment-updated.yaml

# 强制替换(先删除再创建)
kubectl replace -f nginx-deployment.yaml --force

# 替换并等待完成
kubectl replace -f deployment.yaml --wait

# 试运行查看替换效果
kubectl replace -f deployment.yaml --dry-run=client

kubectl expose

功能作用:将某个资源(Deployment、ReplicaSet、ReplicationController 或 Pod)暴露为一个新的 Kubernetes Service。该命令会自动提取资源的选择器(Selector)并用于创建 Service,Service 端口通过参数指定。

语法

text

复制代码
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--target-port=target-port] [--protocol=protocol] [--type=type] [flags]

参数列表

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--cluster-ip string "" 手动指定 Service 的 ClusterIP 地址。留空则自动分配
--dry-run string "none" 试运行模式
--external-ip string "" 为 Service 指定的外部 IP 地址(如公有云负载均衡 IP)
--field-manager string "kubectl-expose" 字段所有权管理器名称
-f / --filename stringArray [] 指定资源定义的文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
-l / --labels string "" 为 Service 设置标签
--load-balancer-ip string "" 指定负载均衡器的 IP 地址(仅 LoadBalancer 类型有效)
--name string "" 设置 Service 的名称(默认为资源名称)
-o / --output string "" 输出格式
--override-type string "merge" 覆盖方法:"merge""json"
--overrides string "" JSON 格式的内联覆盖配置
--port string "" Service 对外暴露的端口号(必填)
--protocol string "TCP" 端口协议:TCPUDPSCTP
-R / --recursive bool false 递归处理目录
--save-config bool false 保存配置到注解
--selector string "" 自定义 Service 的选择器标签(而非从资源自动提取)
--session-affinity string "" 会话亲和性:"None"(默认,无亲和性)、"ClientIP"(基于客户端 IP 的会话保持)
--target-port string "" 容器(目标 Pod)上的端口号。如不指定则默认使用与 --port 相同的值
--type string "ClusterIP" Service 类型:ClusterIP(集群内部访问)、NodePort(通过节点端口访问)、LoadBalancer(通过外部负载均衡器访问)、ExternalName(DNS 别名)

常用示例

bash

复制代码
# 创建 ClusterIP Service(集群内部访问)
kubectl expose deployment nginx-deploy --port=80 --target-port=80

# 创建 NodePort Service(节点端口访问)
kubectl expose deployment nginx-deploy --type=NodePort --port=80 --target-port=80

# 创建 LoadBalancer Service(公有云环境)
kubectl expose deployment nginx-deploy --type=LoadBalancer --port=80 --target-port=80

# 创建 ExternalName Service(DNS 别名)
kubectl expose deployment nginx-deploy --type=ExternalName --external-name=nginx.example.com

# 暴露 Pod(不建议生产使用)
kubectl expose pod nginx-pod --port=8080 --target-port=80 --name=nginx-svc

# 指定 TCP/UDP 混合协议
kubectl expose deployment app --port=80 --target-port=8080 --protocol=UDP

# 试运行查看 Service 配置
kubectl expose deployment nginx-deploy --port=80 --target-port=80 --dry-run=client -o yaml

kubectl run

功能作用 :在集群中快速创建并运行一个特定镜像的 Pod。可以指定创建的类型为 Pod、Deployment、Job 或 CronJob(通过 --restart 参数控制)。常用于快速测试镜像、调试和运行一次性任务。

语法

text

复制代码
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [flags]

参数列表

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--annotations stringArray [] 为 Pod 设置注解
--attach bool false 设置为 true 时,等待 Pod 运行后附加到 Pod(效果类似于 kubectl attach)。当设置了 -i/--stdin 时,--attach 默认为 true;当 --restart=Never 时,返回容器进程的退出码
--command bool false 设置为 true 时,将 -- 之后的参数作为容器的主命令(Command)而非命令参数(Args),即覆盖镜像默认的 ENTRYPOINT
--dry-run string "none" 试运行模式
--env stringArray [] 设置容器的环境变量,格式为 key=value。可重复设置多个
--expose bool false 设置为 true 时,自动为此 Pod 创建 ClusterIP Service
--field-manager string "kubectl-run" 字段所有权管理器名称
-f / --filename stringArray [] 指定资源定义的文件名、目录或 URL
--image string "" 指定容器镜像(必需)。格式为 registry/repository:tag
-k / --kustomize string "" kustomization 目录路径
-l / --labels string "" 设置 Pod 标签
--leave-stdin-open bool false 设置为 true 时,容器退出后不关闭 stdin(用于支持交互式容器恢复)
-o / --output string "" 输出格式
--override-type string "merge" 覆盖方法
--overrides string "" JSON 格式的内联覆盖配置,用于设置不在命令行暴露的字段
--pod-running-timeout duration 1m0s 等待 Pod 进入运行状态的最长时间
--port string "" 容器对外开放的端口号
--privileged bool false 设置为 true 时,以特权模式启动容器
-q / --quiet bool false 设置为 true 时,抑制提示信息
--record bool false 记录命令
-R / --recursive bool false 递归处理目录
--restart string "Always" 重启策略:"Always"(始终重启,创建 Deployment)、"OnFailure"(失败时重启,创建 Job)、"Never"(从不重启,创建独立 Pod)
--rm bool false 设置为 true 时,Pod 退出后自动删除(清理资源)。仅 --restart=Never 时有效
--save-config bool false 保存配置到注解
-i / --stdin bool false 设置为 true 时,将标准输入传递给容器
--template string "" Go 模板字符串
-t / --tty bool false 分配伪终端

常用示例

bash

复制代码
# 快速运行一个 nginx 容器
kubectl run nginx --image=nginx:1.21

# 运行交互式调试容器并在退出后自动删除
kubectl run -it debug-pod --image=busybox --rm --restart=Never -- /bin/sh

# 运行一次性任务(Job 模式)
kubectl run data-processor --image=python:3.9 --restart=OnFailure -- python /scripts/process.py

# 指定环境变量并暴露端口
kubectl run web-app --image=my-app:v1 --env="ENV=production" --env="LOG_LEVEL=info" --port=8080

# 试运行生成 YAML 而不创建
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx-pod.yaml

# 以特权模式运行
kubectl run debug-privileged --image=busybox --restart=Never --privileged -- /bin/sh

# 运行并附加到 Pod
kubectl run -it nginx --image=nginx --attach -- /bin/bash

kubectl delete(续)

已在前面详细说明,此处不重复。

四、部署与扩缩容命令

kubectl rollout

功能作用:管理资源(Deployment、DaemonSet、StatefulSet)的滚动更新过程。提供查看更新状态、暂停/恢复更新、回滚到历史版本和重启资源等功能。

语法

text

复制代码
kubectl rollout SUBCOMMAND [flags]

子命令列表

子命令 说明
kubectl rollout history 查看 Deployment/DaemonSet/StatefulSet 的发布历史(修订记录)
kubectl rollout pause 暂停资源的滚动更新(标记资源为已暂停)
kubectl rollout restart 重启资源(创建新的 ReplicaSet 触发 Pod 重建)
kubectl rollout resume 恢复已暂停的滚动更新
kubectl rollout status 查看滚动更新进度状态
kubectl rollout undo 回滚到上一个修订版本

rollout history 参数

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
-o / --output string "" 输出格式
-R / --recursive bool false 递归处理目录
--revision int 0 查看指定修订版本的详细信息。设置为 0 表示显示所有修订版本
-l / --selector string "" 按标签选择器筛选
--template string "" Go 模板字符串

rollout restart 参数

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--dry-run string "none" 试运行模式
--field-manager string "kubectl-rollout" 字段所有权管理器名称
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
-o / --output string "" 输出格式
-R / --recursive bool false 递归处理目录
-l / --selector string "" 按标签选择器筛选

rollout status 参数

参数 类型 默认值 功能描述
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
-R / --recursive bool false 递归处理目录
--revision int 0 指定要监视的修订版本号。设置为 0 表示监视最新版本,设置为其他值则固定监视指定版本
-l / --selector string "" 按标签选择器筛选
--timeout duration 0s 等待 rollout 完成的最长时间。0s 表示一直等待
-w / --watch bool true 设置为 true 时,持续监控直到 rollout 完成。设置为 false 时,仅查询一次

常用示例

bash

复制代码
# 查看发布历史
kubectl rollout history deployment/nginx-deploy

# 查看特定修订的详情
kubectl rollout history deployment/nginx-deploy --revision=3

# 回滚到上一版本
kubectl rollout undo deployment/nginx-deploy

# 回滚到指定修订版本
kubectl rollout undo deployment/nginx-deploy --to-revision=2

# 查看更新进度
kubectl rollout status deployment/nginx-deploy

# 暂停滚动更新(部署新版本时进入 pending 状态)
kubectl rollout pause deployment/nginx-deploy

# 恢复滚动更新
kubectl rollout resume deployment/nginx-deploy

# 重启 Deployment(触发所有 Pod 重建)
kubectl rollout restart deployment/nginx-deploy

kubectl scale

功能作用 :为 Deployment、ReplicaSet、ReplicationController 或 StatefulSet 设置新的副本数量。支持指定前置条件(--current-replicas--resource-version),条件不满足时不会执行扩缩容操作。

语法

text

复制代码
kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 选择指定资源类型的所有资源进行扩缩容
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--current-replicas int -1 扩缩容的前置条件:要求当前副本数等于该值。-1 表示不设条件。仅在条件匹配时才执行扩缩容
--dry-run string "none" 试运行模式
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
-o / --output string "" 输出格式
-R / --recursive bool false 递归处理目录
--replicas int 0 目标副本数量(必填)。0 表示完全缩减(停止所有 Pod)
--resource-version string "" 扩缩容的前置条件:资源的版本号。仅在当前版本匹配时才执行扩缩容,防止并发冲突
-l / --selector string "" 按标签选择器筛选
--template string "" Go 模板字符串
--timeout duration 0s 等待扩缩容完成的最长时间

常用示例

bash

复制代码
# 将 Deployment 扩展到 5 个副本
kubectl scale deployment nginx-deploy --replicas=5

# 缩减到 0 个副本(停止服务)
kubectl scale deployment nginx-deploy --replicas=0

# 带前置条件扩缩容(当前副本为 3 时才执行)
kubectl scale deployment nginx-deploy --current-replicas=3 --replicas=5

# 使用资源版本号防止并发冲突
kubectl scale deployment nginx-deploy --replicas=5 --resource-version=123456

# 对 StatefulSet 进行扩缩容
kubectl scale statefulset db-statefulset --replicas=3

# 试运行验证
kubectl scale deployment nginx-deploy --replicas=3 --dry-run=client

kubectl autoscale

功能作用:为 Deployment、ReplicaSet、StatefulSet 或 ReplicationController 创建 HorizontalPodAutoscaler(HPA)自动扩缩器。HPA 会根据指定的 CPU/内存使用率阈值自动调整 Pod 数量。

语法

text

复制代码
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]

参数列表

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--cpu-percent int -1 目标平均 CPU 使用率百分比(如 --cpu-percent=80 表示维持 CPU 使用率在 80% 左右)。此参数触发基于 autoscaling/v1 API 的自动扩缩。设置为 -1 表示不基于 CPU 扩缩
--dry-run string "none" 试运行模式
--field-manager string "kubectl-autoscale" 字段所有权管理器名称
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
--max int 0 自动扩缩的最大 Pod 数量(必填)
--min int -1 自动扩缩的最小 Pod 数量(必填)
--name string "" HPA 对象的名称(默认为资源名称)
-o / --output string "" 输出格式
-R / --recursive bool false 递归处理目录
--save-config bool false 保存配置到注解
--template string "" Go 模板字符串

常用示例

bash

复制代码
# 基于 CPU 使用率创建 HPA
kubectl autoscale deployment nginx-deploy --min=2 --max=10 --cpu-percent=80

# 仅设置最小/最大(不基于 CPU 扩缩,需要自行配置自定义指标)
kubectl autoscale deployment app-deploy --min=1 --max=5

# 试运行输出 YAML
kubectl autoscale deployment nginx-deploy --min=2 --max=5 --cpu-percent=70 --dry-run=client -o yaml

# 对 StatefulSet 创建 HPA
kubectl autoscale statefulset db-sts --min=3 --max=10 --cpu-percent=75

五、查看与诊断命令

kubectl cluster-info

功能作用 :显示 Kubernetes 控制平面(Control Plane)和带有 kubernetes.io/cluster-service=true 标签的集群内部服务的地址信息。为进一步调试和诊断集群问题,可使用 kubectl cluster-info dump 导出集群状态详情。

语法

text

复制代码
kubectl cluster-info [flags]

参数列表:此命令除全局参数外没有专用参数。

常用示例

bash

复制代码
# 显示集群基本信息
kubectl cluster-info

# 导出集群诊断信息(输出量非常大)
kubectl cluster-info dump

# 仅导出特定命名空间的诊断信息
kubectl cluster-info dump --namespace=kube-system

# 输出诊断信息并保存到文件
kubectl cluster-info dump --output-directory=/tmp/cluster-info

kubectl events

功能作用 :打印集群中事件(Events)的摘要表格。事件是 Kubernetes 中记录资源状态变更的核心机制。可以通过命名空间、资源名称进行筛选,支持实时监听(-w)和排序输出。

语法

text

复制代码
kubectl events [--for TYPE/NAME] [--watch] [--types=Normal,Warning] [flags]

参数列表

参数 类型 默认值 功能描述
-A / --all-namespaces bool false 显示所有命名空间的事件
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--for string "" 仅显示与指定资源相关的事件。例如 --for=pod/nginx-pod
--no-headers bool false 不显示表头
-o / --output string "" 输出格式
--show-managed-fields bool false 显示字段所有权
--template string "" Go 模板字符串
--types strings [] 按事件类型筛选:Normal(正常事件)、Warning(警告事件)
-w / --watch bool false 设置为 true 时,实时监听新事件

常用示例

bash

复制代码
# 查看当前命名空间的所有事件
kubectl events

# 查看所有命名空间的事件
kubectl events -A

# 查看特定 Pod 的事件
kubectl events --for pod/nginx-pod

# 仅查看警告事件
kubectl events --types=Warning

# 实时监听事件
kubectl events -w

# 按时间排序(通过管道处理)
kubectl events -A --sort-by='.metadata.creationTimestamp'

# 输出 JSON 格式
kubectl events -o json

kubectl explain

功能作用:提供 Kubernetes API 资源的内联文档和字段说明。是编写 YAML 清单文件时快速查阅字段含义、类型和用法的最佳工具,无需联网查阅外部文档。

语法

text

复制代码
kubectl explain RESOURCE [--recursive] [--api-version=api-version-group] [flags]

参数列表

参数 类型 默认值 功能描述
--api-version string "" 指定 API 版本组,如 --api-version=apps/v1。当资源在多个 API 版本中可用时,此参数确定使用哪个版本的文档
--output / -o string "plaintext" 输出格式:"plaintext"(纯文本)、"plaintext-openapiv2"
--recursive bool false 设置为 true 时,递归打印所有嵌套字段的说明。这对于了解深层字段结构非常有用,但输出内容会非常庞大

常用示例

bash

复制代码
# 查看 Pod 资源的所有字段说明
kubectl explain pods

# 递归查看 Pod 的所有字段(含子字段)
kubectl explain pods --recursive

# 查看 Pod.spec 的字段说明
kubectl explain pods.spec

# 查看 Pod.spec.containers 的字段说明
kubectl explain pods.spec.containers

# 查看特定 API 版本的资源
kubectl explain deployments --api-version=apps/v1

# 查看特定深层次字段
kubectl explain pods.spec.containers.resources
kubectl explain pods.spec.containers.readinessProbe

kubectl top

功能作用 :显示集群中节点(Node)和 Pod 的资源(CPU/内存)使用情况。数据来源于 Metrics Server,该组件从每个节点的 kubelet 聚合资源指标数据。使用此命令前需确认集群已安装并正常运行 Metrics Server。

⚠️ OpenEuler 注意事项 :在 OpenEuler 24.03 SP3 上部署 Kubernetes 后,需要单独安装 Metrics Server 才能使用 kubectl top 命令。可以通过 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 安装。

语法

text

复制代码
kubectl top [node | pod] [NAME | -l label] [flags]

top node 参数

参数 类型 默认值 功能描述
--no-headers bool false 不显示表头
-l / --selector string "" 按标签选择器筛选节点
--show-capacity bool false 显示节点的 CPU 和内存总容量及当前使用量
--sort-by string "" 按指定字段排序,如 cpumemory
--use-protocol-buffers bool true 使用 Protocol Buffers 传输数据(更高效)

top pod 参数

参数 类型 默认值 功能描述
-A / --all-namespaces bool false 显示所有命名空间的 Pod
--containers bool false 设置为 true 时,显示 Pod 中每个容器的资源使用情况(而非 Pod 级别汇总)
--field-selector string "" 基于字段值筛选 Pod
--no-headers bool false 不显示表头
-l / --selector string "" 按标签选择器筛选 Pod
--sort-by string "" 按指定字段排序,如 cpumemory
--use-protocol-buffers bool true 使用 Protocol Buffers 传输数据

常用示例

bash

复制代码
# 查看所有节点的资源使用情况
kubectl top nodes

# 查看特定节点的资源使用情况
kubectl top node worker-node-1

# 查看节点总容量
kubectl top node --show-capacity

# 按内存使用排序
kubectl top node --sort-by=memory

# 查看当前命名空间 Pod 的资源使用
kubectl top pods

# 查看所有命名空间 Pod 的资源使用
kubectl top pods -A

# 查看特定 Pod 的资源使用
kubectl top pod nginx-pod

# 查看每个容器的资源使用情况
kubectl top pods --containers

# 按 CPU 使用排序
kubectl top pods -A --sort-by=cpu

kubectl version

功能作用:打印 kubectl 客户端版本和 Kubernetes 集群服务器版本的详细信息。

语法

text

复制代码
kubectl version [flags]

参数列表

参数 类型 默认值 功能描述
--client bool false 设置为 true 时,仅显示客户端版本(不需要连接到服务器)
-o / --output string "" 输出格式:jsonyaml
--short bool false 设置为 true 时,以简短格式输出版本信息

常用示例

bash

复制代码
# 查看客户端和服务器版本
kubectl version

# 仅查看客户端版本
kubectl version --client

# 以 JSON 格式输出
kubectl version -o json

# 以 YAML 格式输出
kubectl version -o yaml

# 简短格式
kubectl version --short

kubectl options

功能作用:打印所有命令都支持的共有参数列表,是快速查找全局参数的最佳入口。

语法

text

复制代码
kubectl options [flags]

常用示例

bash

复制代码
kubectl options

输出即为第二章的所有全局参数的完整列表。

六、节点管理命令

kubectl cordon

功能作用:将指定节点标记为不可调度(unschedulable)。标记后,调度器不会再将新的 Pod 调度到该节点上,但已在节点上运行的现有 Pod 不受影响。这是节点维护操作的标准第一步。

语法

text

复制代码
kubectl cordon NODE [flags]

参数列表

参数 类型 默认值 功能描述
--dry-run string "none" 试运行模式:"none""client""server"

常用示例

bash

复制代码
# 封锁节点(禁止新 Pod 调度)
kubectl cordon worker-node-1

# 验证节点状态
kubectl get node worker-node-1
# 输出中会显示 STATUS 包含 SchedulingDisabled

kubectl uncordon

功能作用:取消节点的封锁状态,将节点重新标记为可调度(schedulable)。通常在节点维护完成后使用此命令恢复节点的正常调度能力。

语法

text

复制代码
kubectl uncordon NODE [flags]

参数列表

参数 类型 默认值 功能描述
--dry-run string "none" 试运行模式:"none""client""server"

常用示例

bash

复制代码
# 解除节点封锁
kubectl uncordon worker-node-1

# 验证节点已恢复调度
kubectl get node worker-node-1

kubectl drain

功能作用 :安全地驱逐节点上的所有 Pod,并将节点标记为不可调度。这是一个综合操作命令,执行:① 标记节点为不可调度 ② 驱逐(Evict)或删除节点上的所有非镜像 Pod。如果有 DaemonSet 管理的 Pod,需要使用 --ignore-daemonsets 参数。这是 Kubernetes 节点维护的标准前置命令。

语法

text

复制代码
kubectl drain NODE [flags]

参数列表

参数 类型 默认值 功能描述
--chunk-size int 500 分块删除 Pod 时每块的 Pod 数量。用于控制删除并发度
--delete-emptydir-data bool false 设置为 true 时,驱除使用 emptyDir 存储卷的 Pod。⚠️ emptyDir 数据会丢失,仅在确定不需要保留数据时使用
--disable-eviction bool false 设置为 true 时,使用 DELETE 方式删除 Pod(而非 Eviction 驱逐)。Eviction 更安全但需要 PodDisruptionBudget 支持
--dry-run string "none" 试运行模式
--force bool false 设置为 true 时,强制删除未被 ReplicationController、ReplicaSet、Job、DaemonSet 或 StatefulSet 管理的 Pod(独立 Pod)
--grace-period int -1 优雅终止等待秒数
--ignore-daemonsets bool false 设置为 true 时,忽略 DaemonSet 管理的 Pod(不删除它们)。⚠️ 这是 drain 操作最常用的参数之一,因为 DaemonSet Pod 通常无法被驱逐
--pod-selector string "" 指定要驱逐的 Pod 的标签选择器(而非全部 Pod)
--skip-wait-for-delete-timeout int 0 等待 Pod 删除的超时秒数。Pod 超过此时间未删除则跳过该 Pod 继续处理
--timeout duration 0s 整个 drain 操作的最长等待时间。0s 表示无限等待

常用示例

bash

复制代码
# 安全排空节点(忽略 DaemonSet)
kubectl drain worker-node-1 --ignore-daemonsets

# 排空节点(包括使用 emptyDir 的 Pod)
kubectl drain worker-node-1 --ignore-daemonsets --delete-emptydir-data

# 强制排空(含独立 Pod)
kubectl drain worker-node-1 --force --ignore-daemonsets

# 试运行查看驱逐效果
kubectl drain worker-node-1 --ignore-daemonsets --dry-run=client

# 设置超时时间
kubectl drain worker-node-1 --ignore-daemonsets --timeout=5m

kubectl taint

功能作用:为节点添加、修改或删除污点(Taint)。污点是一组 key=value:effect 的标签,用于标记节点的特殊属性并排斥不匹配容忍度(Toleration)的 Pod。这是 Kubernetes 实现节点专属调度和资源隔离的核心机制。

语法

text

复制代码
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 选择集群中所有节点进行操作
--dry-run string "none" 试运行模式
--field-manager string "kubectl-taint" 字段所有权管理器名称
-o / --output string "" 输出格式
--overwrite bool false 设置为 true 时,如果污点键已存在则覆盖其值和效果
--validate string "strict" 验证策略

Taint 效果(Effect)

效果 说明
NoSchedule 不允许没有匹配容忍度的 Pod 调度到此节点。已运行的 Pod 不受影响
PreferNoSchedule 调度器会尽量不将没有匹配容忍度的 Pod 调度到此节点,但不强制保证
NoExecute 不允许没有匹配容忍度的 Pod 调度到此节点,且已在节点上运行的无容忍度 Pod 会被驱逐

常用示例

bash

复制代码
# 添加污点(专用节点,仅特定 Pod 可调度)
kubectl taint nodes gpu-node-1 dedicated=gpu:NoSchedule

# 通过节点标签批量添加污点
kubectl taint nodes -l node-role=worker dedicated=worker:NoSchedule

# 移除污点(在键名后加破折号 "-")
kubectl taint nodes gpu-node-1 dedicated=gpu:NoSchedule-

# 添加 NoExecute 效果(立即驱逐不匹配的现有 Pod)
kubectl taint nodes faulty-node-1 node.kubernetes.io/unreachable:NoExecute

# 覆盖现有污点的值
kubectl taint nodes gpu-node-1 dedicated=gpu-v2:NoSchedule --overwrite

# 查看节点污点
kubectl describe node gpu-node-1 | grep Taints

七、高级运维命令

kubectl apply

已在第三章详细说明。

kubectl patch

功能作用 :通过补丁(Patch)方式直接更新 Kubernetes API 资源的字段。支持三种补丁类型:① Strategic Merge Patch (策略合并补丁,默认方式,Kubernetes 专有)② JSON Merge Patch (JSON 合并补丁,RFC 7386)③ JSON Patch (JSON 补丁,RFC 6902)。patch 适合局部精细化更新,无需提供完整的资源定义。

语法

text

复制代码
kubectl patch (-f FILENAME | TYPE NAME) [-p PATCH|--patch-file FILE] [flags]

参数列表

参数 类型 默认值 功能描述
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--dry-run string "none" 试运行模式
--field-manager string "kubectl-patch" 字段所有权管理器名称
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
--local bool false 设置为 true 时,仅本地处理补丁而不发送到 API Server
-o / --output string "" 输出格式
-p / --patch string "" 要应用的补丁内容(JSON 或 YAML 格式)。作为字符串直接指定
--patch-file string "" 从文件读取补丁内容
-R / --recursive bool false 递归处理目录
--subresource string "" 指定要修补的子资源
--template string "" Go 模板字符串
--type string "strategic" 补丁类型:"strategic"(策略合并补丁,默认)、"json"(JSON Patch,RFC 6902)、"merge"(JSON Merge Patch,RFC 7386)

补丁类型详解

补丁类型 适用场景
Strategic Merge Patch "strategic" 默认方式。Kubernetes 专有的智能合并策略,能正确处理列表元素的增删改(如容器的合并/替换),而非简单覆盖
JSON Merge Patch "merge" 标准的 JSON 合并方式。如果字段在补丁中未出现,则保持原值。但如果涉及列表,会完全替换整个列表
JSON Patch "json" 标准的 JSON 补丁方式(RFC 6902)。使用 oppathvalue 三元组精确描述操作

常用示例

bash

复制代码
# Strategic Merge Patch 方式更新镜像
kubectl patch deployment nginx-deploy -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.22"}]}}}}'

# JSON Merge Patch 方式添加标签
kubectl patch pod nginx-pod -p '{"metadata":{"labels":{"new-label":"test"}}}'

# JSON Patch 方式更新副本数
kubectl patch deployment nginx-deploy --type json -p '[{"op":"replace","path":"/spec/replicas","value":5}]'

# 添加注解
kubectl patch pod nginx-pod -p '{"metadata":{"annotations":{"key":"value"}}}'

# 从文件读取补丁
kubectl patch deployment nginx-deploy --patch-file update-patch.yaml

# 修补子资源(status)
kubectl patch deployment nginx-deploy --subresource=status -p '{"status":{"availableReplicas":3}}'

kubectl replace

已在第三章详细说明。

kubectl wait

功能作用:等待一个或多个资源满足指定条件(Condition)后才继续执行,或等待资源被创建/删除。此命令在自动化脚本和 CI/CD 流程中用于同步等待资源就绪,避免在资源尚未准备好时执行后续操作。

语法

text

复制代码
kubectl wait [--for=condition] [--for=create|delete] (TYPE NAME | -f FILENAME | -l label) [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 等待指定资源类型的所有资源满足条件
-A / --all-namespaces bool false 获取所有命名空间的资源
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--field-selector string "" 按字段值筛选
-f / --filename stringArray [] 指定文件名、目录或 URL
--for string "" 等待的条件 。支持两种格式:① condition=类型(如 condition=Ready)等待资源的 Condition 类型变为 Truecreatedelete 等待资源被创建或删除
--local bool false 仅本地处理而不发送到服务器
-o / --output string "" 输出格式
-R / --recursive bool false 递归处理目录
-l / --selector string "" 按标签选择器筛选
--template string "" Go 模板字符串
--timeout duration 30s 等待超时时间0s 表示仅检查一次立即返回;负值表示无限等待(最大 1 周)

常用 Condition 值

资源类型 常用 Condition
Pod ReadyInitializedContainersReadyPodScheduled
Deployment AvailableProgressing
Node ReadyMemoryPressureDiskPressurePIDPressure
Job CompleteFailed

常用示例

bash

复制代码
# 等待 Pod 变为 Ready
kubectl wait --for=condition=Ready pod/nginx-pod

# 等待所有符合条件的 Pod 变为 Ready(超时 5 分钟)
kubectl wait --for=condition=Ready pods -l app=nginx --timeout=5m

# 等待 Deployment 变为 Available
kubectl wait --for=condition=Available deployment/nginx-deploy

# 等待资源被创建
kubectl wait --for=create -f nginx-deployment.yaml

# 等待 Job 完成
kubectl wait --for=condition=Complete job/data-processor --timeout=10m

# 等待资源被删除
kubectl wait --for=delete pod/nginx-pod

# 等待节点变为 Ready
kubectl wait --for=condition=Ready node/worker-node-1

# 超时后退出(脚本中使用)
kubectl wait --for=condition=Ready pod/nginx-pod --timeout=60s || echo "Pod not ready within 60 seconds"

kubectl diff

功能作用 :比较当前集群中已部署资源的实时状态与应用 YAML 配置后理论状态的差异。这是一个非常实用的预检命令,可以在实际部署前预览变更内容,从而避免意外修改或部署错误。

语法

text

复制代码
kubectl diff -f FILENAME [flags]

参数列表

参数 类型 默认值 功能描述
--concurrency int 1 并行处理的对象数量。数值越大处理越快,但也会消耗更多内存
--field-manager string "kubectl-client-side-apply" 用于服务端试运行的字段管理器名称
-f / --filename stringArray [] 必需参数:包含资源定义的文件、目录或 URL
--force-conflicts bool false 在服务端应用模式下强制接管字段所有权冲突
-k / --kustomize string "" kustomization 目录路径
--prune bool false 在差异比较中包含修剪逻辑
--prune-allowlist stringArray [] 可被修剪的资源类型列表
-R / --recursive bool false 递归处理目录
-l / --selector string "" 按标签选择器筛选
--server-side bool false 使用服务端应用计算差异
--show-managed-fields bool false 显示字段所有权

退出状态码

退出码 含义
0 未发现差异(当前状态与配置一致)
1 发现差异(配置与当前状态不一致)
>1 执行过程中发生错误

常用示例

bash

复制代码
# 比较本地 YAML 与集群中已部署资源的差异
kubectl diff -f nginx-deployment.yaml

# 比较整个目录
kubectl diff -f ./manifests/

# 比较 kustomize 处理后的配置
kubectl diff -k ./kustomize/overlays/production/

# 服务端应用方式比较
kubectl diff -f deployment.yaml --server-side

kubectl kustomize

功能作用 :基于 kustomization.yaml 文件构建一组 Kubernetes 资源清单。kustomize 提供了一种无模板的配置定制方式,通过在基础配置之上叠加补丁、添加标签/注解、修改镜像等操作来生成不同环境的部署配置。自 Kubernetes 1.14 起,kustomize 已集成到 kubectl 中。

语法

text

复制代码
kubectl kustomize DIR [flags]

参数列表

参数 类型 默认值 功能描述
--as-current-user bool false 设置为 true 时,在 kustomization 构建中使用当前用户的 UID
--enable-alpha-plugins bool false 设置为 true 时,启用 alpha 阶段的 kustomize 插件
--enable-helm bool false 设置为 true 时,启用 Helm chart 膨胀支持
-e / --env stringArray [] 传递给 kustomize 的环境变量
--helm-command string "helm" Helm 可执行文件路径(--enable-helm 时有效)
--load-restrictor string "LoadRestrictionsRootOnly" 设置加载限制:"LoadRestrictionsRootOnly"(仅允许根目录加载)、"LoadRestrictionsNone"(无限制)
--mount stringArray [] 挂载目录映射(格式为 src:dest
--network bool false 设置为 true 时,允许网络访问
--network-name string "bridge" Docker 网络名称(--network 时有效)
-o / --output string "" 输出格式
--reorder string "legacy" 资源输出排序方式:"legacy""none"

常用示例

bash

复制代码
# 从当前目录构建 kustomize 配置
kubectl kustomize .

# 指定目录
kubectl kustomize ./kustomize/overlays/production/

# 将 kustomize 输出与 apply 结合
kubectl kustomize ./kustomize/overlays/staging/ | kubectl apply -f -

# 使用 kubectl apply -k 的简化方式
kubectl apply -k ./kustomize/overlays/production/

# 输出 YAML 格式预览
kubectl kustomize ./overlays/ --output yaml

kubectl config

功能作用 :管理 kubeconfig 配置文件。kubeconfig 定义了访问 Kubernetes 集群所需的集群地址、用户凭证和上下文信息。通过 config 命令可以查看当前配置、设置或切换集群/用户/上下文。

语法

text

复制代码
kubectl config SUBCOMMAND [flags]

子命令列表

子命令 说明
kubectl config current-context 显示当前使用的上下文名称
kubectl config delete-cluster 删除指定集群条目
kubectl config delete-context 删除指定上下文条目
kubectl config delete-user 删除指定用户条目
kubectl config get-clusters 列出所有集群
kubectl config get-contexts 列出所有上下文
kubectl config get-users 列出所有用户
kubectl config rename-context 重命名上下文
kubectl config set 设置 kubeconfig 中的单个属性值
kubectl config set-cluster 设置集群条目
kubectl config set-context 设置上下文条目
kubectl config set-credentials 设置用户条目
kubectl config unset 取消设置 kubeconfig 中的单个属性值
kubectl config use-context 切换当前上下文
kubectl config view 查看 kubeconfig 文件内容

常用示例

bash

复制代码
# 查看当前 kubeconfig 配置
kubectl config view

# 查看完整配置(含凭证)
kubectl config view --raw

# 查看当前上下文
kubectl config current-context

# 列出所有上下文
kubectl config get-contexts

# 切换上下文
kubectl config use-context my-cluster-admin

# 添加集群凭证(使用证书)
kubectl config set-cluster my-cluster --server=https://192.168.1.100:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt

# 添加用户凭证
kubectl config set-credentials admin-user --client-certificate=/etc/kubernetes/pki/admin.crt --client-key=/etc/kubernetes/pki/admin.key

# 设置上下文
kubectl config set-context my-context --cluster=my-cluster --user=admin-user --namespace=production

# 设置当前命名空间
kubectl config set-context --current --namespace=development

八、标签、注解与元数据管理

kubectl label

功能作用:为 Kubernetes 资源添加、修改或删除标签。标签是键值对,用于标识和组织资源,是 Kubernetes 资源选择器和调度决策的基础。

语法

text

复制代码
kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 选择指定资源类型的所有资源
-A / --all-namespaces bool false 选择所有命名空间的资源
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--dry-run string "none" 试运行模式
--field-manager string "kubectl-label" 字段所有权管理器名称
--field-selector string "" 按字段值筛选
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
--list bool false 设置为 true 时,以标签列表方式查看资源的标签
--local bool false 仅本地处理
-o / --output string "" 输出格式
--overwrite bool false 设置为 true 时,允许覆盖已存在的标签。默认情况下,如果标签已存在则操作会失败
-R / --recursive bool false 递归处理目录
--resource-version string "" 资源版本号前置条件
-l / --selector string "" 按标签选择器筛选
--show-managed-fields bool false 显示字段所有权
--template string "" Go 模板字符串

标签键名规则

  • 标签键和值必须以字母或数字开头

  • 可包含字母、数字、连字符(-)、点(.)和下划线(_),每个最多 63 个字符

  • 键可以选择以 DNS 子域前缀加斜杠(/)开头,如 example.com/my-app

常用示例

bash

复制代码
# 添加标签
kubectl label pod nginx-pod app=nginx

# 添加多个标签
kubectl label pod nginx-pod app=nginx env=production tier=frontend

# 覆盖已有标签(需要 --overwrite)
kubectl label pod nginx-pod app=nginx-v2 --overwrite

# 删除标签(在键名后加减号)
kubectl label pod nginx-pod env-

# 为节点添加标签(用于调度决策)
kubectl label node worker-node-1 disktype=ssd

# 通过文件批量添加标签
kubectl label -f ./manifests/ app=myapp

# 查看资源的标签
kubectl get pods --show-labels

# 使用标签选择器筛选
kubectl get pods -l app=nginx,env=production

kubectl annotate

功能作用:为 Kubernetes 资源添加、修改或删除注解(Annotation)。注解与标签类似,但可以存储更大体量、非结构化的数据(如结构化 JSON),通常用于工具和系统扩展存储元数据。注解中的信息不会被 Kubernetes 直接使用,而是供外部工具或用户读取。

语法

text

复制代码
kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [flags]

参数列表

参数 类型 默认值 功能描述
--all bool false 选择指定资源类型的所有资源
-A / --all-namespaces bool false 选择所有命名空间的资源
--allow-missing-template-keys bool true 模板中键缺失时忽略错误
--dry-run string "none" 试运行模式
--field-manager string "kubectl-annotate" 字段所有权管理器名称
--field-selector string "" 按字段值筛选
-f / --filename stringArray [] 指定文件名、目录或 URL
-k / --kustomize string "" kustomization 目录路径
--list bool false 以列表方式查看资源的注解
--local bool false 仅本地处理
-o / --output string "" 输出格式
--overwrite bool false 设置为 true 时,覆盖已存在的注解
-R / --recursive bool false 递归处理目录
--resource-version string "" 资源版本号前置条件
-l / --selector string "" 按标签选择器筛选
--template string "" Go 模板字符串

常用示例

bash

复制代码
# 添加注解
kubectl annotate pod nginx-pod description="Production nginx server"

# 添加多个注解
kubectl annotate pod nginx-pod team=platform contact=admin@example.com

# 覆盖已有注解
kubectl annotate pod nginx-pod description="Updated description" --overwrite

# 删除注解(在键名后加减号)
kubectl annotate pod nginx-pod description-

# 为 Deployment 添加注解
kubectl annotate deployment nginx-deploy kubernetes.io/change-cause="Deploy nginx 1.22"

# 添加结构化数据注解
kubectl annotate pod nginx-pod config='{"key":"value","env":"production"}'

九、调试与交互命令

kubectl exec

已在第三章详细说明。

kubectl logs

已在第三章详细说明。

kubectl debug

功能作用 :为集群中的工作负载和节点创建交互式调试会话。debug 命令通过在目标 Pod 中启动临时容器(Ephemeral Container)或在节点上创建调试 Pod 来实现故障排查。自 Kubernetes 1.27 起,此命令快速成为调试工作负载的标准方式。

语法

text

复制代码
kubectl debug (POD | TYPE[[.VERSION].GROUP]/NAME) [-- COMMAND] [flags]

参数列表

参数 类型 默认值 功能描述
--arguments-only bool false 设置为 true 时,-- 之后的参数作为新容器的 Args 传递(而非 Command)
--attach bool false 设置为 true 时,等待容器启动后附加到容器,与 -i/--stdin 配合使用
-c / --container string "" 目标容器名称
--copy-to string "" 创建目标 Pod 的副本用于调试。指定调试 Pod 名称前缀
--env stringArray [] 为调试容器设置环境变量
--image string "" 调试容器的镜像。如不指定,Kubernetes 会使用默认镜像或目标容器的镜像
--image-pull-policy string "" 镜像拉取策略:"Always""Never""IfNotPresent"
-q / --quiet bool false 设置为 true 时,抑制提示消息
--replace bool false 设置为 true 时,替换目标容器(而非添加临时容器)。⚠️ 可能中断服务
--same-node bool false 设置为 true 时,调试容器与目标 Pod 运行在同一节点上
--share-processes bool true 设置为 true 时,调试容器共享目标 Pod 的进程命名空间
-i / --stdin bool false 传递标准输入
--target string "" 设置调试容器要连接的目标容器进程命名空间
-t / --tty bool false 分配伪终端

常用示例

bash

复制代码
# 在运行中的 Pod 中启动调试容器(添加临时容器)
kubectl debug -it nginx-pod --image=busybox --target=nginx -- /bin/sh

# 创建 Pod 副本用于调试(复制并替换启动命令)
kubectl debug nginx-pod -it --copy-to=nginx-debug --image=busybox -- /bin/sh

# 调试节点(在节点上创建调试 Pod)
kubectl debug node/worker-node-1 -it --image=busybox -- /bin/sh

# 设置环境变量
kubectl debug nginx-pod -it --image=alpine --env="DEBUG=true" -- /bin/sh

# 共享进程命名空间
kubectl debug nginx-pod -it --image=busybox --share-processes --target=nginx -- /bin/sh

kubectl attach

功能作用 :附加到已运行在 Pod 容器中的进程的标准输入/输出/错误流。与 exec 的区别在于:attach 连接到容器的主进程(PID 1),而 exec 在容器内启动一个新进程。attach 主要用于查看已在运行的进程的输出或与之交互。

语法

text

复制代码
kubectl attach (POD | TYPE/NAME) -c CONTAINER [flags]

参数列表

参数 类型 默认值 功能描述
-c / --container string "" 容器名称。如果 Pod 只有一个容器,此参数可省略。多容器 Pod 中若未指定,则按照以下优先级选择:① kubectl.kubernetes.io/default-container 注解指定的容器 ② Pod 中的第一个容器
--pod-running-timeout duration 1m0s 等待 Pod 进入运行状态的最长时间
-i / --stdin bool false 设置为 true 时,将标准输入传递给容器
-q / --quiet bool false 设置为 true 时,抑制消息输出
-t / --tty bool false 分配伪终端

常用示例

bash

复制代码
# 附加到 Pod 的主容器
kubectl attach nginx-pod

# 交互式附加
kubectl attach -it nginx-pod

# 指定容器
kubectl attach nginx-pod -c sidecar-container

kubectl port-forward

功能作用 :将本地机器的一个或多个端口转发到 Pod(或 Service)的指定端口。port-forward 创建的隧道可以直接从本地访问集群内部的 Pod,无需通过 Ingress、NodePort 或 LoadBalancer。这对于调试数据库、内部 API 或测试服务非常有用。

语法

text

复制代码
kubectl port-forward (TYPE/NAME | -f FILENAME | -l label) [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]

参数列表

参数 类型 默认值 功能描述
--address string "localhost" 绑定监听的地址列表(逗号分隔)。取值仅接受 IP 地址或 localhost。当设置为 0.0.0.0 时监听所有网络接口,⚠️ 注意安全风险
--pod-running-timeout duration 1m0s 等待 Pod 运行的最长时间
--remote-address string "" 远程 Pod 上绑定的地址(可选)
--stream-connection-idle-timeout duration 0s 空闲连接的超时时间。0s 表示 4 小时默认值

⚠️ 前置条件 :使用 port-forward 时,目标节点上必须安装 socat 工具。
OpenEuler 提示 :在 OpenEuler 24.03 SP3 上执行 yum install -y socat 安装即可。

常用示例

bash

复制代码
# 转发本地端口到 Pod 端口(格式:本地端口:Pod端口)
kubectl port-forward pod/nginx-pod 8080:80

# 转发到 Service
kubectl port-forward svc/nginx-svc 8080:80

# 转发多个端口
kubectl port-forward pod/my-pod 8080:80 8443:443

# 监听所有网络接口(允许外部访问)
kubectl port-forward pod/nginx-pod 8080:80 --address=0.0.0.0

# 后台运行端口转发
kubectl port-forward pod/nginx-pod 8080:80 &

# 通过 Deployment 选择 Pod
kubectl port-forward deployment/nginx-deploy 8080:80

# 设置空闲连接超时
kubectl port-forward pod/nginx-pod 8080:80 --stream-connection-idle-timeout=15m

kubectl proxy

功能作用 :在本地主机和 Kubernetes API Server 之间创建一个 HTTP 代理服务器。通过此代理,可以使用 curlwget 等工具直接访问 Kubernetes API,而无需处理 TLS 证书和认证细节。同时,代理还支持通过 HTTP 路径提供静态文件服务。

语法

text

复制代码
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]

参数列表

参数 类型 默认值 功能描述
--accept-hosts string "^localhost$,^127\\.0\\.0\\.1$,^\\[::1\\]$" 代理接受的请求主机名的正则表达式。用于防止 DNS 重绑定攻击
--accept-paths string "^.*" 代理接受的路径正则表达式。用于限制代理可访问的 API 路径
--address string "127.0.0.1" 代理服务器的监听 IP 地址。设置为 0.0.0.0 时监听所有接口
--api-prefix string "/" 代理到 API Server 的路径前缀。默认为 / 即代理全部 API
--disable-filter bool false 设置为 true 时,禁用请求过滤(转发所有请求)
--keepalive duration 0s 设置 HTTP 连接的 Keep-Alive 时间。0s 表示 60 秒默认值
-p / --port int 8001 代理服务器监听的端口号。设置为 0 则随机选择端口
--reject-methods string "" 拒绝的 HTTP 方法正则表达式(如 "POST,PUT,PATCH"
--reject-paths string "^/api/.\*/pods/.\*/exec,^/api/.\*/pods/.\*/attach" 拒绝的路径正则表达式(默认拒绝 exec 和 attach)
-u / --unix-socket string "" 使用 Unix 套接字替代 TCP 端口
-w / --www string "" 提供静态文件服务的目录路径
-P / --www-prefix string "/static/" 静态文件服务的 URL 前缀(追加在 /static/ 后)

常用示例

bash

复制代码
# 启动 API 代理(默认端口 8001)
kubectl proxy

# 指定端口
kubectl proxy --port=8080

# 后台运行代理
kubectl proxy --port=8001 &

# 监听所有接口(允许其他机器访问)
kubectl proxy --address=0.0.0.0 --port=8001 --accept-hosts='.*'

# 启动代理后通过 curl 访问 API
curl http://localhost:8001/api/v1/namespaces/default/pods

# 同时提供静态文件服务
kubectl proxy --www=/var/www/html --www-prefix=/docs/

# 仅代理特定 API 前缀
kubectl proxy --api-prefix=/api/

# 使用 Unix 套接字
kubectl proxy --unix-socket=/tmp/kubectl-proxy.sock

十、认证与安全命令

kubectl auth

功能作用 :提供 Kubernetes RBAC 权限检查和规则协调工具。主要子命令包括:can-i(检查当前用户是否有权限执行某操作)和 reconcile(协调 RBAC 对象的规则)。

语法

text

复制代码
kubectl auth SUBCOMMAND [flags]

主要子命令

子命令 说明
kubectl auth can-i 检查当前用户(或伪装用户)是否有权限执行指定的操作
kubectl auth reconcile 协调 RBAC 角色、角色绑定、集群角色和集群角色绑定对象的规则
kubectl auth whoami 实验性功能:检查当前身份和属性(组、额外信息等)

kubectl auth can-i 参数

参数 类型 默认值 功能描述
-A / --all-namespaces bool false 检查所有命名空间的权限
--list bool false 设置为 true 时,列出所有允许的操作(而非检查单个操作)
--no-headers bool false 不显示表头
-q / --quiet bool false 设置为 true 时,仅返回退出码而不打印提示消息(静默模式)
--subresource string "" 检查子资源的权限,如 pods/logpods/exec

常用示例

bash

复制代码
# 检查是否有权限创建 Pod
kubectl auth can-i create pods

# 检查特定命名空间的权限
kubectl auth can-i create deployments -n production

# 检查是否有权限执行任意操作
kubectl auth can-i '*' '*' -A

# 检查子资源权限
kubectl auth can-i get pods/log

# 列出所有允许的操作
kubectl auth can-i --list

# 静默模式(仅返回退出码用于脚本判断)
kubectl auth can-i delete nodes -q && echo "Allowed" || echo "Denied"

# 检查伪装用户的权限
kubectl auth can-i get pods --as=developer --as-group=dev-team

# 查看当前用户身份信息
kubectl auth whoami

# 协调 RBAC 规则
kubectl auth reconcile -f rbac-rules.yaml

kubectl certificate

功能作用:管理 Kubernetes 证书签名请求(CertificateSigningRequest, CSR)资源。主要用于批准或拒绝用户的证书签名请求,这是 Kubernetes 证书管理流程的核心环节。

语法

text

复制代码
kubectl certificate SUBCOMMAND [flags]

子命令列表

子命令 说明
kubectl certificate approve 批准指定的证书签名请求
kubectl certificate deny 拒绝指定的证书签名请求

常用示例

bash

复制代码
# 批准 CSR
kubectl certificate approve my-csr

# 拒绝 CSR
kubectl certificate deny my-csr

# 查看 CSR 列表
kubectl get csr

# 查看 CSR 详情
kubectl describe csr my-csr

十一、扩展与辅助命令

kubectl completion

功能作用:为指定的 Shell(bash、zsh、fish 或 powershell)输出自动补全脚本。启用后可以在输入 kubectl 命令时按 Tab 键自动补全命令、资源类型、参数和资源名称,极大提升命令行工作效率。

语法

text

复制代码
kubectl completion SHELL [flags]

支持的 Shell

Shell 安装方式
Bash bash source <(kubectl completion bash)
Zsh zsh source <(kubectl completion zsh)
Fish fish kubectl completion fish > ~/.config/fish/completions/kubectl.fish
PowerShell powershell kubectl completion powershell > $HOME\.kube\completion.ps1

常用示例

bash

复制代码
# Bash 自动补全(临时生效)
source <(kubectl completion bash)

# Bash 自动补全(永久生效)
kubectl completion bash >> ~/.bashrc
echo 'source <(kubectl completion bash)' >> ~/.bashrc

# Zsh 自动补全
echo 'source <(kubectl completion zsh)' >> ~/.zshrc

# Fish 自动补全
kubectl completion fish > ~/.config/fish/completions/kubectl.fish

# PowerShell 自动补全
kubectl completion powershell > $HOME\.kube\completion.ps1

kubectl plugin

功能作用 :提供与 kubectl 插件交互的实用程序。插件通过可执行文件扩展 kubectl 的功能,只要将文件名以 kubectl- 开头的可执行文件放置到 PATH 中即可自动被识别。

语法

text

复制代码
kubectl plugin [flags]

子命令

子命令 说明
kubectl plugin list 列出当前 PATH 中所有可用的插件文件

kubectl plugin list 参数

参数 类型 默认值 功能描述
--name-only bool false 设置为 true 时,仅显示每个插件的二进制名称而不显示完整路径

常用示例

bash

复制代码
# 列出所有可用的 kubectl 插件
kubectl plugin list

# 仅显示插件名称
kubectl plugin list --name-only

常见 kubectl 插件示例

  • kubectl-view-allocations: 可视化集群资源分配

  • kubectl-tree: 以树状结构展示资源依赖关系

  • kubectl-whoami: 查看当前认证用户信息

  • kubectl-neat: 清理 Kubernetes YAML 输出中的冗余字段

十二、补充命令

kubectl cp

功能作用 :在本地文件系统和 Pod 容器之间复制文件和目录。类似于 Unix 的 cp 命令,但支持跨网络在本地和远程容器之间传输文件。

语法

text

复制代码
kubectl cp <file-spec-src> <file-spec-dest> [flags]

参数列表

参数 类型 默认值 功能描述
-c / --container string "" 指定容器名称。若 Pod 只有一个容器则可选。若未指定,按照以下优先级选择:① kubectl.kubernetes.io/default-container 注解指定的容器 ② Pod 中的第一个容器
--no-preserve bool false 设置为 true 时,不保留被复制文件的所有权和权限(UID/GID 信息)
--retries int 0 设置从容器复制文件时的重试次数。0 表示不重试,负值表示无限重试。默认值为 0

文件路径格式说明

来源/目标 路径格式 示例
本地文件 /path/to/file /tmp/local-file.txt
Pod 中文件 <namespace>/<pod>:/path/to/file default/nginx-pod:/var/log/nginx/access.log
Pod 中文件(简化) <pod>:/path/to/file nginx-pod:/etc/nginx/nginx.conf
指定容器 -c <container> <pod>:/path -c sidecar nginx-pod:/var/log/app.log

常用示例

bash

复制代码
# 从本地复制文件到 Pod
kubectl cp /tmp/local-file.txt default/nginx-pod:/tmp/

# 从 Pod 复制文件到本地
kubectl cp default/nginx-pod:/var/log/nginx/access.log /tmp/access.log

# 复制目录
kubectl cp /tmp/local-dir nginx-pod:/tmp/

# 指定容器
kubectl cp nginx-pod:/var/log/app.log ./app.log -c sidecar-container

# 跨命名空间
kubectl cp production/nginx-pod:/etc/nginx/nginx.conf ./nginx.conf

# 不保留文件权限
kubectl cp nginx-pod:/tmp/data.csv ./data.csv --no-preserve

# 设置重试次数
kubectl cp nginx-pod:/var/log/error.log ./error.log --retries=5

kubectl set

功能作用:配置应用程序资源的特定属性。提供了一组子命令,用于快速修改 Deployment、DaemonSet、StatefulSet 等资源的镜像、资源限制、环境变量、ServiceAccount 等配置。

子命令列表

子命令 说明
kubectl set image 更新 Pod 模板中的容器镜像
kubectl set resources 更新 Pod 模板中容器的资源请求/限制
kubectl set env 更新 Pod 模板中容器的环境变量
kubectl set serviceaccount 更新资源的 ServiceAccount
kubectl set selector 更新资源的标签选择器
kubectl set subject 更新 RoleBinding 或 ClusterRoleBinding 中的 Subject

常用示例

bash

复制代码
# 更新 Deployment 的容器镜像
kubectl set image deployment/nginx-deploy nginx=nginx:1.22

# 更新多个容器的镜像
kubectl set image deployment/app-deploy app=app:v2 sidecar=sidecar:v1

# 更新资源的 CPU/内存限制
kubectl set resources deployment/nginx-deploy --limits=cpu=500m,memory=512Mi --requests=cpu=200m,memory=256Mi

# 更新环境变量
kubectl set env deployment/nginx-deploy ENV=production LOG_LEVEL=debug

# 删除环境变量
kubectl set env deployment/nginx-deploy ENV-

# 从 Secret 导入环境变量
kubectl set env deployment/nginx-deploy --from=secret/my-secret

# 更新 ServiceAccount
kubectl set serviceaccount deployment/nginx-deploy nginx-sa

# 查看资源使用情况
kubectl set resources deployment/nginx-deploy --dry-run=client -o yaml

十三、命令速查表

以下表格按使用频率和场景整理常用命令速查:

使用场景 命令
查看集群信息 kubectl cluster-info
查看版本 kubectl version
查看支持的资源 kubectl api-resources
查看 API 版本 kubectl api-versions
查看节点列表 kubectl get nodes
查看 Pod 列表 kubectl get pods / kubectl get pods -A / kubectl get pods -o wide
查看 Pod 详情 kubectl describe pod <pod-name>
查看 Pod 日志 kubectl logs -f <pod-name>
进入 Pod 内部 kubectl exec -it <pod-name> -- /bin/bash
创建资源 kubectl create -f <file.yaml>kubectl apply -f <file.yaml>
更新资源 kubectl apply -f <file.yaml> (推荐)/ kubectl edit / kubectl patch
删除资源 kubectl delete -f <file.yaml> / kubectl delete pod <name>
扩缩容 kubectl scale deployment/<name> --replicas=N
自动扩缩容 kubectl autoscale deployment/<name> --min=N --max=M --cpu-percent=P
回滚版本 kubectl rollout undo deployment/<name>
查看更新状态 kubectl rollout status deployment/<name>
节点维护 kubectl cordon <node>kubectl drain <node> --ignore-daemonsets → 维护 → kubectl uncordon <node>
查看资源使用 kubectl top nodes / kubectl top pods
端口转发 kubectl port-forward pod/<name> <local>:<remote>
管理标签 kubectl label pod <name> key=value
管理注解 kubectl annotate pod <name> key=value
权限检查 kubectl auth can-i <verb> <resource>
查看事件 kubectl events -A / kubectl events --for pod/<name>
等待条件 kubectl wait --for=condition=Ready pod/<name>
配置预览 kubectl diff -f <file.yaml>

十四、实用技巧与最佳实践

14.1 高效使用 kubectl 的技巧

  1. 启用自动补全 :执行 source <(kubectl completion bash) 并添加到 ~/.bashrc,大幅提升输入效率。

  2. 使用别名 :在 ~/.bashrc 中添加 alias k='kubectl',用一个字母替代完整命令。

  3. 使用缩写 :熟练使用资源类型缩写,如 po(pods)、svc(services)、deploy(deployments)。

  4. 善用 dry-run :在执行变更前使用 --dry-run=client 试运行,结合 -o yaml 输出预览最终配置。

  5. 使用 sort-by 排序--sort-by='.metadata.creationTimestamp' 按时间查看最近创建的资源。

  6. 善用 jsonpath :通过 -o jsonpath='{...}' 精准提取所需字段,适合脚本和自动化处理。

14.2 OpenEuler 环境注意事项

注意事项 说明
关闭防火墙 systemctl stop firewalld && systemctl disable firewalld(测试环境)
关闭 SELinux setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config(测试环境)
关闭 Swap swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
安装 socat yum install -y socat(port-forward 依赖)
安装 Metrics Server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml(top 命令依赖)
相关推荐
LSL666_2 小时前
3 安装docker
运维·docker·容器
小江的记录本2 小时前
【微服务与云原生架构】DevOps、CI/CD流水线、GitOps 系统性知识体系
分布式·后端·ci/cd·微服务·云原生·架构·devops
LSL666_3 小时前
4 Docker 镜像安装与容器启动
运维·docker·容器
wuxinyan1234 小时前
Java面试题51:一文深入了解K8s 环境下企业级 CI/CD 流水线搭建
java·ci/cd·kubernetes·面试题
安逸sgr4 小时前
Hermes Agent + Obsidian 打造第二大脑(三):Docker 部署详解——从零到生产环境的完整实战指南!
运维·docker·容器·obsidian·hermes·hermesagent
小夏子_riotous5 小时前
Docker学习路径——9、Docker 网络深度解析:从默认网络到自定义网络实战
linux·运维·网络·docker·容器·centos·云计算
步步为营DotNet5 小时前
.NET 11 与 C# 14 助力云原生应用安全架构升级
云原生·c#·.net
身如柳絮随风扬5 小时前
Kubernetes v1.24 从入门到实战:核心概念与集群管理详解
云原生·容器·kubernetes
剩下了什么6 小时前
微服务入门介绍
微服务·云原生·架构