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 | 操作指令,如 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 命令依赖) |
更多推荐


所有评论(0)