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 |
操作指令,如 get、create、delete、describe、apply 等 |
TYPE |
资源类型(不区分大小写),支持单数、复数及缩写形式,如 pod/pods/po |
NAME |
资源对象的名称,名称区分大小写;省略时列出该类型的所有资源 |
flags |
可选参数标识,如 -n namespace 指定命名空间、-o wide 指定扩展输出格式 |
1.3 命令分类概览
根据官方文档,kubectl 命令按功能分为以下几大类:
| 类别 | 命令 | 说明 |
|---|---|---|
| 基础命令(初级) | create、expose、run、set |
资源的创建与管理 |
| 基础命令(中级) | explain、get、edit、delete |
资源的查看、编辑、删除 |
| 部署命令 | rollout、scale、autoscale |
管理 Deployment 的发布与扩缩容 |
| 集群管理命令 | cluster-info、top、cordon、uncordon、drain、taint |
集群信息查看与节点管理 |
| 故障排除与调试命令 | describe、logs、attach、exec、port-forward、events、debug |
资源状态诊断与 Pod 交互 |
| 高级命令 | apply、patch、replace、diff、wait、kustomize |
声明式管理与高级配置 |
| 设置命令 | label、annotate、completion |
标签与注解管理 |
| 身份认证命令 | auth、certificate |
权限与证书管理 |
| 其他命令 | api-resources、api-versions、config、plugin、version、options |
工具与系统信息 |
二、全局参数(通用选项)
所有 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" |
放弃单个服务器请求之前等待的时间长度。非零值应包含时间单位(如 1s、2m、3h)。零值表示不设置超时 |
--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(仅资源名称)、json、yaml 等 |
--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 来标识要获取的资源。通常与 create 或 apply 结合使用来预览资源 |
--ignore-not-found |
bool | false |
如果请求的对象不存在,命令返回退出码 0(表示无错误)。适用于脚本中条件性地检查资源存在性 |
-k / --kustomize |
string | "" |
指定 kustomization.yaml 目录路径,处理 kustomization 目录中定义的资源并输出。与 -o 配合使用可预览最终配置 |
-L / --label-columns |
stringArray | [] |
在输出中追加显示指定标签的列。例如 -L app,env 会在输出中增加 APP 和 ENV 列 |
--no-headers |
bool | false |
设置为 true 时,输出中不打印列标题。适用于将输出传递给其他命令进行进一步处理 |
-o / --output |
string | "" |
指定输出格式:json、yaml、wide、name、custom-columns、custom-columns-file、go-template、go-template-file、jsonpath、jsonpath-as-json、jsonpath-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 |
仅返回指定时间段内的日志,支持相对时间(如 5s、2m、3h)。设置为 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 | "" |
输出格式:json、yaml、name、go-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_EDITOR 或 EDITOR 环境变量决定(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" |
端口协议:TCP、UDP、SCTP |
-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 | "" |
按指定字段排序,如 cpu、memory |
--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 | "" |
按指定字段排序,如 cpu、memory |
--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 | "" |
输出格式:json、yaml |
--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)。使用 op、path、value 三元组精确描述操作 |
常用示例:
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 类型变为 True ② create 或 delete 等待资源被创建或删除 |
--local |
bool | false |
仅本地处理而不发送到服务器 |
-o / --output |
string | "" |
输出格式 |
-R / --recursive |
bool | false |
递归处理目录 |
-l / --selector |
string | "" |
按标签选择器筛选 |
--template |
string | "" |
Go 模板字符串 |
--timeout |
duration | 30s |
等待超时时间 。0s 表示仅检查一次立即返回;负值表示无限等待(最大 1 周) |
常用 Condition 值:
| 资源类型 | 常用 Condition |
|---|---|
| Pod | Ready、Initialized、ContainersReady、PodScheduled |
| Deployment | Available、Progressing |
| Node | Ready、MemoryPressure、DiskPressure、PIDPressure |
| Job | Complete、Failed |
常用示例:
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 代理服务器。通过此代理,可以使用 curl、wget 等工具直接访问 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/log、pods/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 的技巧
-
启用自动补全 :执行
source <(kubectl completion bash)并添加到~/.bashrc,大幅提升输入效率。 -
使用别名 :在
~/.bashrc中添加alias k='kubectl',用一个字母替代完整命令。 -
使用缩写 :熟练使用资源类型缩写,如
po(pods)、svc(services)、deploy(deployments)。 -
善用 dry-run :在执行变更前使用
--dry-run=client试运行,结合-o yaml输出预览最终配置。 -
使用 sort-by 排序 :
--sort-by='.metadata.creationTimestamp'按时间查看最近创建的资源。 -
善用 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 命令依赖) |