1 - 词汇表
2 - API 概述
本文提供了 Kubernetes API 的参考信息。
REST API 是 Kubernetes 的基本结构。
所有操作和组件之间的通信及外部用户命令都是调用 API 服务器处理的 REST API。
因此,Kubernetes 平台视一切皆为 API 对象,
且它们在 API 中有相应的定义。
Kubernetes API 参考
列出了 Kubernetes v1.31 版本的 API。
如需了解一般背景信息,请查阅 Kubernetes API 。
Kubernetes API 控制访问 描述了客户端如何向
Kubernetes API 服务器进行身份认证以及他们的请求如何被鉴权。
API 版本控制
JSON 和 Protobuf 序列化模式遵循相同的模式更改原则。
以下描述涵盖了这两种格式。
API 版本控制和软件版本控制是间接相关的。
API 和发布版本控制提案 描述了
API 版本控制和软件版本控制间的关系。
不同的 API 版本代表着不同的稳定性和支持级别。
你可以在 API 变更文档
中查看到更多的不同级别的判定标准。
下面是每个级别的摘要:
Alpha:
版本名称包含 alpha
(例如:v1alpha1
)。
内置的 Alpha API 版本默认被禁用且必须在 kube-apiserver
配置中显式启用才能使用。
软件可能会有 Bug。启用某个特性可能会暴露出 Bug。
对某个 Alpha API 特性的支持可能会随时被删除,恕不另行通知。
API 可能在以后的软件版本中以不兼容的方式更改,恕不另行通知。
由于缺陷风险增加和缺乏长期支持,建议该软件仅用于短期测试集群。
Beta:
版本名称包含 beta
(例如:v2beta3
)。
内置的 Beta API 版本默认被禁用且必须在 kube-apiserver
配置中显式启用才能使用
(例外情况是 Kubernetes 1.22 之前引入的 Beta 版本的 API,这些 API 默认被启用)。
内置 Beta API 版本从引入到弃用的最长生命周期为 9 个月或 3 个次要版本(以较长者为准),
从弃用到移除的最长生命周期为 9 个月或 3 个次要版本(以较长者为准)。
软件被很好的测试过。启用某个特性被认为是安全的。
尽管一些特性会发生细节上的变化,但它们将会被长期支持。
在随后的 Beta 版或 Stable 版中,对象的模式和(或)语义可能以不兼容的方式改变。
当这种情况发生时,将提供迁移说明。
适配后续的 Beta 或 Stable API 版本可能需要编辑或重新创建 API 对象,这可能并不简单。
对于依赖此功能的应用程序,可能需要停机迁移。
该版本的软件不建议生产使用。
后续发布版本可能会有不兼容的变动。
一旦 Beta API 版本被弃用且不再提供服务,
则使用 Beta API 版本的用户需要转为使用后续的 Beta 或 Stable API 版本。
说明:
请尝试 Beta 版时特性时并提供反馈。
特性完成 Beta 阶段测试后,就可能不会有太多的变更了。
Stable:
版本名称如 vX
,其中 X
为整数。
特性的 Stable 版本会出现在后续很多版本的发布软件中。
Stable API 版本仍然适用于 Kubernetes 主要版本范围内的所有后续发布,
并且 Kubernetes 的主要版本当前没有移除 Stable API 的修订计划。
API 组
API 组 能够简化对
Kubernetes API 的扩展。API 组信息出现在 REST 路径中,也出现在序列化对象的 apiVersion
字段中。
以下是 Kubernetes 中的几个组:
核心(core) (也被称为 legacy )组的 REST 路径为 /api/v1
。
核心组并不作为 apiVersion
字段的一部分,例如, apiVersion: v1
。
指定的组位于 REST 路径 /apis/$GROUP_NAME/$VERSION
,
并且使用 apiVersion: $GROUP_NAME/$VERSION
(例如,apiVersion: batch/v1
)。
你可以在 Kubernetes API 参考文档
中查看全部的 API 组。
启用或禁用 API 组
资源和 API 组是在默认情况下被启用的。
你可以通过在 API 服务器上设置 --runtime-config
参数来启用或禁用它们。
--runtime-config
参数接受逗号分隔的 <key>[=<value>]
对,
来描述 API 服务器的运行时配置。如果省略了 =<value>
部分,那么视其指定为 =true
。
例如:
禁用 batch/v1
,对应参数设置 --runtime-config=batch/v1=false
启用 batch/v2alpha1
,对应参数设置 --runtime-config=batch/v2alpha1
要启用特定版本的 API,如 storage.k8s.io/v1beta1/csistoragecapacities
,可以设置
--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities
说明:
启用或禁用组或资源时,
你需要重启 API 服务器和控制器管理器来使 --runtime-config
生效。
持久化
Kubernetes 通过 API 资源来将序列化的状态写到 etcd 中存储。
接下来
2.1 - Kubernetes API 概念
Kubernetes API 是通过 HTTP 提供的基于资源 (RESTful) 的编程接口。
它支持通过标准 HTTP 动词(POST、PUT、PATCH、DELETE、GET)检索、创建、更新和删除主要资源。
对于某些资源,API 包括额外的子资源,允许细粒度授权(例如:将 Pod 的详细信息与检索日志分开),
为了方便或者提高效率,可以以不同的表示形式接受和服务这些资源。
Kubernetes 支持通过 watch 实现高效的资源变更通知:
在 Kubernetes API 中,watch 的是 用于以流的形式跟踪 Kubernetes 中对象更改的动词。
它用于高效检测更改。
Kubernetes 还提供一致的列表操作,以便 API 客户端可以有效地缓存、跟踪和同步资源的状态。
你可以在线查看 API 参考 ,
或继续阅读以了解 API 的一般信息。
Kubernetes API 术语
Kubernetes 通常使用常见的 RESTful 术语来描述 API 概念:
资源类型(Resource Type) 是 URL 中使用的名称(pods
、namespaces
、services
)
所有资源类型都有一个具体的表示(它们的对象模式),称为 类别(Kind)
资源类型的实例的列表称为 集合(Collection)
资源类型的单个实例称为 资源(Resource) ,通常也表示一个 对象(Object)
对于某些资源类型,API 包含一个或多个 子资源(sub-resources) ,这些子资源表示为资源下的 URI 路径
大多数 Kubernetes API
资源类型都是对象 :
它们代表集群上某个概念的具体实例,例如 Pod 或名字空间。
少数 API 资源类型是“虚拟的”,它们通常代表的是操作而非对象本身,
例如权限检查(使用带有 JSON 编码的 SubjectAccessReview
主体的 POST 到 subjectaccessreviews
资源),
或 Pod 的子资源 eviction
(用于触发 API 发起的驱逐 )。
对象名字
你可以通过 API 创建的所有对象都有一个唯一的名字 ,
以允许幂等创建和检索,
但如果虚拟资源类型不可检索或不依赖幂等性,则它们可能没有唯一名称。
在名字空间 内,
同一时刻只能有一个给定类别的对象具有给定名称。
但是,如果你删除该对象,你可以创建一个具有相同名称的新对象。
有些对象没有名字空间(例如:节点),因此它们的名称在整个集群中必须是唯一的。
API 动词
几乎所有对象资源类型都支持标准 HTTP 动词 - GET、POST、PUT、PATCH 和 DELETE。
Kubernetes 也使用自己的动词,这些动词通常写成小写,以区别于 HTTP 动词。
Kubernetes 使用术语 list 来描述返回资源集合 ,
以区别于通常称为 get 的单个资源检索。
如果你发送带有 ?watch
查询参数的 HTTP GET 请求,
Kubernetes 将其称为 watch 而不是 get (有关详细信息,请参阅快速检测更改 )。
对于 PUT 请求,Kubernetes 在内部根据现有对象的状态将它们分类为 create 或 update 。
update 不同于 patch ;patch 的 HTTP 动词是 PATCH。
资源 URI
所有资源类型要么是集群作用域的(/apis/GROUP/VERSION/*
),
要么是名字空间作用域的(/apis/GROUP/VERSION/namespaces/NAMESPACE/*
)。
名字空间作用域的资源类型会在其名字空间被删除时也被删除,
并且对该资源类型的访问是由定义在名字空间域中的授权检查来控制的。
注意: 核心资源使用 /api
而不是 /apis
,并且不包含 GROUP 路径段。
例如:
/api/v1/namespaces
/api/v1/pods
/api/v1/namespaces/my-namespace/pods
/apis/apps/v1/deployments
/apis/apps/v1/namespaces/my-namespace/deployments
/apis/apps/v1/namespaces/my-namespace/deployments/my-deployment
你还可以访问资源集合(例如:列出所有 Node)。以下路径用于检索集合和资源:
集群作用域的资源:
GET /apis/GROUP/VERSION/RESOURCETYPE
- 返回指定资源类型的资源的集合
GET /apis/GROUP/VERSION/RESOURCETYPE/NAME
- 返回指定资源类型下名称为 NAME 的资源
名字空间作用域的资源:
GET /apis/GROUP/VERSION/RESOURCETYPE
- 返回所有名字空间中指定资源类型的全部实例的集合
GET /apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE
-
返回名字空间 NAMESPACE 内给定资源类型的全部实例的集合
GET /apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE/NAME
-
返回名字空间 NAMESPACE 中给定资源类型的名称为 NAME 的实例
由于名字空间本身是一个集群作用域的资源类型,你可以通过 GET /api/v1/namespaces/
检视所有名字空间的列表(“集合”),使用 GET /api/v1/namespaces/NAME
查看特定名字空间的详细信息。
集群作用域的子资源:GET /apis/GROUP/VERSION/RESOURCETYPE/NAME/SUBRESOURCE
名字空间作用域的子资源:GET /apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE/NAME/SUBRESOURCE
取决于对象是什么,每个子资源所支持的动词有所不同 - 参见 API 文档 以了解更多信息。
跨多个资源来访问其子资源是不可能的 - 如果需要这一能力,则通常意味着需要一种新的虚拟资源类型了。
HTTP 媒体类型
通过 HTTP,Kubernetes 支持 JSON 和 Protobuf 网络编码格式。
默认情况下,Kubernetes 使用 application/json
媒体类型以 JSON 序列化 返回对象。
虽然 JSON 是默认类型,但客户端可以用 YAML 请求响应,或使用更高效的二进制
Protobuf 表示 ,以便在大规模环境中获得更好的性能。
Kubernetes API 实现了标准的 HTTP 内容类型协商:
使用 GET
调用传递 Accept
头时将请求服务器尝试以你首选的媒体类型返回响应。
如果你想通过 PUT
或 POST
请求将对象以 Protobuf 发送到服务器,则必须相应地设置 Content-Type
请求头。
如果你请求了可用的媒体类型,API 服务器会以合适的 Content-Type
返回响应;
如果你请求的媒体类型都不被支持,API 服务器会返回 406 Not acceptable
错误消息。
所有内置资源类型都支持 application/json
媒体类型。
JSON 资源编码
Kubernetes API 默认使用 JSON 来编码 HTTP 消息体。
例如:
在不指定首选格式的情况下,列举集群中的所有 Pod:
GET /api/v1/pods
200 OK
Content-Type: application/json
… JSON 编码的 Pod 集合(PodList 对象)
通过向服务器发送 JSON 并请求 JSON 响应来创建 Pod。
POST /api/v1/namespaces/test/pods
Content-Type: application/json
Accept: application/json
… JSON 编码的 Pod 对象
200 OK
Content-Type: application/json
{
"kind": "Pod",
"apiVersion": "v1",
…
}
YAML 资源编码
Kubernetes 还支持 application/yaml
媒体类型用于请求和响应。YAML
可用于定义 Kubernetes 清单和 API 交互。
例如:
以 YAML 格式列举集群上的所有 Pod:
GET /api/v1/pods
Accept: application/yaml
200 OK
Content-Type: application/yaml
… YAML 编码的 Pod 集合(PodList 对象)
通过向服务器发送 YAML 编码的数据并请求 YAML 响应来创建 Pod:
POST /api/v1/namespaces/test/pods
Content-Type: application/yaml
Accept: application/yaml
… YAML 编码的 Pod 对象
200 OK
Content-Type: application/yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
…
Kubernetes Protobuf 编码
Kubernetes 使用封套形式来对 Protobuf 响应进行编码。
封套外层由 4 个字节的特殊数字开头,便于从磁盘文件或 etcd 中辩识 Protobuf
格式的(而不是 JSON)数据。这个 4 字节的特殊数字后跟一个 Protobuf 编码的封套消息,
此消息描述了下层对象的编码和类型。在 Protobuf 封套消息中,内部对象数据使用 Unknown 的
raw
字段进行记录(有关细节参见 IDL )。
例如:
以 Protobuf 格式列举集群中的所有 Pod。
GET /api/v1/pods
Accept: application/vnd.kubernetes.protobuf
200 OK
Content-Type: application/vnd.kubernetes.protobuf
… JSON 编码的 Pod 集合(PodList 对象)
通过向服务器发送 Protobuf 编码的数据创建 Pod,但请求以 JSON 形式接收响应:
POST /api/v1/namespaces/test/pods
Content-Type: application/vnd.kubernetes.protobuf
Accept: application/json
… 二进制编码的 Pod 对象
200 OK
Content-Type: application/json
{
"kind": "Pod",
"apiVersion": "v1",
...
}
你可以将这两种技术结合使用,利用 Kubernetes 的 Protobuf 编码与所有支持的 API 进行读写交互。
只有某些 API 资源类型与 Protobuf 兼容 。
封套格式如下:
四个字节的特殊数字前缀:
字节 0-3: "k8s\x00" [0x6b, 0x38, 0x73, 0x00]
使用下面 IDL 来编码的 Protobuf 消息:
message Unknown {
// typeMeta 应该包含 "kind" 和 "apiVersion" 的字符串值,就像
// 对应的 JSON 对象中所设置的那样
optional TypeMeta typeMeta = 1;
// raw 中将保存用 protobuf 序列化的完整对象。
// 参阅客户端库中为指定 kind 所作的 protobuf 定义
optional bytes raw = 2;
// contentEncoding 用于 raw 数据的编码格式。未设置此值意味着没有特殊编码。
optional string contentEncoding = 3;
// contentType 包含 raw 数据所采用的序列化方法。
// 未设置此值意味着 application/vnd.kubernetes.protobuf,且通常被忽略
optional string contentType = 4;
}
message TypeMeta {
// apiVersion 是 type 对应的组名/版本
optional string apiVersion = 1;
// kind 是对象模式定义的名称。此对象应该存在一个 protobuf 定义。
optional string kind = 2;
}
说明:
收到 application/vnd.kubernetes.protobuf
格式响应的客户端在响应与预期的前缀不匹配时应该拒绝响应,
因为将来的版本可能需要以某种不兼容的方式更改序列化格式,并且这种更改是通过变更前缀完成的。
与 Kubernetes Protobuf 的兼容性
并非所有 API 资源类型都支持 Protobuf;具体来说,Protobuf
不适用于定义为 CustomResourceDefinitions
或通过聚合层 提供服务的资源。
作为客户端,如果你可能需要使用扩展类型,则应在请求 Accept
请求头中指定多种内容类型以支持回退到 JSON。例如:
Accept: application/vnd.kubernetes.protobuf, application/json
高效检测变更
Kubernetes API 允许客户端对对象或集合发出初始请求,然后跟踪自该初始请求以来的更改:watch 。
客户端可以发送 list 或者 get 请求,然后发出后续 watch 请求。
为了使这种更改跟踪成为可能,每个 Kubernetes 对象都有一个 resourceVersion
字段,
表示存储在底层持久层中的该资源的版本。在检索资源集合(名字空间或集群范围)时,
来自 API 服务器的响应包含一个 resourceVersion
值。
客户端可以使用该 resourceVersion
来启动对 API 服务器的 watch 。
当你发送 watch 请求时,API 服务器会响应更改流。
这些更改逐项列出了在你指定为 watch 请求参数的 resourceVersion
之后发生的操作
(例如 create 、delete 和 update )的结果。
整个 watch 机制允许客户端获取当前状态,然后订阅后续更改,而不会丢失任何事件。
如果客户端 watch 连接断开,则该客户端可以从最后返回的 resourceVersion
开始新的 watch 请求;
客户端还可以执行新的 get /list 请求并重新开始。有关更多详细信息,请参阅资源版本语义 。
例如:
列举给定名字空间中的所有 Pod:
GET /api/v1/namespaces/test/pods
---
200 OK
Content-Type: application/json
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {"resourceVersion":"10245"},
"items": [...]
}
从资源版本 10245 开始,接收影响 test 名字空间中 Pod 的所有 API 操作
(例如 create 、delete 、patch 或 update )的通知。
每个更改通知都是一个 JSON 文档。
HTTP 响应正文(用作 application/json
)由一系列 JSON 文档组成。
GET /api/v1/namespaces/test/pods?watch=1&resourceVersion=10245
---
200 OK
Transfer-Encoding: chunked
Content-Type: application/json
{
"type": "ADDED",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "10596", ...}, ...}
}
{
"type": "MODIFIED",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "11020", ...}, ...}
}
...
给定的 Kubernetes 服务器只会保留一定的时间内发生的历史变更列表。
使用 etcd3 的集群默认保存过去 5 分钟内发生的变更。
当所请求的 watch 操作因为资源的历史版本不存在而失败,
客户端必须能够处理因此而返回的状态代码 410 Gone
,清空其本地的缓存,
重新执行 get 或者 list 操作,
并基于新返回的 resourceVersion
来开始新的 watch 操作。
对于订阅集合,Kubernetes 客户端库通常会为 list -然后- watch 的逻辑提供某种形式的标准工具。
(在 Go 客户端库中,这称为 反射器(Reflector)
,位于 k8s.io/client-go/tools/cache
包中。)
监视书签
为了减轻短历史窗口的影响,Kubernetes API 提供了一个名为 BOOKMARK
的监视事件。
这是一种特殊的事件,用于标记客户端请求的给定 resourceVersion
的所有更改都已发送。
代表 BOOKMARK
事件的文档属于请求所请求的类型,但仅包含一个 .metadata.resourceVersion
字段。例如:
GET /api/v1/namespaces/test/pods?watch=1&resourceVersion=10245&allowWatchBookmarks=true
---
200 OK
Transfer-Encoding: chunked
Content-Type: application/json
{
"type": "ADDED",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "10596", ...}, ...}
}
...
{
"type": "BOOKMARK",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "12746"} }
}
作为客户端,你可以在 watch 请求中设置 allowWatchBookmarks=true
查询参数来请求 BOOKMARK
事件,
但你不应假设书签会在任何特定时间间隔返回,即使要求时,客户端也不能假设 API 服务器会发送任何 BOOKMARK
事件。
流式列表
特性状态:
Kubernetes v1.27 [alpha]
(enabled by default: false)
在大型集群检索某些资源类型的集合可能会导致控制平面的资源使用量(主要是 RAM)显著增加。
为了减轻其影响并简化 list + watch 模式的用户体验,
Kubernetes 1.27 版本引入了一个 alpha 功能,支持在 watch 请求中请求初始状态
(之前在 list 请求中请求)。
如果启用了 WatchList
特性门控 ,
可以通过在 watch 请求中指定 sendInitialEvents=true
作为查询字符串参数来实现这一功能。
如果指定了这个参数,API 服务器将使用合成的初始事件(类型为 ADDED
)来启动监视流,
以构建所有现有对象的完整状态;如果请求还带有 allowWatchBookmarks=true
选项,
则继续发送 BOOKMARK
事件 。
BOOKMARK 事件包括已被同步的资源版本。
发送 BOOKMARK 事件后,API 服务器会像处理所有其他 watch 请求一样继续执行。
当你在查询字符串中设置 sendInitialEvents=true
时,
Kubernetes 还要求你将 resourceVersionMatch
的值设置为 NotOlderThan
。
如果你在查询字符串中提供 resourceVersion
而没有提供值或者根本没有提供这个参数,
这一请求将被视为 一致性读(Consistent Read) 请求;
当状态至少被同步到开始处理一致性读操作时,才会发送 BOOKMARK 事件。
如果你(在查询字符串中)指定了 resourceVersion
,则只要需要等状态同步到所给资源版本时,
BOOKMARK 事件才会被发送。
示例
举个例子:你想监视一组 Pod。对于该集合,当前资源版本为 10245,并且有两个 Pod:foo
和 bar
。
接下来你发送了以下请求(通过使用 resourceVersion=
设置空的资源版本来明确请求一致性读 ),
这样做的结果是可能收到如下事件序列:
GET /api/v1/namespaces/test/pods?watch=1&sendInitialEvents=true&allowWatchBookmarks=true&resourceVersion=&resourceVersionMatch=NotOlderThan
---
200 OK
Transfer-Encoding: chunked
Content-Type: application/json
{
"type": "ADDED",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "8467", "name": "foo"}, ...}
}
{
"type": "ADDED",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "5726", "name": "bar"}, ...}
}
{
"type": "BOOKMARK",
"object": {"kind": "Pod", "apiVersion": "v1", "metadata": {"resourceVersion": "10245"} }
}
...
<followed by regular watch stream starting from resourceVersion="10245">
响应压缩
特性状态:
Kubernetes v1.16 [beta]
(enabled by default: true)
APIResponseCompression
是一个选项,允许 API 服务器压缩 get 和 list 请求的响应,
减少占用的网络带宽并提高大规模集群的性能。此选项自 Kubernetes 1.16 以来默认启用,
可以通过在 API 服务器上的 --feature-gates
标志中包含 APIResponseCompression=false
来禁用。
特别是对于大型资源或集合 ,
API 响应压缩可以显著减小其响应的大小。例如,针对 Pod 的 list 请求可能会返回数百 KB 甚至几 MB 的数据,
具体大小取决于 Pod 数量及其属性。通过压缩响应,可以节省网络带宽并降低延迟。
要验证 APIResponseCompression
是否正常工作,你可以使用一个 Accept-Encoding
头向 API 服务器发送一个 get 或 list 请求,并检查响应大小和头信息。例如:
GET /api/v1/pods
Accept-Encoding: gzip
---
200 OK
Content-Type: application/json
content-encoding: gzip
...
content-encoding
头表示响应使用 gzip
进行了压缩。
分块检视大体量结果
特性状态:
Kubernetes v1.29 [stable]
(enabled by default: true)
在较大规模集群中,检索某些资源类型的集合可能会导致非常大的响应,从而影响服务器和客户端。
例如,一个集群可能有数万个 Pod,每个 Pod 大约相当于 2 KiB 的编码 JSON。
跨所有名字空间检索所有 Pod 可能会导致非常大的响应(10-20MB)并消耗大量服务器资源。
Kubernetes API 服务器支持将单个大型集合请求分解为许多较小块的能力,
同时保持总体请求的一致性。每个块都可以按顺序返回,这既减少了请求的总大小,
又允许面向用户的客户端增量显示结果以提高响应能力。
你可以请求 API 服务器通过使用页(Kubernetes 将其称为“块(Chunk)”)的方式来处理 list ,
完成单个集合的响应。
要以块的形式检索单个集合,针对集合的请求支持两个查询参数 limit
和 continue
,
并且从集合元 metadata
字段中的所有 list 操作返回响应字段 continue
。
客户端应该指定他们希望在每个带有 limit
的块中接收的条目数上限,如果集合中有更多资源,
服务器将在结果中返回 limit
资源并包含一个 continue
值。
作为 API 客户端,你可以在下一次请求时将 continue
值传递给 API 服务器,
以指示服务器返回下一页(块 )结果。继续下去直到服务器返回一个空的 continue
值,
你可以检索整个集合。
与 watch 操作类似,continue
令牌也会在很短的时间(默认为 5 分钟)内过期,
并在无法返回更多结果时返回 410 Gone
代码。
这时,客户端需要从头开始执行上述检视操作或者忽略 limit
参数。
例如,如果集群上有 1253 个 Pod,客户端希望每次收到包含至多 500 个 Pod
的数据块,它应按下面的步骤来请求数据块:
列举集群中所有 Pod,每次接收至多 500 个 Pod:
GET /api/v1/pods?limit=500
---
200 OK
Content-Type: application/json
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"resourceVersion":"10245",
"continue": "ENCODED_CONTINUE_TOKEN",
"remainingItemCount": 753,
...
},
"items": [...] // returns pods 1-500
}
继续前面的调用,返回下一组 500 个 Pod:
GET /api/v1/pods?limit=500&continue=ENCODED_CONTINUE_TOKEN
---
200 OK
Content-Type: application/json
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"resourceVersion":"10245",
"continue": "ENCODED_CONTINUE_TOKEN_2",
"remainingItemCount": 253,
...
},
"items": [...] // returns pods 501-1000
}
继续前面的调用,返回最后 253 个 Pod:
GET /api/v1/pods?limit=500&continue=ENCODED_CONTINUE_TOKEN_2
---
200 OK
Content-Type: application/json
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"resourceVersion":"10245",
"continue": "", // continue token is empty because we have reached the end of the list
...
},
"items": [...] // returns pods 1001-1253
}
请注意,集合的 resourceVersion
在每个请求中保持不变,
这表明服务器正在向你显示 Pod 的一致快照。
在版本 10245
之后创建、更新或删除的 Pod 将不会显示,
除非你在没有继续令牌的情况下发出单独的 list 请求。
这使你可以将大请求分成更小的块,然后对整个集合执行 watch 操作,而不会丢失任何更新。
remainingItemCount
是集合中未包含在此响应中的后续项目的数量。
如果 list 请求包含标签或字段选择器 ,
则剩余项目的数量是未知的,并且 API 服务器在其响应中不包含 remainingItemCount
字段。
如果 list 是完整的(因为它没有分块,或者因为这是最后一个块),没有更多的剩余项目,
API 服务器在其响应中不包含 remainingItemCount
字段。
remainingItemCount
的用途是估计集合的大小。
集合
在 Kubernetes 术语中,你从 list 中获得的响应是一个“集合(Collections)”。
然而,Kubernetes 为不同类型资源的集合定义了具体类型。
集合的类别名是针对资源类别的,并附加了 List
。
当你查询特定类型的 API 时,该查询返回的所有项目都属于该类型。
例如,当你 list Service 对象时,集合响应的 kind
设置为
ServiceList
;
该集合中的每个项目都代表一个 Service。例如:
GET /api/v1/services
{
"kind": "ServiceList" ,
"apiVersion": "v1" ,
"metadata": {
"resourceVersion": "2947301"
},
"items": [
{
"metadata": {
"name": "kubernetes" ,
"namespace": "default" ,
...
"metadata": {
"name": "kube-dns" ,
"namespace": "kube-system" ,
...
Kubernetes API 中定义了数十种集合类型(如 PodList
、ServiceList
和 NodeList
)。
你可以从 Kubernetes API 文档中获取有关每种集合类型的更多信息。
一些工具,例如 kubectl
,对于 Kubernetes 集合的表现机制与 Kubernetes API 本身略有不同。
因为 kubectl
的输出可能包含来自 API 级别的多个 list 操作的响应,
所以 kubectl
使用 kind: List
表示项目列表。例如:
kubectl get services -A -o yaml
apiVersion : v1
kind : List
metadata :
resourceVersion : ""
selfLink : ""
items :
- apiVersion : v1
kind : Service
metadata :
creationTimestamp : "2021-06-03T14:54:12Z"
labels :
component : apiserver
provider : kubernetes
name : kubernetes
namespace : default
...
- apiVersion : v1
kind : Service
metadata :
annotations :
prometheus.io/port : "9153"
prometheus.io/scrape : "true"
creationTimestamp : "2021-06-03T14:54:14Z"
labels :
k8s-app : kube-dns
kubernetes.io/cluster-service : "true"
kubernetes.io/name : CoreDNS
name : kube-dns
namespace : kube-system
说明:
请记住,Kubernetes API 没有名为 List
的 kind
。
kind: List
是一个客户端内部实现细节,用于处理可能属于不同类别的对象的集合。
在自动化或其他代码中避免依赖 kind: List
。
以表格形式接收资源
当你执行 kubectl get
时,默认的输出格式是特定资源类型的一个或多个实例的简单表格形式。
过去,客户端需要重复 kubectl
中所实现的表格输出和描述输出逻辑,以执行简单的对象列表操作。
该方法的一些限制包括处理某些对象时的不可忽视逻辑。
此外,API 聚合或第三方资源提供的类型在编译时是未知的。
这意味着必须为客户端无法识别的类型提供通用实现。
为了避免上述各种潜在的局限性,客户端可以请求服务器端返回对象的表格(Table)
表现形式,从而将打印输出的特定细节委托给服务器。
Kubernetes API 实现标准的 HTTP 内容类型(Content Type)协商:为 GET
调用传入一个值为 application/json;as=Table;g=meta.k8s.io;v=v1
的 Accept
头部即可请求服务器以 Table 的内容类型返回对象。
例如,以 Table 格式列举集群中所有 Pod:
GET /api/v1/pods
Accept: application/json;as=Table;g=meta.k8s.io;v=v1
---
200 OK
Content-Type: application/json
{
"kind": "Table",
"apiVersion": "meta.k8s.io/v1",
...
"columnDefinitions": [
...
]
}
对于在控制平面上不存在定制的 Table 定义的 API 资源类型而言,服务器会返回一个默认的
Table 响应,其中包含资源的 name
和 creationTimestamp
字段。
GET /apis/crd.example.com/v1alpha1/namespaces/default/resources
---
200 OK
Content-Type: application/json
...
{
"kind": "Table",
"apiVersion": "meta.k8s.io/v1",
...
"columnDefinitions": [
{
"name": "Name",
"type": "string",
...
},
{
"name": "Created At",
"type": "date",
...
}
]
}
并非所有 API 资源类型都支持 Table 响应;
例如,CustomResourceDefinitions 可能没有定义字段到表的映射,
扩展核心 Kubernetes API
的 APIService 可能根本不提供 Table 响应。
如果你正在实现使用 Table 信息并且必须针对所有资源类型(包括扩展)工作的客户端,
你应该在 Accept
请求头中指定多种内容类型的请求。例如:
Accept: application/json;as=Table;g=meta.k8s.io;v=v1, application/json
资源删除
当你 delete 资源时,操作将分两个阶段进行。
终结(finalization)
移除
{
"kind": "ConfigMap" ,
"apiVersion": "v1" ,
"metadata": {
"finalizers": ["url.io/neat-finalization" , "other-url.io/my-finalizer" ],
"deletionTimestamp": nil,
}
}
当客户端第一次发送 delete 请求删除资源时,.metadata.deletionTimestamp
设置为当前时间。
一旦设置了 .metadata.deletionTimestamp
,
作用于终结器的外部控制器可以在任何时间以任何顺序开始执行它们的清理工作。
终结器之间不存在 强制的执行顺序,因为这会带来卡住 .metadata.finalizers
的重大风险。
.metadata.finalizers
字段是共享的:任何有权限的参与者都可以重新排序。
如果终结器列表是按顺序处理的,那么这可能会导致这样一种情况:
在列表中负责第一个终结器的组件正在等待列表中稍后负责终结器的组件产生的某些信号
(字段值、外部系统或其他),从而导致死锁。
如果没有强制排序,终结者可以在它们之间自由排序,并且不易受到列表中排序变化的影响。
当最后一个终结器也被移除时,资源才真正从 etcd 中移除。
单个资源 API
Kubernetes API 动词 get 、create 、update 、patch 、delete 和 proxy 仅支持单一资源。
这些具有单一资源支持的动词不支持在有序或无序列表或事务中一起提交多个资源。
当客户端(包括 kubectl)对一组资源进行操作时,客户端会发出一系列单资源 API 请求,
然后在需要时聚合响应。
相比之下,Kubernetes API 动词 list 和 watch 允许获取多个资源,
而 deletecollection 允许删除多个资源。
字段校验
Kubernetes 总是校验字段的类型。例如,如果 API 中的某个字段被定义为数值,
你就不能将该字段设置为文本类型的值。如果某个字段被定义为字符串数组,你只能提供数组。
有些字段可以忽略,有些字段必须填写。忽略 API 请求中的必填字段会报错。
如果请求中带有集群控制面无法识别的额外字段,API 服务器的行为会更加复杂。
默认情况下,如果接收到的输入信息中含有 API 服务器无法识别的字段,API 服务器会丢弃该字段
(例如:PUT
请求中的 JSON 主体)。
API 服务器会在两种情况下丢弃 HTTP 请求中提供的字段。
这些情况是:
相关资源的 OpenAPI 模式定义中没有该字段,因此无法识别该字段(有种例外情形是,
CRD
通过 x-kubernetes-preserve-unknown-fields
显式选择不删除未知字段)。
字段在对象中重复出现。
检查无法识别或重复的字段
特性状态:
Kubernetes v1.27 [stable]
(enabled by default: true)
从 1.25 开始,当使用可以提交数据的 HTTP 动词(POST
、PUT
和 PATCH
)时,
将通过服务器上的校验检测到对象中无法识别或重复的字段。
校验的级别可以是 Ignore
、Warn
(默认值) 和 Strict
之一。
Ignore
使 API 服务器像没有遇到错误字段一样成功处理请求,丢弃所有的未知字段和重复字段,并且不发送丢弃字段的通知。
Warn
:(默认值)使 API 服务器成功处理请求,并向客户端发送告警信息。告警信息通过 Warning:
响应头发送,
并为每个未知字段或重复字段添加一条告警信息。有关告警和相关的 Kubernetes API 的信息,
可参阅博文告警:增加实用告警功能 。
Strict
API 服务器检测到任何未知字段或重复字段时,拒绝处理请求并返回 400 Bad Request 错误。
来自 API 服务器的响应消息列出了 API 检测到的所有未知字段或重复字段。
字段校验级别可通过查询参数 fieldValidation
来设置。
说明:
如果你提交的请求中设置了一个无法被识别的字段,并且该请求存在因其他原因引起的不合法
(例如,请求为某已知字段提供了一个字符串值,而 API 期望该字段为整数),
那么 API 服务器会以 400 Bad Request 错误作出响应,但不会提供有关未知或重复字段的任何信息
(仅提供它首先遇到的致命错误)。
在这种情况下,不管你设置哪种字段校验级别,你总会收到出错响应。
向服务器提交请求的工具(例如 kubectl
)可能会设置自己的默认值,与 API 服务器默认使用的 Warn
校验层级不同。
kubectl
工具使用 --validate
标志设置字段校验层级。
该字段可取的值包括 ignore
、warn
和 strict
,同时还接受值 true
(相当于 strict
)和
false
(相当于 ignore
)。
kubectl 默认的校验设置是 --validate=true
,这意味着执行严格的服务端字段校验。
当 kubectl 无法连接到启用字段校验的 API 服务器(Kubernetes 1.27 之前的 API 服务器)时,
将回退到使用客户端的字段校验。
客户端校验将在 kubectl 未来版本中被完全删除。
说明:
在 Kubernetes 1.25 之前,kubectl --validate
是用来开启或关闭客户端校验的布尔标志的命令。
试运行
特性状态:
Kubernetes v1.19 [stable]
(enabled by default: true)
当你使用可以修改资源的 HTTP 动词(POST
、PUT
、PATCH
和 DELETE
)时,
你可以在 试运行(dry run) 模式下提交你的请求。
试运行模式有助于通过典型的请求阶段(准入链、验证、合并冲突)评估请求,直到将对象持久化到存储中。
请求的响应正文尽可能接近非试运行响应。Kubernetes 保证试运行请求不会被持久化存储或产生任何其他副作用。
发起试运行请求
通过设置 dryRun
查询参数触发试运行。此参数是一个字符串,用作枚举,唯一可接受的值是:
[未设置值]
允许副作用。你可以使用 ?dryRun
或 ?dryRun&pretty=true
之类的查询字符串请求此操作。
响应是最终会被持久化的对象,或者如果请求不能被满足则会出现一个错误。
All
每个阶段都正常运行,除了防止副作用的最终存储阶段。
当你设置 ?dryRun=All
时,将运行任何相关的准入控制器 ,
验证准入控制器检查经过变更的请求,针对 PATCH
请求执行合并、设置字段默认值等操作,并进行模式验证。
更改不会持久化到底层存储,但本应持久化的最终对象仍会与正常状态代码一起返回给用户。
如果请求的非试运行版本会触发具有副作用的准入控制器,则该请求将失败,而不是冒不希望的副作用的风险。
所有内置准入控制插件都支持试运行。
此外,准入 Webhook 还可以设置配置对象
的 sideEffects
字段为 None
,借此声明它们没有副作用。
说明:
如果 webhook 确实有副作用,则应该将 sideEffects
字段设置为 “NoneOnDryRun”。
如果还修改了 webhook 以理解 AdmissionReview 中的 DryRun 字段,
并防止对标记为试运行的任何请求产生副作用,则该更改是适当的。
这是一个使用 ?dryRun=All
的试运行请求的示例:
POST /api/v1/namespaces/test/pods?dryRun=All
Content-Type: application/json
Accept: application/json
响应会与非试运行模式请求的响应看起来相同,只是某些生成字段的值可能会不同。
生成值
对象的某些值通常是在对象被写入数据库之前生成的。很重要的一点是不要依赖试运行请求为这些字段所设置的值,
因为试运行模式下所得到的这些值与真实请求所获得的值很可能不同。这类字段有:
name
:如果设置了 generateName
字段,则 name
会获得一个唯一的随机名称
creationTimestamp
/ deletionTimestamp
:记录对象的创建/删除时间
UID
:唯一标识 对象,
取值随机生成(非确定性)
resourceVersion
:跟踪对象的持久化(存储)版本
变更性准入控制器所设置的字段
对于 Service
资源:kube-apiserver
为 Service
对象分配的端口和 IP 地址
试运行的授权
试运行和非试运行请求的鉴权是完全相同的。因此,要发起一个试运行请求,
你必须被授权执行非试运行请求。
例如,要在 Deployment 对象上试运行 patch 操作,你必须具有对 Deployment 执行 patch 操作的访问权限,
如下面的 RBAC 规则所示:
rules :
- apiGroups : ["apps" ]
resources : ["deployments" ]
verbs : ["patch" ]
参阅鉴权概述 以了解鉴权细节。
更新现有资源
Kubernetes 提供了多种更新现有对象的方式。
你可以阅读选择更新机制 以了解哪种方法可能最适合你的用例。
你可以使用 HTTP PUT 覆盖(update )ConfigMap 等现有资源。
对于 PUT 请求,客户端需要指定 resourceVersion
(从要更新的对象中获取此项)。
Kubernetes 使用该 resourceVersion
信息,这样 API 服务器可以检测丢失的更新并拒绝对集群来说过期的客户端所发出的请求。
如果资源已发生变化(即客户端提供的 resourceVersion
已过期),API 服务器将返回 409 Conflict
错误响应。
客户端除了发送 PUT 请求之外,还可以发送指令给 API 服务器对现有资源执行 patch 操作。
patch 通常适用于客户端希望进行的更改并不依赖于现有数据的场景。
需要有效检测丢失更新的客户端应该考虑根据现有 resourceVersion
来进行有条件的请求
(HTTP PUT 或 HTTP PATCH),并在存在冲突时作必要的重试。
Kubernetes API 支持四种不同的 PATCH 操作,具体取决于它们所对应的 HTTP Content-Type
标头:
application/apply-patch+yaml
Server Side Apply YAML(基于 YAML 的 Kubernetes 扩展)。
所有 JSON 文档都是有效的 YAML,因此你也可以使用此媒体类型提交 JSON。
更多细节参阅服务器端应用序列化 。
对于 Kubernetes,这一 PATCH 请求在对象不存在时成为 create 操作;在对象已存在时成为 patch 操作。
application/json-patch+json
JSON Patch,如 RFC6902 中定义。
JSON Patch 是对资源执行的一个操作序列;例如 {"op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ]}
。
对于 Kubernetes,这一 PATCH 请求即是一个 patch 操作。
使用 application/json-patch+json
的 patch 可以包含用于验证一致性的条件,
如果这些条件不满足,则允许此操作失败(例如避免丢失更新)。
application/merge-patch+json
JSON Merge Patch,如 RFC7386 中定义。
JSON Merge Patch 实质上是资源的部分表示。提交的 JSON 与当前资源合并以创建一个新资源,然后将其保存。
对于 Kubernetes,这个 PATCH 请求是一个 patch 操作。
application/strategic-merge-patch+json
Strategic Merge Patch(基于 JSON 的 Kubernetes 扩展)。
Strategic Merge Patch 是 JSON Merge Patch 的自定义实现。
你只能在内置 API 或具有特殊支持的聚合 API 服务器中使用 Strategic Merge Patch。
你不能针对任何使用 CustomResourceDefinition
定义的 API 来使用 application/strategic-merge-patch+json
。
说明:
Kubernetes 服务器端应用 机制已取代 Strategic Merge Patch。
Kubernetes 的服务器端应用 功能允许控制平面跟踪新创建对象的托管字段。
服务端应用为管理字段冲突提供了清晰的模式,提供了服务器端 apply 和 update 操作,
并替换了 kubectl apply
的客户端功能。
对于服务器端应用,Kubernetes 在对象尚不存在时将请求视为 create ,否则视为 patch 。
对于其他在 HTTP 层面使用 PATCH 的请求,逻辑上的 Kubernetes 操作始终是 patch 。
更多细节参阅服务器端应用 。
选择更新机制
HTTP PUT 替换现有资源
update (HTTP PUT
)操作实现简单且灵活,但也存在一些缺点:
你需要处理对象的 resourceVersion
在客户端读取和写回之间发生变化所造成的冲突。
Kubernetes 总是会检测到此冲突,但你作为客户端开发者需要实现重试机制。
如果你在本地解码对象,可能会意外丢失字段。例如你在使用 client-go 时,
可能会收到客户端不知道如何处理的一些字段,而客户端在构造更新时会将这些字段丢弃。
如果对象上存在大量争用(即使是在你不打算编辑的某字段或字段集上),你可能会难以发送更新。
对于体量较大或字段较多的对象,这个问题会更为严重。
使用 JSON Patch 的 HTTP PATCH
patch 更新很有帮助,因为:
由于你只发送差异,所以你在 PATCH
请求中需要发送的数据较少。
你可以依赖于现有值进行更改,例如将特定字段的值复制到注解中。
与 update (HTTP PUT
)不同,即使存在对无关字段的频繁更改,你的更改也可以立即生效:
你通常无需重试。
如果你要特别小心避免丢失更新,仍然可能需要指定 resourceVersion
(以匹配现有对象)。
编写一些重试逻辑以处理错误仍然是一个良好的实践。
你可以通过测试条件来精确地构造特定的更新条件。
例如,如果现有值与你期望的值匹配,你可以递增计数器而无需读取它。
即使自上次写入以来对象以其他方式发生了更改,你也可以做到这一点而不会遇到丢失更新的风险。
(如果测试条件失败,你可以回退为读取当前值,然后写回更改的数字)。
然而:
你需要更多本地(客户端)逻辑来构建补丁;如果你拥有实现了 JSON Patch 的库,
或者针对 Kubernetes 生成特定的 JSON Patch 的库,将非常有帮助。
作为客户端软件的开发者,你在构建补丁(HTTP 请求体)时需要小心,避免丢弃字段(操作顺序很重要)。
使用服务器端应用的 HTTP PATCH
服务器端应用(Server-Side Apply)具有一些明显的优势:
仅需一次轮询:通常无需先执行 GET
请求。
并且你仍然可以检测到意外更改造成的冲突
合适的时候,你可以选择强制覆盖冲突
客户端实现简单。
你可以轻松获得原子级别的 create 或 update 操作,无需额外工作
(类似于某些 SQL 语句中的 UPSERT
)。
然而:
服务器端应用不适合依赖对象当前值的字段更改。
你只能更新对象。Kubernetes HTTP API 中的某些资源不是对象(它们没有 .metadata
字段),
并且服务器端应用只能用于 Kubernetes 对象。
资源版本
资源版本是标识服务器内部对象版本的字符串。
客户端可以使用资源版本来确定对象何时更改,
或者在获取、列出和监视资源时表达数据一致性要求。
资源版本必须被客户端视为不透明的,并且未经修改地传回服务器。
你不能假设资源版本是数字的或可排序的。
API 客户端只能比较两个资源版本的相等性(这意味着你不能比较资源版本的大于或小于关系)。
客户端在资源中查找资源版本,这些资源包括来自用于 watch 的响应流资源,或者使用 list 枚举的资源。
v1.meta/ObjectMeta -
资源的 metadata.resourceVersion
值标明该实例上次被更改时的资源版本。
v1.meta/ListMeta - 资源集合即
list 操作的响应)的 metadata.resourceVersion
所标明的是 list 响应被构造时的资源版本。
查询字符串中的 resourceVersion
参数
get 、list 和 watch 操作支持 resourceVersion
参数。
从 v1.19 版本开始,Kubernetes API 服务器支持 list 请求的 resourceVersionMatch
参数。
API 服务器根据你请求的操作和 resourceVersion
的值对 resourceVersion
参数进行不同的解释。
如果你设置 resourceVersionMatch
那么这也会影响匹配发生的方式。
get 和 list 语义
对于 get 和 list 而言,resourceVersion
的语义为:
get:
resourceVersion 未设置
resourceVersion="0"
resourceVersion="<非零值>"
最新版本
任何版本
不老于给定版本
list:
从 v1.19 版本开始,Kubernetes API 服务器支持 list 请求的 resourceVersionMatch
参数。
如果同时设置 resourceVersion
和 resourceVersionMatch
,
则 resourceVersionMatch
参数确定 API 服务器如何解释 resourceVersion
。
在 list 请求上设置 resourceVersion
时,你应该始终设置 resourceVersionMatch
参数。
但是,请准备好处理响应的 API 服务器不知道 resourceVersionMatch
并忽略它的情况。
除非你对一致性有着非常强烈的需求,使用 resourceVersionMatch=NotOlderThan
同时为 resourceVersion
设定一个已知值是优选的交互方式,因为与不设置
resourceVersion
和 resourceVersionMatch
相比,这种配置可以取得更好的集群性能和可扩缩性。
后者需要提供带票选能力的读操作。
设置 resourceVersionMatch
参数而不设置 resourceVersion
参数是不合法的。
下表解释了具有各种 resourceVersion
和 resourceVersionMatch
组合的 list 请求的行为:
list 操作的 resourceVersionMatch 与分页参数
resourceVersionMatch 参数
分页参数
resourceVersion 未设置
resourceVersion="0"
resourceVersion="<非零值>"
未设置
limit 未设置
最新版本
任意版本
不老于指定版本
未设置
limit=<n>, continue 未设置
最新版本
任意版本
精确匹配
未设置
limit=<n>, continue=<token>
从 token 开始、精确匹配
非法请求,视为从 token 开始、精确匹配
非法请求,返回 HTTP 400 Bad Request
resourceVersionMatch=Exact
[1]
limit 未设置
非法请求
非法请求
精确匹配
resourceVersionMatch=Exact
[1]
limit=<n>, continue 未设置
非法请求
非法请求
精确匹配
resourceVersionMatch=NotOlderThan
[1]
limit 未设置
非法请求
任意版本
不老于指定版本
resourceVersionMatch=NotOlderThan
[1]
limit=<n>, continue 未设置
非法请求
任意版本
不老于指定版本
说明:
如果你的集群的 API 服务器不支持 resourceVersionMatch
参数,
则行为与你未设置它时相同。
get 和 list 的语义是:
任意版本
返回任何资源版本的数据。最新可用资源版本优先,但不需要强一致性;
可以提供任何资源版本的数据。由于分区或过时的缓存,
请求可能返回客户端先前观察到的更旧资源版本的数据,特别是在高可用性配置中。
不能容忍这种情况的客户不应该使用这种语义。
最新版本
返回最新资源版本的数据。
返回的数据必须一致(详细说明:通过仲裁读取从 etcd 提供)。
对于 etcd v3.4.31+ 和 v3.5.13+ Kubernetes 1.31 使用监视缓存 来为“最新”读取提供服务:
监视缓存是 API 服务器内部的基于内存的存储,用于缓存和镜像持久化到 etcd 中的数据状态。
Kubernetes 请求进度通知以维护与 etcd 持久层的缓存一致性。Kubernetes
版本 v1.28 至 v1.30 也支持此特性,尽管当时其处于 Alpha 状态,不推荐用于生产,
也不默认启用,直到 v1.31 版本才启用。
不老于指定版本
返回数据至少与提供的 resourceVersion
一样新。
最新的可用数据是首选,但可以提供不早于提供的 resourceVersion
的任何数据。
对于对遵守 resourceVersionMatch
参数的服务器的 list 请求,
这保证了集合的 .metadata.resourceVersion
不早于请求的 resourceVersion
,
但不保证该集合中任何项目的 .metadata.resourceVersion
。
精确匹配
以提供的确切资源版本返回数据。如果提供的 resourceVersion
不可用,
则服务器以 HTTP 410 “Gone” 响应。对于对支持 resourceVersionMatch
参数的服务器的 list 请求,
这可以保证集合的 .metadata.resourceVersion
与你在查询字符串中请求的 resourceVersion
相同。
该保证不适用于该集合中任何项目的 .metadata.resourceVersion
。
从 token 开始、精确匹配
返回初始分页 list 调用的资源版本的数据。
返回的 Continue 令牌 负责跟踪最初提供的资源版本,最初提供的资源版本用于在初始分页 list 之后的所有分页 list 中。
说明:
当你 list 资源并收到集合响应时,
响应包括集合的列表元数据 。
以及该集合中每个项目的对象元数据 。
对于在集合响应中找到的单个对象,.metadata.resourceVersion
跟踪该对象的最后更新时间,
而不是对象在服务时的最新程度。
当使用 resourceVersionMatch=NotOlderThan
并设置了限制时,
客户端必须处理 HTTP 410 “Gone” 响应。
例如,客户端可能会使用更新的 resourceVersion
重试或回退到 resourceVersion=""
。
当使用 resourceVersionMatch=Exact
并且未设置限制时,
客户端必须验证集合的 .metadata.resourceVersion
是否与请求的 resourceVersion
匹配,
并处理不匹配的情况。例如,客户端可能会退回到设置了限制的请求。
watch 语义
对于 watch 操作而言,资源版本的语义如下:
watch:
watch 操作的 resourceVersion 设置
resourceVersion 未设置
resourceVersion="0"
resourceVersion="<非零值>"
读取状态并从最新版本开始
读取状态并从任意版本开始
从指定版本开始
watch 操作语义的含义如下:
读取状态并从任意版本开始
注意: 以这种方式初始化的监视可能会返回任意陈旧的数据。
请在使用之前查看此语义,并尽可能支持其他语义。
在任何资源版本开始 watch ;首选可用的最新资源版本,但不是必需的。允许任何起始资源版本。
由于分区或过时的缓存,watch 可能从客户端之前观察到的更旧的资源版本开始,
特别是在高可用性配置中。不能容忍这种明显倒带的客户不应该用这种语义启动 watch 。
为了建立初始状态,watch 从起始资源版本中存在的所有资源实例的合成 “添加” 事件开始。
以下所有监视事件都针对在 watch 开始的资源版本之后发生的所有更改。
读取状态并从最新版本开始
从最近的资源版本开始 watch ,
它必须是一致的(详细说明:通过仲裁读取从 etcd 提供服务)。
为了建立初始状态,watch 从起始资源版本中存在的所有资源实例的合成 “添加” 事件开始。
以下所有监视事件都针对在 watch 开始的资源版本之后发生的所有更改。
从指定版本开始
以确切的资源版本开始 watch 。监视事件适用于提供的资源版本之后的所有更改。
与 “Get State and Start at Most Recent” 和 “Get State and Start at Any” 不同,
watch 不会以所提供资源版本的合成 “添加” 事件启动。
由于客户端提供了资源版本,因此假定客户端已经具有起始资源版本的初始状态。
"410 Gone" 响应
服务器不需要提供所有老的资源版本,在客户端请求的是早于服务器端所保留版本的
resourceVersion
时,可以返回 HTTP 410 (Gone)
状态码。
客户端必须能够容忍 410 (Gone)
响应。
参阅高效检测变更 以了解如何在监测资源时处理
410 (Gone)
响应。
如果所请求的 resourceVersion
超出了可应用的 limit
,
那么取决于请求是否是通过高速缓存来满足的,API 服务器可能会返回一个 410 Gone
HTTP 响应。
不可用的资源版本
服务器不需要提供无法识别的资源版本。
如果你请求了 list 或 get API 服务器无法识别的资源版本,则 API 服务器可能会:
短暂等待资源版本可用,如果提供的资源版本在合理的时间内仍不可用,
则应超时并返回 504 (Gateway Timeout)
;
使用 Retry-After
响应标头进行响应,指示客户端在重试请求之前应等待多少秒。
如果你请求 API 服务器无法识别的资源版本,
kube-apiserver 还会使用 “Too large resource version” 消息额外标识其错误响应。
如果你对无法识别的资源版本发出 watch 请求,
API 服务器可能会无限期地等待(直到请求超时)资源版本变为可用。
2.2 - 服务器端应用(Server-Side Apply)
特性状态:
Kubernetes v1.22 [stable]
(enabled by default: true)
Kubernetes 支持多个应用程序协作管理一个对象 的字段。
服务器端应用为集群的控制平面提供了一种可选机制,用于跟踪对对象字段的更改。
在特定资源级别,服务器端应用记录并跟踪有关控制该对象字段的信息。
服务器端应用协助用户和控制器 通过声明式配置的方式管理他们的资源。
客户提交他们完整描述的意图 ,声明式地创建和修改对象 。
一个完整描述的意图并不是一个完整的对象,仅包括能体现用户意图的字段和值。
该意图可以用来创建一个新对象(未指定的字段使用默认值),
也可以通过 API 服务器来实现与现有对象的合并 。
与客户端应用对比 小节解释了服务器端应用与最初的客户端
kubectl apply
实现的区别。
字段管理
Kubernetes API 服务器跟踪所有新建对象的受控字段(Managed Fields) 。
当尝试应用对象时,由另一个管理器 拥有的字段且具有不同值,将导致冲突 。
这样做是为了表明操作可能会撤消另一个合作者的更改。
可以强制写入具有托管字段的对象,在这种情况下,任何冲突字段的值都将被覆盖,并且所有权将被转移。
每当字段的值确实发生变化时,所有权就会从其当前管理器转移到进行更改的管理器。
服务器端应用会检查是否存在其他字段管理器也拥有该字段。
如果该字段不属于任何其他字段管理器,则该字段将被设置为其默认值(如果有),或者以其他方式从对象中删除。
同样的规则也适用于作为列表(list)、关联列表或键值对(map)的字段。
用户管理字段这件事,在服务器端应用的场景中,意味着用户依赖并期望字段的值不要改变。
最后一次对字段值做出断言的用户将被记录到当前字段管理器。
这可以通过发送 POST
(create )、PUT
(update )、或非应用的 PATCH
(patch )
显式更改字段管理器详细信息来实现。
你还可以通过在服务器端应用操作中包含字段的值来声明和记录字段管理器。
服务器端应用场景中的 patch 请求要求客户端提供自身的标识作为字段管理器(Field Manager) 。
使用服务器端应用时,如果尝试变更由别的管理器来控制的字段,会导致请求被拒绝,除非客户端强制要求进行覆盖。
关于覆盖操作的细节,可参阅冲突 节。
如果两个或以上的应用者均把同一个字段设置为相同值,他们将共享此字段的所有权。
后续任何改变共享字段值的尝试,不管由那个应用者发起,都会导致冲突。
共享字段的所有者可以放弃字段的所有权,这只需发出不包含该字段的服务器端应用 patch 请求即可。
字段管理的信息存储在 managedFields
字段中,该字段是对象的
metadata
中的一部分。
如果从清单中删除某个字段并应用该清单,则服务器端应用会检查是否有其他字段管理器也拥有该字段。
如果该字段不属于任何其他字段管理器,则服务器会将其从活动对象中删除,或者重置为其默认值(如果有)。
同样的规则也适用于关联列表(list)或键值对(map)。
与(旧版)由 kubectl
所管理的注解
kubectl.kubernetes.io/last-applied configuration
相比,服务器端应用使用了一种更具声明式的方法,
它跟踪用户(或客户端)的字段管理,而不是用户上次应用的状态。
作为服务器端应用的副作用,哪个字段管理器管理的对象的哪个字段的相关信息也会变得可用。
示例
服务器端应用创建对象的简单示例如下:
说明:
kubectl get
默认省略 managedFields
。
当输出格式为 json
或 yaml
时,你可以添加 --show-managed-fields
参数以显示 managedFields
。
---
apiVersion : v1
kind : ConfigMap
metadata :
name : test-cm
namespace : default
labels :
test-label : test
managedFields :
- manager : kubectl
operation : Apply # 注意大写:“Apply” (或者 “Update”)
apiVersion : v1
time : "2010-10-10T0:00:00Z"
fieldsType : FieldsV1
fieldsV1 :
f:metadata :
f:labels :
f:test-label : {}
f:data :
f:key : {}
data :
key : some value
示例的 ConfigMap 对象在 .metadata.managedFields
中包含字段管理记录。
字段管理记录包括关于管理实体本身的基本信息,以及关于被管理的字段和相关操作(Apply
或 Update
)的详细信息。
如果最后更改该字段的请求是服务器端应用的 patch 操作,则 operation
的值为 Apply
;否则为 Update
。
还有另一种可能的结果。客户端会提交无效的请求体。
如果完整描述的意图没有构造出有效的对象,则请求失败。
但是,可以通过 update 或不使用服务器端应用的 patch 操作去更新 .metadata.managedFields
。
强烈不鼓励这么做,但当发生如下情况时,
比如 managedFields
进入不一致的状态(显然不应该发生这种情况),
这么做也是一个合理的尝试。
managedFields
的格式在 Kubernetes API 参考中描述 。
注意:
.metadata.managedFields
字段由 API 服务器管理。
你不应该手动更新它。
冲突
冲突 是一种特定的错误状态,
发生在执行 Apply
改变一个字段,而恰巧该字段被其他用户声明过主权时。
这可以防止一个应用者不小心覆盖掉其他用户设置的值。
冲突发生时,应用者有三种办法来解决它:
覆盖前值,成为唯一的管理器: 如果打算覆盖该值(或应用者是一个自动化部件,比如控制器),
应用者应该设置查询参数 force
为 true(对 kubectl apply
来说,你可以使用命令行参数
--force-conflicts
),然后再发送一次请求。
这将强制操作成功,改变字段的值,从所有其他管理器的 managedFields
条目中删除指定字段。
不覆盖前值,放弃管理权: 如果应用者不再关注该字段的值,
应用者可以从资源的本地模型中删掉它,并在省略该字段的情况下发送请求。
这就保持了原值不变,并从 managedFields
的应用者条目中删除该字段。
不覆盖前值,成为共享的管理器: 如果应用者仍然关注字段值,并不想覆盖它,
他们可以更改资源的本地模型中该字段的值,以便与服务器上对象的值相匹配,
然后基于本地更新发出新请求。这样做会保持值不变,
并使得该字段的管理由应用者与已经声称管理该字段的所有其他字段管理者共享。
字段管理器
管理器识别出正在修改对象的工作流程(在冲突时尤其有用),
并且可以作为修改请求的一部分,通过
fieldManager
查询参数来指定。
当你 Apply 某个资源时,需要指定 fieldManager
参数。
对于其他更新,API 服务器使用 “User-Agent:” HTTP 头(如果存在)推断字段管理器标识。
当你使用 kubectl
工具执行服务器端应用操作时,kubectl
默认情况下会将管理器标识设置为 “kubectl”
。
序列化
在协议层面,Kubernetes 用 YAML 来表示服务器端应用的消息体,
媒体类型为 application/apply-patch+yaml
。
说明:
不管你提交的是 JSON 数据还是 YAML 数据,
都要使用 application/apply-patch+yaml
作为 Content-Type
的值。
所有的 JSON 文档都是合法的 YAML。不过,Kubernetes 存在一个缺陷,
即它使用的 YAML 解析器没有完全实现 YAML 规范。
某些 JSON 转义可能无法被识别。
序列化与 Kubernetes 对象相同,只是客户端不需要发送完整的对象。
以下是服务器端应用消息正文的示例(完整描述的意图):
{
"apiVersion": "v1" ,
"kind": "ConfigMap"
}
(这个请求将导致无更改的更新,前提是它作为 patch 请求的主体发送到有效的 v1/configmaps
资源,
并且请求中设置了合适的 Content-Type
)。
字段管理范围内的操作
考虑字段管理的 Kubernetes API 操作包括:
服务器端应用(HTTP PATCH
,内容类型为 application/apply-patch+yaml
)
替换现有对象(对 Kubernetes 而言是 update ;HTTP 层面表现为 PUT
)
这两种操作都会更新 .metadata.managedFields
,但行为略有不同。
除非你指定要强制重写,否则应用操作在遇到字段级冲突时总是会失败;
相比之下,如果你使用 update 进行的更改会影响托管字段,那么冲突从来不会导致操作失败。
所有服务器端应用的 patch 请求都必须提供 fieldManager
查询参数来标识自己,
而此参数对于 update 操作是可选的。
最后,使用 Apply
操作时,不能在提交的请求主体中设置 managedFields
。
一个包含多个管理器的对象,示例如下:
---
apiVersion : v1
kind : ConfigMap
metadata :
name : test-cm
namespace : default
labels :
test-label : test
managedFields :
- manager : kubectl
operation : Apply
apiVersion : v1
fields :
f:metadata :
f:labels :
f:test-label : {}
- manager : kube-controller-manager
operation : Update
apiVersion : v1
time : '2019-03-30T16:00:00.000Z'
fields :
f:data :
f:key : {}
data :
key : new value
在这个例子中,
第二个操作被管理器 kube-controller-manager
以 update 的方式运行。
更新操作执行成功,并更改了 data 字段中的一个值,
并使得该字段的管理器被改为 kube-controller-manager
。
如果尝试把更新操作改为服务器端应用,那么这一尝试会因为所有权冲突的原因,导致操作失败。
合并策略
由服务器端应用实现的合并策略,提供了一个总体更稳定的对象生命周期。
服务器端应用试图依据负责管理它们的主体来合并字段,而不是根据值来否决。
这么做是为了多个主体可以更新同一个对象,且不会引起意外的相互干扰。
当用户发送一个完整描述的意图 对象到服务器端应用的服务端点时,
服务器会将它和当前对象做一次合并,如果两者中有重复定义的值,那就以请求体中的为准。
如果请求体中条目的集合不是此用户上一次操作条目的超集,
所有缺失的、没有其他应用者管理的条目会被删除。
关于合并时用来做决策的对象规格的更多信息,参见
sigs.k8s.io/structured-merge-diff .
Kubernetes API(以及为 Kubernetes 实现该 API 的 Go 代码)都允许定义合并策略标记(Merge Strategy Markers) 。
这些标记描述 Kubernetes 对象中各字段所支持的合并策略。
Kubernetes 1.16 和 1.17 中添加了一些标记,
对一个 CustomResourceDefinition
来说,你可以在定义自定义资源时设置这些标记。
Golang 标记
OpenAPI 扩展
可接受的值
描述
//+listType
x-kubernetes-list-type
atomic
/set
/map
适用于 list。set
适用于仅包含标量元素的列表。其中的元素不可重复。map
仅适用于嵌套了其他类型的列表。列表中的键(参见 listMapKey
)不可以重复。atomic
适用于所有类型的列表。如果配置为 atomic
,则合并时整个列表会被替换掉。任何时候,只有一个管理器负责管理指定列表。如果配置为 set
或 map
,不同的管理器也可以分开管理不同条目。
//+listMapKey
x-kubernetes-list-map-keys
字段名称的列表,例如,["port", "protocol"]
仅当 +listType=map
时适用。取值为字段名称的列表,这些字段值的组合能够唯一标识列表中的条目。尽管可以存在多个键,listMapKey
是单数的,这是因为键名需要在 Go 类型中各自独立指定。键字段必须是标量。
//+mapType
x-kubernetes-map-type
atomic
/granular
适用于 map。 atomic
表示 map 只能被某个管理器整体替换。 granular
表示 map 支持多个管理器各自更新自己的字段。
//+structType
x-kubernetes-map-type
atomic
/granular
适用于 structs;此外,起用法和 OpenAPI 注释与 //+mapType
相同。
若未指定 listType
,API 服务器将 patchStrategy=merge
标记解释为
listType=map
并且视对应的 patchMergeKey
标记为 listMapKey
取值。
atomic
列表类型是递归的。
(在 Kubernetes 的 Go 代码中,
这些标记以注释的形式给出,代码作者不需要用字段标记的形式重复指定它们)。
自定义资源和服务器端应用
默认情况下,服务器端应用将自定义资源视为无结构的数据。
所有键被视为 struct 数据类型的字段,所有列表都被视为 atomic 形式。
如果 CustomResourceDefinition 定义了的
schema
包含在上一小节合并策略 中定义的注解,
那么在合并此类型的对象时,就会使用这些注解。
拓扑变化时的兼容性
在极少的情况下,CustomResourceDefinition(CRD)的作者或者内置类型可能希望更改其资源中的某个字段的
拓扑配置,同时又不提升版本号。
通过升级集群或者更新 CRD 来更改类型的拓扑信息,与更新现有对象的结果不同。
变更的类型有两种:一种是将字段从 map
/set
/granular
更改为 atomic
,
另一种是做逆向改变。
当 listType
、mapType
或 structType
从 map
/set
/granular
改为
atomic
时,现有对象的整个列表、映射或结构的属主都会变为这些类型的
元素之一的属主。这意味着,对这些对象的进一步变更会引发冲突。
当某 listType
、mapType
或 structType
从 atomic
改为 map
/set
/granular
之一时,
API 服务器无法推导这些字段的新的属主。因此,当对象的这些字段
再次被更新时不会引发冲突。出于这一原因,不建议将某类型从 atomic
改为
map
/set
/granular
。
以下面的自定义资源为例:
---
apiVersion : example.com/v1
kind : Foo
metadata :
name : foo-sample
managedFields :
- manager : "manager-one"
operation : Apply
apiVersion : example.com/v1
fieldsType : FieldsV1
fieldsV1 :
f:spec :
f:data : {}
spec :
data :
key1 : val1
key2 : val2
在 spec.data
从 atomic
改为 granular
之前,
manager-one
是 spec.data
字段及其所包含字段(key1
和 key2
)的属主。
当对应的 CRD 被更改,使得 spec.data
变为 granular
拓扑时,
manager-one
继续拥有顶层字段 spec.data
(这意味着其他管理器想删除名为
data
的映射而不引起冲突是不可能的),但不再拥有 key1
和 key2
。
因此,其他管理器可以在不引起冲突的情况下更改或删除这些字段。
在控制器中使用服务器端应用
控制器的开发人员可以把服务器端应用作为简化控制器的更新逻辑的方式。
读-改-写 和/或 patch 的主要区别如下所示:
应用的对象必须包含控制器关注的所有字段。
对于在控制器没有执行过应用操作之前就已经存在的字段,不能删除。
(控制器在这种用例环境下,依然可以发送一个 patch 或 update )
对象不必事先读取,resourceVersion
不必指定。
强烈推荐:设置控制器始终在其拥有和管理的对象上强制冲突,这是因为冲突发生时,它们没有其他解决方案或措施。
转移所有权
除了通过冲突解决方案 提供的并发控制,
服务器端应用提供了一些协作方式来将字段所有权从用户转移到控制器。
最好通过例子来说明这一点。
让我们来看看,在使用 HorizontalPodAutoscaler 资源和与之配套的控制器,
且开启了 Deployment 的自动水平扩展功能之后,
怎么安全的将 replicas
字段的所有权从用户转移到控制器。
假设用户定义了 Deployment,且 replicas
字段已经设置为期望的值:
apiVersion : apps/v1
kind : Deployment
metadata :
name : nginx-deployment
labels :
app : nginx
spec :
replicas : 3
selector :
matchLabels :
app : nginx
template :
metadata :
labels :
app : nginx
spec :
containers :
- name : nginx
image : nginx:1.14.2
并且,用户使用服务器端应用,像这样创建 Deployment:
kubectl apply -f https://k8s.io/examples/application/ssa/nginx-deployment.yaml --server-side
然后,为 Deployment 启用自动扩缩,例如:
kubectl autoscale deployment nginx-deployment --cpu-percent= 50 --min= 1 --max= 10
现在,用户希望从他们的配置中删除 replicas
,从而避免与 HorizontalPodAutoscaler(HPA)及其控制器发生冲突。
然而,这里存在一个竞态:在 HPA 需要调整 .spec.replicas
之前会有一个时间窗口,
如果在 HPA 写入字段并成为新的属主之前,用户删除了 .spec.replicas
,
那 API 服务器就会把 .spec.replicas
的值设为 1(Deployment 的默认副本数)。
这不是用户希望发生的事情,即使是暂时的——它很可能会导致正在运行的工作负载降级。
这里有两个解决方案:
(基本操作)把 replicas
留在配置文件中;当 HPA 最终写入那个字段,
系统基于此事件告诉用户:冲突发生了。在这个时间点,可以安全的删除配置文件。
(高级操作)然而,如果用户不想等待,比如他们想为合作伙伴保持集群清晰,
那他们就可以执行以下步骤,安全的从配置文件中删除 replicas
。
首先,用户新定义一个只包含 replicas
字段的新清单:
# 将此文件另存为 'nginx-deployment-replicas-only.yaml'
apiVersion : apps/v1
kind : Deployment
metadata :
name : nginx-deployment
spec :
replicas : 3
说明:
此场景中针对 SSA 的 YAML 文件仅包含你要更改的字段。
如果只想使用 SSA 来修改 spec.replicas
字段,你无需提供完全兼容的 Deployment 清单。
用户使用私有字段管理器名称应用该清单。在本例中,用户选择了 handover-to-hpa
:
kubectl apply -f nginx-deployment-replicas-only.yaml \
--server-side --field-manager= handover-to-hpa \
--validate= false
如果应用操作和 HPA 控制器产生冲突,那什么都不做。
冲突表明控制器在更早的流程中已经对字段声明过所有权。
在此时间点,用户可以从清单中删除 replicas
。
apiVersion : apps/v1
kind : Deployment
metadata :
name : nginx-deployment
labels :
app : nginx
spec :
selector :
matchLabels :
app : nginx
template :
metadata :
labels :
app : nginx
spec :
containers :
- name : nginx
image : nginx:1.14.2
注意,只要 HPA 控制器为 replicas
设置了一个新值,
该临时字段管理器将不再拥有任何字段,会被自动删除。
这里无需进一步清理。
在管理器之间转移所有权
通过在配置文件中把一个字段设置为相同的值,多个字段管理器可以在彼此之间转移字段的所有权,
从而实现字段所有权的共享。
当某管理器共享了字段的所有权,管理器中任何一个成员都可以从其应用的配置中删除该字段,
从而放弃所有权,并完成了所有权向其他字段管理器的转移。
与客户端应用的对比
服务器端应用意味着既可以替代原来 kubectl apply
子命令的客户端实现,
也可供控制器 作为实施变更的简单有效机制。
与 kubectl
管理的 last-applied
注解相比,
服务器端应用使用一种更具声明性的方法来跟踪对象的字段管理,而不是记录用户最后一次应用的状态。
这意味着,使用服务器端应用的副作用,就是字段管理器所管理的对象的每个字段的相关信息也会变得可用。
由服务器端应用实现的冲突检测和解决方案的一个结果就是,
应用者总是可以在本地状态中得到最新的字段值。
如果得不到最新值,下次执行应用操作时就会发生冲突。
解决冲突三个选项的任意一个都会保证:此应用过的配置文件是服务器上对象字段的最新子集。
这和客户端应用(Client-Side Apply)不同,如果有其他用户覆盖了此值,
过期的值被留在了应用者本地的配置文件中。
除非用户更新了特定字段,此字段才会准确,
应用者没有途径去了解下一次应用操作是否会覆盖其他用户的修改。
另一个区别是使用客户端应用的应用者不能改变他们正在使用的 API 版本,但服务器端应用支持这个场景。
客户端应用和服务器端应用的迁移
从客户端应用升级到服务器端应用
客户端应用方式时,用户使用 kubectl apply
管理资源,
可以通过使用下面标记切换为使用服务器端应用。
kubectl apply --server-side [ --dry-run= server]
默认情况下,对象的字段管理从客户端应用方式迁移到 kubectl 触发的服务器端应用时,不会发生冲突。
注意:
保持注解 last-applied-configuration
是最新的。
从注解能推断出字段是由客户端应用管理的。
任何没有被客户端应用管理的字段将引发冲突。
举例说明,比如你在客户端应用之后,
使用 kubectl scale
去更新 replicas
字段,
可是该字段并没有被客户端应用所拥有,
在执行 kubectl apply --server-side
时就会产生冲突。
此操作以 kubectl
作为字段管理器来应用到服务器端应用。
作为例外,可以指定一个不同的、非默认字段管理器停止的这种行为,如下面的例子所示。
对于 kubectl 触发的服务器端应用,默认的字段管理器是 kubectl
。
kubectl apply --server-side --field-manager= my-manager [ --dry-run= server]
从服务器端应用降级到客户端应用
如果你用 kubectl apply --server-side
管理一个资源,
可以直接用 kubectl apply
命令将其降级为客户端应用。
降级之所以可行,这是因为 kubectl server-side apply
会保存最新的 last-applied-configuration
注解。
此操作以 kubectl
作为字段管理器应用到服务器端应用。
作为例外,可以指定一个不同的、非默认字段管理器停止这种行为,如下面的例子所示。
对于 kubectl 触发的服务器端应用,默认的字段管理器是 kubectl
。
kubectl apply --server-side --field-manager= my-manager [ --dry-run= server]
API 实现
支持服务器端应用的资源的 PATCH
动词可以接受非官方的 application/apply-patch+yaml
内容类型。
服务器端应用的用户可以将部分指定的对象以 YAML 格式作为 PATCH
请求的主体发送到资源的 URI。
应用配置时,你应该始终包含对要定义的结果(如所需状态)重要的所有字段。
所有 JSON 消息都是有效的 YAML。一些客户端使用 YAML 请求体指定服务器端应用请求,
而这些 YAML 同样是合法的 JSON。
访问控制和权限
由于服务端应用是一种 PATCH
类型的操作,
所以一个主体(例如 Kubernetes RBAC 的 Role)需要
patch 权限才能编辑存量资源,还需要 create 权限才能使用服务器端应用创建新资源。
清除 managedFields
通过使用 patch (JSON Merge Patch, Strategic Merge Patch, JSON Patch)覆盖对象,
或者通过 update (HTTP PUT
),可以从对象中剥离所有 managedFields
;
换句话说,通过除了 apply 之外的所有写操作均可实现这点。
清除 managedFields
字段的操作可以通过用空条目覆盖 managedFields
字段的方式实现。以下是两个示例:
PATCH /api/v1/namespaces/default/configmaps/example-cm
Accept: application/json
Content-Type: application/merge-patch+json
{
"metadata": {
"managedFields": [
{}
]
}
}
PATCH /api/v1/namespaces/default/configmaps/example-cm
Accept: application/json
Content-Type: application/json-patch+json
If-Match: 1234567890123456789
[{"op": "replace", "path": "/metadata/managedFields", "value": [{}]}]
这一操作将用只包含一个空条目的列表来覆盖 managedFields
,
从而实现从对象中整体去除 managedFields
。
注意,只把 managedFields
设置为空列表并不会重置该字段。
这一设计是有意为之的,目的是避免 managedFields
被与该字段无关的客户删除。
在某些场景中,执行重置操作的同时还会给出对 managedFields
之外的别的字段的变更,
对于这类操作,managedFields
首先会被重置,其他变更被压后处理。
其结果是,应用者取得了同一个请求中所有字段的所有权。
说明:
对于无法接收资源对象类型的子资源,服务器端应用无法正确跟踪其所有权。
如果你将针对此类子资源使用服务器端应用,则可能无法跟踪被变更的字段。
接下来
你可以阅读 Kubernetes API 参考中的
metadata
顶级字段的 managedFields
。
2.3 - 客户端库
本页面概要介绍了基于各种编程语言使用 Kubernetes API 的客户端库。
在使用 Kubernetes REST API 编写应用程序时,
你并不需要自己实现 API 调用和 “请求/响应” 类型。
你可以根据自己的编程语言需要选择使用合适的客户端库。
客户端库通常为你处理诸如身份验证之类的常见任务。
如果 API 客户端在 Kubernetes 集群中运行,大多数客户端库可以发现并使用 Kubernetes 服务账号进行身份验证,
或者能够理解 kubeconfig 文件
格式来读取凭据和 API 服务器地址。
官方支持的 Kubernetes 客户端库
以下客户端库由 Kubernetes SIG API Machinery
正式维护。
社区维护的客户端库
说明:  本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循
CNCF 网站指南 ,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读
内容指南 。
以下 Kubernetes API 客户端库是由社区,而非 Kubernetes 团队支持、维护的。
2.4 - Kubernetes 中的通用表达式语言
通用表达式语言 (Common Expression Language, CEL)
用于声明 Kubernetes API 的验证规则、策略规则和其他限制或条件。
CEL 表达式在 API 服务器 中直接进行处理,
这使得 CEL 成为许多可扩展性用例的便捷替代方案,而无需使用类似 Webhook 这种进程外机制。
只要控制平面的 API 服务器组件保持可用状态,你的 CEL 表达式就会继续执行。
语言概述
CEL 语言 的语法直观简单,
类似于 C、C++、Java、JavaScript 和 Go 中的表达式。
CEL 的设计目的是嵌入应用程序中。每个 CEL "程序" 都是一个单独的表达式,其评估结果为单个值。
CEL 表达式通常是短小的 "一行式",可以轻松嵌入到 Kubernetes API 资源的字符串字段中。
对 CEL 程序的输入是各种 “变量”。包含 CEL 的每个 Kubernetes API 字段都在 API
文档中声明了字段可使用哪些变量。例如,在 CustomResourceDefinition 的
x-kubernetes-validations[i].rules
字段中,self
和 oldSelf
变量可用,
并且分别指代要由 CEL 表达式验证的自定义资源数据的前一个状态和当前状态。
其他 Kubernetes API 字段可能声明不同的变量。请查阅 API 字段的 API 文档以了解该字段可使用哪些变量。
CEL 表达式示例:
CEL 表达式例子和每个表达式的用途
规则
用途
self.minReplicas <= self.replicas && self.replicas <= self.maxReplicas
验证定义副本的三个字段被正确排序
'Available' in self.stateCounts
验证映射中存在主键为 'Available' 的条目
(self.list1.size() == 0) != (self.list2.size() == 0)
验证两个列表中有一个非空,但不是两个都非空
self.envars.filter(e, e.name = 'MY_ENV').all(e, e.value.matches('^[a-zA-Z]*$'))
验证 listMap 条目的 'value' 字段,其主键字段 'name' 是 'MY_ENV'
has(self.expired) && self.created + self.ttl < self.expired
验证 'expired' 日期在 'create' 日期加上 'ttl' 持续时间之后
self.health.startsWith('ok')
验证 'health' 字符串字段具有前缀 'ok'
self.widgets.exists(w, w.key == 'x' && w.foo < 10)
验证具有键 'x' 的 listMap 项的 'foo' 属性小于 10
type(self) == string ? self == '99%' : self == 42
验证 int-or-string 字段是否同时具备 int 和 string 的属性
self.metadata.name == 'singleton'
验证某对象的名称与特定的值匹配(使其成为一个特例)
self.set1.all(e, !(e in self.set2))
验证两个 listSet 不相交
self.names.size() == self.details.size() && self.names.all(n, n in self.details)
验证 'details' 映射是由 'names' listSet 中的各项键入的
self.details.all(key, key.matches('^[a-zA-Z]*$'))
验证 'details' 映射的主键
self.details.all(key, self.details[key].matches('^[a-zA-Z]*$'))
验证 'details' 映射的值
CEL 选项、语言特性和库
CEL 配置了以下选项、库和语言特性,这些特性是在所列的 Kubernetes 版本中引入的:
CEL 函数、特性和语言设置支持 Kubernetes 控制平面回滚。
例如,CEL 可选值(Optional Values) 是在 Kubernetes 1.29 引入的,因此只有该版本或更新的
API 服务器才会接受使用 CEL Optional Values 的 CEL 表达式的写入请求。
但是,当集群回滚到 Kubernetes 1.28 时,已经存储在 API 资源中的使用了
"CEL Optional Values" 的 CEL 表达式将继续正确评估。
Kubernetes CEL 库
除了 CEL 社区库之外,Kubernetes 还包括在 Kubernetes 中使用 CEL 时所有可用的 CEL 库。
Kubernetes 列表库
列表库包括 indexOf
和 lastIndexOf
,这两个函数的功能类似于同名的字符串函数。
这些函数返回提供的元素在列表中的第一个或最后一个位置索引。
列表库还包括 min
、max
和 sum
。
sum
可以用于所有数字类型以及持续时间类型。
min
和 max
可用于所有可比较的类型。
isSorted
也作为一个便捷的函数提供,并且支持所有可比较的类型。
例如:
使用列表库函数的 CEL 表达式例子
CEL 表达式
用途
names.isSorted()
验证名称列表是否按字母顺序排列
items.map(x, x.weight).sum() == 1.0
验证对象列表的 “weight” 总和为 1.0
lowPriorities.map(x, x.priority).max() < highPriorities.map(x, x.priority).min()
验证两组优先级不重叠
names.indexOf('should-be-first') == 1
如果是特定值,则使用列表中的第一个名称
更多信息请查阅 Go 文档:
Kubernetes 列表库 。
Kubernetes 正则表达式库
除了 CEL 标准库提供的 matches
函数外,正则表达式库还提供了 find
和 findAll
,
使得更多种类的正则表达式运算成为可能。
例如:
使用正则表达式库函数的 CEL 表达式例子
CEL 表达式
用途
"abc 123".find('[0-9]+')
找到字符串中的第一个数字
"1, 2, 3, 4".findAll('[0-9]+').map(x, int(x)).sum() < 100
验证字符串中的数字之和小于 100
更多信息请查阅 Go 文档:
Kubernetes 正则表达式库 。
Kubernetes URL 库
为了更轻松、更安全地处理 URL,添加了以下函数:
isURL(string)
按照
Go 的 net/url
检查字符串是否是一个有效的 URL。该字符串必须是一个绝对 URL。
url(string) URL
将字符串转换为 URL,如果字符串不是一个有效的 URL,则返回错误。
一旦通过 url
函数解析,所得到的 URL 对象就具有
getScheme
、getHost
、getHostname
、getPort
、getEscapedPath
和 getQuery
访问器。
例如:
使用 URL 库函数的 CEL 表达式例子
CEL 表达式
用途
url('https://example.com:80/').getHost()
获取 URL 的 'example.com:80' 主机部分
url('https://example.com/path with spaces/').getEscapedPath()
返回 '/path%20with%20spaces/'
更多信息请查阅 Go 文档:
Kubernetes URL 库 。
Kubernetes 鉴权组件库
在 API 中使用 CEL 表达式,可以使用类型为 Authorizer
的变量,
这个鉴权组件可用于对请求的主体(已认证用户)执行鉴权检查。
API 资源检查的过程如下:
指定要检查的组和资源:Authorizer.group(string).resource(string) ResourceCheck
可以调用以下任意组合的构建器函数(Builder Function),以进一步缩小鉴权检查范围。
注意这些函数将返回接收者的类型,并且可以串接起来:
ResourceCheck.subresource(string) ResourceCheck
ResourceCheck.namespace(string) ResourceCheck
ResourceCheck.name(string) ResourceCheck
调用 ResourceCheck.check(verb string) Decision
来执行鉴权检查。
调用 allowed() bool
或 reason() string
来查验鉴权检查的结果。
对非资源访问的鉴权过程如下:
仅指定路径:Authorizer.path(string) PathCheck
。
调用 PathCheck.check(httpVerb string) Decision
来执行鉴权检查。
调用 allowed() bool
或 reason() string
来查验鉴权检查的结果。
对于服务账号执行鉴权检查的方式:
Authorizer.serviceAccount(namespace string, name string) Authorizer
使用 URL 库函数的 CEL 表达式示例
CEL 表达式
用途
authorizer.group('').resource('pods').namespace('default').check('create').allowed()
如果主体(用户或服务账号)被允许在 default
名字空间中创建 Pod,返回 true。
authorizer.path('/healthz').check('get').allowed()
检查主体(用户或服务账号)是否有权限向 /healthz API 路径发出 HTTP GET 请求。
authorizer.serviceAccount('default', 'myserviceaccount').resource('deployments').check('delete').allowed()
检查服务账号是否有权限删除 Deployment。
特性状态:
Kubernetes v1.31 [alpha]
启用 Alpha 级别的 AuthorizeWithSelectors
特性后,字段和标签选择算符可以被添加到鉴权检查中。
使用选择算符鉴权函数的 CEL 表达式示例
CEL 表达式
用途
authorizer.group('').resource('pods').fieldSelector('spec.nodeName=mynode').check('list').allowed()
如果主体(用户或服务账号)被允许使用字段选择算符 spec.nodeName=mynode
列举 Pod,返回 true。
authorizer.group('').resource('pods').labelSelector('example.com/mylabel=myvalue').check('list').allowed()
如果主体(用户或服务账号)被允许使用标签选择算符 example.com/mylabel=myvalue
列举 Pod,返回 true。
更多信息请参阅 Go 文档:
Kubernetes Authz library
和 Kubernetes AuthzSelectors library 。
Kubernetes 数量库
Kubernetes 1.28 添加了对数量字符串(例如 1.5G、512k、20Mi)的操作支持。
一旦通过 quantity
函数解析,得到的 Quantity 对象将具有以下成员函数库:
Quantity 的可用成员函数
成员函数
CEL 返回值
描述
isInteger()
bool
仅当 asInteger 可以被安全调用且不出错时,才返回 true
asInteger()
int
将当前值作为 int64 的表示返回,如果转换会导致溢出或精度丢失,则会报错
asApproximateFloat()
float
返回数量的 float64 表示,可能会丢失精度。如果数量的值超出了 float64 的范围,则返回 +Inf/-Inf
sign()
int
如果数量为正,则返回 1;如果数量为负,则返回 -1;如果数量为零,则返回 0
add(<Quantity>)
Quantity
返回两个数量的和
add(<int>)
Quantity
返回数量和整数的和
sub(<Quantity>)
Quantity
返回两个数量的差
sub(<int>)
Quantity
返回数量减去整数的差
isLessThan(<Quantity>)
bool
如果接收值小于操作数,则返回 true
isGreaterThan(<Quantity>)
bool
如果接收值大于操作数,则返回 true
compareTo(<Quantity>)
int
将接收值与操作数进行比较,如果它们相等,则返回 0;如果接收值大于操作数,则返回 1;如果接收值小于操作数,则返回 -1
例如:
使用 URL 库函数的 CEL 表达式示例
CEL 表达式
用途
quantity("500000G").isInteger()
测试转换为整数是否会报错
quantity("50k").asInteger()
精确转换为整数
quantity("9999999999999999999999999999999999999G").asApproximateFloat()
松散转换为浮点数
quantity("50k").add(quantity("20k"))
两个数量相加
quantity("50k").sub(20000)
从数量中减去整数
quantity("50k").add(20).sub(quantity("100k")).sub(-50000)
链式相加和减去整数和数量
quantity("200M").compareTo(quantity("0.2G"))
比较两个数量
quantity("150Mi").isGreaterThan(quantity("100Mi"))
测试数量是否大于接收值
quantity("50M").isLessThan(quantity("100M"))
测试数量是否小于接收值
类型检查
CEL 是一种逐渐类型化的语言 。
一些 Kubernetes API 字段包含完全经过类型检查的 CEL 表达式。
例如,CustomResourceDefinition 验证规则 就是完全经过类型检查的。
一些 Kubernetes API 字段包含部分经过类型检查的 CEL 表达式。
部分经过类型检查的表达式是指一些变量是静态类型,而另一些变量是动态类型的表达式。
例如在 ValidatingAdmissionPolicy
的 CEL 表达式中,request
变量是有类型的,但 object
变量是动态类型的。
因此,包含 request.namex
的表达式将无法通过类型检查,因为 namex
字段未定义。
然而,即使对于 object
所引用的资源种类没有定义 namex
字段,
object.namex
也会通过类型检查,因为 object
是动态类型。
在 CEL 中,has()
宏可用于检查动态类型变量的字段是否可访问,然后再尝试访问该字段的值。
例如:
has(object.namex) ? object.namex == 'special' : request.name == 'special'
类型系统集成
表格显示了 OpenAPIv3 类型和 CEL 类型之间的关系
OpenAPIv3 类型
CEL 类型
设置了 properties 的 'object'
object / "message type"(type(<object>)
评估为 selfType<uniqueNumber>.path.to.object.from.self
)
设置了 AdditionalProperties 的 'object'
map
设置了 x-kubernetes-embedded-type 的 'object'
object / "message type",'apiVersion'、'kind'、'metadata.name' 和 'metadata.generateName' 被隐式包含在模式中
设置了 x-kubernetes-preserve-unknown-fields 的 'object'
object / "message type",CEL 表达式中不可访问的未知字段
x-kubernetes-int-or-string
int 或 string 的并集,self.intOrString < 100 || self.intOrString == '50%'
对于 50
和 "50%"
都评估为 true
'array'
list
设置了 x-kubernetes-list-type=map 的 'array'
list,具有基于 Equality 和唯一键保证的 map
设置了 x-kubernetes-list-type=set 的 'array'
list,具有基于 Equality 和唯一条目保证的 set
'boolean'
boolean
'number' (所有格式)
double
'integer' (所有格式)
int (64)
**非等价 **
uint (64)
'null'
null_type
'string'
string
设置了 format=byte 的 'string'(以 base64 编码)
bytes
设置了 format=date 的 'string'
timestamp (google.protobuf.Timestamp)
设置了 format=datetime 的 'string'
timestamp (google.protobuf.Timestamp)
设置了 format=duration 的 'string'
duration (google.protobuf.Duration)
另见:CEL 类型 、
OpenAPI 类型 、
Kubernetes 结构化模式 。
x-kubernetes-list-type
为 set
或 map
的数组进行相等比较时会忽略元素顺序。
例如,如果这些数组代表 Kubernetes 的 set
值,则 [1, 2] == [2, 1]
。
使用 x-kubernetes-list-type
的数组进行串接时,使用 list 类型的语义:
set
X + Y
执行并集操作,保留 X
中所有元素的数组位置,
将 Y
中非交集元素追加到 X
中,保留它们的部分顺序。
map
X + Y
执行合并操作,保留 X
中所有键的数组位置,
但是当 X
和 Y
的键集相交时,将 Y
中的值覆盖 X
中的值。
将 Y
中非交集键的元素附加到 X
中,保留它们的部分顺序。
转义
仅形如 [a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的 Kubernetes 资源属性名可以从 CEL 中访问。
当在表达式中访问可访问的属性名时,会根据以下规则进行转义:
CEL 标识符转义规则表
转义序列
等价的属性名
__underscores__
__
__dot__
.
__dash__
-
__slash__
/
__{keyword}__
CEL 保留的 关键字
当你需要转义 CEL 的任一 保留的 关键字时,你需要使用下划线转义来完全匹配属性名
(例如,sprint
这个单词中的 int
不会被转义,也不需要被转义)。
转义示例:
转义的 CEL 标识符例子
属性名称
带有转义的属性名称的规则
namespace
self.__namespace__ > 0
x-prop
self.x__dash__prop > 0
redact__d
self.redact__underscores__d > 0
string
self.startsWith('kube')
资源约束
CEL 不是图灵完备的,提供了多种生产安全控制手段来限制执行时间。
CEL 的资源约束 特性提供了关于表达式复杂性的反馈,并帮助保护 API 服务器免受过度的资源消耗。
CEL 的资源约束特性用于防止 CEL 评估消耗过多的 API 服务器资源。
资源约束特性的一个关键要素是 CEL 定义的成本单位 ,它是一种跟踪 CPU 利用率的方式。
成本单位独立于系统负载和硬件。成本单位也是确定性的;对于任何给定的 CEL 表达式和输入数据,
由 CEL 解释器评估表达式将始终产生相同的成本。
CEL 的许多核心运算具有固定成本。例如比较(例如 <
)这类最简单的运算成本为 1。
有些运算具有更高的固定成本,例如列表字面声明具有 40 个成本单位的固定基础成本。
调用本地代码实现的函数时,基于运算的时间复杂度估算其成本。
举例而言:match
和 find
这类使用正则表达式的运算使用
length(regexString)*length(inputString)
的近似成本进行估算。
这个近似的成本反映了 Go 的 RE2 实现的最坏情况的时间复杂度。
运行时成本预算
所有由 Kubernetes 评估的 CEL 表达式都受到运行时成本预算的限制。
运行时成本预算是通过在解释 CEL 表达式时增加成本单元计数器来计算实际 CPU 利用率的估算值。
如果 CEL 解释器执行的指令太多,将超出运行时成本预算,表达式的执行将停止,并将出现错误。
一些 Kubernetes 资源定义了额外的运行时成本预算,用于限制多个表达式的执行。
如果所有表达式的成本总和超过预算,表达式的执行将停止,并将出现错误。
例如,自定义资源的验证具有针对验证自定义资源所评估的所有
验证规则 的
每个验证 运行时成本预算。
估算的成本限制
对于某些 Kubernetes 资源,API 服务器还可能检查 CEL 表达式的最坏情况估计运行时间是否过于昂贵而无法执行。
如果是,则 API 服务器会拒绝包含 CEL 表达式的创建或更新操作,以防止 CEL 表达式被写入 API 资源。
此特性提供了更强的保证,即写入 API 资源的 CEL 表达式将在运行时进行评估,而不会超过运行时成本预算。
2.5 - Kubernetes 弃用策略
本文档详细解释系统中各个层面的弃用策略(Deprecation Policy)。
Kubernetes 是一个组件众多、贡献者人数众多的大系统。
就像很多类似的软件,所提供的功能特性集合会随着时间推移而自然发生变化,
而且有时候某个功能特性可能需要被移除。被移除的可能是一个 API、
一个参数标志或者甚至某整个功能特性。为了避免影响到现有用户,
Kubernetes 对于其中渐次移除的各个方面规定了一种弃用策略并遵从此策略。
弃用 API 的一部分
由于 Kubernetes 是一个 API 驱动的系统,API 会随着时间推移而演化,
以反映人们对问题空间的认识的变化。Kubernetes API 实际上是一个 API 集合,
其中每个成员称作“API 组(API Group)”,并且每个 API 组都是独立管理版本的。
API 版本 会有三类,
每类有不同的废弃策略:
示例
分类
v1
正式发布(Generally available,GA,稳定版本)
v1beta1
Beta (预发布)
v1alpha1
Alpha (试验性)
给定的 Kubernetes 发布版本中可以支持任意数量的 API 组,且每组可以包含任意个数的版本。
下面的规则负责指导 API 元素的弃用,具体元素包括:
REST 资源(也即 API 对象)
REST 资源的字段
REST 资源的注解,包含“beta”类注解,但不包含“alpha”类注解
枚举值或者常数值
组件配置结构
以下是跨正式发布版本时要实施的规则,不适用于对 master 或发布分支上不同提交之间的变化。
规则 #1:只能在增加 API 组版本号时删除 API 元素。
一旦在某个特定 API 组版本中添加了 API 元素,则该元素不可从该版本中删除,
且其行为也不能大幅度地变化,无论属于哪一类(GA、Alpha 或 Beta)。
说明:
由于历史原因,Kubernetes 中存在两个“单体式(Monolithic)”API 组 -
“core”(无组名)和“extensions”。这两个遗留 API 组中的资源会被逐渐迁移到更为特定领域的 API 组中。
规则 #2:在给定的发布版本中,API 对象必须能够在不同的 API
版本之间来回转换且不造成信息丢失,除非整个 REST 资源在某些版本中完全不存在。
例如,一个对象可被用 v1 来写入之后用 v2 来读出并转换为 v1,所得到的 v1 必须与原来的
v1 对象完全相同。v2 中的表现形式可能与 v1 不同,但系统知道如何在两个版本之间执行双向转换。
此外,v2 中添加的所有新字段都必须能够转换为 v1 再转换回来。这意味着 v1
必须添加一个新的等效字段或者将其表现为一个注解。
规则 #3:给定类别的 API 版本不可被弃用以支持稳定性更差的 API 版本。
一个正式发布的(GA)API 版本可替换 Beta 或 Alpha API 版本。
Beta API 版本可以替换早期的 Beta 和 Alpha API 版本,但 不可以 替换正式的 API 版本。
Alpha API 版本可以替换早期的 Alpha API 版本,但 不可以 替换 Beta 或正式的 API 版本。
规则 #4a:API 生命周期由 API 稳定性级别决定
GA API 版本可以被标记为已弃用,但不得在 Kubernetes 的主要版本中删除
Beta API 版本在引入后不超过 9 个月或 3 个次要版本(以较长者为准)将被弃用,
并且在弃用后 9 个月或 3 个次要版本(以较长者为准)不再提供服务
Alpha API 版本可能会在任何版本中被删除,不另行通知
这确保了 Beta API 支持涵盖了最多 2 个版本的支持版本偏差 ,
并且这些 API 不会在不稳定的 Beta 版本上停滞不前,积累的生产使用数据将在对 Beta API 的支持结束时中断。
说明:
目前没有删除正式版本 API 的 Kubernetes 主要版本修订计划。
说明:
在 #52185 被解决之前,
已经被保存到持久性存储中的 API 版本都不可以被移除。
你可以禁止这些版本所对应的 REST 末端(在符合本文中弃用时间线的前提下),
但是 API 服务器必须仍能解析和转换存储中以前写入的数据。
规则 #4b:标记为“preferred(优选的)” API 版本和给定 API 组的
“storage version(存储版本)”在既支持老版本也支持新版本的 Kubernetes
发布版本出来以前不可以提升其版本号。
用户必须能够升级到 Kubernetes 新的发行版本,之后再回滚到前一个发行版本,
且整个过程中无需针对新的 API 版本做任何转换,也不允许出现功能损坏的情况,
除非用户显式地使用了仅在较新版本中才存在的功能特性。
就对象的存储表示而言,这一点尤其是不言自明的。
以上所有规则最好通过例子来说明。假定现有 Kubernetes 发行版本为 X,其中引入了新的 API 组。
大约每隔 4 个月会有一个新的 Kubernetes 版本被发布(每年 3 个版本)。
下面的表格描述了在一系列后续的发布版本中哪些 API 版本是受支持的。
发布版本
API 版本
优选/存储版本
注释
X
v1alpha1
v1alpha1
X+1
v1alpha2
v1alpha2
v1alpha1 被移除。查阅发布说明了解要采取的行动。
X+2
v1beta1
v1beta1
v1alpha2 被移除。查阅发布说明了解要采取的行动。
X+3
v1beta2、v1beta1(已弃用)
v1beta1
v1beta1 被弃用。查阅发布说明了解要采取的行动。
X+4
v1beta2、v1beta1(已弃用)
v1beta2
X+5
v1、v1beta1(已弃用)、v1beta2(已弃用)
v1beta2
v1beta2 被弃用。查阅发布说明了解要采取的行动。
X+6
v1、v1beta2(已弃用)
v1
v1beta1 被移除。查阅发布说明了解要采取的行动。
X+7
v1、v1beta2(已弃用)
v1
X+8
v2alpha1、v1
v1
v1beta2 被移除。查阅发布说明了解要采取的行动。
X+9
v2alpha2、v1
v1
v2alpha1 被移除。查阅发布说明了解要采取的行动。
X+10
v2beta1、v1
v1
v2alpha2 被移除。查阅发布说明了解要采取的行动。
X+11
v2beta2、v2beta1(已弃用)、v1
v1
v2beta1 被弃用。查阅发布说明了解要采取的行动。
X+12
v2、v2beta2(已弃用)、v2beta1(已弃用)、v1(已弃用)
v1
v2beta2 已被弃用。查阅发布说明了解要采取的行动。
v1 已被弃用,取而代之的是 v2,但不会被移除
X+13
v2、v2beta1(已弃用)、v2beta2(已弃用)、v1(已弃用)
v2
X+14
v2、v2beta2(已弃用)、v1(已弃用)
v2
v2beta1 被移除。查阅发布说明了解要采取的行动。
X+15
v2、v1(已弃用)
v2
v2beta2 被移除。查阅发布说明了解要采取的行动。
REST 资源(也即 API 对象)
考虑一个假想的名为 Widget 的 REST 资源,在上述时间线中位于 API v1,而现在打算将其弃用。
我们会在文档和公告 中与
X+1 版本的发布同步记述此弃用决定。
Widget 资源仍会在 API 版本 v1(已弃用)中存在,但不会出现在 v2alpha1 中。
Widget 资源会 X+8 发布版本之前(含 X+8)一直存在并可用。
只有在发布版本 X+9 中,API v1 寿终正寝时,Widget
才彻底消失,相应的资源行为也被移除。
从 Kubernetes v1.19 开始,当 API 请求被发送到一个已弃用的 REST API 末端时:
API 响应中会包含一个 Warning
头部字段(如 RFC7234 5.5 节 所定义);
该请求会导致对应的审计事件 中会增加一个注解
"k8s.io/deprecated":"true"
。
kube-apiserver
进程的 apiserver_requested_deprecated_apis
度量值会被设置为 1
。
该度量值还附带 group
、version
、resource
和 subresource
标签
(可供添加到度量值 apiserver_request_total
上),
和一个 removed_release
标签,标明该 API 将消失的 Kubernetes 发布版本。
下面的 Prometheus 查询会返回对 v1.22 中将移除的、已弃用的 API 的请求的信息:
apiserver_requested_deprecated_apis {removed_release = "1.22 "} * on ( group ,version ,resource ,subresource ) group_right () apiserver_request_total
REST 资源的字段
就像整个 REST 资源一样,在 API v1 中曾经存在的各个字段在 API v1 被移除之前必须一直存在且起作用。
与整个资源上的规定不同,v2 API 可以选择为字段提供不同的表示方式,
只要对应的资源对象可在不同版本之间来回转换即可。
例如,v1 版本中一个名为 "magnitude" 的已弃用字段可能在 API v2 中被命名为 "deprecatedMagnitude"。
当 v1 最终被移除时,废弃的字段也可以从 v2 中移除。
枚举值或常数值
就像前文讲述的 REST 资源及其中的单个字段一样,API v1 中所支持的常数值必须在
API v1 被移除之前一直存在且起作用。
组件配置结构
组件的配置也是有版本的,并且按 REST 资源的方式来管理。
将来的工作
随着时间推移,Kubernetes 会引入粒度更细的 API 版本。
到那时,这里的规则会根据需要进行调整。
弃用一个标志或 CLI 命令
Kubernetes 系统中包含若干不同的、相互协作的程序。
有时,Kubernetes 可能会删除这些程序的某些标志或 CLI 命令(统称“命令行元素”)。
这些程序可以天然地划分到两个大组中:面向用户的和面向管理员的程序。
二者之间的弃用策略略有不同。
除非某个标志显示地通过前缀或文档来标明其为“alpha”或“beta”,
该标志要被视作正式发布的(GA)。
命令行元素相当于系统的 API 的一部分,不过因为它们并没有采用 REST API
一样的方式来管理版本,其弃用规则规定如下:
规则 #5a:面向用户的命令行元素(例如,kubectl)必须在其宣布被弃用其在以下时长内仍能使用:
GA:12 个月或者 2 个发布版本(取其较长者)
Beta:3 个月或者 1 个发布版本(取其较长者)
Alpha:0 发布版本
规则 #5b:面向管理员的命令行元素(例如,kubelet)必须在其被宣布弃用之后以下时长内保持可用:
GA:6 个月或 1 个发行版本(取其较长者)
Beta: 3 个月或 1 个发行版本(取其较长者)
Alpha: 0 个发布版本
规则 #5c:不可以为了支持稳定性更差的 CLI 元素而弃用现有命令行(CLI)元素
类似于 API 的规则 #3,如果命令行的某个元素被替换为另一种实现方式,
例如通过重命名现有元素或者通过使用来自文件的配置替代命令行参数,
那么推荐的替代方式的稳定性必须相同或更高。
规则 #6:被弃用的 CLI 元素在被用到时必须能够产生警告,而警告的产生是可以被禁止的。
弃用某功能特性或行为
在一些较偶然的情形下,某 Kubernetes 发行版本需要弃用系统的某项功能特性或者行为,
而对应的功能特性或行为并不受 API 或 CLI 控制。在这种情况下,其弃用规则如下:
规则 #7:被弃用的行为必须在被宣布弃用之后至少 1 年时间内必须保持能用。
如果特性或行为正在替换为需要处理才能适应变更的替代实现,你应尽可能简化过渡。
如果替代实现在 Kubernetes 组织的控制下,则适用以下规则:
规则 #8:不得因为偏好稳定性更差的替代实现而弃用现有特性或行为。
例如,不可以因为偏好某 Beta 阶段的替代方式而弃用对应的已正式发布(GA)的特性。
然而,Kubernetes 项目鼓励用户在替代实现达到相同成熟水平之前就采用并过渡到替代实现。
这对于探索某特性的全新用例或对替代实现提供早期反馈尤为重要。
替代实现有时可能是外部工具或产品,例如某特性可能从 kubelet 迁移到不受 Kubernetes 项目控制的容器运行时。
在这种情况下,此规则不再适用,但你必须努力确保存在一种过渡途径能够不影响组件的成熟水平。
以容器运行时为例,这个努力可能包括尝试确保流行的容器运行时在实现对应的替代行为时,能够提供相同稳定性水平的版本。
特性和行为的弃用规则并不意味着对系统的所有更改都受此策略约束。
这些规则仅适用于重大的、用户可见的行为;这些行为会影响到在 Kubernetes
中运行的应用的正确性,或者影响到 Kubernetes 集群的管理。
这些规则也适用于那些被整个移除的功能特性或行为。
上述规则的一个例外是 特性门控(Feature Gate) 。特性门控是一些键值偶对,
允许用户启用或禁用一些试验性的功能特性。
特性门控意在覆盖功能特性的整个开发周期,它们无意成为长期的 API。
因此,它们会在某功能特性正式发布或被抛弃之后被弃用和删除。
随着一个功能特性经过不同的成熟阶段,相关的特性门控也会演化。
与功能特性生命周期对应的特性门控状态为:
Alpha:特性门控默认被禁用,只能由用户显式启用。
Beta:特性门控默认被弃用,可被用户显式禁用。
GA: 特性门控被弃用(参见弃用 ),并且不再起作用。
GA,弃用窗口期结束:特性门控被移除,不再接受调用。
弃用
功能特性在正式发布之前的生命周期内任何时间点都可被移除。
当未正式发布的功能特性被移除时,它们对应的特性门控也被弃用。
当尝试禁用一个不再起作用的特性门控时,该调用会失败,这样可以避免毫无迹象地执行一些不受支持的场景。
在某些场合,移除一个即将正式发布的功能特性需要很长时间。
特性门控可以保持其功能,直到对应的功能特性被彻底移除,直到那时特性门控自身才可被弃用。
由于移除一个已经正式发布的功能特性对应的特性门控也需要一定时间,对特性门控的调用可能一直被允许,
前提是特性门控对功能本身无影响且特性门控不会引发任何错误。
意在允许用户禁用的功能特性应该包含一个在相关联的特性门控中禁用该功能的机制。
特性门控的版本管理与之前讨论的组件版本管理不同,因此其对应的弃用策略如下:
规则 #9:特性门控所对应的功能特性经历下面所列的成熟性阶段转换时,特性门控必须被弃用。
特性门控弃用时必须在以下时长内保持其功能可用:
Beta 特性转为 GA:6 个月或者 2 个发布版本(取其较长者)
Beta 特性转为丢弃:3 个月或者 1 个发布版本(取其较长者)
Alpha 特性转为丢弃:0 个发布版本
规则 #10:已弃用的特色门控再被使用时必须给出警告回应。当特性门控被弃用时,
必须在发布说明和对应的 CLI 帮助信息中通过文档宣布。
警告信息和文档都要标明是否某特性门控不再起作用。
弃用度量值
Kubernetes 控制平面的每个组件都公开度量值(通常是 /metrics
端点),它们通常由集群管理员使用。
并不是所有的度量值都是同样重要的:一些度量值通常用作 SLIs 或被使用来确定 SLOs,这些往往比较重要。
其他度量值在本质上带有实验性,或者主要用于 Kubernetes 开发过程。
因此,度量值分为三个稳定性类别(ALPHA
、BETA
、STABLE
);
此分类会影响在 Kubernetes 发布版本中移除某度量值。
所对应的分类取决于对该度量值重要性的预期。
弃用和移除度量值的规则如下:
规则 #11a: 对于相应的稳定性类别,度量值起作用的周期必须不小于:
STABLE: 4 个发布版本或者 12 个月 (取其较长者)
BETA: 2 个发布版本或者 8 个月 (取其较长者)
ALPHA: 0 个发布版本
规则 #11b: 在度量值被宣布启用之后,它起作用的周期必须不小于:
STABLE: 3 个发布版本或者 9 个月 (取其较长者)
BETA: 1 个发布版本或者 4 个月 (取其较长者)
ALPHA: 0 个发布版本
已弃用的度量值将在其描述文本前加上一个已弃用通知字符串 '(Deprecated from x.y)',
并将在度量值被记录期间发出警告日志。就像稳定的、未被弃用的度量指标一样,
被弃用的度量值将自动注册到 metrics 端点,因此被弃用的度量值也是可见的。
在随后的版本中(当度量值 deprecatedVersion
等于 当前 Kubernetes 版本 - 3 ),
被弃用的度量值将变成 隐藏(Hidden) metric 度量值。
与被弃用的度量值不同,隐藏的度量值将不再被自动注册到 metrics 端点(因此被隐藏)。
但是,它们可以通过可执行文件的命令行标志显式启用(--show-hidden-metrics-for-version=
)。
如果集群管理员不能对早期的弃用警告作出反应,这一设计就为他们提供了抓紧迁移弃用度量值的途径。
隐藏的度量值应该在再过一个发行版本后被删除。
例外
没有策略可以覆盖所有情况。此策略文档是一个随时被更新的文档,会随着时间推移演化。
在实践中,会有一些情况无法很好地匹配到这里的弃用策略,
或者这里的策略变成了很严重的羁绊。这类情形要与 SIG 和项目领导讨论,
寻求对应场景的最佳解决方案。请一直铭记,Kubernetes 承诺要成为一个稳定的系统,
至少会尽力做到不会影响到其用户。此弃用策略的任何例外情况都会在所有相关的发布说明中公布。
2.6 - 已弃用 API 的迁移指南
随着 Kubernetes API 的演化,API 会周期性地被重组或升级。
当 API 演化时,老的 API 会被弃用并被最终删除。
本页面包含你在将已弃用 API 版本迁移到新的更稳定的 API 版本时需要了解的知识。
各发行版本中移除的 API
v1.32
v1.32 发行版本将停止提供以下已弃用的 API 版本:
流控制资源
FlowSchema 和 PriorityLevelConfiguration 的
flowcontrol.apiserver.k8s.io/v1beta3 API 版本将不再在 v1.32 中提供。
迁移清单和 API 客户端以使用 flowcontrol.apiserver.k8s.io/v1 API 版本(自 v1.29 起可用)。
所有现有的持久对象都可以通过新的 API 访问。
flowcontrol.apiserver.k8s.io/v1 中的显着变化:
PriorityLevelConfiguration 的 spec.limited.nominalConcurrencyShares
字段仅在未指定时默认为 30,并且显式值 0 时不会更改为 30。
v1.29
v1.29 发行版本停止支持以下已弃用的 API 版本:
流控制资源
从 v1.29 版本开始不再提供 flowcontrol.apiserver.k8s.io/v1beta2 API 版本的
FlowSchema 和 PriorityLevelConfiguration。
迁移清单和 API 客户端使用 flowcontrol.apiserver.k8s.io/v1 API 版本(自 v1.29 版本开始可用),
或 flowcontrol.apiserver.k8s.io/v1beta3 API 版本(自 v1.26 起可用);
所有的已保存的对象都可以通过新的 API 来访问;
flowcontrol.apiserver.k8s.io/v1 中的显着变化:
PriorityLevelConfiguration 的 spec.limited.assuredConcurrencyShares
字段已被重命名为 spec.limited.nominalConcurrencyShares
,仅在未指定时默认为 30,
并且显式值 0 不会更改为 30。
flowcontrol.apiserver.k8s.io/v1beta3 中需要额外注意的变更:
PriorityLevelConfiguration 的 spec.limited.assuredConcurrencyShares
字段已被更名为 spec.limited.nominalConcurrencyShares
。
v1.27
v1.27 发行版本停止支持以下已弃用的 API 版本:
CSIStorageCapacity
从 v1.27 版本开始不再提供 storage.k8s.io/v1beta1 API 版本的 CSIStorageCapacity。
自 v1.24 版本起,迁移清单和 API 客户端使用 storage.k8s.io/v1 API 版本
所有现有的持久化对象都可以通过新的 API 访问
没有需要额外注意的变更
v1.26
v1.26 发行版本中将去除以下已弃用的 API 版本:
流控制资源
从 v1.26 版本开始不再提供 flowcontrol.apiserver.k8s.io/v1beta1 API 版本的
FlowSchema 和 PriorityLevelConfiguration。
迁移清单和 API 客户端使用 flowcontrol.apiserver.k8s.io/v1beta2 API 版本;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
HorizontalPodAutoscaler
从 v1.26 版本开始不再提供 autoscaling/v2beta2 API 版本的
HorizontalPodAutoscaler。
迁移清单和 API 客户端使用 autoscaling/v2 API 版本,
此 API 从 v1.23 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问。
值得注意的变更:
targetAverageUtilization
被替换为 target.averageUtilization
和 target.type: Utilization
。
请参阅基于多项度量指标和自定义度量指标自动扩缩 。
v1.25
v1.25 发行版本将停止提供以下已废弃 API 版本:
CronJob
从 v1.25 版本开始不再提供 batch/v1beta1 API 版本的 CronJob。
迁移清单和 API 客户端使用 batch/v1 API 版本,此 API 从 v1.21 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
EndpointSlice
从 v1.25 版本开始不再提供 discovery.k8s.io/v1beta1 API 版本的 EndpointSlice。
迁移清单和 API 客户端使用 discovery.k8s.io/v1 API 版本,此 API 从 v1.21 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
discovery.k8s.io/v1 中值得注意的变更有:
使用每个 Endpoint 的 nodeName
字段而不是已被弃用的
topology["kubernetes.io/hostname"]
字段;
使用每个 Endpoint 的 zone
字段而不是已被弃用的
topology["kubernetes.io/zone"]
字段;
topology
字段被替换为 deprecatedTopology
,并且在 v1 版本中不可写入。
Event
从 v1.25 版本开始不再提供 events.k8s.io/v1beta1 API 版本的 Event。
迁移清单和 API 客户端使用 events.k8s.io/v1 API 版本,此 API 从 v1.19 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
events.k8s.io/v1 中值得注意的变更有:
type
字段只能设置为 Normal
和 Warning
之一;
involvedObject
字段被更名为 regarding
;
action
、reason
、reportingController
和 reportingInstance
字段
在创建新的 events.k8s.io/v1 版本 Event 时都是必需的字段;
使用 eventTime
而不是已被弃用的 firstTimestamp
字段
(该字段已被更名为 deprecatedFirstTimestamp
,且不允许出现在新的 events.k8s.io/v1 Event 对象中);
使用 series.lastObservedTime
而不是已被弃用的 lastTimestamp
字段
(该字段已被更名为 deprecatedLastTimestamp
,且不允许出现在新的 events.k8s.io/v1 Event 对象中);
使用 series.count
而不是已被弃用的 count
字段
(该字段已被更名为 deprecatedCount
,且不允许出现在新的 events.k8s.io/v1 Event 对象中);
使用 reportingController
而不是已被弃用的 source.component
字段
(该字段已被更名为 deprecatedSource.component
,且不允许出现在新的 events.k8s.io/v1 Event 对象中);
使用 reportingInstance
而不是已被弃用的 source.host
字段
(该字段已被更名为 deprecatedSource.host
,且不允许出现在新的 events.k8s.io/v1 Event 对象中)。
HorizontalPodAutoscaler
从 v1.25 版本开始不再提供 autoscaling/v2beta1 API 版本的
HorizontalPodAutoscaler。
迁移清单和 API 客户端使用 autoscaling/v2 API 版本,此 API 从 v1.23 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问。
值得注意的变更:
targetAverageUtilization
被替换为 target.averageUtilization
和 target.type: Utilization
。
请参阅基于多项度量指标和自定义度量指标自动扩缩 。
PodDisruptionBudget
从 v1.25 版本开始不再提供 policy/v1beta1 API 版本的 PodDisruptionBudget。
迁移清单和 API 客户端使用 policy/v1 API 版本,此 API 从 v1.21 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
policy/v1 中需要额外注意的变更有:
在 policy/v1
版本的 PodDisruptionBudget 中将 spec.selector
设置为空({}
)时会选择名字空间中的所有 Pod(在 policy/v1beta1
版本中,空的 spec.selector
不会选择任何 Pod)。如果 spec.selector
未设置,则在两个 API 版本下都不会选择任何 Pod。
PodSecurityPolicy
从 v1.25 版本开始不再提供 policy/v1beta1 API 版本中的 PodSecurityPolicy,
并且 PodSecurityPolicy 准入控制器也会被删除。
迁移到 Pod 安全准入 或第三方准入 Webhook 。
有关迁移指南,请参阅从 PodSecurityPolicy 迁移到内置 PodSecurity 准入控制器 。
有关弃用的更多信息,请参阅 PodSecurityPolicy 弃用:过去、现在和未来 。
RuntimeClass
从 v1.25 版本开始不再提供 node.k8s.io/v1beta1 API 版本中的 RuntimeClass。
迁移清单和 API 客户端使用 node.k8s.io/v1 API 版本,此 API 从 v1.20 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
v1.22
v1.22 发行版本停止提供以下已废弃 API 版本:
Webhook 资源
admissionregistration.k8s.io/v1beta1 API 版本的 MutatingWebhookConfiguration
和 ValidatingWebhookConfiguration 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 admissionregistration.k8s.io/v1 API 版本,
此 API 从 v1.16 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
webhooks[*].failurePolicy
在 v1 版本中默认值从 Ignore
改为 Fail
webhooks[*].matchPolicy
在 v1 版本中默认值从 Exact
改为 Equivalent
webhooks[*].timeoutSeconds
在 v1 版本中默认值从 30s
改为 10s
webhooks[*].sideEffects
的默认值被删除,并且该字段变为必须指定;
在 v1 版本中可选的值只能是 None
和 NoneOnDryRun
之一
webhooks[*].admissionReviewVersions
的默认值被删除,在 v1
版本中此字段变为必须指定(AdmissionReview 的被支持版本包括 v1
和 v1beta1
)
webhooks[*].name
必须在通过 admissionregistration.k8s.io/v1
创建的对象列表中唯一
CustomResourceDefinition
apiextensions.k8s.io/v1beta1 API 版本的 CustomResourceDefinition
不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 apiextensions.k8s.io/v1 API 版本,此 API 从 v1.16 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
spec.scope
的默认值不再是 Namespaced
,该字段必须显式指定
spec.version
在 v1 版本中被删除;应改用 spec.versions
spec.validation
在 v1 版本中被删除;应改用 spec.versions[*].schema
spec.subresources
在 v1 版本中被删除;应改用 spec.versions[*].subresources
spec.additionalPrinterColumns
在 v1 版本中被删除;应改用
spec.versions[*].additionalPrinterColumns
spec.conversion.webhookClientConfig
在 v1 版本中被移动到
spec.conversion.webhook.clientConfig
中
spec.conversion.conversionReviewVersions
在 v1 版本中被移动到
spec.conversion.webhook.conversionReviewVersions
spec.versions[*].schema.openAPIV3Schema
在创建 v1 版本的
CustomResourceDefinition 对象时变成必需字段,并且其取值必须是一个
结构化的 Schema
spec.preserveUnknownFields: true
在创建 v1 版本的 CustomResourceDefinition
对象时不允许指定;该配置必须在 Schema 定义中使用
x-kubernetes-preserve-unknown-fields: true
来设置
在 v1 版本中,additionalPrinterColumns
的条目中的 JSONPath
字段被更名为
jsonPath
(补丁 #66531 )
APIService
apiregistration/v1beta1 API 版本的 APIService 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 apiregistration.k8s.io/v1 API 版本,此 API 从
v1.10 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
TokenReview
authentication.k8s.io/v1beta1 API 版本的 TokenReview 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 authentication.k8s.io/v1 API 版本,此 API 从
v1.6 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
SubjectAccessReview resources
authorization.k8s.io/v1beta1 API 版本的 LocalSubjectAccessReview、
SelfSubjectAccessReview、SubjectAccessReview、SelfSubjectRulesReview 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 authorization.k8s.io/v1 API 版本,此 API 从
v1.6 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
需要额外注意的变更:
spec.group
在 v1 版本中被更名为 spec.groups
(补丁 #32709 )
CertificateSigningRequest
certificates.k8s.io/v1beta1 API 版本的 CertificateSigningRequest 不在
v1.22 版本中继续提供。
迁移清单和 API 客户端使用 certificates.k8s.io/v1 API 版本,此 API 从
v1.19 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
certificates.k8s.io/v1
中需要额外注意的变更:
对于请求证书的 API 客户端而言:
spec.signerName
现在变成必需字段(参阅
已知的 Kubernetes 签署者 ),
并且通过 certificates.k8s.io/v1
API 不可以创建签署者为
kubernetes.io/legacy-unknown
的请求
spec.usages
现在变成必需字段,其中不可以包含重复的字符串值,
并且只能包含已知的用法字符串
对于要批准或者签署证书的 API 客户端而言:
status.conditions
中不可以包含重复的类型
status.conditions[*].status
字段现在变为必需字段
status.certificate
必须是 PEM 编码的,而且其中只能包含 CERTIFICATE
数据块
Lease
coordination.k8s.io/v1beta1 API 版本的 Lease 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 coordination.k8s.io/v1 API 版本,此 API 从
v1.14 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
Ingress
extensions/v1beta1 和 networking.k8s.io/v1beta1 API 版本的 Ingress
不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 networking.k8s.io/v1 API 版本,此 API 从
v1.19 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
spec.backend
字段被更名为 spec.defaultBackend
后端的 serviceName
字段被更名为 service.name
数值表示的后端 servicePort
字段被更名为 service.port.number
字符串表示的后端 servicePort
字段被更名为 service.port.name
对所有要指定的路径,pathType
都成为必需字段。
可选项为 Prefix
、Exact
和 ImplementationSpecific
。
要匹配 v1beta1
版本中未定义路径类型时的行为,可使用 ImplementationSpecific
IngressClass
networking.k8s.io/v1beta1 API 版本的 IngressClass 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 networking.k8s.io/v1 API 版本,此 API 从
v1.19 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
RBAC 资源
rbac.authorization.k8s.io/v1beta1 API 版本的 ClusterRole、ClusterRoleBinding、
Role 和 RoleBinding 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 rbac.authorization.k8s.io/v1 API 版本,此 API 从
v1.8 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
PriorityClass
scheduling.k8s.io/v1beta1 API 版本的 PriorityClass 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 scheduling.k8s.io/v1 API 版本,此 API 从
v1.14 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
存储资源
storage.k8s.io/v1beta1 API 版本的 CSIDriver、CSINode、StorageClass
和 VolumeAttachment 不在 v1.22 版本中继续提供。
迁移清单和 API 客户端使用 storage.k8s.io/v1 API 版本
CSIDriver 从 v1.19 版本开始在 storage.k8s.io/v1 中提供;
CSINode 从 v1.17 版本开始在 storage.k8s.io/v1 中提供;
StorageClass 从 v1.6 版本开始在 storage.k8s.io/v1 中提供;
VolumeAttachment 从 v1.13 版本开始在 storage.k8s.io/v1 中提供;
所有的已保存的对象都可以通过新的 API 来访问;
没有需要额外注意的变更。
v1.16
v1.16 发行版本停止提供以下已废弃 API 版本:
NetworkPolicy
extensions/v1beta1 API 版本的 NetworkPolicy 不在 v1.16 版本中继续提供。
迁移清单和 API 客户端使用 networking.k8s.io/v1 API 版本,此 API 从
v1.8 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问。
DaemonSet
extensions/v1beta1 和 apps/v1beta2 API 版本的 DaemonSet 在
v1.16 版本中不再继续提供。
迁移清单和 API 客户端使用 apps/v1 API 版本,此 API 从 v1.9 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
spec.templateGeneration
字段被删除
spec.selector
现在变成必需字段,并且在对象创建之后不可变更;
可以将现有模板的标签作为选择算符以实现无缝迁移。
spec.updateStrategy.type
的默认值变为 RollingUpdate
(extensions/v1beta1
API 版本中的默认值是 OnDelete
)。
Deployment
extensions/v1beta1 、apps/v1beta1 和 apps/v1beta2 API 版本的
Deployment 在 v1.16 版本中不再继续提供。
迁移清单和 API 客户端使用 apps/v1 API 版本,此 API 从 v1.9 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
spec.rollbackTo
字段被删除
spec.selector
字段现在变为必需字段,并且在 Deployment 创建之后不可变更;
可以使用现有的模板的标签作为选择算符以实现无缝迁移。
spec.progressDeadlineSeconds
的默认值变为 600
秒
(extensions/v1beta1
中的默认值是没有期限)
spec.revisionHistoryLimit
的默认值变为 10
(apps/v1beta1
API 版本中此字段默认值为 2
,在extensions/v1beta1
API
版本中的默认行为是保留所有历史记录)。
maxSurge
和 maxUnavailable
的默认值变为 25%
(在 extensions/v1beta1
API 版本中,这些字段的默认值是 1
)。
StatefulSet
apps/v1beta1 和 apps/v1beta2 API 版本的 StatefulSet 在 v1.16 版本中不再继续提供。
迁移清单和 API 客户端使用 apps/v1 API 版本,此 API 从 v1.9 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
spec.selector
字段现在变为必需字段,并且在 StatefulSet 创建之后不可变更;
可以使用现有的模板的标签作为选择算符以实现无缝迁移。
spec.updateStrategy.type
的默认值变为 RollingUpdate
(apps/v1beta1
API 版本中的默认值是 OnDelete
)。
ReplicaSet
extensions/v1beta1 、apps/v1beta1 和 apps/v1beta2 API 版本的
ReplicaSet 在 v1.16 版本中不再继续提供。
迁移清单和 API 客户端使用 apps/v1 API 版本,此 API 从 v1.9 版本开始可用;
所有的已保存的对象都可以通过新的 API 来访问;
值得注意的变更:
spec.selector
现在变成必需字段,并且在对象创建之后不可变更;
可以将现有模板的标签作为选择算符以实现无缝迁移。
PodSecurityPolicy
extensions/v1beta1 API 版本的 PodSecurityPolicy 在 v1.16 版本中不再继续提供。
迁移清单和 API 客户端使用 policy/v1beta1 API 版本,此 API 从 v1.10 版本开始可用;
注意 policy/v1beta1 API 版本的 PodSecurityPolicy 会在 v1.25 版本中移除。
需要做什么
在禁用已启用 API 的情况下执行测试
你可以通过在启动 API 服务器时禁用特定的 API 版本来模拟即将发生的
API 移除,从而完成测试。在 API 服务器启动参数中添加如下标志:
--runtime-config=<group>/<version>=false
例如:
--runtime-config=admissionregistration.k8s.io/v1beta1=false,apiextensions.k8s.io/v1beta1,...
定位何处使用了已弃用的 API
使用 1.19 及更高版本中可用的客户端警告、指标和审计信息
来定位在何处使用了已弃用的 API。
迁移到未被弃用的 API
更新自定义的集成组件和控制器,调用未被弃用的 API
更改 YAML 文件引用未被弃用的 API
你可以用 kubectl-convert
命令自动转换现有对象:
kubectl convert -f <file> --output-version <group>/<version>
例如,要将较老的 Deployment 版本转换为 apps/v1
版本,你可以运行:
kubectl convert -f ./my-deployment.yaml --output-version apps/v1
这个转换可能使用了非理想的默认值。要了解更多关于特定资源的信息,
请查阅 Kubernetes API 参考文档 。
说明:
尽管实际上 kubectl convert
工具曾经是 kubectl
自身的一部分,但此工具不是默认安装的。
如果想了解更多详情,可以阅读内置子命令的弃用和移除问题 。
要了解如何在你的计算机上设置 kubectl convert
,查阅适合你操作系统的页面:
Linux 、
macOS 或
Windows 。
2.7 - Kubernetes API 健康端点
Kubernetes API 服务器 提供 API 端点以指示 API 服务器的当前状态。
本文描述了这些 API 端点,并说明如何使用。
API 健康端点
Kubernetes API 服务器提供 3 个 API 端点(healthz
、livez
和 readyz
)来表明 API 服务器的当前状态。
healthz
端点已被弃用(自 Kubernetes v1.16 起),你应该使用更为明确的 livez
和 readyz
端点。
livez
端点可与 --livez-grace-period
标志 一起使用,来指定启动持续时间。
为了正常关机,你可以使用 /readyz
端点并指定 --shutdown-delay-duration
标志 。
检查 API 服务器的 healthz
/livez
/readyz
端点的机器应依赖于 HTTP 状态代码。
状态码 200
表示 API 服务器是 healthy
、live
还是 ready
,具体取决于所调用的端点。
以下更详细的选项供操作人员使用,用来调试其集群或了解 API 服务器的状态。
以下示例将显示如何与运行状况 API 端点进行交互。
对于所有端点,都可以使用 verbose
参数来打印检查项以及检查状态。
这对于操作人员调试 API 服务器的当前状态很有用,这些不打算给机器使用:
curl -k https://localhost:6443/livez?verbose
或从具有身份验证的远程主机:
kubectl get --raw= '/readyz?verbose'
输出将如下所示:
[+]ping ok
[+]log ok
[+]etcd ok
[+]poststarthook/start-kube-apiserver-admission-initializer ok
[+]poststarthook/generic-apiserver-start-informers ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
[+]poststarthook/crd-informer-synced ok
[+]poststarthook/bootstrap-controller ok
[+]poststarthook/rbac/bootstrap-roles ok
[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
[+]poststarthook/start-cluster-authentication-info-controller ok
[+]poststarthook/start-kube-aggregator-informers ok
[+]poststarthook/apiservice-registration-controller ok
[+]poststarthook/apiservice-status-available-controller ok
[+]poststarthook/kube-apiserver-autoregistration ok
[+]autoregister-completion ok
[+]poststarthook/apiservice-openapi-controller ok
healthz check passed
Kubernetes API 服务器也支持排除特定的检查项。
查询参数也可以像以下示例一样进行组合:
curl -k 'https://localhost:6443/readyz?verbose&exclude=etcd'
输出显示排除了 etcd
检查:
[+]ping ok
[+]log ok
[+]etcd excluded: ok
[+]poststarthook/start-kube-apiserver-admission-initializer ok
[+]poststarthook/generic-apiserver-start-informers ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
[+]poststarthook/crd-informer-synced ok
[+]poststarthook/bootstrap-controller ok
[+]poststarthook/rbac/bootstrap-roles ok
[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
[+]poststarthook/start-cluster-authentication-info-controller ok
[+]poststarthook/start-kube-aggregator-informers ok
[+]poststarthook/apiservice-registration-controller ok
[+]poststarthook/apiservice-status-available-controller ok
[+]poststarthook/kube-apiserver-autoregistration ok
[+]autoregister-completion ok
[+]poststarthook/apiservice-openapi-controller ok
[+]shutdown ok
healthz check passed
独立健康检查
特性状态:
Kubernetes v1.31 [alpha]
每个单独的健康检查都会公开一个 HTTP 端点,并且可以单独检查。
单个运行状况检查的模式为 /livez/<healthcheck-name>
或 /readyz/<healthcheck-name>
,
其中 livez
和 readyz
分别表明你要检查的是 API 服务器是否存活或就绪。
<healthcheck-name>
的路径可以通过上面的 verbose
参数发现 ,并采用 [+]
和 ok
之间的路径。
这些单独的健康检查不应由机器使用,但对于操作人员调试系统而言,是有帮助的:
curl -k https://localhost:6443/livez/etcd
3 - API 访问控制
关于 Kubernetes 如何实现和控制 API 访问的介绍性材料,
可阅读控制 Kubernetes API 的访问 。
参考文档:
3.1 - 用户认证
本页提供身份认证有关的概述。
Kubernetes 中的用户
所有 Kubernetes 集群都有两类用户:由 Kubernetes 管理的服务账号和普通用户。
Kubernetes 假定普通用户是由一个与集群无关的服务通过以下方式之一进行管理的:
负责分发私钥的管理员
类似 Keystone 或者 Google Accounts 这类用户数据库
包含用户名和密码列表的文件
有鉴于此,Kubernetes 并不包含用来代表普通用户账号的对象 。
普通用户的信息无法通过 API 调用添加到集群中。
尽管无法通过 API 调用来添加普通用户,
Kubernetes 仍然认为能够提供由集群的证书机构签名的合法证书的用户是通过身份认证的用户。
基于这样的配置,Kubernetes 使用证书中的 'subject' 的通用名称(Common Name)字段
(例如,"/CN=bob")来确定用户名。
接下来,基于角色访问控制(RBAC)子系统会确定用户是否有权针对某资源执行特定的操作。
进一步的细节可参阅证书请求
下普通用户主题。
与此不同,服务账号是 Kubernetes API 所管理的用户。它们被绑定到特定的名字空间,
或者由 API 服务器自动创建,或者通过 API 调用创建。服务账号与一组以 Secret
保存的凭据相关,这些凭据会被挂载到 Pod 中,从而允许集群内的进程访问 Kubernetes API。
API 请求则或者与某普通用户相关联,或者与某服务账号相关联,
亦或者被视作匿名请求 。这意味着集群内外的每个进程在向 API
服务器发起请求时都必须通过身份认证,否则会被视作匿名用户。这里的进程可以是在某工作站上输入
kubectl
命令的操作人员,也可以是节点上的 kubelet
组件,还可以是控制面的成员。
身份认证策略
Kubernetes 通过身份认证插件利用客户端证书、持有者令牌(Bearer Token)或身份认证代理(Proxy)
来认证 API 请求的身份。HTTP 请求发给 API 服务器时,插件会将以下属性关联到请求本身:
用户名:用来辩识最终用户的字符串。常见的值可以是 kube-admin
或 jane@example.com
。
用户 ID:用来辩识最终用户的字符串,旨在比用户名有更好的一致性和唯一性。
用户组:取值为一组字符串,其中各个字符串用来标明用户是某个命名的用户逻辑集合的成员。
常见的值可能是 system:masters
或者 devops-team
等。
附加字段:一组额外的键-值映射,键是字符串,值是一组字符串;
用来保存一些鉴权组件可能觉得有用的额外信息。
所有(属性)值对于身份认证系统而言都是不透明的,
只有被鉴权组件 解释过之后才有意义。
你可以同时启用多种身份认证方法,并且你通常会至少使用两种方法:
针对服务账号使用服务账号令牌
至少另外一种方法对用户的身份进行认证
当集群中启用了多个身份认证模块时,第一个成功地对请求完成身份认证的模块会直接做出评估决定。
API 服务器并不保证身份认证模块的运行顺序。
对于所有通过身份认证的用户,system:authenticated
组都会被添加到其组列表中。
与其它身份认证协议(LDAP、SAML、Kerberos、X509 的替代模式等等)
都可以通过使用一个身份认证代理 或身份认证 Webhoook
来实现。
X509 客户证书
通过给 API 服务器传递 --client-ca-file=SOMEFILE
选项,就可以启动客户端证书身份认证。
所引用的文件必须包含一个或者多个证书机构,用来验证向 API 服务器提供的客户端证书。
如果提供了客户端证书并且证书被验证通过,则 subject 中的公共名称(Common Name)
就被作为请求的用户名。
自 Kubernetes 1.4 开始,客户端证书还可以通过证书的 organization 字段标明用户的组成员信息。
要包含用户的多个组成员信息,可以在证书中包含多个 organization 字段。
例如,使用 openssl
命令行工具生成一个证书签名请求:
openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
此命令将使用用户名 jbeda
生成一个证书签名请求(CSR),且该用户属于 "app1" 和
"app2" 两个用户组。
参阅管理证书 了解如何生成客户端证书。
静态令牌文件
当 API 服务器的命令行设置了 --token-auth-file=SOMEFILE
选项时,会从文件中读取持有者令牌。
目前,令牌会长期有效,并且在不重启 API 服务器的情况下无法更改令牌列表。
令牌文件是一个 CSV 文件,包含至少 3 个列:令牌、用户名和用户的 UID。
其余列被视为可选的组名。
说明:
如果要设置的组名不止一个,则对应的列必须用双引号括起来,例如:
token,user,uid,"group1,group2,group3"
在请求中放入持有者令牌
当使用持有者令牌来对某 HTTP 客户端执行身份认证时,API 服务器希望看到一个名为
Authorization
的 HTTP 头,其值格式为 Bearer <token>
。
持有者令牌必须是一个可以放入 HTTP 头部值字段的字符序列,至多可使用 HTTP 的编码和引用机制。
例如:如果持有者令牌为 31ada4fd-adec-460c-809a-9e56ceb75269
,则其出现在 HTTP 头部时如下所示:
Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
启动引导令牌
特性状态:
Kubernetes v1.18 [stable]
为了支持平滑地启动引导新的集群,Kubernetes 包含了一种动态管理的持有者令牌类型,
称作 启动引导令牌(Bootstrap Token) 。
这些令牌以 Secret 的形式保存在 kube-system
名字空间中,可以被动态管理和创建。
控制器管理器包含的 TokenCleaner
控制器能够在启动引导令牌过期时将其删除。
这些令牌的格式为 [a-z0-9]{6}.[a-z0-9]{16}
。第一个部分是令牌的 ID;
第二个部分是令牌的 Secret。你可以用如下所示的方式来在 HTTP 头部设置令牌:
Authorization: Bearer 781292.db7bc3a58fc5f07e
你必须在 API 服务器上设置 --enable-bootstrap-token-auth
标志来启用基于启动引导令牌的身份认证组件。
你必须通过控制器管理器的 --controllers
标志来启用 TokenCleaner 控制器;
这可以通过类似 --controllers=*,tokencleaner
这种设置来做到。
如果你使用 kubeadm
来启动引导新的集群,该工具会帮你完成这些设置。
身份认证组件的认证结果为 system:bootstrap:<令牌 ID>
,该用户属于
system:bootstrappers
用户组。
这里的用户名和组设置都是有意设计成这样,其目的是阻止用户在启动引导集群之后继续使用这些令牌。
这里的用户名和组名可以用来(并且已经被 kubeadm
用来)构造合适的鉴权策略,
以完成启动引导新集群的工作。
请参阅启动引导令牌 ,
以了解关于启动引导令牌身份认证组件与控制器的更深入的信息,以及如何使用
kubeadm
来管理这些令牌。
服务账号令牌
服务账号(Service Account)是一种自动被启用的用户认证机制,使用经过签名的持有者令牌来验证请求。
该插件可接受两个可选参数:
--service-account-key-file
文件包含 PEM 编码的 x509 RSA 或 ECDSA 私钥或公钥,
用于验证 ServiceAccount 令牌。这样指定的文件可以包含多个密钥,
并且可以使用不同的文件多次指定此参数。若未指定,则使用 --tls-private-key-file 参数。
--service-account-lookup
如果启用,则从 API 删除的令牌会被回收。
服务账号通常由 API 服务器自动创建并通过 ServiceAccount
准入控制器 关联到集群中运行的 Pod 上。
持有者令牌会挂载到 Pod 中可预知的位置,允许集群内进程与 API 服务器通信。
服务账号也可以使用 Pod 规约的 serviceAccountName
字段显式地关联到 Pod 上。
说明:
serviceAccountName
通常会被忽略,因为关联关系是自动建立的。
apiVersion : apps/v1 # 此 apiVersion 从 Kubernetes 1.9 开始可用
kind : Deployment
metadata :
name : nginx-deployment
namespace : default
spec :
replicas : 3
template :
metadata :
# ...
spec :
serviceAccountName : bob-the-bot
containers :
- name : nginx
image : nginx:1.14.2
在集群外部使用服务账号持有者令牌也是完全合法的,且可用来为长时间运行的、需要与 Kubernetes
API 服务器通信的任务创建标识。要手动创建服务账号,可以使用
kubectl create serviceaccount <名称>
命令。
此命令会在当前的名字空间中生成一个服务账号。
kubectl create serviceaccount jenkins
serviceaccount/jenkins created
创建相关联的令牌:
kubectl create token jenkins
eyJhbGciOiJSUzI1NiIsImtp...
所创建的令牌是一个已签名的 JWT 令牌。
已签名的 JWT 可以用作持有者令牌,并将被认证为所给的服务账号。
关于如何在请求中包含令牌,请参阅前文 。
通常,这些令牌数据会被挂载到 Pod 中以便集群内访问 API 服务器时使用,
不过也可以在集群外部使用。
服务账号被身份认证后,所确定的用户名为 system:serviceaccount:<名字空间>:<服务账号>
,
并被分配到用户组 system:serviceaccounts
和 system:serviceaccounts:<名字空间>
。
警告:
由于服务账号令牌也可以保存在 Secret API 对象中,任何能够写入这些 Secret
的用户都可以请求一个令牌,且任何能够读取这些 Secret 的用户都可以被认证为对应的服务账号。
在为用户授予访问服务账号的权限以及对 Secret 的读取或写入权能时,要格外小心。
OpenID Connect(OIDC)令牌
OpenID Connect 是一种 OAuth2 认证方式,
被某些 OAuth2 提供者支持,例如 Microsoft Entra ID、Salesforce 和 Google。
协议对 OAuth2 的主要扩充体现在有一个附加字段会和访问令牌一起返回,
这一字段称作 ID Token(ID 令牌) 。
ID 令牌是一种由服务器签名的 JWT 令牌,其中包含一些可预知的字段,
例如用户的邮箱地址,
要识别用户,身份认证组件使用 OAuth2
令牌响应 中的
id_token
(而非 access_token
)作为持有者令牌。
关于如何在请求中设置令牌,可参见前文 。
sequenceDiagram
participant user as 用户
participant idp as 身份提供者
participant kube as kubectl
participant api as API 服务器
user ->> idp: 1. 登录到 IdP
activate idp
idp -->> user: 2. 提供 access_token, id_token, 和 refresh_token
deactivate idp
activate user
user ->> kube: 3. 调用 kubectl 并 设置 --token 为 id_token 或者将令牌添加到 .kube/config
deactivate user
activate kube
kube ->> api: 4. Authorization: Bearer...
deactivate kube
activate api
api ->> api: 5. JWT 签名合法么?
api ->> api: 6. JWT 是否已过期?(iat+exp)
api ->> api: 7. 用户被授权了么?
api -->> kube: 8. 已授权:执行 操作并返回结果
deactivate api
activate kube
kube --x user: 9. 返回结果
deactivate kube
登录到你的身份服务(Identity Provider)
你的身份服务将为你提供 access_token
、id_token
和 refresh_token
在使用 kubectl
时,将 id_token
设置为 --token
标志值,或者将其直接添加到
kubeconfig
中
kubectl
将你的 id_token
放到一个称作 Authorization
的头部,发送给 API 服务器
API 服务器将确保 JWT 的签名是有效的
检查确认 id_token
尚未过期
如果使用 AuthenticationConfiguration
配置了 CEL 表达式,则执行声明和/或用户验证。
确认用户有权限执行操作
鉴权成功之后,API 服务器向 kubectl
返回响应
kubectl
向用户提供反馈信息
由于用来验证你是谁的所有数据都在 id_token
中,Kubernetes 不需要再去联系身份服务。
在一个所有请求都是无状态请求的模型中,这一工作方式可以使得身份认证的解决方案更容易处理大规模请求。
不过,此访问也有一些挑战:
Kubernetes 没有提供用来触发身份认证过程的 "Web 界面"。
因为不存在用来收集用户凭据的浏览器或用户接口,你必须自己先行完成对身份服务的认证过程。
id_token
令牌不可收回。因其属性类似于证书,其生命期一般很短(只有几分钟),
所以,每隔几分钟就要获得一个新的令牌这件事可能很让人头疼。
如果需要向 Kubernetes 控制面板执行身份认证,你必须使用 kubectl proxy
命令或者一个能够注入 id_token
的反向代理。
配置 API 服务器
使用标志
要启用此插件,须在 API 服务器上配置以下标志:
参数
描述
示例
必需?
--oidc-issuer-url
允许 API 服务器发现公开的签名密钥的服务的 URL。只接受模式为 https://
的 URL。此值通常设置为服务的发现 URL,已更改为空路径。
如果发行人的 OIDC 发现 URL 是 https://accounts.google.com/.well-known/openid-configuration
,则此值应为 https://accounts.provider.example
是
--oidc-client-id
所有令牌都应发放给此客户 ID。
kubernetes
是
--oidc-username-claim
用作用户名的 JWT 申领(JWT Claim)。默认情况下使用 sub
值,即最终用户的一个唯一的标识符。管理员也可以选择其他申领,例如 email
或者 name
,取决于所用的身份服务。不过,除了 email
之外的申领都会被添加令牌发放者的 URL 作为前缀,以免与其他插件产生命名冲突。
sub
否
--oidc-username-prefix
要添加到用户名申领之前的前缀,用来避免与现有用户名发生冲突(例如:system:
用户)。例如,此标志值为 oidc:
时将创建形如 oidc:jane.doe
的用户名。如果此标志未设置,且 --oidc-username-claim
标志值不是 email
,则默认前缀为 <令牌发放者的 URL>#
,其中 <令牌发放者 URL >
的值取自 --oidc-issuer-url
标志的设定。此标志值为 -
时,意味着禁止添加用户名前缀。
oidc:
否
--oidc-groups-claim
用作用户组名的 JWT 申领。如果所指定的申领确实存在,则其值必须是一个字符串数组。
groups
否
--oidc-groups-prefix
添加到组申领的前缀,用来避免与现有用户组名(如:system:
组)发生冲突。例如,此标志值为 oidc:
时,所得到的用户组名形如 oidc:engineering
和 oidc:infra
。
oidc:
否
--oidc-required-claim
取值为一个 key=value 偶对,意为 ID 令牌中必须存在的申领。如果设置了此标志,则 ID 令牌会被检查以确定是否包含取值匹配的申领。此标志可多次重复,以指定多个申领。
claim=value
否
--oidc-ca-file
指向一个 CA 证书的路径,该 CA 负责对你的身份服务的 Web 证书提供签名。默认值为宿主系统的根 CA。
/etc/kubernetes/ssl/kc-ca.pem
否
--oidc-signing-algs
采纳的签名算法。默认为 "RS256"。
RS512
否
来自文件的身份认证配置
特性状态:
Kubernetes v1.30 [beta]
(enabled by default: true)
JWT Authenticator 是一个使用 JWT 兼容令牌对 Kubernetes 用户进行身份认证的认证组件。
认证组件将尝试解析原始 ID 令牌,验证它是否是由所配置的颁发者签名。
用于验证签名的公钥是使用 OIDC 发现从发行者的公共端点发现的。
最小有效 JWT 负载必须包含以下声明:
{
"iss" : "https://example.com" , // 必须与 issuer.url 匹配
"aud" : ["my-app" ], // issuer.audiences 中至少一项必须与所提供的 JWT 中的 "aud" 声明相匹配。
"exp" : 1234567890 , // 令牌过期时间为 UNIX 时间(自 1970 年 1 月 1 日 UTC 以来经过的秒数)
"<username-claim>" : "user" // 这是在 claimMappings.username.claim 或 claimMappings.username.expression 中配置的用户名声明
}
配置文件方法允许你配置多个 JWT 认证组件,每个身份认证组件都有唯一的 issuer.url
和 issuer.discoveryURL
。
配置文件甚至允许你指定 CEL
表达式以将声明映射到用户属性,并验证声明和用户信息。
当配置文件修改时,API 服务器还会自动重新加载认证组件。
你可以使用 apiserver_authentication_config_controller_automatic_reload_last_timestamp_seconds
指标来监控 API 服务器上次重新加载配置的时间。
你必须使用 API 服务器上的 --authentication-config
标志指定身份认证配置的路径。
如果你想使用命令行标志而不是配置文件,命令行标志仍然有效。
要使用新功能(例如配置多个认证组件、为发行者设置多个受众),请切换到使用配置文件。
对于 Kubernetes v1.31,
结构化身份认证配置文件格式是 Beta 级别,并且使用该配置的机制也是 Beta 级别。
如果你没有禁用集群的 StructuredAuthenticationConfiguration
特性门控 ,
则可以通过为 kube-apiserver 指定 --authentication-config
命令行参数来启用结构化身份认证。
下面给出的是一个结构化身份认证配置文件的示例:
说明:
你不能同时指定 --authentication-config
和 --oidc-*
命令行参数,
否则API服务器会报告错误,然后立即退出。
如果你想切换到使用结构化身份认证配置,则必须删除 --oidc-*
命令行参数,并改用配置文件。
---
#
# 注意:这是一个示例配置,不要将其用于你自己的集群!
#
apiVersion : apiserver.config.k8s.io/v1beta1
kind : AuthenticationConfiguration
# 使用 JWT 兼容令牌对 Kubernetes 用户进行身份认证的认证组件列表,允许的最大认证组件数量为 64。
jwt :
- issuer :
# url 在所有认证组件中必须是唯一的。
# url 不得与 --service-account-issuer 中配置的颁发者冲突。
url : https://example.com # 与 --oidc-issuer-url 一致。
# discoveryURL(如果指定)将覆盖用于获取发现信息的 URL,而不是使用 “{url}/.well-known/openid-configuration”。
# 系统会使用所给的配置值,因此如果需要,“/.well-known/openid-configuration” 必须包含在 discoveryURL 中。
#
# 取回的发现信息中的 “issuer” 字段必须与 AuthenticationConfiguration 中的
# “issuer.url” 字段匹配,并被用于验证所呈现的 JWT 中的 “iss” 声明。
# 这适用于众所周知的端点和 jwks 端点托管在与颁发者不同的位置(例如集群本地)的场景。
# discoveryURL 必须与 url 不同(如果指定),并且在所有认证组件中必须是唯一的。
discoveryURL : https://discovery.example.com/.well-known/openid-configuration
# PEM 编码的 CA 证书用于在获取发现信息时验证连接。
# 如果未设置,将使用系统验证程序。
# 与 --oidc-ca-file 标志引用的文件内容的值相同。
certificateAuthority : <PEM encoded CA certificates>
# audiences 是 JWT 必须发布给的一组可接受的受众。
# 至少其中一项必须与所提供的 JWT 中的 “aud” 声明相匹配。
audiences :
- my-app # 与 --oidc-client-id 一致。
- my-other-app
# 当指定多个受众时,需要将此字段设置为 “MatchAny”。
audienceMatchPolicy : MatchAny
# 用于验证令牌声明以对用户进行身份认证的规则。
claimValidationRules :
# 与 --oidc-required-claim key=value 一致
- claim : hd
requiredValue : example.com
# 你可以使用表达式来验证声明,而不是仅仅靠 claim 和 requiredValue 来执行检查。
# expression 是一个计算结果为布尔值的 CEL 表达式。
# 所有表达式的计算结果必须为 true 才能使验证成功。
- expression : 'claims.hd == "example.com"'
# message 用来定制验证失败时在 API 服务器日志中看到的错误消息。
message : the hd claim must be set to example.com
- expression : 'claims.exp - claims.nbf <= 86400'
message : total token lifetime must not exceed 24 hours
claimMappings :
# username 表示用户名属性的选项。
# 这是唯一必需的属性。
username :
# 与 --oidc-username-claim 相同,与 username.expression 互斥。
claim : "sub"
# 与 --oidc-username-prefix 相同,与 username.expression 互斥。
# 如果设置了username.claim,则需要username.prefix。
# 如果不需要前缀,可显式将其设置为 ""。
prefix : ""
# 与 username.claim 和 username.prefix 互斥。
# expression 是计算结果为字符串的 CEL 表达式。
#
# 1. 如果 username.expression 使用 “claims.email”,则必须在 username.expression
# 或 extra[*].valueExpression 或 ClaimValidationRules[*].expression 中使用 “claims.email_verified”。
# 与 username.claim 设置为 “email” 时自动应用的验证相匹配的示例声明验证规则表达式是
# “claims.?email_verified.orValue(true)”。
# 2. 如果根据 username.expression 断言的用户名是空字符串,则身份认证请求将失败。
expression : 'claims.username + ":external-user"'
# groups 代表 groups 属性的一个选项。
groups :
# 与 --oidc-groups-claim 相同,与 groups.express 互斥。
claim : "sub"
# 与 --oidc-groups-prefix 相同。与 groups.express 互斥。
# 如果设置了 groups.claim,则需要 groups.prefix。
# 如果不需要前缀,则显式将其设置为 ""。
prefix : ""
# 与 groups.claim 和 groups.prefix 互斥。
# expression 是一个计算结果为字符串或字符串列表的 CEL 表达式。
expression : 'claims.roles.split(",")'
# uid 表示 uid 属性的一个选项。
uid :
# 与 uid.expression 互斥。
claim : 'sub'
# 与 uid.claim 互斥
# expression 是计算结果为字符串的 CEL 表达式。
expression : 'claims.sub'
# 要添加到 UserInfo 对象的其他属性,键必须是域前缀路径并且必须是唯一的。
extra :
- key : 'example.com/tenant'
# valueExpression 是一个计算结果为字符串或字符串列表的 CEL 表达式。
valueExpression : 'claims.tenant'
# 应用于最终用户对象的验证规则。
userValidationRules :
# expression 是一个计算结果为布尔值的 CEL 表达式。
# 所有表达式的计算结果必须为 true,用户才有效。
- expression : "!user.username.startsWith('system:')"
# Message 自定义验证失败时在 API 服务器日志中看到的错误消息。
message: 'username cannot used reserved system : prefix'
- expression : "user.groups.all(group, !group.startsWith('system:'))"
message: 'groups cannot used reserved system : prefix'
jwt.claimValidationRules[i].expression
表示将由 CEL 计算的表达式。
CEL 表达式可以访问令牌有效负载的内容,这些内容被组织成 claims
CEL 变量。
claims
是声明名称(作为字符串)到声明值(任何类型)的映射。
jwt.userValidationRules[i].expression
表示将由 CEL 计算的表达式。
CEL 表达式可以访问 userInfo
的内容,并组织成 user
CEL 变量。
有关 user
的架构,请参阅
[UserInfo](/zh-cn/docs/reference/ generated/kubernetes-api/v1.31/#userinfo-v1-authentication-k8s-io) API 文档。
声明映射表达式
jwt.claimMappings.username.expression
、jwt.claimMappings.groups.expression
、
jwt.claimMappings.uid.expression
jwt.claimMappings.extra[i].valueExpression
表示将由 CEL 计算的表达式。
CEL 表达式可以访问令牌有效负载的内容,这些内容被组织成 claims
CEL 变量。
claims
是声明名称(作为字符串)到声明值(任何类型)的映射。
要了解更多信息,请参阅CEL 文档 。
以下是具有不同令牌有效负载的 “AuthenticationConfiguration” 示例。
apiVersion : apiserver.config.k8s.io/v1beta1
kind : AuthenticationConfiguration
jwt :
- issuer :
url : https://example.com
audiences :
- my-app
claimMappings :
username :
expression : 'claims.username + ":external-user"'
groups :
expression : 'claims.roles.split(",")'
uid :
expression : 'claims.sub'
extra :
- key : 'example.com/tenant'
valueExpression : 'claims.tenant'
userValidationRules :
- expression : "!user.username.startsWith('system:')" # 表达式的计算结果为 true,因此验证将成功。
message: 'username cannot used reserved system : prefix'
TOKEN = eyJhbGciOiJSUzI1NiIsImtpZCI6ImY3dF9tOEROWmFTQk1oWGw5QXZTWGhBUC04Y0JmZ0JVbFVpTG5oQkgxdXMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJrdWJlcm5ldGVzIiwiZXhwIjoxNzAzMjMyOTQ5LCJpYXQiOjE3MDExMDcyMzMsImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5jb20iLCJqdGkiOiI3YzMzNzk0MjgwN2U3M2NhYTJjMzBjODY4YWMwY2U5MTBiY2UwMmRkY2JmZWJlOGMyM2I4YjVmMjdhZDYyODczIiwibmJmIjoxNzAxMTA3MjMzLCJyb2xlcyI6InVzZXIsYWRtaW4iLCJzdWIiOiJhdXRoIiwidGVuYW50IjoiNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjRhIiwidXNlcm5hbWUiOiJmb28ifQ.TBWF2RkQHm4QQz85AYPcwLxSk-VLvQW-mNDHx7SEOSv9LVwcPYPuPajJpuQn9C_gKq1R94QKSQ5F6UgHMILz8OfmPKmX_00wpwwNVGeevJ79ieX2V-__W56iNR5gJ-i9nn6FYk5pwfVREB0l4HSlpTOmu80gbPWAXY5hLW0ZtcE1JTEEmefORHV2ge8e3jp1xGafNy6LdJWabYuKiw8d7Qga__HxtKB-t0kRMNzLRS7rka_SfQg0dSYektuxhLbiDkqhmRffGlQKXGVzUsuvFw7IGM5ZWnZgEMDzCI357obHeM3tRqpn5WRjtB8oM7JgnCymaJi-P3iCd88iu1xnzA
其中令牌有效负载是:
{
"aud" : "kubernetes" ,
"exp" : 1703232949 ,
"iat" : 1701107233 ,
"iss" : "https://example.com" ,
"jti" : "7c337942807e73caa2c30c868ac0ce910bce02ddcbfebe8c23b8b5f27ad62873" ,
"nbf" : 1701107233 ,
"roles" : "user,admin" ,
"sub" : "auth" ,
"tenant" : "72f988bf-86f1-41af-91ab-2d7cd011db4a" ,
"username" : "foo"
}
具有上述 AuthenticationConfiguration
的令牌将生成以下 UserInfo
对象并成功对用户进行身份认证。
{
"username" : "foo:external-user" ,
"uid" : "auth" ,
"groups" : [
"user" ,
"admin"
],
"extra" : {
"example.com/tenant" : "72f988bf-86f1-41af-91ab-2d7cd011db4a"
}
}
apiVersion : apiserver.config.k8s.io/v1beta1
kind : AuthenticationConfiguration
jwt :
- issuer :
url : https://example.com
audiences :
- my-app
claimValidationRules :
- expression : 'claims.hd == "example.com"' # 下面的令牌没有此声明,因此验证将失败。
message : the hd claim must be set to example.com
claimMappings :
username :
expression : 'claims.username + ":external-user"'
groups :
expression : 'claims.roles.split(",")'
uid :
expression : 'claims.sub'
extra :
- key : 'example.com/tenant'
valueExpression : 'claims.tenant'
userValidationRules :
- expression : "!user.username.startsWith('system:')" # 该表达式的计算结果将为 true,因此验证将会成功。
message: 'username cannot used reserved system : prefix'
TOKEN = eyJhbGciOiJSUzI1NiIsImtpZCI6ImY3dF9tOEROWmFTQk1oWGw5QXZTWGhBUC04Y0JmZ0JVbFVpTG5oQkgxdXMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJrdWJlcm5ldGVzIiwiZXhwIjoxNzAzMjMyOTQ5LCJpYXQiOjE3MDExMDcyMzMsImlzcyI6Imh0dHBzOi8vZXhhbXBsZS5jb20iLCJqdGkiOiI3YzMzNzk0MjgwN2U3M2NhYTJjMzBjODY4YWMwY2U5MTBiY2UwMmRkY2JmZWJlOGMyM2I4YjVmMjdhZDYyODczIiwibmJmIjoxNzAxMTA3MjMzLCJyb2xlcyI6InVzZXIsYWRtaW4iLCJzdWIiOiJhdXRoIiwidGVuYW50IjoiNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjRhIiwidXNlcm5hbWUiOiJmb28ifQ.TBWF2RkQHm4QQz85AYPcwLxSk-VLvQW-mNDHx7SEOSv9LVwcPYPuPajJpuQn9C_gKq1R94QKSQ5F6UgHMILz8OfmPKmX_00wpwwNVGeevJ79ieX2V-__W56iNR5gJ-i9nn6FYk5pwfVREB0l4HSlpTOmu80gbPWAXY5hLW0ZtcE1JTEEmefORHV2ge8e3jp1xGafNy6LdJWabYuKiw8d7Qga__HxtKB-t0kRMNzLRS7rka_SfQg0dSYektuxhLbiDkqhmRffGlQKXGVzUsuvFw7IGM5ZWnZgEMDzCI357obHeM3tRqpn5WRjtB8oM7JgnCymaJi-P3iCd88iu1xnzA
其中令牌有效负载是:
{
"aud" : "kubernetes" ,
"exp" : 1703232949 ,
"iat" : 1701107233 ,
"iss" : "https://example.com" ,
"jti" : "7c337942807e73caa2c30c868ac0ce910bce02ddcbfebe8c23b8b5f27ad62873" ,
"nbf" : 1701107233 ,
"roles" : "user,admin" ,
"sub" : "auth" ,
"tenant" : "72f988bf-86f1-41af-91ab-2d7cd011db4a" ,
"username" : "foo"
}
具有上述 AuthenticationConfiguration
的令牌将无法进行身份认证,
因为 hd
声明未设置为 example.com
。API 服务器将返回 401 Unauthorized
错误。
apiVersion : apiserver.config.k8s.io/v1beta1
kind : AuthenticationConfiguration
jwt :
- issuer :
url : https://example.com
audiences :
- my-app
claimValidationRules :
- expression : 'claims.hd == "example.com"'
message : the hd claim must be set to example.com
claimMappings :
username :
expression : '"system:" + claims.username' # 这将为用户名添加前缀 “system:”,并且用户验证将失败。
groups :
expression : 'claims.roles.split(",")'
uid :
expression : 'claims.sub'
extra :
- key : 'example.com/tenant'
valueExpression : 'claims.tenant'
userValidationRules :
- expression : "!user.username.startsWith('system:')" # 用户名将为 system:foo 并且表达式将计算为 false,因此验证将失败。
message: 'username cannot used reserved system : prefix'
TOKEN = eyJhbGciOiJSUzI1NiIsImtpZCI6ImY3dF9tOEROWmFTQk1oWGw5QXZTWGhBUC04Y0JmZ0JVbFVpTG5oQkgxdXMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJrdWJlcm5ldGVzIiwiZXhwIjoxNzAzMjMyOTQ5LCJoZCI6ImV4YW1wbGUuY29tIiwiaWF0IjoxNzAxMTEzMTAxLCJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwianRpIjoiYjViMDY1MjM3MmNkMjBlMzQ1YjZmZGZmY2RjMjE4MWY0YWZkNmYyNTlhYWI0YjdlMzU4ODEyMzdkMjkyMjBiYyIsIm5iZiI6MTcwMTExMzEwMSwicm9sZXMiOiJ1c2VyLGFkbWluIiwic3ViIjoiYXV0aCIsInRlbmFudCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0YSIsInVzZXJuYW1lIjoiZm9vIn0.FgPJBYLobo9jnbHreooBlvpgEcSPWnKfX6dc0IvdlRB-F0dCcgy91oCJeK_aBk-8zH5AKUXoFTlInfLCkPivMOJqMECA1YTrMUwt_IVqwb116AqihfByUYIIqzMjvUbthtbpIeHQm2fF0HbrUqa_Q0uaYwgy8mD807h7sBcUMjNd215ff_nFIHss-9zegH8GI1d9fiBf-g6zjkR1j987EP748khpQh9IxPjMJbSgG_uH5x80YFuqgEWwq-aYJPQxXX6FatP96a2EAn7wfPpGlPRt0HcBOvq5pCnudgCgfVgiOJiLr_7robQu4T1bis0W75VPEvwWtgFcLnvcQx0JWg
其中令牌有效负载是:
{
"aud" : "kubernetes" ,
"exp" : 1703232949 ,
"hd" : "example.com" ,
"iat" : 1701113101 ,
"iss" : "https://example.com" ,
"jti" : "b5b0652372cd20e345b6fdffcdc2181f4afd6f259aab4b7e35881237d29220bc" ,
"nbf" : 1701113101 ,
"roles" : "user,admin" ,
"sub" : "auth" ,
"tenant" : "72f988bf-86f1-41af-91ab-2d7cd011db4a" ,
"username" : "foo"
}
具有上述 “AuthenticationConfiguration” 的令牌将生成以下 “UserInfo” 对象:
{
"username" : "system:foo" ,
"uid" : "auth" ,
"groups" : [
"user" ,
"admin"
],
"extra" : {
"example.com/tenant" : "72f988bf-86f1-41af-91ab-2d7cd011db4a"
}
}
这将导致用户验证失败,因为用户名以 system:
开头。 API 服务器将返回 401 Unauthorized
错误。
局限性
分布式声明无法通过 CEL 表达式工作。
不支持调用 issuer.url
和 issuer.discoveryURL
的出口选择器配置。
Kubernetes 并未提供 OpenID Connect 的身份服务。
你可以使用现有的公共的 OpenID Connect 身份服务
(例如 Google 或者其他服务 )。
或者,你也可以选择自己运行一个身份服务,例如 dex 、
Keycloak 、
CloudFoundry UAA 或者
Tremolo Security 的 OpenUnison 。
要在 Kubernetes 环境中使用某身份服务,该服务必须:
支持 OpenID connect 发现
用于验证签名的公钥是使用 OIDC 发现从发行者的公共端点发现的。
如果你使用身份认证配置文件,则身份提供者不需要公开发布发现端点。
你可以将发现端点托管在与颁发者不同的位置(例如集群本地),并在配置文件中指定 issuer.discoveryURL
。
使用未过时的密钥以 TLS 模式运行
拥有 CA 签名的证书(即使该 CA 不是商业 CA 或者是自签名的)
关于上述第三条需求,即要求具备 CA 签名的证书,有一些额外的注意事项。
如果你部署了自己的身份服务,而不是使用云厂商(如 Google 或 Microsoft)所提供的服务,
你必须对身份服务的 Web 服务器证书进行签名,签名所用证书的 CA
标志要设置为
TRUE
,即使用的是自签名证书。这是因为 GoLang 的 TLS 客户端实现对证书验证标准方面有非常严格的要求。
如果你手头没有现成的 CA 证书,可以使用 Dex
团队所开发的证书生成脚本
来创建一个简单的 CA 和被签了名的证书与密钥对。
或者你也可以使用这个类似的脚本 ,
生成一个合法期更长、密钥尺寸更大的 SHA256 证书。
参阅特定系统的安装指令:
使用 kubectl
选项一:OIDC 身份认证组件
第一种方案是使用 kubectl 的 oidc
身份认证组件,该组件将 id_token
设置为所有请求的持有者令牌,
并且在令牌过期时自动刷新。在你登录到你的身份服务之后,
可以使用 kubectl 来添加你的 id_token
、refresh_token
、client_id
和
client_secret
,以配置该插件。
如果服务在其刷新令牌响应中不包含 id_token
,则此插件无法支持该服务。
这时你应该考虑下面的选项二。
kubectl config set-credentials USER_NAME \
--auth-provider= oidc \
--auth-provider-arg= idp-issuer-url=( issuer url ) \
--auth-provider-arg= client-id=( your client id ) \
--auth-provider-arg= client-secret=( your client secret ) \
--auth-provider-arg= refresh-token=( your refresh token ) \
--auth-provider-arg= idp-certificate-authority=( path to your ca certificate ) \
--auth-provider-arg= id-token=( your id_token )
作为示例,在完成对你的身份服务的身份认证之后,运行下面的命令:
kubectl config set-credentials mmosley \
--auth-provider= oidc \
--auth-provider-arg= idp-issuer-url= https://oidcidp.tremolo.lan:8443/auth/idp/OidcIdP \
--auth-provider-arg= client-id= kubernetes \
--auth-provider-arg= client-secret= 1db158f6-177d-4d9c-8a8b-d36869918ec5 \
--auth-provider-arg= refresh-token= q1bKLFOyUiosTfawzA93TzZIDzH2TNa2SMm0zEiPKTUwME6BkEo6Sql5yUWVBSWpKUGphaWpxSVAfekBOZbBhaEW+VlFUeVRGcluyVF5JT4+haZmPsluFoFu5XkpXk5BXqHega4GAXlF+ma+vmYpFcHe5eZR+slBFpZKtQA= \
--auth-provider-arg= idp-certificate-authority= /root/ca.pem \
--auth-provider-arg= id-token= eyJraWQiOiJDTj1vaWRjaWRwLnRyZW1vbG8ubGFuLCBPVT1EZW1vLCBPPVRybWVvbG8gU2VjdXJpdHksIEw9QXJsaW5ndG9uLCBTVD1WaXJnaW5pYSwgQz1VUy1DTj1rdWJlLWNhLTEyMDIxNDc5MjEwMzYwNzMyMTUyIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL29pZGNpZHAudHJlbW9sby5sYW46ODQ0My9hdXRoL2lkcC9PaWRjSWRQIiwiYXVkIjoia3ViZXJuZXRlcyIsImV4cCI6MTQ4MzU0OTUxMSwianRpIjoiMm96US15TXdFcHV4WDlHZUhQdy1hZyIsImlhdCI6MTQ4MzU0OTQ1MSwibmJmIjoxNDgzNTQ5MzMxLCJzdWIiOiI0YWViMzdiYS1iNjQ1LTQ4ZmQtYWIzMC0xYTAxZWU0MWUyMTgifQ.w6p4J_6qQ1HzTG9nrEOrubxIMb9K5hzcMPxc9IxPx2K4xO9l-oFiUw93daH3m5pluP6K7eOE6txBuRVfEcpJSwlelsOsW8gb8VJcnzMS9EnZpeA0tW_p-mnkFc3VcfyXuhe5R3G7aa5d8uHv70yJ9Y3-UhjiN9EhpMdfPAoEB9fYKKkJRzF7utTTIPGrSaSU6d2pcpfYKaxIwePzEkT4DfcQthoZdy9ucNvvLoi1DIC-UocFD8HLs8LYKEqSxQvOcvnThbObJ9af71EwmuE21fO5KzMW20KtAeget1gnldOosPtz1G5EwvaQ401-RPQzPGMVBld0_zMCAwZttJ4knw
此操作会生成以下配置:
users :
- name : mmosley
user :
auth-provider :
config :
client-id : kubernetes
client-secret : 1db158f6-177d-4d9c-8a8b-d36869918ec5
id-token : eyJraWQiOiJDTj1vaWRjaWRwLnRyZW1vbG8ubGFuLCBPVT1EZW1vLCBPPVRybWVvbG8gU2VjdXJpdHksIEw9QXJsaW5ndG9uLCBTVD1WaXJnaW5pYSwgQz1VUy1DTj1rdWJlLWNhLTEyMDIxNDc5MjEwMzYwNzMyMTUyIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL29pZGNpZHAudHJlbW9sby5sYW46ODQ0My9hdXRoL2lkcC9PaWRjSWRQIiwiYXVkIjoia3ViZXJuZXRlcyIsImV4cCI6MTQ4MzU0OTUxMSwianRpIjoiMm96US15TXdFcHV4WDlHZUhQdy1hZyIsImlhdCI6MTQ4MzU0OTQ1MSwibmJmIjoxNDgzNTQ5MzMxLCJzdWIiOiI0YWViMzdiYS1iNjQ1LTQ4ZmQtYWIzMC0xYTAxZWU0MWUyMTgifQ.w6p4J_6qQ1HzTG9nrEOrubxIMb9K5hzcMPxc9IxPx2K4xO9l-oFiUw93daH3m5pluP6K7eOE6txBuRVfEcpJSwlelsOsW8gb8VJcnzMS9EnZpeA0tW_p-mnkFc3VcfyXuhe5R3G7aa5d8uHv70yJ9Y3-UhjiN9EhpMdfPAoEB9fYKKkJRzF7utTTIPGrSaSU6d2pcpfYKaxIwePzEkT4DfcQthoZdy9ucNvvLoi1DIC-UocFD8HLs8LYKEqSxQvOcvnThbObJ9af71EwmuE21fO5KzMW20KtAeget1gnldOosPtz1G5EwvaQ401-RPQzPGMVBld0_zMCAwZttJ4knw
idp-certificate-authority : /root/ca.pem
idp-issuer-url : https://oidcidp.tremolo.lan:8443/auth/idp/OidcIdP
refresh-token : q1bKLFOyUiosTfawzA93TzZIDzH2TNa2SMm0zEiPKTUwME6BkEo6Sql5yUWVBSWpKUGphaWpxSVAfekBOZbBhaEW+VlFUeVRGcluyVF5JT4+haZmPsluFoFu5XkpXk5BXq
name : oidc
当你的 id_token
过期时,kubectl
会尝试使用你的 refresh_token
来刷新你的
id_token
,并且在 .kube/config
文件的 client_secret
中存放 refresh_token
和 id_token
的新值。
选项二:使用 --token
选项
kubectl
命令允许你使用 --token
选项传递一个令牌。
你可以将 id_token
的内容复制粘贴过来,作为此标志的取值:
kubectl --token= eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL21sYi50cmVtb2xvLmxhbjo4MDQzL2F1dGgvaWRwL29pZGMiLCJhdWQiOiJrdWJlcm5ldGVzIiwiZXhwIjoxNDc0NTk2NjY5LCJqdGkiOiI2RDUzNXoxUEpFNjJOR3QxaWVyYm9RIiwiaWF0IjoxNDc0NTk2MzY5LCJuYmYiOjE0NzQ1OTYyNDksInN1YiI6Im13aW5kdSIsInVzZXJfcm9sZSI6WyJ1c2VycyIsIm5ldy1uYW1lc3BhY2Utdmlld2VyIl0sImVtYWlsIjoibXdpbmR1QG5vbW9yZWplZGkuY29tIn0.f2As579n9VNoaKzoF-dOQGmXkFKf1FMyNV0-va_B63jn-_n9LGSCca_6IVMP8pO-Zb4KvRqGyTP0r3HkHxYy5c81AnIh8ijarruczl-TK_yF5akjSTHFZD-0gRzlevBDiH8Q79NAr-ky0P4iIXS8lY9Vnjch5MF74Zx0c3alKJHJUnnpjIACByfF2SCaYzbWFMUNat-K1PaUk5-ujMBG7yYnr95xD-63n8CO8teGUAAEMx6zRjzfhnhbzX-ajwZLGwGUBT4WqjMs70-6a7_8gZmLZb2az1cZynkFRj2BaCkVT3A2RrjeEwZEtGXlMqKJ1_I2ulrOVsYx01_yD35-rw get nodes
Webhook 令牌身份认证
Webhook 身份认证是一种用来验证持有者令牌的回调机制。
--authentication-token-webhook-config-file
指向一个配置文件,
其中描述如何访问远程的 Webhook 服务。
--authentication-token-webhook-cache-ttl
用来设定身份认证决定的缓存时间。
默认时长为 2 分钟。
--authentication-token-webhook-version
决定是使用 authentication.k8s.io/v1beta1
还是
authenticationk8s.io/v1
版本的 TokenReview
对象从 Webhook 发送/接收信息。
默认为“v1beta1”。
配置文件使用 kubeconfig
文件的格式。文件中,clusters
指代远程服务,users
指代远程 API 服务
Webhook。下面是一个例子:
# Kubernetes API 版本
apiVersion : v1
# API 对象类别
kind : Config
# clusters 指代远程服务
clusters :
- name : name-of-remote-authn-service
cluster :
certificate-authority : /path/to/ca.pem # 用来验证远程服务的 CA
server : https://authn.example.com/authenticate # 要查询的远程服务 URL。生产环境中建议使用 'https'。
# users 指代 API 服务的 Webhook 配置
users :
- name : name-of-api-server
user :
client-certificate : /path/to/cert.pem # Webhook 插件要使用的证书
client-key : /path/to/key.pem # 与证书匹配的密钥
# kubeconfig 文件需要一个上下文(Context),此上下文用于本 API 服务器
current-context : webhook
contexts :
- context :
cluster : name-of-remote-authn-service
user : name-of-api-server
name : webhook
当客户端尝试在 API 服务器上使用持有者令牌完成身份认证
(如前 所述)时,
身份认证 Webhook 会用 POST 请求发送一个 JSON 序列化的对象到远程服务。
该对象是 TokenReview
对象,其中包含持有者令牌。
Kubernetes 不会强制请求提供此 HTTP 头部。
要注意的是,Webhook API 对象和其他 Kubernetes API 对象一样,
也要受到同一版本兼容规则 约束。
实现者应检查请求的 apiVersion
字段以确保正确的反序列化,
并且 必须 以与请求相同版本的 TokenReview
对象进行响应。
说明:
Kubernetes API 服务器默认发送 authentication.k8s.io/v1beta1
令牌以实现向后兼容性。
要选择接收 authentication.k8s.io/v1
令牌认证,API 服务器必须带着参数
--authentication-token-webhook-version=v1
启动。
{
"apiVersion": "authentication.k8s.io/v1" ,
"kind": "TokenReview" ,
"spec": {
# 发送到 API 服务器的不透明持有者令牌
"token": "014fbff9a07c..." ,
# 提供令牌的服务器的受众标识符的可选列表。
# 受众感知令牌认证组件(例如,OIDC 令牌认证组件)
# 应验证令牌是否针对此列表中的至少一个受众,
# 并返回此列表与响应状态中令牌的有效受众的交集。
# 这确保了令牌对于向其提供给的服务器进行身份认证是有效的。
# 如果未提供受众,则应验证令牌以向 Kubernetes API 服务器进行身份认证。
"audiences": ["https://myserver.example.com" , "https://myserver.internal.example.com" ]
}
}
{
"apiVersion": "authentication.k8s.io/v1beta1" ,
"kind": "TokenReview" ,
"spec": {
# 发送到 API 服务器的不透明匿名令牌
"token": "014fbff9a07c..." ,
# 提供令牌的服务器的受众标识符的可选列表。
# 受众感知令牌认证组件(例如,OIDC 令牌认证组件)
# 应验证令牌是否针对此列表中的至少一个受众,
# 并返回此列表与响应状态中令牌的有效受众的交集。
# 这确保了令牌对于向其提供给的服务器进行身份认证是有效的。
# 如果未提供受众,则应验证令牌以向 Kubernetes API 服务器进行身份认证。
"audiences": ["https://myserver.example.com" , "https://myserver.internal.example.com" ]
}
}
远程服务预计会填写请求的 status
字段以指示登录成功。
响应正文的 spec
字段被忽略并且可以省略。
远程服务必须使用它收到的相同 TokenReview
API 版本返回响应。
持有者令牌的成功验证将返回:
{
"apiVersion": "authentication.k8s.io/v1" ,
"kind": "TokenReview" ,
"status": {
"authenticated": true ,
"user": {
# 必要
"username": "janedoe@example.com" ,
# 可选
"uid": "42" ,
# 可选的组成员身份
"groups": ["developers" , "qa" ],
# 认证者提供的可选附加信息。
# 此字段不可包含机密数据,因为这类数据可能被记录在日志或 API 对象中,
# 并且可能传递给 admission webhook。
"extra": {
"extrafield1": [
"extravalue1" ,
"extravalue2"
]
}
},
# 认证组件可以返回的、可选的用户感知令牌列表,
# 包含令牌对其有效的、包含于 `spec.audiences` 列表中的受众。
# 如果省略,则认为该令牌可用于对 Kubernetes API 服务器进行身份认证。
"audiences": ["https://myserver.example.com" ]
}
}
{
"apiVersion": "authentication.k8s.io/v1beta1" ,
"kind": "TokenReview" ,
"status": {
"authenticated": true ,
"user": {
# 必要
"username": "janedoe@example.com" ,
# 可选
"uid": "42" ,
# 可选的组成员身份
"groups": ["developers" , "qa" ],
# 认证者提供的可选附加信息。
# 此字段不可包含机密数据,因为这类数据可能被记录在日志或 API 对象中,
# 并且可能传递给 admission webhook。
"extra": {
"extrafield1": [
"extravalue1" ,
"extravalue2"
]
}
},
# 认证组件可以返回的、可选的用户感知令牌列表,
# 包含令牌对其有效的、包含于 `spec.audiences` 列表中的受众。
# 如果省略,则认为该令牌可用于对 Kubernetes API 服务器进行身份认证。
"audiences": ["https://myserver.example.com" ]
}
}
而不成功的请求会返回:
{
"apiVersion": "authentication.k8s.io/v1" ,
"kind": "TokenReview" ,
"status": {
"authenticated": false ,
# 可选地包括有关身份认证失败原因的详细信息。
# 如果没有提供错误信息,API 将返回一个通用的 Unauthorized 消息。
# 当 authenticated=true 时,error 字段被忽略。
"error": "Credentials are expired"
}
}
{
"apiVersion": "authentication.k8s.io/v1beta1" ,
"kind": "TokenReview" ,
"status": {
"authenticated": false ,
# 可选地包括有关身份认证失败原因的详细信息。
# 如果没有提供错误信息,API 将返回一个通用的 Unauthorized 消息。
# 当 authenticated=true 时,error 字段被忽略。
"error": "Credentials are expired"
}
}
身份认证代理
API 服务器可以配置成从请求的头部字段值(如 X-Remote-User
)中辩识用户。
这一设计是用来与某身份认证代理一起使用 API 服务器,代理负责设置请求的头部字段值。
--requestheader-username-headers
必需字段,大小写不敏感。
用来设置要获得用户身份所要检查的头部字段名称列表(有序)。
第一个包含数值的字段会被用来提取用户名。
--requestheader-group-headers
可选字段,在 Kubernetes 1.6 版本以后支持,大小写不敏感。
建议设置为 "X-Remote-Group"。用来指定一组头部字段名称列表,以供检查用户所属的组名称。
所找到的全部头部字段的取值都会被用作用户组名。
--requestheader-extra-headers-prefix
可选字段,在 Kubernetes 1.6 版本以后支持,大小写不敏感。
建议设置为 "X-Remote-Extra-"。用来设置一个头部字段的前缀字符串,
API 服务器会基于所给前缀来查找与用户有关的一些额外信息。这些额外信息通常用于所配置的鉴权插件。
API 服务器会将与所给前缀匹配的头部字段过滤出来,去掉其前缀部分,将剩余部分转换为小写字符串,
并在必要时执行百分号解码 后,
构造新的附加信息字段键名。原来的头部字段值直接作为附加信息字段的值。
例如,使用下面的配置:
--requestheader-username-headers=X-Remote-User
--requestheader-group-headers=X-Remote-Group
--requestheader-extra-headers-prefix=X-Remote-Extra-
针对所收到的如下请求:
GET / HTTP / 1.1
X-Remote-User: fido
X-Remote-Group: dogs
X-Remote-Group: dachshunds
X-Remote-Extra-Acme.com%2Fproject: some-project
X-Remote-Extra-Scopes: openid
X-Remote-Extra-Scopes: profile
会生成下面的用户信息:
name : fido
groups :
- dogs
- dachshunds
extra :
acme.com/project :
- some-project
scopes :
- openid
- profile
为了防范头部信息侦听,在请求中的头部字段被检视之前,
身份认证代理需要向 API 服务器提供一份合法的客户端证书,供后者使用所给的 CA 来执行验证。
警告:不要 在不同的上下文中复用 CA 证书,除非你清楚这样做的风险是什么以及应如何保护
CA 用法的机制。
--requestheader-client-ca-file
必需字段,给出 PEM 编码的证书包。
在检查请求的头部字段以提取用户名信息之前,必须提供一个合法的客户端证书,
且该证书要能够被所给文件中的机构所验证。
--requestheader-allowed-names
可选字段,用来给出一组公共名称(CN)。
如果此标志被设置,则在检视请求中的头部以提取用户信息之前,
必须提供包含此列表中所给的 CN 名的、合法的客户端证书。
匿名请求
启用匿名请求支持之后,如果请求没有被已配置的其他身份认证方法拒绝,
则被视作匿名请求(Anonymous Requests)。这类请求获得用户名 system:anonymous
和对应的用户组 system:unauthenticated
。
例如,在一个配置了令牌身份认证且启用了匿名访问的服务器上,如果请求提供了非法的持有者令牌,
则会返回 401 Unauthorized
错误。如果请求没有提供持有者令牌,则被视为匿名请求。
在 1.5.1-1.5.x 版本中,匿名访问默认情况下是被禁用的,可以通过为 API 服务器设定
--anonymous-auth=true
来启用。
在 1.6 及之后版本中,如果所使用的鉴权模式不是 AlwaysAllow
,则匿名访问默认是被启用的。
从 1.6 版本开始,ABAC 和 RBAC 鉴权模块要求对 system:anonymous
用户或者
system:unauthenticated
用户组执行显式的权限判定,所以之前的为用户 *
或用户组
*
赋予访问权限的策略规则都不再包含匿名用户。
匿名身份认证模块配置
特性状态:
Kubernetes v1.31 [alpha]
(enabled by default: false)
AuthenticationConfiguration
可用于配置匿名身份认证模块。
要通过配置文件启用匿名身份认证配置,你需要启用 AnonymousAuthConfigurableEndpoints
特性门控。
当此特性门控被启用时,你不能设置 --anonymous-auth
标志。
使用身份认证配置文件来配置匿名身份认证模块的主要优点是,
除了启用和禁用匿名身份认证外,你还可以配置哪些端点支持匿名身份认证。
以下是一个身份认证配置文件示例:
---
#
# 注意:这是一个示例配置。
# 请勿将其用于你自己的集群!
#
apiVersion : apiserver.config.k8s.io/v1beta1
kind : AuthenticationConfiguration
anonymous :
enabled : true
conditions :
- path : /livez
- path : /readyz
- path : /healthz
在上述配置中,只有 /livez
、/readyz
和 /healthz
端点可以通过匿名请求进行访问。
即使 RBAC 配置允许进行匿名请求,也不可以访问任何其他端点。
用户伪装
一个用户可以通过伪装(Impersonation)头部字段来以另一个用户的身份执行操作。
使用这一能力,你可以手动重载请求被身份认证所识别出来的用户信息。
例如,管理员可以使用这一功能特性来临时伪装成另一个用户,查看请求是否被拒绝,
从而调试鉴权策略中的问题,
带伪装的请求首先会被身份认证识别为发出请求的用户,
之后会切换到使用被伪装的用户的用户信息。
用户发起 API 调用时同时 提供自身的凭据和伪装头部字段信息。
API 服务器对用户执行身份认证。
API 服务器确认通过认证的用户具有伪装特权。
请求用户的信息被替换成伪装字段的值。
评估请求,鉴权组件针对所伪装的用户信息执行操作。
以下 HTTP 头部字段可用来执行伪装请求:
Impersonate-User
:要伪装成的用户名
Impersonate-Group
:要伪装成的用户组名。可以多次指定以设置多个用户组。
可选字段;要求 "Impersonate-User" 必须被设置。
Impersonate-Extra-<附加名称>
:一个动态的头部字段,用来设置与用户相关的附加字段。
此字段可选;要求 "Impersonate-User" 被设置。为了能够以一致的形式保留,
<附加名称>
部分必须是小写字符,
如果有任何字符不是合法的 HTTP 头部标签字符 ,
则必须是 utf8 字符,且转换为百分号编码 。
Impersonate-Uid
:一个唯一标识符,用来表示所伪装的用户。此头部可选。
如果设置,则要求 "Impersonate-User" 也存在。Kubernetes 对此字符串没有格式要求。
说明:
在 1.11.3 版本之前(以及 1.10.7、1.9.11),<附加名称>
只能包含合法的 HTTP 标签字符。
说明:
Impersonate-Uid
仅在 1.22.0 及更高版本中可用。
伪装带有用户组的用户时,所使用的伪装头部字段示例:
Impersonate-User: jane.doe@example.com
Impersonate-Group: developers
Impersonate-Group: admins
伪装带有 UID 和附加字段的用户时,所使用的伪装头部字段示例:
Impersonate-User: jane.doe@example.com
Impersonate-Extra-dn: cn=jane,ou=engineers,dc=example,dc=com
Impersonate-Extra-acme.com%2Fproject: some-project
Impersonate-Extra-scopes: view
Impersonate-Extra-scopes: development
Impersonate-Uid: 06f6ce97-e2c5-4ab8-7ba5-7654dd08d52b
在使用 kubectl
时,可以使用 --as
标志来配置 Impersonate-User
头部字段值,
使用 --as-group
标志配置 Impersonate-Group
头部字段值。
Error from server (Forbidden): User "clark" cannot get nodes at the cluster scope. (get nodes mynode)
设置 --as
和 --as-group
标志:
kubectl drain mynode --as= superman --as-group= system:masters
node/mynode cordoned
node/mynode drained
说明:
kubectl
不能对附加字段或 UID 执行伪装。
若要伪装成某个用户、某个组、用户标识符(UID))或者设置附加字段,
执行伪装操作的用户必须具有对所伪装的类别(user
、group
、uid
等)执行 impersonate
动词操作的能力。
对于启用了 RBAC 鉴权插件的集群,下面的 ClusterRole 封装了设置用户和组伪装字段所需的规则:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : impersonator
rules :
- apiGroups : ["" ]
resources : ["users" , "groups" , "serviceaccounts" ]
verbs : ["impersonate" ]
为了执行伪装,附加字段和所伪装的 UID 都位于 "authorization.k8s.io" apiGroup
中。
附加字段会被作为 userextras
资源的子资源来执行权限评估。
如果要允许用户为附加字段 “scopes” 和 UID 设置伪装头部,该用户需要被授予以下角色:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : scopes-and-uid-impersonator
rules :
# 可以设置 "Impersonate-Extra-scopes" 和 "Impersonate-Uid" 头部
- apiGroups : ["authentication.k8s.io" ]
resources : ["userextras/scopes" , "uids" ]
verbs : ["impersonate" ]
你也可以通过约束资源可能对应的 resourceNames
限制伪装头部的取值:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : limited-impersonator
rules :
# 可以伪装成用户 "jane.doe@example.com"
- apiGroups : ["" ]
resources : ["users" ]
verbs : ["impersonate" ]
resourceNames : ["jane.doe@example.com" ]
# 可以伪装成用户组 "developers" 和 "admins"
- apiGroups : ["" ]
resources : ["groups" ]
verbs : ["impersonate" ]
resourceNames : ["developers" ,"admins" ]
# 可以将附加字段 "scopes" 伪装成 "view" 和 "development"
- apiGroups : ["authentication.k8s.io" ]
resources : ["userextras/scopes" ]
verbs : ["impersonate" ]
resourceNames : ["view" , "development" ]
# 可以伪装 UID "06f6ce97-e2c5-4ab8-7ba5-7654dd08d52b"
- apiGroups : ["authentication.k8s.io" ]
resources : ["uids" ]
verbs : ["impersonate" ]
resourceNames : ["06f6ce97-e2c5-4ab8-7ba5-7654dd08d52b" ]
说明:
基于伪装成一个用户或用户组的能力,你可以执行任何操作,好像你就是那个用户或用户组一样。
出于这一原因,伪装操作是不受名字空间约束的。
如果你希望允许使用 Kubernetes RBAC 来执行身份伪装,就需要使用 ClusterRole
和 ClusterRoleBinding
,而不是 Role
或 RoleBinding
。
client-go 凭据插件
特性状态:
Kubernetes v1.22 [stable]
k8s.io/client-go
及使用它的工具(如 kubectl
和 kubelet
)
可以执行某个外部命令来获得用户的凭据信息。
这一特性的目的是便于客户端与 k8s.io/client-go
并不支持的身份认证协议
(LDAP、Kerberos、OAuth2、SAML 等)继承。
插件实现特定于协议的逻辑,之后返回不透明的凭据以供使用。
几乎所有的凭据插件使用场景中都需要在服务器端存在一个支持
Webhook 令牌身份认证组件 的模块,
负责解析客户端插件所生成的凭据格式。
说明:
早期版本的 kubectl
内置了对 AKS 和 GKE 的认证支持,但这一功能已不再存在。
示例应用场景
在一个假想的应用场景中,某组织运行这一个外部的服务,能够将特定用户的已签名的令牌转换成
LDAP 凭据。此服务还能够对
Webhook 令牌身份认证组件 的请求做出响应以验证所提供的令牌。
用户需要在自己的工作站上安装一个凭据插件。
要对 API 服务器认证身份时:
用户发出 kubectl
命令。
凭据插件提示用户输入 LDAP 凭据,并与外部服务交互,获得令牌。
凭据插件将令牌返回该 client-go,后者将其用作持有者令牌提交给 API 服务器。
API 服务器使用 Webhook 令牌身份认证组件 向外部服务发出
TokenReview
请求。
外部服务检查令牌上的签名,返回用户的用户名和用户组信息。
配置
凭据插件通过 kubectl 配置文件
来作为 user 字段的一部分设置。
apiVersion : v1
kind : Config
users :
- name : my-user
user :
exec :
# 要执行的命令。必需。
command : "example-client-go-exec-plugin"
# 解析 ExecCredentials 资源时使用的 API 版本。必需。
# 插件返回的 API 版本必需与这里列出的版本匹配。
#
# 要与支持多个版本的工具(如 client.authentication.k8s.io/v1beta1)集成,
# 可以设置一个环境变量或者向工具传递一个参数标明 exec 插件所期望的版本,
# 或者从 KUBERNETES_EXEC_INFO 环境变量的 ExecCredential 对象中读取版本信息。
apiVersion : "client.authentication.k8s.io/v1"
# 执行此插件时要设置的环境变量。可选字段。
env :
- name : "FOO"
value : "bar"
# 执行插件时要传递的参数。可选字段。
args :
- "arg1"
- "arg2"
# 当可执行文件不存在时显示给用户的文本。可选的。
installHint : |
需要 example-client-go-exec-plugin 来在当前集群上执行身份认证。可以通过以下命令安装:
MacOS: brew install example-client-go-exec-plugin
Ubuntu: apt-get install example-client-go-exec-plugin
Fedora: dnf install example-client-go-exec-plugin
...
# 是否使用 KUBERNETES_EXEC_INFO 环境变量的一部分向这个 exec 插件
# 提供集群信息(可能包含非常大的 CA 数据)
provideClusterInfo : true
# Exec 插件与标准输入 I/O 数据流之间的协议。如果协议无法满足,
# 则插件无法运行并会返回错误信息。合法的值包括 "Never" (Exec 插件从不使用标准输入),
# "IfAvailable" (Exec 插件希望在可以的情况下使用标准输入),
# 或者 "Always" (Exec 插件需要使用标准输入才能工作)。必需字段。
interactiveMode : Never
clusters :
- name : my-cluster
cluster :
server : "https://172.17.4.100:6443"
certificate-authority : "/etc/kubernetes/ca.pem"
extensions :
- name : client.authentication.k8s.io/exec # 为每个集群 exec 配置保留的扩展名
extension :
arbitrary : config
this : 在设置 provideClusterInfo 时可通过环境变量 KUBERNETES_EXEC_INFO 指定
you : ["can" , "put" , "anything" , "here" ]
contexts :
- name : my-cluster
context :
cluster : my-cluster
user : my-user
current-context : my-cluster
apiVersion : v1
kind : Config
users :
- name : my-user
user :
exec :
# 要执行的命令。必需。
command : "example-client-go-exec-plugin"
# 解析 ExecCredentials 资源时使用的 API 版本。必需。
# 插件返回的 API 版本必需与这里列出的版本匹配。
#
# 要与支持多个版本的工具(如 client.authentication.k8s.io/v1)集成,
# 可以设置一个环境变量或者向工具传递一个参数标明 exec 插件所期望的版本,
# 或者从 KUBERNETES_EXEC_INFO 环境变量的 ExecCredential 对象中读取版本信息。
apiVersion : "client.authentication.k8s.io/v1beta1"
# 执行此插件时要设置的环境变量。可选字段。
env :
- name : "FOO"
value : "bar"
# 执行插件时要传递的参数。可选字段。
args :
- "arg1"
- "arg2"
# 当可执行文件不存在时显示给用户的文本。可选的。
installHint : |
需要 example-client-go-exec-plugin 来在当前集群上执行身份认证。可以通过以下命令安装:
MacOS: brew install example-client-go-exec-plugin
Ubuntu: apt-get install example-client-go-exec-plugin
Fedora: dnf install example-client-go-exec-plugin
...
# 是否使用 KUBERNETES_EXEC_INFO 环境变量的一部分向这个 exec 插件
# 提供集群信息(可能包含非常大的 CA 数据)
provideClusterInfo : true
# Exec 插件与标准输入 I/O 数据流之间的协议。如果协议无法满足,
# 则插件无法运行并会返回错误信息。合法的值包括 "Never"(Exec 插件从不使用标准输入),
# "IfAvailable" (Exec 插件希望在可以的情况下使用标准输入),
# 或者 "Always" (Exec 插件需要使用标准输入才能工作)。可选字段。
# 默认值为 "IfAvailable"。
interactiveMode : Never
clusters :
- name : my-cluster
cluster :
server : "https://172.17.4.100:6443"
certificate-authority : "/etc/kubernetes/ca.pem"
extensions :
- name : client.authentication.k8s.io/exec # 为每个集群 exec 配置保留的扩展名
extension :
arbitrary : config
this : 在设置 provideClusterInfo 时可通过环境变量 KUBERNETES_EXEC_INFO 指定
you : ["can" , "put" , "anything" , "here" ]
contexts :
- name : my-cluster
context :
cluster : my-cluster
user : my-user
current-context : my-cluster
解析相对命令路径时,kubectl 将其视为与配置文件比较而言的相对路径。
如果 KUBECONFIG 被设置为 /home/jane/kubeconfig
,而 exec 命令为
./bin/example-client-go-exec-plugin
,则要执行的可执行文件为
/home/jane/bin/example-client-go-exec-plugin
。
- name : my-user
user :
exec :
# 对 kubeconfig 目录而言的相对路径
command : "./bin/example-client-go-exec-plugin"
apiVersion : "client.authentication.k8s.io/v1"
interactiveMode : Never
所执行的命令会在 stdout
打印 ExecCredential
对象。
k8s.io/client-go
使用 status
中返回的凭据信息向 Kubernetes API 服务器执行身份认证。
所执行的命令会通过环境变量 KUBERNETES_EXEC_INFO
收到一个 ExecCredential
对象作为其输入。
此输入中包含类似于所返回的 ExecCredential
对象的预期 API 版本,
以及是否插件可以使用 stdin
与用户交互这类信息。
在交互式会话(即,某终端)中运行时,stdin
是直接暴露给插件使用的。
插件应该使用来自 KUBERNETES_EXEC_INFO
环境变量的 ExecCredential
输入对象中的 spec.interactive
字段来确定是否提供了 stdin
。
插件的 stdin
需求(即,为了能够让插件成功运行,是否 stdin
是可选的、
必须提供的或者从不会被使用的)是通过
kubeconfig
中的 user.exec.interactiveMode
来声明的(参见下面的表格了解合法值)。
字段 user.exec.interactiveMode
在 client.authentication.k8s.io/v1beta1
中是可选的,在 client.authentication.k8s.io/v1
中是必需的。
interactiveMode 取值
interactiveMode
取值
含义
Never
此 exec 插件从不需要使用标准输入,因此如论是否有标准输入提供给用户输入,该 exec 插件都能运行。
IfAvailable
此 exec 插件希望在标准输入可用的情况下使用标准输入,但在标准输入不存在时也可运行。因此,无论是否存在给用户提供输入的标准输入,此 exec 插件都会运行。如果存在供用户输入的标准输入,则该标准输入会被提供给 exec 插件。
Always
此 exec 插件需要标准输入才能正常运行,因此只有存在供用户输入的标准输入时,此 exec 插件才会运行。如果不存在供用户输入的标准输入,则 exec 插件无法运行,并且 exec 插件的执行者会因此返回错误信息。
与使用持有者令牌凭据,插件在 ExecCredential
的状态中返回一个令牌:
{
"apiVersion" : "client.authentication.k8s.io/v1" ,
"kind" : "ExecCredential" ,
"status" : {
"token" : "my-bearer-token"
}
}
{
"apiVersion" : "client.authentication.k8s.io/v1beta1" ,
"kind" : "ExecCredential" ,
"status" : {
"token" : "my-bearer-token"
}
}
另一种方案是,返回 PEM 编码的客户端证书和密钥,以便执行 TLS 客户端身份认证。
如果插件在后续调用中返回了不同的证书或密钥,k8s.io/client-go
会终止其与服务器的连接,从而强制执行新的 TLS 握手过程。
如果指定了这种方式,则 clientKeyData
和 clientCertificateData
字段都必须存在。
clientCertificateData
字段可能包含一些要发送给服务器的中间证书(Intermediate
Certificates)。
{
"apiVersion" : "client.authentication.k8s.io/v1" ,
"kind" : "ExecCredential" ,
"status" : {
"clientCertificateData" : "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----" ,
"clientKeyData" : "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
}
}
{
"apiVersion" : "client.authentication.k8s.io/v1beta1" ,
"kind" : "ExecCredential" ,
"status" : {
"clientCertificateData" : "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----" ,
"clientKeyData" : "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
}
}
作为一种可选方案,响应中还可以包含以 RFC 3339
时间戳格式给出的证书到期时间。
证书到期时间的有无会有如下影响:
如果响应中包含了到期时间,持有者令牌和 TLS 凭据会被缓存,直到期限到来、
或者服务器返回 401 HTTP 状态码,或者进程退出。
如果未指定到期时间,则持有者令牌和 TLS 凭据会被缓存,直到服务器返回 401
HTTP 状态码或者进程退出。
{
"apiVersion" : "client.authentication.k8s.io/v1" ,
"kind" : "ExecCredential" ,
"status" : {
"token" : "my-bearer-token" ,
"expirationTimestamp" : "2018-03-05T17:30:20-08:00"
}
}
{
"apiVersion" : "client.authentication.k8s.io/v1beta1" ,
"kind" : "ExecCredential" ,
"status" : {
"token" : "my-bearer-token" ,
"expirationTimestamp" : "2018-03-05T17:30:20-08:00"
}
}
为了让 exec 插件能够获得特定与集群的信息,可以在
kubeconfig
中的 user.exec
设置 provideClusterInfo
。
这一特定于集群的信息就会通过 KUBERNETES_EXEC_INFO
环境变量传递给插件。
此环境变量中的信息可以用来执行特定于集群的凭据获取逻辑。
下面的 ExecCredential
清单描述的是一个示例集群信息。
{
"apiVersion" : "client.authentication.k8s.io/v1" ,
"kind" : "ExecCredential" ,
"spec" : {
"cluster" : {
"server" : "https://172.17.4.100:6443" ,
"certificate-authority-data" : "LS0t..." ,
"config" : {
"arbitrary" : "config" ,
"this" : "可以在设置 provideClusterInfo 时通过 KUBERNETES_EXEC_INFO 环境变量提供" ,
"you" : ["can" , "put" , "anything" , "here" ]
}
},
"interactive" : true
}
}
{
"apiVersion" : "client.authentication.k8s.io/v1beta1" ,
"kind" : "ExecCredential" ,
"spec" : {
"cluster" : {
"server" : "https://172.17.4.100:6443" ,
"certificate-authority-data" : "LS0t..." ,
"config" : {
"arbitrary" : "config" ,
"this" : "可以在设置 provideClusterInfo 时通过 KUBERNETES_EXEC_INFO 环境变量提供" ,
"you" : ["can" , "put" , "anything" , "here" ]
}
},
"interactive" : true
}
}
为客户端提供的对身份认证信息的 API 访问
特性状态:
Kubernetes v1.28 [stable]
如果集群启用了此 API,你可以使用 SelfSubjectReview
API 来了解 Kubernetes
集群如何映射你的身份认证信息从而将你识别为某客户端。无论你是作为用户(通常代表一个真的人)还是作为
ServiceAccount 进行身份认证,这一 API 都可以使用。
SelfSubjectReview
对象没有任何可配置的字段。
Kubernetes API 服务器收到请求后,将使用用户属性填充 status 字段并将其返回给用户。
请求示例(主体将是 SelfSubjectReview
):
POST /apis/authentication.k8s.io/v1/selfsubjectreviews
{
"apiVersion" : "authentication.k8s.io/v1" ,
"kind" : "SelfSubjectReview"
}
响应示例:
{
"apiVersion" : "authentication.k8s.io/v1" ,
"kind" : "SelfSubjectReview" ,
"status" : {
"userInfo" : {
"name" : "jane.doe" ,
"uid" : "b6c7cfd4-f166-11ec-8ea0-0242ac120002" ,
"groups" : [
"viewers" ,
"editors" ,
"system:authenticated"
],
"extra" : {
"provider_id" : ["token.company.example" ]
}
}
}
}
为了方便,Kubernetes 提供了 kubectl auth whoami
命令。
执行此命令将产生以下输出(但将显示不同的用户属性):
通过提供 output 标志,也可以打印结果的 JSON 或 YAML 表现形式:
{
"apiVersion" : "authentication.k8s.io/v1alpha1" ,
"kind" : "SelfSubjectReview" ,
"status" : {
"userInfo" : {
"username" : "jane.doe" ,
"uid" : "b79dbf30-0c6a-11ed-861d-0242ac120002" ,
"groups" : [
"students" ,
"teachers" ,
"system:authenticated"
],
"extra" : {
"skills" : [
"reading" ,
"learning"
],
"subjects" : [
"math" ,
"sports"
]
}
}
}
}
apiVersion : authentication.k8s.io/v1
kind : SelfSubjectReview
status :
userInfo :
username : jane.doe
uid : b79dbf30-0c6a-11ed-861d-0242ac120002
groups :
- students
- teachers
- system:authenticated
extra :
skills :
- reading
- learning
subjects :
- math
- sports
在 Kubernetes 集群中使用复杂的身份认证流程时,例如如果你使用
Webhook 令牌身份认证 或
身份认证代理 时,
此特性极其有用。
说明:
Kubernetes API 服务器在所有身份认证机制
(包括伪装 ),
被应用后填充 userInfo
,
如果你或某个身份认证代理使用伪装进行 SelfSubjectReview,你会看到被伪装用户的用户详情和属性。
默认情况下,所有经过身份认证的用户都可以在 APISelfSubjectReview
特性被启用时创建 SelfSubjectReview
对象。
这是 system:basic-user
集群角色允许的操作。
说明:
你只能在以下情况下进行 SelfSubjectReview
请求:
集群启用了 APISelfSubjectReview
特性门控
(Kubernetes 1.31 不需要,但较旧的 Kubernetes 版本可能没有此特性门控,
或者默认为关闭状态)。
(如果你运行的 Kubernetes 版本早于 v1.28 版本)集群的 API 服务器包含
authentication.k8s.io/v1alpha1
或 authentication.k8s.io/v1beta1
API 组。
集群的 API 服务器已启用 authentication.k8s.io/v1alpha1
或者 authentication.k8s.io/v1beta1
API 组 。
接下来
3.2 - 使用启动引导令牌(Bootstrap Tokens)认证
特性状态:
Kubernetes v1.18 [stable]
启动引导令牌是一种简单的持有者令牌(Bearer Token),这种令牌是在新建集群
或者在现有集群中添加新节点时使用的。
它被设计成能够支持 kubeadm
,
但是也可以被用在其他的案例中以便用户在不使用 kubeadm
的情况下启动集群。
它也被设计成可以通过 RBAC 策略,结合
kubelet TLS 启动引导
系统进行工作。
启动引导令牌被定义成一个特定类型的 Secret(bootstrap.kubernetes.io/token
),
并存在于 kube-system
名字空间中。
这些 Secret 会被 API 服务器上的启动引导认证组件(Bootstrap Authenticator)读取。
控制器管理器中的控制器 TokenCleaner 能够删除过期的令牌。
这些令牌也被用来在节点发现的过程中会使用的一个特殊的 ConfigMap 对象。
BootstrapSigner 控制器也会使用这一 ConfigMap。
令牌格式
启动引导令牌使用 abcdef.0123456789abcdef
的形式。
更加规范地说,它们必须符合正则表达式 [a-z0-9]{6}\.[a-z0-9]{16}
。
令牌的第一部分是 “Token ID”,它是一种公开信息,用于引用令牌并确保不会
泄露认证所使用的秘密信息。
第二部分是“令牌秘密(Token Secret)”,它应该被共享给受信的第三方。
启用启动引导令牌
启用启动引导令牌身份认证
启动引导令牌认证组件可以通过 API 服务器上的如下标志启用:
--enable-bootstrap-token-auth
启动引导令牌被启用后,可以作为持有者令牌的凭据,用于 API 服务器请求的身份认证。
Authorization: Bearer 07401b.f395accd246ae52d
令牌认证为用户名 system:bootstrap:<token id>
并且是组 system:bootstrappers
的成员。额外的组信息可以通过令牌的 Secret 来设置。
过期的令牌可以通过启用控制器管理器中的 tokencleaner
控制器来删除。
--controllers=*,tokencleaner
每个合法的令牌背后对应着 kube-system
名字空间中的某个 Secret 对象。
你可以从
这里
找到完整设计文档。
这是 Secret 看起来的样子。
apiVersion : v1
kind : Secret
metadata :
# name 必须是 "bootstrap-token-<token id>" 格式的
name : bootstrap-token-07401b
namespace : kube-system
# type 必须是 'bootstrap.kubernetes.io/token'
type : bootstrap.kubernetes.io/token
stringData :
# 供人阅读的描述,可选。
description : "The default bootstrap token generated by 'kubeadm init'."
# 令牌 ID 和秘密信息,必需。
token-id : 07401b
token-secret : f395accd246ae52d
# 可选的过期时间字段
expiration : 2017-03-10T03:22:11Z
# 允许的用法
usage-bootstrap-authentication : "true"
usage-bootstrap-signing : "true"
# 令牌要认证为的额外组,必须以 "system:bootstrappers:" 开头
auth-extra-groups : system:bootstrappers:worker,system:bootstrappers:ingress
Secret 的类型必须是 bootstrap.kubernetes.io/token
,而且名字必须是 bootstrap-token-<token id>
。
令牌必须存在于 kube-system
名字空间中。
usage-bootstrap-*
成员表明这个 Secret 的用途。启用时,值必须设置为 true
。
usage-bootstrap-authentication
表示令牌可以作为持有者令牌用于 API 服务器的身份认证。
usage-bootstrap-signing
表示令牌可被用于 cluster-info
ConfigMap 的签名,
就像下面描述的那样。
expiration
字段控制令牌的失效期。过期的令牌在用于身份认证时会被拒绝,在用于
ConfigMap 签名时会被忽略。
过期时间值是遵循 RFC3339
进行编码的 UTC 时间。启用 TokenCleaner 控制器会自动删除过期的令牌。
使用 kubeadm
管理令牌
你可以使用 kubeadm
工具管理运行中集群上的令牌。
参见 kubeadm token 文档
以了解详细信息。
ConfigMap 签名
除了身份认证,令牌还可以用于签名 ConfigMap。
这一用法发生在集群启动过程的早期,在客户端信任 API 服务器之前。
被签名的 ConfigMap 可以被共享令牌完成身份认证。
通过在控制器管理器上启用 bootstrapsigner
控制器可以启用 ConfigMap 签名特性。
--controllers=*,bootstrapsigner
被签名的 ConfigMap 是 kube-public
名字空间中的 cluster-info
。
典型的工作流中,客户端在未经认证和忽略 TLS 报错的状态下读取这个 ConfigMap。
通过检查 ConfigMap 中嵌入的签名校验 ConfigMap 的载荷。
ConfigMap 会是这个样子的:
apiVersion : v1
kind : ConfigMap
metadata :
name : cluster-info
namespace : kube-public
data :
jws-kubeconfig-07401b : eyJhbGciOiJIUzI1NiIsImtpZCI6IjA3NDAxYiJ9..tYEfbo6zDNo40MQE07aZcQX2m3EB2rO3NuXtxVMYm9U
kubeconfig : |
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <非常长的证书数据>
server: https://10.138.0.2:6443
name: ""
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
ConfigMap 的 kubeconfig
成员是一个填好了集群信息的配置文件。
这里主要交换的信息是 certificate-authority-data
。在将来可能会有扩展。
签名是一个使用 “detached” 模式生成的 JWS 签名。
为了检验签名,用户应该按照 JWS 规则(base64 编码且丢掉结尾的 =
)对
kubeconfig
的载荷进行编码。完成编码的载荷会被插入到两个句点中间,形成完整的
JWS。你可以使用完整的令牌(比如 07401b.f395accd246ae52d
)作为共享密钥,
通过 HS256
方式 (HMAC-SHA256) 对 JWS 进行校验。
用户必须 确保使用了 HS256。
警告:
任何拥有了启动引导令牌的主体都可以为该令牌生成一个合法的签名。
当使用 ConfigMap 签名时,非常不建议针对很多客户使用相同的令牌,因为某个被攻击的
客户可能对另一个一来签名来开启 TLS 信任的客户发起中间人攻击。
参考 kubeadm 实现细节
了解更多信息。
3.3 - 鉴权
Kubernetes 鉴权机制和支持的鉴权模式的详细信息。
Kubernetes 鉴权在身份认证 之后进行。
通常,发出请求的客户端必须经过身份验证(登录)才能允许其请求;
但是,Kubernetes 在某些情况下也允许匿名请求。
有关鉴权在 API 访问控制中的位置这类进一步的语境信息,
请阅读控制对 Kubernetes API 的访问 。
鉴权裁定
Kubernetes 对 API 请求的鉴权在 API 服务器内进行。
API 服务器根据所有策略评估所有请求属性,可能还会咨询外部服务,然后允许或拒绝该请求。
API 请求的所有部分都必须通过某种鉴权机制才能继续,
换句话说:默认情况下拒绝访问。
说明:
依赖于特定对象种类的特定字段的访问控制和策略由准入控制器 处理。
Kubernetes 准入控制发生在鉴权完成之后(因此,仅当鉴权决策是允许请求时)。
当系统配置了多个鉴权模块 时,Kubernetes 将按顺序使用每个模块。
如果任何鉴权模块批准 或拒绝 请求,则立即返回该决定,并且不会与其他鉴权模块协商。
如果所有模块对请求没有意见 ,则拒绝该请求。
总体拒绝裁决意味着 API 服务器拒绝请求并以 HTTP 403(禁止)状态进行响应。
鉴权中使用的请求属性
Kubernetes 仅审查以下 API 请求属性:
用户 —— 身份验证期间提供的 user
字符串。
组 —— 经过身份验证的用户所属的组名列表。
额外信息 —— 由身份验证层提供的任意字符串键到字符串值的映射。
API —— 指示请求是否针对 API 资源。
请求路径 —— 各种非资源端点的路径,如 /api
或 /healthz
。
API 请求动词 —— API 动词 get
、list
、create
、update
、patch
、watch
、
proxy
、redirect
、delete
和 deletecollection
用于资源请求。
要确定资源 API 端点的请求动词,请参阅请求动词和鉴权 。
HTTP 请求动词 —— HTTP 动词 get
、post
、put
和 delete
用于非资源请求。
资源 —— 正在访问的资源的 ID 或名称(仅限资源请求)-
对于使用 get
、update
、patch
和 delete
动词的资源请求,你必须提供资源名称。
子资源 —— 正在访问的子资源(仅限资源请求)。
名字空间 —— 正在访问的对象的名称空间(仅适用于名字空间资源请求)。
API 组 —— 正在访问的 API 组
(仅限资源请求)。空字符串表示核心 API 组 。
请求动词和鉴权
非资源请求
对于 /api/v1/...
或 /apis/<group>/<version>/...
之外的端点的请求被视为非资源请求(Non-Resource Requests) ,
并使用该请求的 HTTP 方法的小写形式作为其请求动词。
例如,对 /api
或 /healthz
这类端点的 GET
请求将使用 get 作为其动词。
资源请求
为了确定资源 API 端点的请求动词,Kubernetes 会映射所使用的 HTTP 动词,
并考虑该请求是否作用于单个资源或资源集合:
HTTP 动词
请求动词
POST
create
GET
、HEAD
get (针对单个资源)、list (针对集合,包括完整的对象内容)、watch (用于查看单个资源或资源集合)
PUT
update
PATCH
patch
DELETE
delete (针对单个资源)、deletecollection (针对集合)
注意:
get 、list 和 watch 动作都可以返回一个资源的完整详细信息。就返回的数据而言,它们是等价的。
例如,对 secrets 使用 list 仍然会显示所有已返回资源的 data 属性。
Kubernetes 有时使用专门的动词以对额外的权限进行鉴权。例如:
身份认证 的特殊情况
对核心 API 组中 users
、groups
和 serviceaccounts
以及 authentication.k8s.io
API 组中的 userextras
所使用的 impersonate 动词。
RBAC
对 rbac.authorization.k8s.io
API 组中 roles
和 clusterroles
资源的 bind
和 escalate 动词
鉴权上下文
Kubernetes 需要 REST API 请求所共有的属性,
这意味着 Kubernetes 鉴权可与现有的组织范围或云提供商范围的访问控制系统配合使用,
这些系统可以处理除 Kubernetes API 之外的其他 API。
鉴权模式
AlwaysAllow
此模式允许所有请求,但存在安全风险 ,
仅当你的 API 请求不需要鉴权时(例如,用于测试),才使用此鉴权模式。
AlwaysDeny
此模式阻止所有请求。此鉴权模式仅适用于测试。
ABAC
(基于属性的访问控制 )
Kubernetes ABAC 模式定义了一种访问控制范例,通过使用将属性组合在一起的策略向用户授予访问权限,
策略可以使用任何类型的属性(用户属性、资源属性、对象、环境属性等)。
RBAC
(基于角色的访问控制 )
Kubernetes RBAC 是一种根据企业内各个用户的角色来管理其对计算机或网络资源的访问权限的方法。
在此上下文中,访问权限是单个用户执行特定任务(例如查看、创建或修改文件)的能力。
在这种模式下,Kubernetes 使用 rbac.authorization.k8s.io
API 组来驱动鉴权决策,
允许你通过 Kubernetes API 动态配置权限策略。
Node
一种特殊用途的鉴权模式,根据 kubelet 计划运行的 Pod 向其授予权限。
要了解有关 Node 鉴权模式的更多信息,请参阅 Node 鉴权 。
Webhook
Kubernetes 的 Webhook 鉴权模式 用于鉴权,进行同步 HTTP 调用,
阻塞请求直到远程 HTTP 服务响应查询。你可以编写自己的软件来处理这种向外调用,也可以使用生态系统中的解决方案。
警告:
启用 AlwaysAllow
模式会绕过鉴权;请勿在你不信任所有 潜在 API
客户端(包括你运行的工作负载)的集群上使用该模式。
鉴权机制通常返回“拒绝”或“无意见”的结果;
有关更多信息,请参阅鉴权裁决 。
激活 AlwaysAllow
意味着如果所有其他鉴权组件都返回“无意见”,则允许该请求。
例如,--authorization-mode=AlwaysAllow,RBAC
与 --authorization-mode=AlwaysAllow
具有相同的效果,因为 Kubernetes RBAC 不提供否定(拒绝)访问规则。
你不应在可从公共互联网访问 API 服务器的 Kubernetes 集群上使用 AlwaysAllow
模式。
system:masters
组
system:masters
组是 Kubernetes 内置的一个组,授予其成员对 API 服务器的无限制访问权限。
任何被分配到此组的用户都具有完全的集群管理员权限,可以绕过由 RBAC 或 Webhook 机制施加的任何鉴权限制。
请避免将用户添加到此组 。
如果你确实需要授予某个用户集群管理员权限,可以通过创建一个
ClusterRoleBinding
将其绑定到内置的 cluster-admin
ClusterRole。
鉴权模式配置
你可以仅使用命令行参数 ,
或使用配置文件 来配置 Kubernetes API
服务器的鉴权链,后者目前是 Beta 特性。
你必须选择两种配置方法之一;不允许同时设置 --authorization-config
路径并使用
--authorization-mode
和 --authorization-webhook-*
命令行参数配置鉴权 Webhook。
如果你尝试这样做,API 服务器会在启动期间报告错误消息,然后立即退出。
命令行鉴权模式配置
特性状态:
Kubernetes v1.8 [stable]
你可以使用以下模式:
--authorization-mode=ABAC
(基于属性的访问控制模式)
--authorization-mode=RBAC
(基于角色的访问控制模式)
--authorization-mode=Node
(节点鉴权组件)
--authorization-mode=Webhook
(Webhook 鉴权模式)
--authorization-mode=AlwaysAllow
(始终允许请求;存在安全风险 )
--authorization-mode=AlwaysDeny
(始终拒绝请求)
你可以选择多种鉴权模式;例如:--authorization-mode=Node,Webhook
Kubernetes 根据你在 API 服务器的命令行上指定鉴权模块的顺序来检查鉴权模块,
因此较早的模块具有更高的优先级来允许或拒绝请求。
你不能将 --authorization-mode
命令行参数与用于使用本地文件配置鉴权 的
--authorization-config
命令行参数结合使用。
有关 API 服务器命令行参数的更多信息,请阅读
kube-apiserver
参考 。
使用鉴权配置文件配置 API 服务器
特性状态:
Kubernetes v1.30 [beta]
(enabled by default: true)
作为一项 Beta 级别特性,Kubernetes 允许你配置可包含多个 Webhook 的鉴权链。
该链中的鉴权项可以具有明确定义的参数,这些参数可以按特定顺序检查请求,
从而为你提供细粒度的控制,例如在失败时明确拒绝。
配置文件方法甚至允许你指定 CEL 规则,
在将请求发送到 Webhook 之前对其进行预过滤,从而帮助你防止不必要的调用。
修改配置文件时,API 服务器还会自动重新加载鉴权链。
你可以使用 --authorization-config
命令行参数指定鉴权配置的路径。
如果你想使用命令行参数而不是配置文件,这也是一种有效且受支持的方法。
某些鉴权功能(例如:多个 Webhook、Webhook 失败策略和预过滤规则)仅在使用鉴权配置文件时可用。
示例配置
---
#
# 请勿按原样使用配置,这只是一个示例。
#
apiVersion : apiserver.config.k8s.io/v1beta1
kind : AuthorizationConfiguration
authorizers :
- type : Webhook
# 用于描述鉴权人的名称
# 这明确用于监控机制的指标
# 注意
# - 该字段的验证与今天的 K8s 标签的验证方式类似。
# 必填,无默认值
name : webhook
webhook :
# 缓存来自 Webhook 鉴权组件的“鉴权”响应的持续时间
# 与设置 `--authorization-webhook-cache-authorized-ttl` 标志相同
# 默认值:5m0s
authorizedTTL : 30s
# 缓存来自 Webhook 鉴权组件的“未授权”响应的持续时间。
# 与设置 `--authorization-webhook-cache-unauthorized-ttl` 标志相同
# 默认值:30s
unauthorizedTTL : 30s
# Webhook 请求超时
# 允许的最大时间为 30 秒。
# 必填,没有默认值。
timeout : 3s
# 要发送到 Webhook 并期望从 webhook 获得的 authorization.k8s.io SubjectAccessReview 的 API 版本。
# 与设置 `--authorization-webhook-version` 标志相同
# 必填,无默认值
# 有效值:v1beta1、v1
subjectAccessReviewVersion : v1
# MatchConditionSubjectAccessReviewVersion 指定评估 CEL 表达式的 SubjectAccessReview 版本
# 有效值:v1
# 必填,无默认值
matchConditionSubjectAccessReviewVersion : v1
# 当 Webhook 请求无法完成或返回格式错误的响应或评估 matchConditions 时出现错误时,控制鉴权决定。
# 有效值:
# - NoOpinion:继续联系后续鉴权组件,看其中是否有人允许该请求
# - Deny:拒绝请求而不咨询后续鉴权组件
# 必填,没有默认值。
failurePolicy : Deny
connectionInfo :
# 控制 Webhook 如何与服务器通信。
# 有效值:
# - KubeConfigFile:使用 kubeConfigFile 中指定的文件来定位服务器。
# - InClusterConfig:使用集群内配置来调用由 kube-apiserver 托管的 SubjectAccessReview API,kube-apiserver 不允许使用此模式。
type : KubeConfigFile
# 连接信息的 KubeConfig 文件的路径
# 如果 connectionInfo.Type 是 KubeConfig,则为必填项
kubeConfigFile : /kube-system-authz-webhook.yaml
# matchConditions 是将请求发送到此 Webhook 必须满足的条件列表。
# matchConditions 为空列表表示匹配所有请求。
# 最多允许 64 个匹配条件。
#
# 精确匹配逻辑如下(按顺序):
# 1. 如果至少一个 matchCondition 计算结果为 FALSE,则跳过 Webhook。
# 2. 如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。
# 3. 如果至少一个 matchCondition 计算结果为错误(但没有一个为 FALSE):
# - 如果 FailurePolicy=Deny,则 Webhook 拒绝请求
# - 如果 FailurePolicy=NoOpinion,则忽略错误并跳过 Webhook
matchConditions :
# 表达式表示将由 CEL 评估的表达式。必须评估为布尔值。
# CEL 表达式可以访问 v1 版本中的 SubjectAccessReview 的内容。
# 如果请求变量中 subjectAccessReviewVersion 指定的版本是 v1beta1,
# 在评估 CEL 表达式之前,内容将转换为 v1 版本。
#
# CEL 文档:https://kubernetes.io/docs/reference/using-api/cel/
#
# 仅向 Webhook 发送资源请求
- expression : has(request.resourceAttributes)
# 仅拦截对 kube-system 的请求
- expression : request.resourceAttributes.namespace == 'kube-system'
# 不要拦截来自 kube-system 服务账户的请求
- expression : "!('system:serviceaccounts:kube-system' in request.groups)"
- type : Node
name : node
- type : RBAC
name : rbac
- type : Webhook
name : in-cluster-authorizer
webhook :
authorizedTTL : 5m
unauthorizedTTL : 30s
timeout : 3s
subjectAccessReviewVersion : v1
failurePolicy : NoOpinion
connectionInfo :
type : InClusterConfig
使用配置文件配置鉴权链时,请确保所有控制平面节点具有相同的文件内容。升级/降级集群时,请记下 API 服务器配置。
例如,如果从 Kubernetes 1.30
升级到 Kubernetes 1.31,则需要确保配置文件的格式是
Kubernetes 1.31 可以理解的,然后再升级集群。
如果降级到 1.30,则需要适当设置配置。
鉴权配置和重新加载
当 API 服务器观察到文件的更改时,Kubernetes 会重新加载鉴权配置文件,
如果没有观察到更改事件,则也会按照 60 秒的计划重新加载。
说明:
你必须确保重新加载时文件中所有非 Webhook 鉴权组件类型保持不变。
重新加载不能 添加或删除节点或 RBAC 鉴权组件(可以重新排序,但不能添加或删除)。
通过创建或编辑工作负载来提升权限
能够直接或通过启用间接工作负载管理 的对象在命名空间中创建/编辑
Pod 的用户可能能够在该命名空间中提升其权限。
权限提升的潜在途径包括 Kubernetes
API 扩展 及其相关的
控制器 。
注意:
作为集群管理员,授予创建或编辑工作负载的访问权限时请务必小心谨慎。
权限提升路径 中记录了有关滥用这些内容的一些细节。
权限提升路径
如果你允许攻击者或不值得信任的用户在该命名空间中运行任意 Pod,
则他们可以通过不同的方式在命名空间内获得额外的权限:
在该命名空间中挂载任意 Secret
可用于访问其他工作负载的机密信息
可用于获取更具特权的 ServiceAccount 的服务帐户令牌
在该命名空间中使用任意 ServiceAccount
可以作为另一个工作负载执行 Kubernetes API 操作(模拟)
可以执行 ServiceAccount 拥有的任何特权操作
在该命名空间中挂载或使用其他工作负载的 ConfigMap
在该命名空间中挂载其他工作负载的卷
注意:
作为系统管理员,在部署允许用户更改上述区域的 CustomResourceDefinitions 时应谨慎行事,这些可能会打开特权升级路径。
在配置你的鉴权控制时,请考虑这种变化的后果。
检查 API 访问
kubectl
提供 auth can-i
子命令,用于快速查询 API 鉴权。
该命令使用 SelfSubjectAccessReview
API 来确定当前用户是否可以执行给定操作,
无论使用何种鉴权模式该命令都可以工作。
kubectl auth can-i create deployments --namespace dev
输出类似于:
yes
kubectl auth can-i create deployments --namespace prod
输出类似于:
no
管理员可以将此与用户扮演(User Impersonation)
结合使用,以确定其他用户可以执行的操作。
kubectl auth can-i list secrets --namespace dev --as dave
输出类似于:
no
类似地,检查名字空间 dev
里的 dev-sa
服务账户是否可以列举名字空间 target
里的 Pod:
kubectl auth can-i list pods \
--namespace target \
--as system:serviceaccount:dev:dev-sa
输出类似于:
yes
SelfSubjectAccessReview 是 authorization.k8s.io
API 组的一部分,它将 API
服务器鉴权公开给外部服务。该组中的其他资源包括:
SubjectAccessReview
: 对任意用户的访问进行评估,而不仅仅是当前用户。
当鉴权决策被委派给 API 服务器时很有用。例如,kubelet 和扩展 API
服务器使用它来确定用户对自己的 API 的访问权限。
LocalSubjectAccessReview
: 与 SubjectAccessReview
类似,但仅限于特定的名字空间。
SelfSubjectRulesReview
: 返回用户可在名字空间内执行的操作集的审阅。
用户可以快速汇总自己的访问权限,或者用于 UI 中的隐藏/显示动作。
可以通过创建普通的 Kubernetes 资源来查询这些 API,其中返回对象的响应 status
字段是查询的结果,例如:
kubectl create -f - -o yaml << EOF
apiVersion: authorization.k8s.io/v1
kind: SelfSubjectAccessReview
spec:
resourceAttributes:
group: apps
name: deployments
verb: create
namespace: dev
EOF
生成的 SelfSubjectAccessReview 类似于:
apiVersion : authorization.k8s.io/v1
kind : SelfSubjectAccessReview
metadata :
creationTimestamp : null
spec :
resourceAttributes :
group : apps
name : deployments
namespace : dev
verb : create
status :
allowed : true
denied : false
接下来
3.4 - 使用 RBAC 鉴权
基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对计算机或网络资源的访问的方法。
RBAC 鉴权机制使用 rbac.authorization.k8s.io
API 组 来驱动鉴权决定,
允许你通过 Kubernetes API 动态配置策略。
要启用 RBAC,在启动 API 服务器 时将
--authorization-mode
参数设置为一个逗号分隔的列表并确保其中包含 RBAC
。
kube-apiserver --authorization-mode= Example,RBAC --<其他选项> --<其他选项>
API 对象
RBAC API 声明了四种 Kubernetes 对象:Role 、ClusterRole 、RoleBinding 和
ClusterRoleBinding 。你可以像使用其他 Kubernetes 对象一样,
通过类似 kubectl
这类工具描述或修补 RBAC
对象 。
注意:
这些对象在设计时即实施了一些访问限制。如果你在学习过程中对集群做了更改,
请参考避免特权提升和引导 一节,
以了解这些限制会以怎样的方式阻止你做出修改。
Role 和 ClusterRole
RBAC 的 Role 或 ClusterRole 中包含一组代表相关权限的规则。
这些权限是纯粹累加的(不存在拒绝某操作的规则)。
Role 总是用来在某个名字空间 内设置访问权限;
在你创建 Role 时,你必须指定该 Role 所属的名字空间。
与之相对,ClusterRole 则是一个集群作用域的资源。这两种资源的名字不同(Role 和 ClusterRole)
是因为 Kubernetes 对象要么是名字空间作用域的,要么是集群作用域的,不可两者兼具。
ClusterRole 有若干用法。你可以用它来:
定义对某名字空间域对象的访问权限,并将在个别名字空间内被授予访问权限;
为名字空间作用域的对象设置访问权限,并被授予跨所有名字空间的访问权限;
为集群作用域的资源定义访问权限。
如果你希望在名字空间内定义角色,应该使用 Role;
如果你希望定义集群范围的角色,应该使用 ClusterRole。
Role 示例
下面是一个位于 "default" 名字空间的 Role 的示例,可用来授予对
Pod 的读访问权限:
apiVersion : rbac.authorization.k8s.io/v1
kind : Role
metadata :
namespace : default
name : pod-reader
rules :
- apiGroups : ["" ] # "" 标明 core API 组
resources : ["pods" ]
verbs : ["get" , "watch" , "list" ]
ClusterRole 示例
ClusterRole 同样可以用于授予 Role 能够授予的权限。
因为 ClusterRole 属于集群范围,所以它也可以为以下资源授予访问权限:
下面是一个 ClusterRole 的示例,可用来为任一特定名字空间中的
Secret 授予读访问权限,
或者跨名字空间的访问权限(取决于该角色是如何绑定 的):
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
# "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制
name : secret-reader
rules :
- apiGroups : ["" ]
# 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets"
resources : ["secrets" ]
verbs : ["get" , "watch" , "list" ]
Role 或 ClusterRole 对象的名称必须是合法的路径分段名称 。
RoleBinding 和 ClusterRoleBinding
角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。
它包含若干主体(Subject) (用户、组或服务账户)的列表和对这些主体所获得的角色的引用。
RoleBinding 在指定的名字空间中执行授权,而 ClusterRoleBinding 在集群范围执行授权。
一个 RoleBinding 可以引用同一的名字空间中的任何 Role。
或者,一个 RoleBinding 可以引用某 ClusterRole 并将该 ClusterRole 绑定到
RoleBinding 所在的名字空间。
如果你希望将某 ClusterRole 绑定到集群中所有名字空间,你要使用 ClusterRoleBinding。
RoleBinding 或 ClusterRoleBinding 对象的名称必须是合法的
路径分段名称 。
RoleBinding 示例
下面的例子中的 RoleBinding 将 "pod-reader" Role 授予在 "default" 名字空间中的用户 "jane"。
这样,用户 "jane" 就具有了读取 "default" 名字空间中所有 Pod 的权限。
apiVersion : rbac.authorization.k8s.io/v1
# 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Pod
# 你需要在该名字空间中有一个名为 “pod-reader” 的 Role
kind : RoleBinding
metadata :
name : read-pods
namespace : default
subjects :
# 你可以指定不止一个“subject(主体)”
- kind : User
name : jane # "name" 是区分大小写的
apiGroup : rbac.authorization.k8s.io
roleRef :
# "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
kind : Role # 此字段必须是 Role 或 ClusterRole
name : pod-reader # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
apiGroup : rbac.authorization.k8s.io
RoleBinding 也可以引用 ClusterRole,以将对应 ClusterRole 中定义的访问权限授予
RoleBinding 所在名字空间的资源。这种引用使得你可以跨整个集群定义一组通用的角色,
之后在多个名字空间中复用。
例如,尽管下面的 RoleBinding 引用的是一个 ClusterRole,"dave"(这里的主体,
区分大小写)只能访问 "development" 名字空间中的 Secret 对象,因为 RoleBinding
所在的名字空间(由其 metadata 决定)是 "development"。
apiVersion : rbac.authorization.k8s.io/v1
# 此角色绑定使得用户 "dave" 能够读取 "development" 名字空间中的 Secret
# 你需要一个名为 "secret-reader" 的 ClusterRole
kind : RoleBinding
metadata :
name : read-secrets
# RoleBinding 的名字空间决定了访问权限的授予范围。
# 这里隐含授权仅在 "development" 名字空间内的访问权限。
namespace : development
subjects :
- kind : User
name : dave # 'name' 是区分大小写的
apiGroup : rbac.authorization.k8s.io
roleRef :
kind : ClusterRole
name : secret-reader
apiGroup : rbac.authorization.k8s.io
ClusterRoleBinding 示例
要跨整个集群完成访问权限的授予,你可以使用一个 ClusterRoleBinding。
下面的 ClusterRoleBinding 允许 "manager" 组内的所有用户访问任何名字空间中的 Secret。
apiVersion : rbac.authorization.k8s.io/v1
# 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 Secret 资源
kind : ClusterRoleBinding
metadata :
name : read-secrets-global
subjects :
- kind : Group
name : manager # 'name' 是区分大小写的
apiGroup : rbac.authorization.k8s.io
roleRef :
kind : ClusterRole
name : secret-reader
apiGroup : rbac.authorization.k8s.io
创建了绑定之后,你不能再修改绑定对象所引用的 Role 或 ClusterRole。
试图改变绑定对象的 roleRef
将导致合法性检查错误。
如果你想要改变现有绑定对象中 roleRef
字段的内容,必须删除重新创建绑定对象。
这种限制有两个主要原因:
将 roleRef
设置为不可以改变,这使得可以为用户授予对现有绑定对象的 update
权限,
这样可以让他们管理主体列表,同时不能更改被授予这些主体的角色。
针对不同角色的绑定是完全不一样的绑定。要求通过删除/重建绑定来更改 roleRef
,
这样可以确保要赋予绑定的所有主体会被授予新的角色(而不是在允许或者不小心修改了
roleRef
的情况下导致所有现有主体未经验证即被授予新角色对应的权限)。
命令 kubectl auth reconcile
可以创建或者更新包含 RBAC 对象的清单文件,
并且在必要的情况下删除和重新创建绑定对象,以改变所引用的角色。
更多相关信息请参照命令用法和示例 。
对资源的引用
在 Kubernetes API 中,大多数资源都是使用对象名称的字符串表示来呈现与访问的。
例如,对于 Pod 应使用 "pods"。
RBAC 使用对应 API 端点的 URL 中呈现的名字来引用资源。
有一些 Kubernetes API 涉及子资源(subresource) ,例如 Pod 的日志。
对 Pod 日志的请求看起来像这样:
GET /api/v1/namespaces/{namespace}/pods/{name}/log
在这里,pods
对应名字空间作用域的 Pod 资源,而 log
是 pods
的子资源。
在 RBAC 角色表达子资源时,使用斜线(/
)来分隔资源和子资源。
要允许某主体读取 pods
同时访问这些 Pod 的 log
子资源,你可以这样写:
apiVersion : rbac.authorization.k8s.io/v1
kind : Role
metadata :
namespace : default
name : pod-and-pod-logs-reader
rules :
- apiGroups : ["" ]
resources : ["pods" , "pods/log" ]
verbs : ["get" , "list" ]
对于某些请求,也可以通过 resourceNames
列表按名称引用资源。
在指定时,可以将请求限定为资源的单个实例。
下面的例子中限制可以 get
和 update
一个名为 my-configmap
的
ConfigMap :
apiVersion : rbac.authorization.k8s.io/v1
kind : Role
metadata :
namespace : default
name : configmap-updater
rules :
- apiGroups : ["" ]
# 在 HTTP 层面,用来访问 ConfigMap 资源的名称为 "configmaps"
resources : ["configmaps" ]
resourceNames : ["my-configmap" ]
verbs : ["update" , "get" ]
说明:
你不能使用资源名字来限制 create
或者 deletecollection
请求。
对于 create
请求而言,这是因为在鉴权时可能还不知道新对象的名字。
如果你使用 resourceName
来限制 list
或者 watch
请求,
客户端必须在它们的 list
或者 watch
请求里包含一个与指定的 resourceName
匹配的 metadata.name
字段选择器。
例如,kubectl get configmaps --field-selector=metadata.name=my-configmap
你可以使用通配符 *
批量引用所有的 resources
、apiGroups
和 verbs
对象,无需逐一引用。
对于 nonResourceURLs
,你可以将通配符 *
作为后缀实现全局通配,
对于 resourceNames
,空集表示没有任何限制。
下面的示例对 example.com
API 组中所有当前和未来资源执行所有动作。
这类似于内置的 cluster-admin
。
apiVersion : rbac.authorization.k8s.io/v1
kind : Role
metadata :
namespace : default
name : example.com-superuser # 此角色仅作示范,请勿使用
rules :
- apiGroups : ["example.com" ]
resources : ["*" ]
verbs : ["*" ]
注意:
在 resources 和 verbs 条目中使用通配符会为敏感资源授予过多的访问权限。
例如,如果添加了新的资源类型、新的子资源或新的自定义动词,
通配符条目会自动授予访问权限,用户可能不希望出现这种情况。
应该执行最小特权原则 ,
使用具体的 resources 和 verbs 确保仅赋予工作负载正常运行所需的权限。
聚合的 ClusterRole
你可以将若干 ClusterRole 聚合(Aggregate) 起来,形成一个复合的 ClusterRole。
作为集群控制面的一部分,控制器会监视带有 aggregationRule
的 ClusterRole 对象集合。aggregationRule
为控制器定义一个标签选择算符 供后者匹配应该组合到当前
ClusterRole 的 roles
字段中的 ClusterRole 对象。
注意:
控制平面会覆盖你在聚合 ClusterRole 的 rules
字段中手动指定的所有值。
如果你想更改或添加规则,请在被 aggregationRule
所选中的 ClusterRole
对象上执行变更。
下面是一个聚合 ClusterRole 的示例:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : monitoring
aggregationRule :
clusterRoleSelectors :
- matchLabels :
rbac.example.com/aggregate-to-monitoring : "true"
rules : [] # 控制面自动填充这里的规则
如果你创建一个与某个已存在的聚合 ClusterRole 的标签选择算符匹配的 ClusterRole,
这一变化会触发新的规则被添加到聚合 ClusterRole 的操作。
下面的例子中,通过创建一个标签同样为 rbac.example.com/aggregate-to-monitoring: true
的 ClusterRole,新的规则可被添加到 "monitoring" ClusterRole 中。
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : monitoring-endpoints
labels :
rbac.example.com/aggregate-to-monitoring : "true"
# 当你创建 "monitoring-endpoints" ClusterRole 时,
# 下面的规则会被添加到 "monitoring" ClusterRole 中
rules :
- apiGroups : ["" ]
resources : ["services" , "endpointslices" , "pods" ]
verbs : ["get" , "list" , "watch" ]
默认的面向用户的角色 使用 ClusterRole 聚合。
这使得作为集群管理员的你可以为扩展默认规则,包括为定制资源设置规则,
比如通过 CustomResourceDefinitions 或聚合 API 服务器提供的定制资源。
例如,下面的 ClusterRoles 让默认角色 "admin" 和 "edit" 拥有管理自定义资源 "CronTabs" 的权限,
"view" 角色对 CronTab 资源拥有读操作权限。
你可以假定 CronTab 对象在 API 服务器所看到的 URL 中被命名为 "crontabs"
。
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : aggregate-cron-tabs-edit
labels :
# 添加以下权限到默认角色 "admin" 和 "edit" 中
rbac.authorization.k8s.io/aggregate-to-admin : "true"
rbac.authorization.k8s.io/aggregate-to-edit : "true"
rules :
- apiGroups : ["stable.example.com" ]
resources : ["crontabs" ]
verbs : ["get" , "list" , "watch" , "create" , "update" , "patch" , "delete" ]
---
kind : ClusterRole
apiVersion : rbac.authorization.k8s.io/v1
metadata :
name : aggregate-cron-tabs-view
labels :
# 添加以下权限到 "view" 默认角色中
rbac.authorization.k8s.io/aggregate-to-view : "true"
rules :
- apiGroups : ["stable.example.com" ]
resources : ["crontabs" ]
verbs : ["get" , "list" , "watch" ]
Role 示例
以下示例均为从 Role 或 ClusterRole 对象中截取出来,我们仅展示其 rules
部分。
允许读取在核心 API 组 下的 "pods"
:
rules :
- apiGroups : ["" ]
# 在 HTTP 层面,用来访问 Pod 资源的名称为 "pods"
resources : ["pods" ]
verbs : ["get" , "list" , "watch" ]
允许在 "apps"
API 组中读/写 Deployment(在 HTTP 层面,对应 URL
中资源部分为 "deployments"
):
rules :
- apiGroups : ["apps" ]
#
# 在 HTTP 层面,用来访问 Deployment 资源的名称为 "deployments"
resources : ["deployments" ]
verbs : ["get" , "list" , "watch" , "create" , "update" , "patch" , "delete" ]
允许读取核心 API 组中的 Pod 和读/写 "batch"
API 组中的 Job 资源:
rules :
- apiGroups : ["" ]
# 在 HTTP 层面,用来访问 Pod 资源的名称为 "pods"
resources : ["pods" ]
verbs : ["get" , "list" , "watch" ]
- apiGroups : ["batch" ]
# 在 HTTP 层面,用来访问 Job 资源的名称为 "jobs"
resources : ["jobs" ]
verbs : ["get" , "list" , "watch" , "create" , "update" , "patch" , "delete" ]
允许读取名称为 "my-config" 的 ConfigMap(需要通过 RoleBinding
绑定以限制为某名字空间中特定的 ConfigMap):
rules :
- apiGroups : ["" ]
# 在 HTTP 层面,用来访问 ConfigMap 资源的名称为 "configmaps"
resources : ["configmaps" ]
resourceNames : ["my-config" ]
verbs : ["get" ]
允许读取在核心组中的 "nodes"
资源(因为 Node
是集群作用域的,所以需要
ClusterRole 绑定到 ClusterRoleBinding 才生效):
rules :
- apiGroups : ["" ]
# 在 HTTP 层面,用来访问 Node 资源的名称为 "nodes"
resources : ["nodes" ]
verbs : ["get" , "list" , "watch" ]
允许针对非资源端点 /healthz
和其子路径上发起 GET 和 POST 请求
(必须在 ClusterRole 绑定 ClusterRoleBinding 才生效):
rules :
- nonResourceURLs : ["/healthz" , "/healthz/*" ] # nonResourceURL 中的 '*' 是一个全局通配符
verbs : ["get" , "post" ]
对主体的引用
RoleBinding 或者 ClusterRoleBinding 可绑定角色到某主体(Subject) 上。
主体可以是组,用户或者服务账户 。
Kubernetes 用字符串来表示用户名。
用户名可以是普通的用户名,像 "alice";或者是邮件风格的名称,如 "bob@example.com",
或者是以字符串形式表达的数字 ID。你作为 Kubernetes
管理员负责配置身份认证模块 ,
以便后者能够生成你所期望的格式的用户名。
注意:
前缀 system:
是 Kubernetes 系统保留的,所以你要确保所配置的用户名或者组名不能出现上述
system:
前缀。除了对前缀的限制之外,RBAC 鉴权系统不对用户名格式作任何要求。
在 Kubernetes 中,身份认证(Authenticator)模块提供用户组信息。
与用户名一样,用户组名也用字符串来表示,而且对该字符串没有格式要求,
只是不能使用保留的前缀 system:
。
服务账户(ServiceAccount)
的用户名前缀为 system:serviceaccount:
,属于前缀为 system:serviceaccounts:
的用户组。
说明:
system:serviceaccount:
(单数)是用于服务账户用户名的前缀;
system:serviceaccounts:
(复数)是用于服务账户组名的前缀。
RoleBinding 示例
下面示例是 RoleBinding
中的片段,仅展示其 subjects
的部分。
对于名称为 alice@example.com
的用户:
subjects :
- kind : User
name : "alice@example.com"
apiGroup : rbac.authorization.k8s.io
对于名称为 frontend-admins
的用户组:
subjects :
- kind : Group
name : "frontend-admins"
apiGroup : rbac.authorization.k8s.io
对于 kube-system
名字空间中的默认服务账户:
subjects :
- kind : ServiceAccount
name : default
namespace : kube-system
对于 "qa" 名称空间中的所有服务账户:
subjects :
- kind : Group
name : system:serviceaccounts:qa
apiGroup : rbac.authorization.k8s.io
对于在任何名字空间中的服务账户:
subjects :
- kind : Group
name : system:serviceaccounts
apiGroup : rbac.authorization.k8s.io
对于所有已经过身份认证的用户:
subjects :
- kind : Group
name : system:authenticated
apiGroup : rbac.authorization.k8s.io
对于所有未通过身份认证的用户:
subjects :
- kind : Group
name : system:unauthenticated
apiGroup : rbac.authorization.k8s.io
对于所有用户:
subjects :
- kind : Group
name : system:authenticated
apiGroup : rbac.authorization.k8s.io
- kind : Group
name : system:unauthenticated
apiGroup : rbac.authorization.k8s.io
默认 Roles 和 Role Bindings
API 服务器创建一组默认的 ClusterRole 和 ClusterRoleBinding 对象。
这其中许多是以 system:
为前缀的,用以标识对应资源是直接由集群控制面管理的。
所有的默认 ClusterRole 和 ClusterRoleBinding 都有
kubernetes.io/bootstrapping=rbac-defaults
标签。
注意:
在修改名称包含 system:
前缀的 ClusterRole 和 ClusterRoleBinding
时要格外小心。
对这些资源的更改可能导致集群无法正常运作。
自动协商
在每次启动时,API 服务器都会更新默认 ClusterRole 以添加缺失的各种权限,
并更新默认的 ClusterRoleBinding 以增加缺失的各类主体。
这种自动协商机制允许集群去修复一些不小心发生的修改,
并且有助于保证角色和角色绑定在新的发行版本中有权限或主体变更时仍然保持最新。
如果要禁止此功能,请将默认 ClusterRole 以及默认 ClusterRoleBinding 的
rbac.authorization.kubernetes.io/autoupdate
注解设置成 false
。
注意,缺少默认权限和角色绑定主体可能会导致集群无法正常工作。
如果基于 RBAC 的鉴权机制被启用,则自动协商功能默认是被启用的。
API 发现角色
无论是经过身份验证的还是未经过身份验证的用户,
默认的集群角色绑定都授权他们读取被认为是可安全地公开访问的 API(包括 CustomResourceDefinitions)。
如果要禁用匿名的未经过身份验证的用户访问,请在 API 服务器配置中添加
--anonymous-auth=false
的配置选项。
通过运行命令 kubectl
可以查看这些角色的配置信息:
kubectl get clusterroles system:discovery -o yaml
说明:
如果你编辑该 ClusterRole,你所作的变更会被 API 服务器在重启时自动覆盖,
这是通过自动协商 机制完成的。要避免这类覆盖操作,
要么不要手动编辑这些角色,要么禁止自动协商机制。
Kubernetes RBAC API 发现角色
默认 ClusterRole
默认 ClusterRoleBinding
描述
system:basic-user
system:authenticated 组
允许用户以只读的方式去访问他们自己的基本信息。在 v1.14 版本之前,这个角色在默认情况下也绑定在 system:unauthenticated 上。
system:discovery
system:authenticated 组
允许以只读方式访问 API 发现端点,这些端点用来发现和协商 API 级别。
在 v1.14 版本之前,这个角色在默认情况下绑定在 system:unauthenticated 上。
system:public-info-viewer
system:authenticated 和 system:unauthenticated 组
允许对集群的非敏感信息进行只读访问,此角色是在 v1.14 版本中引入的。
面向用户的角色
一些默认的 ClusterRole 不是以前缀 system:
开头的。这些是面向用户的角色。
它们包括超级用户(Super-User)角色(cluster-admin
)、
使用 ClusterRoleBinding 在集群范围内完成授权的角色(cluster-status
)、
以及使用 RoleBinding 在特定名字空间中授予的角色(admin
、edit
、view
)。
面向用户的 ClusterRole 使用 ClusterRole 聚合 以允许管理员在这些
ClusterRole 上添加用于定制资源的规则。如果想要添加规则到 admin
、edit
或者 view
,
可以创建带有以下一个或多个标签的 ClusterRole:
metadata :
labels :
rbac.authorization.k8s.io/aggregate-to-admin : "true"
rbac.authorization.k8s.io/aggregate-to-edit : "true"
rbac.authorization.k8s.io/aggregate-to-view : "true"
默认 ClusterRole
默认 ClusterRoleBinding
描述
cluster-admin
system:masters 组
允许超级用户在平台上的任何资源上执行所有操作。
当在 ClusterRoleBinding 中使用时,可以授权对集群中以及所有名字空间中的全部资源进行完全控制。
当在 RoleBinding 中使用时,可以授权控制角色绑定所在名字空间中的所有资源,包括名字空间本身。
admin
无
允许管理员访问权限,旨在使用 RoleBinding 在名字空间内执行授权。
如果在 RoleBinding 中使用,则可授予对名字空间中的大多数资源的读/写权限,
包括创建角色和角色绑定的能力。
此角色不允许对资源配额或者名字空间本身进行写操作。
此角色也不允许对 Kubernetes v1.22+ 创建的 EndpointSlices(或 Endpoints)进行写操作。
更多信息参阅 “EndpointSlices 和 Endpoints 写权限”小节 。
edit
无
允许对名字空间的大多数对象进行读/写操作。
此角色不允许查看或者修改角色或者角色绑定。
不过,此角色可以访问 Secret,以名字空间中任何 ServiceAccount 的身份运行 Pod,
所以可以用来了解名字空间内所有服务账户的 API 访问级别。
此角色也不允许对 Kubernetes v1.22+ 创建的 EndpointSlices(或 Endpoints)进行写操作。
更多信息参阅 “EndpointSlices 和 Endpoints 写操作”小节 。
view
无
允许对名字空间的大多数对象有只读权限。
它不允许查看角色或角色绑定。
此角色不允许查看 Secret,因为读取 Secret 的内容意味着可以访问名字空间中
ServiceAccount 的凭据信息,进而允许利用名字空间中任何 ServiceAccount
的身份访问 API(这是一种特权提升)。
核心组件角色
默认 ClusterRole
默认 ClusterRoleBinding
描述
system:kube-scheduler
system:kube-scheduler 用户
允许访问 scheduler
组件所需要的资源。
system:volume-scheduler
system:kube-scheduler 用户
允许访问 kube-scheduler 组件所需要的卷资源。
system:kube-controller-manager
system:kube-controller-manager 用户
允许访问控制器管理器 组件所需要的资源。
各个控制回路所需要的权限在控制器角色 详述。
system:node
无
允许访问 kubelet 所需要的资源,包括对所有 Secret 的读操作和对所有 Pod 状态对象的写操作。
你应该使用 Node 鉴权组件 和
NodeRestriction 准入插件 而不是
system:node 角色。同时基于 kubelet 上调度执行的 Pod 来授权
kubelet 对 API 的访问。
system:node 角色的意义仅是为了与从 v1.8 之前版本升级而来的集群兼容。
system:node-proxier
system:kube-proxy 用户
允许访问 kube-proxy
组件所需要的资源。
其他组件角色
默认 ClusterRole
默认 ClusterRoleBinding
描述
system:auth-delegator
无
允许将身份认证和鉴权检查操作外包出去。
这种角色通常用在插件式 API 服务器上,以实现统一的身份认证和鉴权。
system:heapster
无
为 Heapster 组件(已弃用)定义的角色。
system:kube-aggregator
无
为 kube-aggregator 组件定义的角色。
system:kube-dns
在 kube-system 名字空间中的 kube-dns 服务账户
为 kube-dns 组件定义的角色。
system:kubelet-api-admin
无
允许 kubelet API 的完全访问权限。
system:node-bootstrapper
无
允许访问执行
kubelet TLS 启动引导
所需要的资源。
system:node-problem-detector
无
为 node-problem-detector 组件定义的角色。
system:persistent-volume-provisioner
无
允许访问大部分动态卷驱动 所需要的资源。
system:monitoring
system:monitoring 组
允许对控制平面监控端点的读取访问(例如:kube-apiserver
存活和就绪端点(/healthz 、/livez 、/readyz ),
各个健康检查端点(/healthz/* 、/livez/* 、/readyz/* )和 /metrics )。
请注意,各个运行状况检查端点和度量标准端点可能会公开敏感信息。
内置控制器的角色
Kubernetes 控制器管理器 运行内建于
Kubernetes 控制面的控制器 。
当使用 --use-service-account-credentials
参数启动时,kube-controller-manager
使用单独的服务账户来启动每个控制器。
每个内置控制器都有相应的、前缀为 system:controller:
的角色。
如果控制管理器启动时未设置 --use-service-account-credentials
,
它使用自己的身份凭据来运行所有的控制器,该身份必须被授予所有相关的角色。
这些角色包括:
system:controller:attachdetach-controller
system:controller:certificate-controller
system:controller:clusterrole-aggregation-controller
system:controller:cronjob-controller
system:controller:daemon-set-controller
system:controller:deployment-controller
system:controller:disruption-controller
system:controller:endpoint-controller
system:controller:expand-controller
system:controller:generic-garbage-collector
system:controller:horizontal-pod-autoscaler
system:controller:job-controller
system:controller:namespace-controller
system:controller:node-controller
system:controller:persistent-volume-binder
system:controller:pod-garbage-collector
system:controller:pv-protection-controller
system:controller:pvc-protection-controller
system:controller:replicaset-controller
system:controller:replication-controller
system:controller:resourcequota-controller
system:controller:root-ca-cert-publisher
system:controller:route-controller
system:controller:service-account-controller
system:controller:service-controller
system:controller:statefulset-controller
system:controller:ttl-controller
初始化与预防权限提升
RBAC API 会阻止用户通过编辑角色或者角色绑定来提升权限。
由于这一点是在 API 级别实现的,所以在 RBAC 鉴权组件未启用的状态下依然可以正常工作。
对角色创建或更新的限制
只有在符合下列条件之一的情况下,你才能创建/更新角色:
你已经拥有角色中包含的所有权限,且其作用域与正被修改的对象作用域相同。
(对 ClusterRole 而言意味着集群范围,对 Role 而言意味着相同名字空间或者集群范围)。
你被显式授权在 rbac.authorization.k8s.io
API 组中的 roles
或 clusterroles
资源使用 escalate
动词。
例如,如果 user-1
没有列举集群范围所有 Secret 的权限,他将不能创建包含该权限的 ClusterRole。
若要允许用户创建/更新角色:
根据需要赋予他们一个角色,允许他们根据需要创建/更新 Role 或者 ClusterRole 对象。
授予他们在所创建/更新角色中包含特殊权限的权限:
隐式地为他们授权(如果它们试图创建或者更改 Role 或 ClusterRole 的权限,
但自身没有被授予相应权限,API 请求将被禁止)。
通过允许他们在 Role 或 ClusterRole 资源上执行 escalate
动作显式完成授权。
这里的 roles
和 clusterroles
资源包含在 rbac.authorization.k8s.io
API 组中。
对角色绑定创建或更新的限制
只有你已经具有了所引用的角色中包含的全部权限时,或者 你被授权在所引用的角色上执行 bind
动词时,你才可以创建或更新角色绑定。这里的权限与角色绑定的作用域相同。
例如,如果用户 user-1
没有列举集群范围所有 Secret 的能力,则他不可以创建
ClusterRoleBinding 引用授予该许可权限的角色。
如要允许用户创建或更新角色绑定:
赋予他们一个角色,使得他们能够根据需要创建或更新 RoleBinding 或 ClusterRoleBinding 对象。
授予他们绑定某特定角色所需要的许可权限:
隐式授权下,可以将角色中包含的许可权限授予他们;
显式授权下,可以授权他们在特定 Role (或 ClusterRole)上执行 bind
动词的权限。
例如,下面的 ClusterRole 和 RoleBinding 将允许用户 user-1
把名字空间 user-1-namespace
中的 admin
、edit
和 view
角色赋予其他用户:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : role-grantor
rules :
- apiGroups : ["rbac.authorization.k8s.io" ]
resources : ["rolebindings" ]
verbs : ["create" ]
- apiGroups : ["rbac.authorization.k8s.io" ]
resources : ["clusterroles" ]
verbs : ["bind" ]
# 忽略 resourceNames 意味着允许绑定任何 ClusterRole
resourceNames : ["admin" ,"edit" ,"view" ]
---
apiVersion : rbac.authorization.k8s.io/v1
kind : RoleBinding
metadata :
name : role-grantor-binding
namespace : user-1-namespace
roleRef :
apiGroup : rbac.authorization.k8s.io
kind : ClusterRole
name : role-grantor
subjects :
- apiGroup : rbac.authorization.k8s.io
kind : User
name : user-1
当启动引导第一个角色和角色绑定时,需要为初始用户授予他们尚未拥有的权限。
对初始角色和角色绑定进行初始化时需要:
使用用户组为 system:masters
的凭据,该用户组由默认绑定关联到 cluster-admin
这个超级用户角色。
一些命令行工具
kubectl create role
创建 Role 对象,定义在某一名字空间中的权限。例如:
kubectl create clusterrole
创建 ClusterRole 对象。例如:
kubectl create rolebinding
在特定的名字空间中对 Role
或 ClusterRole
授权。例如:
kubectl create clusterrolebinding
在整个集群(所有名字空间)中用 ClusterRole 授权。例如:
kubectl auth reconcile
使用清单文件来创建或者更新 rbac.authorization.k8s.io/v1
API 对象。
尚不存在的对象会被创建,如果对应的名字空间也不存在,必要的话也会被创建。
已经存在的角色会被更新,使之包含输入对象中所给的权限。如果指定了
--remove-extra-permissions
,可以删除额外的权限。
已经存在的绑定也会被更新,使之包含输入对象中所给的主体。如果指定了
--remove-extra-permissions
,则可以删除多余的主体。
例如:
服务账户权限
默认的 RBAC 策略为控制面组件、节点和控制器授予权限。
但是不会对 kube-system
名字空间之外的服务账户授予权限。
(除了 API 发现角色 授予的权限)
这使得你可以根据需要向特定 ServiceAccount 授予特定权限。
细粒度的角色绑定可带来更好的安全性,但需要更多精力管理。
粗粒度的授权可能导致 ServiceAccount 被授予不必要的 API 访问权限(甚至导致潜在的权限提升),
但更易于管理。
按从最安全到最不安全的顺序,存在以下方法:
为特定应用的服务账户授予角色(最佳实践)
这要求应用在其 Pod 规约中指定 serviceAccountName
,
并额外创建服务账户(包括通过 API、应用程序清单、kubectl create serviceaccount
等)。
例如,在名字空间 “my-namespace” 中授予服务账户 “my-sa” 只读权限:
kubectl create rolebinding my-sa-view \
--clusterrole= view \
--serviceaccount= my-namespace:my-sa \
--namespace= my-namespace
将角色授予某名字空间中的 “default” 服务账户
如果某应用没有指定 serviceAccountName
,那么它将使用 “default” 服务账户。
说明:
"default" 服务账户所具有的权限会被授予给名字空间中所有未指定 serviceAccountName
的 Pod。
例如,在名字空间 "my-namespace" 中授予服务账户 "default" 只读权限:
kubectl create rolebinding default-view \
--clusterrole= view \
--serviceaccount= my-namespace:default \
--namespace= my-namespace
许多插件组件 在 kube-system
名字空间以 “default” 服务账户运行。
要允许这些插件组件以超级用户权限运行,需要将集群的 cluster-admin
权限授予
kube-system
名字空间中的 “default” 服务账户。
注意:
启用这一配置意味着在 kube-system
名字空间中包含以超级用户账号来访问集群 API 的 Secret。
kubectl create clusterrolebinding add-on-cluster-admin \
--clusterrole= cluster-admin \
--serviceaccount= kube-system:default
将角色授予名字空间中所有服务账户
如果你想要名字空间中所有应用都具有某角色,无论它们使用的什么服务账户,
可以将角色授予该名字空间的服务账户组。
例如,在名字空间 “my-namespace” 中的只读权限授予该名字空间中的所有服务账户:
kubectl create rolebinding serviceaccounts-view \
--clusterrole= view \
--group= system:serviceaccounts:my-namespace \
--namespace= my-namespace
在集群范围内为所有服务账户授予一个受限角色(不鼓励)
如果你不想管理每一个名字空间的权限,你可以向所有的服务账户授予集群范围的角色。
例如,为集群范围的所有服务账户授予跨所有名字空间的只读权限:
kubectl create clusterrolebinding serviceaccounts-view \
--clusterrole= view \
--group= system:serviceaccounts
授予超级用户访问权限给集群范围内的所有服务帐户(强烈不鼓励)
如果你不在乎如何区分权限,你可以将超级用户访问权限授予所有服务账户。
警告:
这样做会允许所有应用都对你的集群拥有完全的访问权限,并将允许所有能够读取
Secret(或创建 Pod)的用户对你的集群有完全的访问权限。
kubectl create clusterrolebinding serviceaccounts-cluster-admin \
--clusterrole= cluster-admin \
--group= system:serviceaccounts
EndpointSlices 和 Endpoints 写权限
在 Kubernetes v1.22 之前版本创建的集群里,
“edit” 和 “admin” 聚合角色包含对 EndpointSlices(和 Endpoints)的写权限。
作为 CVE-2021-25740 的缓解措施,
此访问权限不包含在 Kubernetes 1.22 以及更高版本集群的聚合角色里。
升级到 Kubernetes v1.22 版本的现有集群不会包括此变化。
CVE 公告 包含了在现有集群里限制此访问权限的指引。
如果你希望在新集群的聚合角色里保留此访问权限,你可以创建下面的 ClusterRole:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
annotations :
kubernetes.io/description : |-
将端点写入权限添加到 edit 和 admin 角色。此特性因 CVE-2021-25740 在 1.22
中默认被移除。请参阅 https://issue.k8s.io/103675
这一设置将允许写者要求 LoadBalancer 或 Ingress 的实现向外暴露后端 IP 地址,
所暴露的 IP 地址无法通过其他方式访问,
并且可以规避对这些后端访问进行预防/隔离的网络策略或安全控制机制。
EndpointSlice 从未包含在 edit 和 admin 角色中,
因此 EndpointSlice API 没有什么可恢复的。
labels :
rbac.authorization.k8s.io/aggregate-to-edit : "true"
name : custom:aggregate-to-edit:endpoints # 你可以随意愿更改这个 name
rules :
- apiGroups : ["" ]
resources : ["endpoints" ]
verbs : ["create" , "delete" , "deletecollection" , "patch" , "update" ]
从 ABAC 升级
原来运行较老版本 Kubernetes 的集群通常会使用限制宽松的 ABAC 策略,
包括授予所有服务帐户全权访问 API 的能力。
默认的 RBAC 策略为控制面组件、节点和控制器等授予有限的权限,但不会为
kube-system
名字空间外的服务账户授权(除了 API 发现角色 授予的权限)。
这样做虽然安全得多,但可能会干扰期望自动获得 API 权限的现有工作负载。
这里有两种方法来完成这种转换:
并行鉴权
同时运行 RBAC 和 ABAC 鉴权模式,
并指定包含现有的 ABAC 策略 的策略文件:
--authorization-mode= ...,RBAC,ABAC --authorization-policy-file= mypolicy.json
关于命令行中的第一个选项:如果早期的鉴权组件,例如 Node,拒绝了某个请求,则
RBAC 鉴权组件尝试对该 API 请求鉴权。如果 RBAC 也拒绝了该 API 请求,则运行 ABAC
鉴权组件。这意味着被 RBAC 或 ABAC 策略所允许的任何请求都是被允许的请求。
如果 kube-apiserver 启动时,RBAC 组件的日志级别为 5 或更高(--vmodule=rbac*=5
或 --v=5
),
你可以在 API 服务器的日志中看到 RBAC 拒绝的细节(前缀 RBAC
)
你可以使用这些信息来确定需要将哪些角色授予哪些用户、组或服务帐户。
一旦你将角色授予服务账户 且工作负载运行时,
服务器日志中没有出现 RBAC 拒绝消息,就可以删除 ABAC 鉴权器。
宽松的 RBAC 权限
你可以使用 RBAC 角色绑定复制宽松的 ABAC 策略。
警告:
下面的策略允许所有 服务帐户充当集群管理员。
容器中运行的所有应用程序都会自动收到服务帐户的凭据,可以对 API 执行任何操作,
包括查看 Secret 和修改权限。这一策略是不被推荐的。
kubectl create clusterrolebinding permissive-binding \
--clusterrole= cluster-admin \
--user= admin \
--user= kubelet \
--group= system:serviceaccounts
在你完成到 RBAC 的迁移后,应该调整集群的访问控制,确保相关的策略满足你的信息安全需求。
3.5 - 使用 Node 鉴权
节点鉴权是一种特殊用途的鉴权模式,专门对 kubelet 发出的 API 请求进行授权。
概述
节点鉴权器允许 kubelet 执行 API 操作。包括:
读取操作:
services
endpoints
nodes
pods
与绑定到 kubelet 节点的 Pod 相关的 Secret、ConfigMap、PersistentVolumeClaim 和持久卷
特性状态:
Kubernetes v1.31 [alpha]
(enabled by default: false)
当启用 AuthorizeNodeWithSelectors
特性
(以及作为先决条件的 AuthorizeWithSelectors
特性)时,
kubelet 只允许读取它们自己的 Node 对象,
并且只允许读取绑定到其节点的 Pod。
写入操作:
节点和节点状态(启用 NodeRestriction
准入插件以限制 kubelet 只能修改自己的节点)
Pod 和 Pod 状态(启用 NodeRestriction
准入插件以限制 kubelet 只能修改绑定到自身的 Pod)
事件
身份认证与鉴权相关的操作:
在将来的版本中,节点鉴权器可能会添加或删除权限,以确保 kubelet 具有正确操作所需的最小权限集。
为了获得节点鉴权器的授权,kubelet 必须使用一个凭据以表示它在 system:nodes
组中,用户名为 system:node:<nodeName>
。上述的组名和用户名格式要与
kubelet TLS 启动引导
过程中为每个 kubelet 创建的标识相匹配。
<nodeName>
的值必须 与 kubelet 注册的节点名称精确匹配。默认情况下,节点名称是由
hostname
提供的主机名,或者通过 kubelet --hostname-override
选项 覆盖。
但是,当使用 --cloud-provider
kubelet 选项时,具体的主机名可能由云提供商确定,
忽略本地的 hostname
和 --hostname-override
选项。有关
kubelet 如何确定主机名的详细信息,请参阅
kubelet 选项参考 。
要启用节点鉴权器,请使用 --authorization-mode=Node
启动 API 服务器。
要限制 kubelet 可以写入的 API 对象,请使用
--enable-admission-plugins=...,NodeRestriction,...
启动 API 服务器,从而启用
NodeRestriction
准入插件。
迁移考虑因素
在 system:nodes
组之外的 kubelet
system:nodes
组之外的 kubelet 不会被 Node
鉴权模式授权,并且需要继续通过当前授权它们的机制来授权。
节点准入插件不会限制来自这些 kubelet 的请求。
具有无差别用户名的 kubelet
在一些部署中,kubelet 具有 system:nodes
组的凭据,
但是无法给出它们所关联的节点的标识,因为它们没有 system:node:...
格式的用户名。
这些 kubelet 不会被 Node
鉴权模式授权,并且需要继续通过当前授权它们的任何机制来授权。
因为默认的节点标识符实现不会把它当作节点身份标识,NodeRestriction
准入插件会忽略来自这些 kubelet 的请求。
3.6 - Webhook 模式
WebHook 是一种 HTTP 回调:某些条件下触发的 HTTP POST 请求;通过 HTTP POST
发送的简单事件通知。一个基于 web 应用实现的 WebHook 会在特定事件发生时把消息发送给特定的 URL。
具体来说,当在判断用户权限时,Webhook
模式会使 Kubernetes 查询外部的 REST 服务。
Webhook
模式需要一个 HTTP 配置文件,通过
--authorization-webhook-config-file=SOME_FILENAME
的参数声明。
配置文件的格式使用
kubeconfig 。
在该文件中,“users” 代表着 API 服务器的 Webhook,而 “cluster” 代表着远程服务。
使用 HTTPS 客户端认证的配置例子:
# Kubernetes API 版本
apiVersion : v1
# API 对象种类
kind : Config
# clusters 代表远程服务
clusters :
- name : name-of-remote-authz-service
cluster :
# 对远程服务进行身份认证的 CA
certificate-authority : /path/to/ca.pem
# 远程服务的查询 URL。必须使用 'https'。不可以包含参数。
server : https://authz.example.com/authorize
# users 代表 API 服务器的 webhook 配置
users :
- name : name-of-api-server
user :
client-certificate : /path/to/cert.pem # 要使用的 webhook 插件的证书
client-key : /path/to/key.pem # 与证书匹配的密钥
# kubeconfig 文件必须有 context。需要提供一个给 API 服务器。
current-context : webhook
contexts :
- context :
cluster : name-of-remote-authz-service
user : name-of-api-server
name : webhook
请求载荷
在做认证决策时,API 服务器会 POST 一个 JSON 序列化的 authorization.k8s.io/v1beta1
SubjectAccessReview
对象来描述这个动作。这个对象包含了描述用户请求的字段,同时也包含了需要被访问资源或请求特征的具体信息。
需要注意的是 webhook API 对象与其他 Kubernetes API
对象一样都同样都遵从版本兼容规则 。
实施人员应该了解 beta 对象的更宽松的兼容性承诺,同时确认请求的 "apiVersion" 字段能被正确地反序列化。
此外,API 服务器还必须启用 authorization.k8s.io/v1beta1
API
扩展组 (--runtime-config=authorization.k8s.io/v1beta1=true
)。
一个请求内容的例子:
{
"apiVersion" : "authorization.k8s.io/v1beta1" ,
"kind" : "SubjectAccessReview" ,
"spec" : {
"resourceAttributes" : {
"namespace" : "kittensandponies" ,
"verb" : "get" ,
"group" : "unicorn.example.org" ,
"resource" : "pods"
},
"user" : "jane" ,
"group" : [
"group1" ,
"group2"
]
}
}
期待远程服务填充请求的 status
字段并响应允许或禁止访问。
响应主体的 spec
字段被忽略,可以省略。允许的响应将返回:
{
"apiVersion" : "authorization.k8s.io/v1beta1" ,
"kind" : "SubjectAccessReview" ,
"status" : {
"allowed" : true
}
}
为了禁止访问,有两种方法。
在大多数情况下,第一种方法是首选方法,它指示授权 Webhook 不允许或对请求 “无意见”。
但是,如果配置了其他授权者,则可以给他们机会允许请求。
如果没有其他授权者,或者没有一个授权者,则该请求被禁止。Webhook 将返回:
{
"apiVersion" : "authorization.k8s.io/v1beta1" ,
"kind" : "SubjectAccessReview" ,
"status" : {
"allowed" : false ,
"reason" : "user does not have read access to the namespace"
}
}
第二种方法立即拒绝其他配置的授权者进行短路评估。
仅应由对集群的完整授权者配置有详细了解的 Webhook 使用。Webhook 将返回:
{
"apiVersion" : "authorization.k8s.io/v1beta1" ,
"kind" : "SubjectAccessReview" ,
"status" : {
"allowed" : false ,
"denied" : true ,
"reason" : "user does not have read access to the namespace"
}
}
对于非资源的路径访问是这么发送的:
{
"apiVersion" : "authorization.k8s.io/v1beta1" ,
"kind" : "SubjectAccessReview" ,
"spec" : {
"nonResourceAttributes" : {
"path" : "/debug" ,
"verb" : "get"
},
"user" : "jane" ,
"group" : [
"group1" ,
"group2"
]
}
}
特性状态:
Kubernetes v1.31 [alpha]
(enabled by default: false)
启用 AuthorizeWithSelectors
特性后,请求中的字段和标签选择算符将被传递给授权 Webhook。
此 Webhook 可以根据作用域字段和标签选择算符做出授权决策(如果它愿意的话)。
SubjectAccessReview API 文档 提供了这些字段应如何被授权
Webhook 解释和处理的指南,特别是应使用解析后的要求而不是原始选择算符字符串,以及如何安全地处理未识别的操作符。
{
"apiVersion" : "authorization.k8s.io/v1beta1" ,
"kind" : "SubjectAccessReview" ,
"spec" : {
"resourceAttributes" : {
"verb" : "list" ,
"group" : "" ,
"resource" : "pods" ,
"fieldSelector" : {
"requirements" : [
{"key" :"spec.nodeName" , "operator" :"In" , "values" :["mynode" ]}
]
},
"labelSelector" : {
"requirements" : [
{"key" :"example.com/mykey" , "operator" :"In" , "values" :["myvalue" ]}
]
}
},
"user" : "jane" ,
"group" : [
"group1" ,
"group2"
]
}
}
非资源类的路径包括:/api
、/apis
、/metrics
、/logs
、/debug
、
/healthz
、/livez
、/openapi/v2
、/readyz
、和 /version
。
客户端需要访问 /api
、/api/*
、/apis
、/apis/*
和 /version
以便
能发现服务器上有什么资源和版本。对于其他非资源类的路径访问在没有 REST API 访问限制的情况下拒绝。
更多信息请参阅
SubjectAccessReview API 文档 和
webhook.go 实现 。
3.7 - 使用 ABAC 鉴权
基于属性的访问控制(Attribute-based access control,ABAC)定义了访问控制范例,
ABAC 通过使用将属性组合在一起的策略来向用户授予访问权限。
要启用 ABAC
模式,可以在启动时指定 --authorization-policy-file=SOME_FILENAME
和 --authorization-mode=ABAC
。
此文件格式是每行一个 JSON 对象 ,不应存在外层的列表或映射,每行应只有一个映射。
每一行都是一个“策略对象”,策略对象是具有以下属性的映射:
版本控制属性:
apiVersion
,字符串类型:有效值为 abac.authorization.kubernetes.io/v1beta1
,允许对策略格式进行版本控制和转换。
kind
,字符串类型:有效值为 Policy
,允许对策略格式进行版本控制和转换。
spec
配置为具有以下映射的属性:
主体匹配属性:
user
,字符串类型;来自 --token-auth-file
的用户字符串,如果你指定 user
,它必须与验证用户的用户名匹配。
group
,字符串类型;如果指定 group
,它必须与经过身份验证的用户的一个组匹配,
system:authenticated
匹配所有经过身份验证的请求。
system:unauthenticated
匹配所有未经过身份验证的请求。
资源匹配属性:
apiGroup
,字符串类型;一个 API 组。
例如:apps
、networking.k8s.io
通配符:*
匹配所有 API 组。
namespace
,字符串类型;一个命名空间。
例如:kube-system
通配符:*
匹配所有资源请求。
resource
,字符串类型;资源类型。
例如:pods
、deployments
通配符:*
匹配所有资源请求。
非资源匹配属性:
nonResourcePath
,字符串类型;非资源请求路径。
例如:/version
或 /apis
通配符:
*
匹配所有非资源请求。
/foo/*
匹配 /foo/
的所有子路径。
readonly
,布尔值类型。如果为 true,则表示该策略仅适用于 get、list 和 watch 操作。
非资源匹配属性仅适用于 get 操作。
说明:
属性未设置等效于属性被设置为对应类型的零值(例如空字符串、0、false)。
然而,出于可读性考虑,应尽量选择不设置这类属性。
在将来,策略可能以 JSON 格式表示,并通过 REST 界面进行管理。
鉴权算法
请求具有与策略对象的属性对应的属性。
当接收到请求时,属性是确定的。未知属性设置为其类型的零值(例如:空字符串、0、false)。
设置为 "*"
的属性将匹配相应属性的任何值。
检查属性的元组,以匹配策略文件中的每个策略。如果至少有一行匹配请求属性,
则请求被鉴权(但仍可能无法通过稍后的合法性检查)。
要允许任何经过身份验证的用户执行某些操作,请将策略组属性设置为 "system:authenticated"
。
要允许任何未经身份验证的用户执行某些操作,请将策略组属性设置为 "system:unauthenticated"
。
要允许用户执行任何操作,请使用设置为 "*"
的 apiGroup、namespace、resource 和
nonResourcePath 属性编写策略。
kubectl
kubectl 使用 apiserver 的 /api
和 /apis
端点来发现服务资源类型,
并使用位于 /openapi/v2
的模式信息来验证通过创建/更新操作发送到 API 的对象。
当使用 ABAC 鉴权时,这些特殊资源必须显式地通过策略中的 nonResourcePath
属性暴露出来
(参见下面的 示例 ):
/api
,/api/*
,/apis
和 /apis/*
用于 API 版本协商。
/version
通过 kubectl version
检索服务器版本。
/swaggerapi/*
用于创建 / 更新操作。
要检查涉及到特定 kubectl 操作的 HTTP 调用,你可以调整详细程度:
例子
Alice 可以对所有资源做任何事情:
{"apiVersion" : "abac.authorization.kubernetes.io/v1beta1" , "kind" : "Policy" , "spec" : {"user" : "alice" , "namespace" : "*" , "resource" : "*" , "apiGroup" : "*" }}
kubelet 可以读取所有 Pod:
{"apiVersion" : "abac.authorization.kubernetes.io/v1beta1" , "kind" : "Policy" , "spec" : {"user" : "kubelet" , "namespace" : "*" , "resource" : "pods" , "readonly" : true }}
kubelet 可以读写事件:
{"apiVersion" : "abac.authorization.kubernetes.io/v1beta1" , "kind" : "Policy" , "spec" : {"user" : "kubelet" , "namespace" : "*" , "resource" : "events" }}
Bob 可以在命名空间 projectCaribou
中读取 Pod:
{"apiVersion" : "abac.authorization.kubernetes.io/v1beta1" , "kind" : "Policy" , "spec" : {"user" : "bob" , "namespace" : "projectCaribou" , "resource" : "pods" , "readonly" : true }}
任何人都可以对所有非资源路径进行只读请求:
{"apiVersion" : "abac.authorization.kubernetes.io/v1beta1" , "kind" : "Policy" , "spec" : {"group" : "system:authenticated" , "readonly" : true , "nonResourcePath" : "*" }}
{"apiVersion" : "abac.authorization.kubernetes.io/v1beta1" , "kind" : "Policy" , "spec" : {"group" : "system:unauthenticated" , "readonly" : true , "nonResourcePath" : "*" }}
完整文件示例
服务账号的快速说明
每个服务账号都有对应的 ABAC 用户名,服务账号的用户名是根据命名约定生成的:
system:serviceaccount:<namespace>:<serviceaccountname>
创建新的命名空间也会导致创建一个新的服务账号:
system:serviceaccount:<namespace>:default
例如,如果你要使用 ABAC 将(kube-system
命名空间中)的默认服务账号完整权限授予 API,
则可以将此行添加到策略文件中:
{"apiVersion" :"abac.authorization.kubernetes.io/v1beta1" ,"kind" :"Policy" ,"spec" :{"user" :"system:serviceaccount:kube-system:default" ,"namespace" :"*" ,"resource" :"*" ,"apiGroup" :"*" }}
API 服务器将需要被重新启动以获取新的策略行。
3.8 - 准入控制器参考
此页面提供准入控制器(Admission Controller)的概述。
什么是准入控制插件?
准入控制器 是一段代码,它会在请求通过认证和鉴权之后、对象被持久化之前拦截到达 API
服务器的请求。
准入控制器可以执行验证(Validating) 和/或变更(Mutating) 操作。
变更(mutating)控制器可以根据被其接受的请求更改相关对象;验证(validating)控制器则不行。
准入控制器限制创建、删除、修改对象的请求。
准入控制器也可以阻止自定义动作,例如通过 API 服务器代理连接到 Pod 的请求。
准入控制器不会 (也不能)阻止读取(get 、watch 或 list )对象的请求。
Kubernetes 1.31
中的准入控制器由下面的列表 组成,
并编译进 kube-apiserver
可执行文件,并且只能由集群管理员配置。
在该列表中,有两个特殊的控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。
它们根据 API 中的配置,
分别执行变更和验证准入控制 Webhook 。
准入控制阶段
准入控制过程分为两个阶段。第一阶段,运行变更准入控制器。第二阶段,运行验证准入控制器。
再次提醒,某些控制器既是变更准入控制器又是验证准入控制器。
如果两个阶段之一的任何一个控制器拒绝了某请求,则整个请求将立即被拒绝,并向最终用户返回错误。
最后,除了对对象进行变更外,准入控制器还可能有其它副作用:将相关资源作为请求处理的一部分进行变更。
增加配额用量就是一个典型的示例,说明了这样做的必要性。
此类用法都需要相应的回收或回调过程,因为任一准入控制器都无法确定某个请求能否通过所有其它准入控制器。
为什么需要准入控制器?
Kubernetes 的若干重要功能都要求启用一个准入控制器,以便正确地支持该特性。
因此,没有正确配置准入控制器的 Kubernetes API 服务器是不完整的,它无法支持你所期望的所有特性。
如何启用一个准入控制器?
Kubernetes API 服务器的 enable-admission-plugins
标志接受一个(以逗号分隔的)准入控制插件列表,
这些插件会在集群修改对象之前被调用。
例如,下面的命令启用 NamespaceLifecycle
和 LimitRanger
准入控制插件:
kube-apiserver --enable-admission-plugins= NamespaceLifecycle,LimitRanger ...
说明:
根据你 Kubernetes 集群的部署方式以及 API 服务器的启动方式,你可能需要以不同的方式应用设置。
例如,如果将 API 服务器部署为 systemd 服务,你可能需要修改 systemd 单元文件;
如果以自托管方式部署 Kubernetes,你可能需要修改 API 服务器的清单文件。
怎么关闭准入控制器?
Kubernetes API 服务器的 disable-admission-plugins
标志,会将传入的(以逗号分隔的)
准入控制插件列表禁用,即使是默认启用的插件也会被禁用。
kube-apiserver --disable-admission-plugins= PodNodeSelector,AlwaysDeny ...
哪些插件是默认启用的?
要查看哪些插件是被启用的:
kube-apiserver -h | grep enable-admission-plugins
在 Kubernetes 1.31 中,默认启用的插件有:
CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, PodSecurity, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionPolicy, ValidatingAdmissionWebhook
每个准入控制器的作用是什么?
AlwaysAdmit
特性状态:
Kubernetes v1.13 [deprecated]
类别 :验证。
该准入控制器允许所有的 Pod 进入集群。此插件已被弃用 ,因其行为与没有准入控制器一样。
AlwaysDeny
特性状态:
Kubernetes v1.13 [deprecated]
类别 :验证。
拒绝所有的请求。由于它没有实际意义,已被弃用 。
AlwaysPullImages
该准入控制器会修改每个新创建的 Pod,将其镜像拉取策略设置为 Always
。
这在多租户集群中是有用的,这样用户就可以放心,他们的私有镜像只能被那些有凭证的人使用。
如果没有这个准入控制器,一旦镜像被拉取到节点上,任何用户的 Pod 都可以通过已了解到的镜像的名称
(假设 Pod 被调度到正确的节点上)来使用它,而不需要对镜像进行任何鉴权检查。
启用这个准入控制器之后,启动容器之前必须拉取镜像,这意味着需要有效的凭证。
CertificateApproval
类别 :验证。
此准入控制器获取审批 CertificateSigningRequest 资源的请求并执行额外的鉴权检查,
以确保针对设置了 spec.signerName
的 CertificateSigningRequest 资源而言,
审批请求的用户有权限对证书请求执行 审批 操作。
有关对 CertificateSigningRequest 资源执行不同操作所需权限的详细信息,
请参阅证书签名请求 。
CertificateSigning
类别 :验证。
此准入控制器监视对 CertificateSigningRequest 资源的 status.certificate
字段的更新请求,
并执行额外的鉴权检查,以确保针对设置了 spec.signerName
的 CertificateSigningRequest 资源而言,
签发证书的用户有权限对证书请求执行 签发 操作。
有关对 CertificateSigningRequest 资源执行不同操作所需权限的详细信息,
请参阅证书签名请求 。
CertificateSubjectRestriction
类别 :验证。
此准入控制器监视 spec.signerName
被设置为 kubernetes.io/kube-apiserver-client
的
CertificateSigningRequest 资源创建请求,并拒绝所有将 “group”(或 “organization attribute”)
设置为 system:masters
的请求。
DefaultIngressClass
类别 :变更。
该准入控制器监测没有请求任何特定 Ingress 类的 Ingress
对象创建请求,并自动向其添加默认 Ingress 类。
这样,没有任何特殊 Ingress 类需求的用户根本不需要关心它们,他们将被设置为默认 Ingress 类。
当未配置默认 Ingress 类时,此准入控制器不执行任何操作。如果有多个 Ingress 类被标记为默认 Ingress 类,
此控制器将拒绝所有创建 Ingress
的操作,并返回错误信息。
要修复此错误,管理员必须重新检查其 IngressClass
对象,并仅将其中一个标记为默认
(通过注解 "ingressclass.kubernetes.io/is-default-class")。
此准入控制器会忽略所有 Ingress
更新操作,仅处理创建操作。
关于 Ingress 类以及如何将 Ingress 类标记为默认的更多信息,请参见
Ingress 页面。
DefaultStorageClass
类别 :变更。
此准入控制器监测没有请求任何特定存储类的 PersistentVolumeClaim
对象的创建请求,
并自动向其添加默认存储类。
这样,没有任何特殊存储类需求的用户根本不需要关心它们,它们将被设置为使用默认存储类。
当未配置默认存储类时,此准入控制器不执行任何操作。如果将多个存储类标记为默认存储类,
此控制器将拒绝所有创建 PersistentVolumeClaim
的请求,并返回错误信息。
要修复此错误,管理员必须重新检查其 StorageClass
对象,并仅将其中一个标记为默认。
此准入控制器会忽略所有 PersistentVolumeClaim
更新操作,仅处理创建操作。
关于持久卷申领和存储类,以及如何将存储类标记为默认,
请参见持久卷 页面。
DefaultTolerationSeconds
类别 :变更。
此准入控制器基于 k8s-apiserver 的输入参数 default-not-ready-toleration-seconds
和
default-unreachable-toleration-seconds
为 Pod 设置默认的容忍度,以容忍 notready:NoExecute
和
unreachable:NoExecute
污点
(如果 Pod 尚未容忍 node.kubernetes.io/not-ready:NoExecute
和
node.kubernetes.io/unreachable:NoExecute
污点的话)。
default-not-ready-toleration-seconds
和 default-unreachable-toleration-seconds
的默认值是 5 分钟。
DenyServiceExternalIPs
类别 :验证。
此准入控制器拒绝新的 Service
中使用字段 externalIPs
。
此功能非常强大(允许网络流量拦截),并且无法很好地受策略控制。
启用后,集群用户将无法创建使用 externalIPs
的新 Service
,也无法在现有
Service
对象上为 externalIPs
添加新值。
externalIPs
的现有使用不受影响,用户可以在现有 Service
对象上从
externalIPs
中删除值。
大多数用户根本不需要此特性,集群管理员应考虑将其禁用。
确实需要使用此特性的集群应考虑使用一些自定义策略来管理 externalIPs
的使用。
此准入控制器默认被禁用。
EventRateLimit
特性状态:
Kubernetes v1.13 [alpha]
类别 :验证。
此准入控制器缓解了请求存储新事件时淹没 API 服务器的问题。集群管理员可以通过以下方式指定事件速率限制:
启用 EventRateLimit
准入控制器;
在通过 API 服务器的命令行标志 --admission-control-config-file
设置的文件中,
引用 EventRateLimit
配置文件:
apiVersion : apiserver.config.k8s.io/v1
kind : AdmissionConfiguration
plugins :
- name : EventRateLimit
path : eventconfig.yaml
...
可以在配置中指定的限制有四种类型:
Server
:API 服务器收到的所有(创建或修改)Event 请求共享一个桶。
Namespace
:每个名字空间都对应一个专用的桶。
User
:为每个用户分配一个桶。
SourceAndObject
:根据事件的来源和涉及对象的各种组合分配桶。
下面是一个针对此配置的 eventconfig.yaml
示例:
apiVersion : eventratelimit.admission.k8s.io/v1alpha1
kind : Configuration
limits :
- type : Namespace
qps : 50
burst : 100
cacheSize : 2000
- type : User
qps : 10
burst : 50
详情请参见
EventRateLimit 配置 API 文档(v1alpha1) 。
此准入控制器默认被禁用。
ExtendedResourceToleration
类别 :变更。
此插件有助于创建带有扩展资源的专用节点。
如果运维人员想要创建带有扩展资源(如 GPU、FPGA 等)的专用节点,他们应该以扩展资源名称作为键名,
为节点设置污点 。
如果启用了此准入控制器,会将此类污点的容忍度自动添加到请求扩展资源的 Pod 中,
用户不必再手动添加这些容忍度。
此准入控制器默认被禁用。
ImagePolicyWebhook
类别 :验证。
ImagePolicyWebhook 准入控制器允许使用后端 Webhook 做出准入决策。
此准入控制器默认被禁用。
ImagePolicyWebhook 使用配置文件来为后端行为设置选项。该文件可以是 JSON 或 YAML,
并具有以下格式:
imagePolicy :
kubeConfigFile : /path/to/kubeconfig/for/backend
# 以秒计的时长,控制批准请求的缓存时间
allowTTL : 50
# 以秒计的时长,控制拒绝请求的缓存时间
denyTTL : 50
# 以毫秒计的时长,控制重试间隔
retryBackoff : 500
# 确定 Webhook 后端失效时的行为
defaultAllow : true
在通过命令行标志 --admission-control-config-file
为 API 服务器提供的文件中,
引用 ImagePolicyWebhook 配置文件:
apiVersion : apiserver.config.k8s.io/v1
kind : AdmissionConfiguration
plugins :
- name : ImagePolicyWebhook
path : imagepolicyconfig.yaml
...
或者,你也可以直接将配置嵌入到该文件中:
apiVersion : apiserver.config.k8s.io/v1
kind : AdmissionConfiguration
plugins :
- name : ImagePolicyWebhook
configuration :
imagePolicy :
kubeConfigFile : <kubeconfig 文件路径>
allowTTL : 50
denyTTL : 50
retryBackoff : 500
defaultAllow : true
ImagePolicyWebhook 的配置文件必须引用
kubeconfig
格式的文件;该文件用来设置与后端的连接。要求后端使用 TLS 进行通信。
kubeconfig 文件的 clusters
字段需要指向远端服务,users
字段需要包含已返回的授权者。
# clusters 指的是远程服务。
clusters :
- name : name-of-remote-imagepolicy-service
cluster :
certificate-authority : /path/to/ca.pem # CA 用于验证远程服务
server : https://images.example.com/policy # 要查询的远程服务的 URL,必须是 'https'。
# users 指的是 API 服务器的 Webhook 配置。
users :
- name : name-of-api-server
user :
client-certificate : /path/to/cert.pem # Webhook 准入控制器使用的证书
client-key : /path/to/key.pem # 证书匹配的密钥
关于 HTTP 配置的更多信息,请参阅
kubeconfig
文档。
请求载荷
当面对一个准入决策时,API 服务器发送一个描述操作的 JSON 序列化的
imagepolicy.k8s.io/v1alpha1
ImageReview
对象。
该对象包含描述被准入容器的字段,以及与 *.image-policy.k8s.io/*
匹配的所有 Pod 注解。
说明:
注意,Webhook API 对象与其他 Kubernetes API 对象一样受制于相同的版本控制兼容性规则。
实现者应该知道对 alpha 对象兼容性是相对宽松的,并检查请求的 "apiVersion" 字段,
以确保正确的反序列化。此外,API 服务器必须启用 imagepolicy.k8s.io/v1alpha1
API 扩展组
(--runtime-config=imagepolicy.k8s.io/v1alpha1=true
)。
请求体示例:
{
"apiVersion" : "imagepolicy.k8s.io/v1alpha1" ,
"kind" : "ImageReview" ,
"spec" : {
"containers" : [
{
"image" : "myrepo/myimage:v1"
},
{
"image" : "myrepo/myimage@sha256:beb6bd6a68f114c1dc2ea4b28db81bdf91de202a9014972bec5e4d9171d90ed"
}
],
"annotations" : {
"mycluster.image-policy.k8s.io/ticket-1234" : "break-glass"
},
"namespace" : "mynamespace"
}
}
远程服务将填充请求的 status
字段,并返回允许或不允许访问的响应。
响应体的 spec
字段会被忽略,并且可以被省略。一个允许访问应答会返回:
{
"apiVersion" : "imagepolicy.k8s.io/v1alpha1" ,
"kind" : "ImageReview" ,
"status" : {
"allowed" : true
}
}
若不允许访问,服务将返回:
{
"apiVersion" : "imagepolicy.k8s.io/v1alpha1" ,
"kind" : "ImageReview" ,
"status" : {
"allowed" : false ,
"reason" : "image currently blacklisted"
}
}
更多的文档,请参阅 imagepolicy.v1alpha1
API 。
使用注解进行扩展
一个 Pod 中匹配 *.image-policy.k8s.io/*
的注解都会被发送给 Webhook。
这样做使得了解后端镜像策略的用户可以向它发送额外的信息,
并让不同的后端实现接收不同的信息。
你可以在这里输入的信息有:
在紧急情况下,请求破例覆盖某个策略。
从一个记录了破例的请求的工单(Ticket)系统得到的一个工单号码。
向策略服务器提供提示信息,用于提供镜像的 imageID,以方便它进行查找。
在任何情况下,注解都是由用户提供的,并不会被 Kubernetes 以任何方式进行验证。
LimitPodHardAntiAffinityTopology
类别 :验证。
此准入控制器拒绝定义了 AntiAffinity
拓扑键的任何 Pod
(requiredDuringSchedulingRequiredDuringExecution
中的 kubernetes.io/hostname
除外)。
此准入控制器默认被禁用。
LimitRanger
类别 :变更和验证。
此准入控制器会监测传入的请求,并确保请求不会违反 Namespace
中 LimitRange
对象所设置的任何约束。
如果你在 Kubernetes 部署中使用了 LimitRange
对象,则必须使用此准入控制器来执行这些约束。
LimitRanger 还可以用于将默认资源请求应用到没有设定资源约束的 Pod;
当前,默认的 LimitRanger 对 default
名字空间中的所有 Pod 都设置 0.1 CPU 的需求。
请查看
limitRange API 文档 和
LimitRange 例子 以了解更多细节。
MutatingAdmissionWebhook
类别 :变更。
此准入控制器调用任何与请求匹配的变更(Mutating) Webhook。匹配的 Webhook 将被顺序调用。
每一个 Webhook 都可以自由修改对象。
MutatingAdmissionWebhook
,顾名思义,仅在变更阶段运行。
如果由此准入控制器调用的 Webhook 有副作用(如:减少配额),
则它 必须 具有协调系统,因为不能保证后续的 Webhook 和验证准入控制器都会允许完成请求。
如果你禁用了 MutatingAdmissionWebhook,那么还必须使用 --runtime-config
标志禁止
admissionregistration.k8s.io/v1
组/版本中的 MutatingWebhookConfiguration
,
二者都是默认启用的。
谨慎编写和安装变更 Webhook
当用户尝试创建的对象与返回的对象不同时,用户可能会感到困惑。
当他们读回的对象与尝试创建的对象不同,内建的控制回路可能会出问题。
与覆盖原始请求中设置的字段相比,使用原始请求未设置的字段会引起问题的可能性较小。
应尽量避免覆盖原始请求中的字段设置。
内建资源和第三方资源的控制回路未来可能会出现破坏性的变更,使现在运行良好的 Webhook
无法再正常运行。即使完成了 Webhook API 安装,也不代表该 Webhook 会被提供无限期的支持。
NamespaceAutoProvision
类别 :变更。
此准入控制器会检查针对名字空间域资源的所有传入请求,并检查所引用的名字空间是否确实存在。
如果找不到所引用的名字空间,控制器将创建一个名字空间。
此准入控制器对于不想要求名字空间必须先创建后使用的集群部署很有用。
NamespaceExists
类别 :验证。
此准入控制器检查针对名字空间作用域的资源(除 Namespace
自身)的所有请求。
如果请求引用的名字空间不存在,则拒绝该请求。
NamespaceLifecycle
类别 :验证。
该准入控制器禁止在一个正在被终止的 Namespace
中创建新对象,并确保针对不存在的
Namespace
的请求被拒绝。该准入控制器还会禁止删除三个系统保留的名字空间,即 default
、
kube-system
和 kube-public
。
Namespace
的删除操作会触发一系列删除该名字空间中所有对象(Pod、Service 等)的操作。
为了确保这个过程的完整性,我们强烈建议启用这个准入控制器。
NodeRestriction
类别 :验证。
该准入控制器限制了某 kubelet 可以修改的 Node
和 Pod
对象。
为了受到这个准入控制器的限制,kubelet 必须使用在 system:nodes
组中的凭证,
并使用 system:node:<nodeName>
形式的用户名。
这样,kubelet 只可修改自己的 Node
API 对象,只能修改绑定到自身节点的 Pod 对象。
不允许 kubelet 更新或删除 Node
API 对象的污点。
NodeRestriction
准入插件可防止 kubelet 删除其 Node
API 对象,
并对前缀为 kubernetes.io/
或 k8s.io/
的标签的修改对 kubelet 作如下限制:
禁止 kubelet 添加、删除或更新前缀为 node-restriction.kubernetes.io/
的标签。
这类前缀的标签时保留给管理员的,用以为 Node
对象设置标签以隔离工作负载,而不允许 kubelet
修改带有该前缀的标签。
允许 kubelet 添加、删除、更新以下标签:
kubernetes.io/hostname
kubernetes.io/arch
kubernetes.io/os
beta.kubernetes.io/instance-type
node.kubernetes.io/instance-type
failure-domain.beta.kubernetes.io/region
(已弃用)
failure-domain.beta.kubernetes.io/zone
(已弃用)
topology.kubernetes.io/region
topology.kubernetes.io/zone
kubelet.kubernetes.io/
为前缀的标签
node.kubernetes.io/
为前缀的标签
以 kubernetes.io
或 k8s.io
为前缀的所有其他标签都限制 kubelet 使用,并且将来可能会被
NodeRestriction
准入插件允许或禁止。
将来的版本可能会增加其他限制,以确保 kubelet 具有正常运行所需的最小权限集。
OwnerReferencesPermissionEnforcement
类别 :验证。
此准入控制器保护对对象的 metadata.ownerReferences
的访问,以便只有对该对象具有
delete 权限的用户才能对其进行更改。
该准入控制器还保护对 metadata.ownerReferences[x].blockOwnerDeletion
对象的访问,
以便只有对所引用的 属主(owner) 的 finalizers
子资源具有 update
权限的用户才能对其进行更改。
PersistentVolumeClaimResize
特性状态:
Kubernetes v1.24 [stable]
类别 :验证。
此准入控制器检查传入的 PersistentVolumeClaim
调整大小请求,对其执行额外的验证检查操作。
建议启用 PersistentVolumeClaimResize
准入控制器。除非 PVC 的 StorageClass
明确地将
allowVolumeExpansion
设置为 true
来显式启用调整大小。
否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整。
例如:由以下 StorageClass
创建的所有 PersistentVolumeClaim
都支持卷容量扩充:
apiVersion : storage.k8s.io/v1
kind : StorageClass
metadata :
name : gluster-vol-default
provisioner : kubernetes.io/glusterfs
parameters :
resturl : "http://192.168.10.100:8080"
restuser : ""
secretNamespace : ""
secretName : ""
allowVolumeExpansion : true
关于持久化卷申领的更多信息,请参见
PersistentVolumeClaim 。
PodNodeSelector
特性状态:
Kubernetes v1.5 [alpha]
类别 :验证。
此准入控制器通过读取名字空间注解和全局配置,来为名字空间中可以使用的节点选择器设置默认值并实施限制。
此准入控制器默认被禁用。
PodNodeSelector
使用配置文件来设置后端行为的选项。
请注意,配置文件格式将在将来某个版本中改为版本化文件。
该文件可以是 JSON 或 YAML,格式如下:
podNodeSelectorPluginConfig :
clusterDefaultNodeSelector : name-of-node-selector
namespace1 : name-of-node-selector
namespace2 : name-of-node-selector
通过 API 服务器命令行标志 --admission-control-config-file
为 API 服务器提供的文件中,
需要引用 PodNodeSelector
配置文件:
apiVersion : apiserver.config.k8s.io/v1
kind : AdmissionConfiguration
plugins :
- name : PodNodeSelector
path : podnodeselector.yaml
...
PodNodeSelector
使用键为 scheduler.alpha.kubernetes.io/node-selector
的注解为名字空间设置节点选择算符。
apiVersion : v1
kind : Namespace
metadata :
annotations :
scheduler.alpha.kubernetes.io/node-selector : name-of-node-selector
name : namespace3
内部行为
此准入控制器行为如下:
如果 Namespace
的注解带有键 scheduler.alpha.kubernetes.io/node-selector
,
则将其值用作节点选择算符。
如果名字空间缺少此类注解,则使用 PodNodeSelector
插件配置文件中定义的
clusterDefaultNodeSelector
作为节点选择算符。
评估 Pod 节点选择算符和名字空间节点选择算符是否存在冲突。存在冲突将拒绝 Pod。
评估 Pod 节点选择算符和特定于名字空间的被允许的选择算符所定义的插件配置文件是否存在冲突。
存在冲突将导致拒绝 Pod。
说明:
PodNodeSelector 允许 Pod 强制在特定标签的节点上运行。
另请参阅 PodTolerationRestriction 准入插件,该插件可防止 Pod 在特定污点的节点上运行。
PodSecurity
特性状态:
Kubernetes v1.25 [stable]
类别 :验证。
PodSecurity 准入控制器在新 Pod 被准入之前对其进行检查,
根据请求的安全上下文和 Pod 所在名字空间允许的
Pod 安全性标准 的限制来确定新 Pod
是否应该被准入。
更多信息请参阅 Pod 安全性准入 。
PodSecurity 取代了一个名为 PodSecurityPolicy 的旧准入控制器。
PodTolerationRestriction
特性状态:
Kubernetes v1.7 [alpha]
类别 :变更和验证。
准入控制器 PodTolerationRestriction 检查 Pod 的容忍度与其名字空间的容忍度之间是否存在冲突。
如果存在冲突,则拒绝 Pod 请求。
控制器接下来会将名字空间的容忍度合并到 Pod 的容忍度中,
根据名字空间的容忍度白名单检查所得到的容忍度结果。
如果检查成功,则将接受 Pod 请求,否则拒绝该请求。
如果 Pod 的名字空间没有任何关联的默认容忍度或容忍度白名单,
则使用集群级别的默认容忍度或容忍度白名单(如果有的话)。
名字空间的容忍度通过注解键 scheduler.alpha.kubernetes.io/defaultTolerations
来设置。可接受的容忍度可以通过 scheduler.alpha.kubernetes.io/tolerationsWhitelist
注解键来添加。
名字空间注解的示例:
apiVersion : v1
kind : Namespace
metadata :
name : apps-that-need-nodes-exclusively
annotations :
scheduler.alpha.kubernetes.io/defaultTolerations : '[{"operator": "Exists", "effect": "NoSchedule", "key": "dedicated-node"}]'
scheduler.alpha.kubernetes.io/tolerationsWhitelist : '[{"operator": "Exists", "effect": "NoSchedule", "key": "dedicated-node"}]'
此准入控制器默认被禁用。
优先级
类别 :变更和验证。
优先级准入控制器使用 priorityClassName
字段并用整型值填充优先级。
如果找不到优先级,则拒绝 Pod。
ResourceQuota
类别 :验证。
此准入控制器会监测传入的请求,并确保它不违反任何一个 Namespace
中的 ResourceQuota
对象中列举的约束。如果你在 Kubernetes 部署中使用了 ResourceQuota
,
则必须使用这个准入控制器来强制执行配额限制。
请参阅
resourceQuota API 参考
和 Resource Quota 例子 了解更多细节。
RuntimeClass
类别 :变更和验证。
如果你所定义的 RuntimeClass 包含 Pod 开销 ,
这个准入控制器会检查新的 Pod。
被启用后,此准入控制器会拒绝所有已经设置了 overhead 字段的 Pod 创建请求。
对于配置了 RuntimeClass 并在其 .spec
中选定 RuntimeClass 的 Pod,
此准入控制器会根据相应 RuntimeClass 中定义的值为 Pod 设置 .spec.overhead
。
详情请参见 Pod 开销 。
ServiceAccount
类别 :变更和验证。
此准入控制器实现了
ServiceAccount
的自动化。强烈推荐为 Kubernetes 项目启用此准入控制器。
如果你打算使用 Kubernetes 的 ServiceAccount
对象,你应启用这个准入控制器。
关于 kubernetes.io/enforce-mountable-secrets
注解:尽管注解的名称表明它只涉及 Secret 的挂载,
但其执行范围也扩展到 Pod 上下文中 Secret 的其他使用方式。
因此,确保所有引用的 Secret 在 ServiceAccount 中被正确指定是至关重要的。
StorageObjectInUseProtection
类别 :变更。
StorageObjectInUseProtection
插件将 kubernetes.io/pvc-protection
或
kubernetes.io/pv-protection
终结器(finalizers)添加到新创建的持久卷申领(PVC)
或持久卷(PV)中。如果用户尝试删除 PVC/PV,除非 PVC/PV 的保护控制器移除终结器,
否则 PVC/PV 不会被删除。有关更多详细信息,
请参考保护使用中的存储对象 。
TaintNodesByCondition
类别 :变更。
该准入控制器为新创建的节点添加 NotReady
和 NoSchedule
污点 。
这些污点能够避免一些竞态条件的发生,而这类竞态条件可能导致 Pod
在更新节点污点以准确反映其所报告状况之前,就被调度到新节点上。
ValidatingAdmissionPolicy
类别 :验证。
此准入控制器 针对传入的匹配请求实现
CEL 校验。当 validatingadmissionpolicy
和 admissionregistration.k8s.io/v1alpha1
特性门控组/版本被启用时,
此特性被启用。如果任意 ValidatingAdmissionPolicy 失败,则请求失败。
ValidatingAdmissionWebhook
类别 :验证。
此准入控制器调用与请求匹配的所有验证性 Webhook。
匹配的 Webhook 将被并行调用。如果其中任何一个拒绝请求,则整个请求将失败。
该准入控制器仅在验证(Validating)阶段运行;与 MutatingAdmissionWebhook
准入控制器所调用的 Webhook 相反,它调用的 Webhook 不可以变更对象。
如果以此方式调用的 Webhook 有其它副作用(如:减少配额),则它必须 具有协调机制。
这是因为无法保证后续的 Webhook 或其他验证性准入控制器都允许请求完成。
如果你禁用了 ValidatingAdmissionWebhook,还必须通过 --runtime-config
标志来禁用
admissionregistration.k8s.io/v1
组/版本中的 ValidatingWebhookConfiguration
对象。
有推荐的准入控制器吗?
有。推荐使用的准入控制器默认情况下都处于启用状态
(请查看这里 )。
因此,你无需显式指定它们。
你可以使用 --enable-admission-plugins
标志(顺序不重要 )来启用默认设置以外的其他准入控制器。
3.9 - 动态准入控制
除了内置的 admission 插件 ,
准入插件可以作为扩展独立开发,并以运行时所配置的 Webhook 的形式运行。
此页面描述了如何构建、配置、使用和监视准入 Webhook。
什么是准入 Webhook?
准入 Webhook 是一种用于接收准入请求并对其进行处理的 HTTP 回调机制。
可以定义两种类型的准入 Webhook,
即验证性质的准入 Webhook
和变更性质的准入 Webhook 。
变更性质的准入 Webhook 会先被调用。它们可以修改发送到 API
服务器的对象以执行自定义的设置默认值操作。
在完成了所有对象修改并且 API 服务器也验证了所传入的对象之后,
验证性质的 Webhook 会被调用,并通过拒绝请求的方式来强制实施自定义的策略。
说明:
如果准入 Webhook 需要保证它们所看到的是对象的最终状态以实施某种策略。
则应使用验证性质的准入 Webhook,因为对象被修改性质 Webhook 看到之后仍然可能被修改。
尝试准入 Webhook
准入 Webhook 本质上是集群控制平面的一部分。你应该非常谨慎地编写和部署它们。
如果你打算编写或者部署生产级准入 Webhook,
请阅读用户指南 以获取相关说明。
在下文中,我们将介绍如何快速试验准入 Webhook。
先决条件
编写一个准入 Webhook 服务器
请参阅 Kubernetes e2e 测试中的
Admission Webhook 服务器 的实现。
Webhook 处理由 API 服务器发送的 AdmissionReview
请求,并且将其决定作为
AdmissionReview
对象以相同版本发送回去。
有关发送到 Webhook 的数据的详细信息,请参阅 Webhook 请求 。
要获取来自 Webhook 的预期数据,请参阅 Webhook 响应 。
示例准入 Webhook 服务器置 ClientAuth
字段为空 ,
默认为 NoClientCert
。这意味着 Webhook 服务器不会验证客户端的身份,认为其是 API 服务器。
如果你需要双向 TLS 或其他方式来验证客户端,
请参阅如何对 API 服务器进行身份认证 。
部署准入 Webhook 服务
e2e 测试中的 Webhook 服务器通过
deployment API
部署在 Kubernetes 集群中。该测试还将创建一个
Service
作为 Webhook 服务器的前端。
参见相关代码 。
你也可以在集群外部署 Webhook。这样做需要相应地更新你的 Webhook 配置。
你可以通过
ValidatingWebhookConfiguration
或者
MutatingWebhookConfiguration 动态配置哪些资源要被哪些准入 Webhook 处理。
以下是一个 ValidatingWebhookConfiguration
示例,Mutating Webhook 配置与此类似。
有关每个配置字段的详细信息,请参阅 Webhook 配置 部分。
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
metadata :
name : "pod-policy.example.com"
webhooks :
- name : "pod-policy.example.com"
rules :
- apiGroups : ["" ]
apiVersions : ["v1" ]
operations : ["CREATE" ]
resources : ["pods" ]
scope : "Namespaced"
clientConfig :
service :
namespace : "example-namespace"
name : "example-service"
caBundle : <CA_BUNDLE>
admissionReviewVersions : ["v1" ]
sideEffects : None
timeoutSeconds : 5
说明:
你必须在以上示例中将 <CA_BUNDLE>
替换为一个有效的 CA 证书包,
这是一个用 PEM 编码的(字段值是 Base64 编码)CA 证书包,用于校验 Webhook 的服务器证书。
scope
字段指定是仅集群范围的资源(Cluster)还是名字空间范围的资源资源(Namespaced)将与此规则匹配。
*
表示没有范围限制。
说明:
当使用 clientConfig.service
时,服务器证书必须对 <svc_name>.<svc_namespace>.svc
有效。
说明:
Webhook 调用的默认超时是 10 秒,你可以设置 timeout
并建议对 Webhook 设置较短的超时时间。
如果 Webhook 调用超时,则根据 Webhook 的失败策略处理请求。
当一个 API 服务器收到与 rules
相匹配的请求时,
该 API 服务器将按照 clientConfig
中指定的方式向 Webhook 发送一个 admissionReview
请求。
创建 Webhook 配置后,系统将花费几秒钟使新配置生效。
对 API 服务器进行身份认证
如果你的 Webhook 需要身份验证,则可以将 API 服务器配置为使用基本身份验证、持有者令牌或证书来向
Webhook 提供身份证明。完成此配置需要三个步骤。
启动 API 服务器时,通过 --admission-control-config-file
参数指定准入控制配置文件的位置。
在准入控制配置文件中,指定 MutatingAdmissionWebhook 控制器和 ValidatingAdmissionWebhook 控制器应该读取凭据的位置。
凭证存储在 kubeConfig 文件中(是的,与 kubectl 使用的模式相同),因此字段名称为 kubeConfigFile
。
以下是一个准入控制配置文件示例:
apiVersion : apiserver.config.k8s.io/v1
kind : AdmissionConfiguration
plugins :
- name : ValidatingAdmissionWebhook
configuration :
apiVersion : apiserver.config.k8s.io/v1
kind : WebhookAdmissionConfiguration
kubeConfigFile : "<path-to-kubeconfig-file>"
- name : MutatingAdmissionWebhook
configuration :
apiVersion : apiserver.config.k8s.io/v1
kind : WebhookAdmissionConfiguration
kubeConfigFile : "<path-to-kubeconfig-file>"
# 1.17 中被弃用,推荐使用 apiserver.config.k8s.io/v1
apiVersion : apiserver.k8s.io/v1alpha1
kind : AdmissionConfiguration
plugins :
- name : ValidatingAdmissionWebhook
configuration :
# 1.17 中被弃用,推荐使用 apiserver.config.k8s.io/v1,kind = WebhookAdmissionConfiguration
apiVersion : apiserver.config.k8s.io/v1alpha1
kind : WebhookAdmission
kubeConfigFile : "<path-to-kubeconfig-file>"
- name : MutatingAdmissionWebhook
configuration :
# 1.17 中被弃用,推荐使用 apiserver.config.k8s.io/v1,kind = WebhookAdmissionConfiguration
apiVersion : apiserver.config.k8s.io/v1alpha1
kind : WebhookAdmission
kubeConfigFile : "<path-to-kubeconfig-file>"
有关 AdmissionConfiguration
的更多信息,请参见
AdmissionConfiguration (v1) reference 。
有关每个配置字段的详细信息,请参见 Webhook 配置 部分。
在 kubeConfig 文件中,提供证书凭据:
apiVersion : v1
kind : Config
users :
# name 应设置为服务的 DNS 名称或配置了 Webhook 的 URL 的主机名(包括端口)。
# 如果将非 443 端口用于服务,则在配置 1.16+ API 服务器时,该端口必须包含在名称中。
#
# 对于配置在默认端口(443)上与服务对话的 Webhook,请指定服务的 DNS 名称:
# - name: webhook1.ns1.svc
# user: ...
#
# 对于配置在非默认端口(例如 8443)上与服务对话的 Webhook,请在 1.16+ 中指定服务的 DNS 名称和端口:
# - name: webhook1.ns1.svc:8443
# user: ...
# 并可以选择仅使用服务的 DNS 名称来创建第二节,以与 1.15 API 服务器版本兼容:
# - name: webhook1.ns1.svc
# user: ...
#
# 对于配置为使用 URL 的 Webhook,请匹配在 Webhook 的 URL 中指定的主机(和端口)。
# 带有 `url: https://www.example.com` 的 Webhook:
# - name: www.example.com
# user: ...
#
# 带有 `url: https://www.example.com:443` 的 Webhook:
# - name: www.example.com:443
# user: ...
#
# 带有 `url: https://www.example.com:8443` 的 Webhook:
# - name: www.example.com:8443
# user: ...
#
- name : 'webhook1.ns1.svc'
user :
client-certificate-data : "<pem encoded certificate>"
client-key-data : "<pem encoded key>"
# `name` 支持使用 * 通配符匹配前缀段。
- name : '*.webhook-company.org'
user :
password : "<password>"
username : "<name>"
# '*' 是默认匹配项。
- name : '*'
user :
token : "<token>"
当然,你需要设置 Webhook 服务器来处理这些身份验证请求。
Webhook 请求与响应
请求
Webhook 发送 POST 请求时,请设置 Content-Type: application/json
并对 admission.k8s.io
API
组中的 AdmissionReview
对象进行序列化,将所得到的 JSON 作为请求的主体。
Webhook 可以在配置中的 admissionReviewVersions
字段指定可接受的 AdmissionReview
对象版本:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
admissionReviewVersions : ["v1" , "v1beta1" ]
创建 Webhook 配置时,admissionReviewVersions
是必填字段。
Webhook 必须支持至少一个当前和以前的 API 服务器都可以解析的 AdmissionReview
版本。
API 服务器将发送的是 admissionReviewVersions
列表中所支持的第一个 AdmissionReview
版本。
如果 API 服务器不支持列表中的任何版本,则不允许创建配置。
如果 API 服务器遇到以前创建的 Webhook 配置,并且不支持该 API 服务器知道如何发送的任何
AdmissionReview
版本,则调用 Webhook 的尝试将失败,并依据失败策略 进行处理。
此示例显示了 AdmissionReview
对象中包含的数据,该数据用于请求更新 apps/v1
Deployment
的 scale
子资源:
apiVersion : admission.k8s.io/v1
kind : AdmissionReview
request :
# 唯一标识此准入回调的随机 uid
uid : 705ab4f5-6393-11e8-b7cc-42010a800002
# 传入完全限定的 group/version/kind 对象
kind :
group : autoscaling
version : v1
kind : Scale
# 修改 resource 的完全限定 group/version/kind
resource :
group : apps
version : v1
resource : deployments
# subResource(如果请求是针对 subResource 的)
subResource : scale
# 在对 API 服务器的原始请求中,传入对象的标准 group/version/kind
# 仅当 Webhook 指定 `matchPolicy: Equivalent` 且将对 API 服务器的原始请求
# 转换为 Webhook 注册的版本时,这才与 `kind` 不同。
requestKind :
group : autoscaling
version : v1
kind : Scale
# 在对 API 服务器的原始请求中正在修改的资源的标准 group/version/kind
# 仅当 Webhook 指定了 `matchPolicy:Equivalent` 并且将对 API 服务器的原始请求转换为
# Webhook 注册的版本时,这才与 `resource` 不同。
requestResource :
group : apps
version : v1
resource : deployments
# subResource(如果请求是针对 subResource 的)
# 仅当 Webhook 指定了 `matchPolicy:Equivalent` 并且将对
# API 服务器的原始请求转换为该 Webhook 注册的版本时,这才与 `subResource` 不同。
requestSubResource : scale
# 被修改资源的名称
name : my-deployment
# 如果资源是属于名字空间(或者是名字空间对象),则这是被修改的资源的名字空间
namespace : my-namespace
# 操作可以是 CREATE、UPDATE、DELETE 或 CONNECT
operation : UPDATE
userInfo :
# 向 API 服务器发出请求的经过身份验证的用户的用户名
username : admin
# 向 API 服务器发出请求的经过身份验证的用户的 UID
uid : 014fbff9a07c
# 向 API 服务器发出请求的经过身份验证的用户的组成员身份
groups :
- system:authenticated
- my-admin-group
# 向 API 服务器发出请求的用户相关的任意附加信息
# 该字段由 API 服务器身份验证层填充,并且如果 webhook 执行了任何
# SubjectAccessReview 检查,则应将其包括在内。
extra :
some-key :
- some-value1
- some-value2
# object 是被接纳的新对象。
# 对于 DELETE 操作,它为 null。
object :
apiVersion : autoscaling/v1
kind : Scale
# oldObject 是现有对象。
# 对于 CREATE 和 CONNECT 操作,它为 null。
oldObject :
apiVersion : autoscaling/v1
kind : Scale
# options 包含要接受的操作的选项,例如 meta.k8s.io/v CreateOptions、UpdateOptions 或 DeleteOptions。
# 对于 CONNECT 操作,它为 null。
options :
apiVersion : meta.k8s.io/v1
kind : UpdateOptions
# dryRun 表示 API 请求正在以 `dryrun` 模式运行,并且将不会保留。
# 带有副作用的 Webhook 应该避免在 dryRun 为 true 时激活这些副作用。
# 有关更多详细信息,请参见 http://k8s.io/zh-cn/docs/reference/using-api/api-concepts/#make-a-dry-run-request
dryRun : False
响应
Webhook 使用 HTTP 200 状态码、Content-Type: application/json
和一个包含 AdmissionReview
对象的 JSON 序列化格式来发送响应。该 AdmissionReview
对象与发送的版本相同,且其中包含的 response
字段已被有效填充。
response
至少必须包含以下字段:
uid
,从发送到 Webhook 的 request.uid
中复制而来
allowed
,设置为 true
或 false
Webhook 允许请求的最简单响应示例:
{
"apiVersion" : "admission.k8s.io/v1" ,
"kind" : "AdmissionReview" ,
"response" : {
"uid" : "<value from request.uid>" ,
"allowed" : true
}
}
Webhook 禁止请求的最简单响应示例:
{
"apiVersion" : "admission.k8s.io/v1" ,
"kind" : "AdmissionReview" ,
"response" : {
"uid" : "<value from request.uid>" ,
"allowed" : false
}
}
当拒绝请求时,Webhook 可以使用 status
字段自定义 http 响应码和返回给用户的消息。
有关状态类型的详细信息,请参见
API 文档 。
禁止请求的响应示例,它定制了向用户显示的 HTTP 状态码和消息:
{
"apiVersion" : "admission.k8s.io/v1" ,
"kind" : "AdmissionReview" ,
"response" : {
"uid" : "<value from request.uid>" ,
"allowed" : false ,
"status" : {
"code" : 403 ,
"message" : "You cannot do this because it is Tuesday and your name starts with A"
}
}
}
当允许请求时,mutating准入 Webhook 也可以选择修改传入的对象。
这是通过在响应中使用 patch
和 patchType
字段来完成的。
当前唯一支持的 patchType
是 JSONPatch
。
有关更多详细信息,请参见 JSON patch 。
对于 patchType: JSONPatch
,patch
字段包含一个以 base64 编码的 JSON patch 操作数组。
例如,设置 spec.replicas
的单个补丁操作将是
[{"op": "add", "path": "/spec/replicas", "value": 3}]
。
如果以 Base64 形式编码,结果将是
W3sib3AiOiAiYWRkIiwgInBhdGgiOiAiL3NwZWMvcmVwbGljYXMiLCAidmFsdWUiOiAzfV0=
因此,添加该标签的 Webhook 响应为:
{
"apiVersion" : "admission.k8s.io/v1" ,
"kind" : "AdmissionReview" ,
"response" : {
"uid" : "<value from request.uid>" ,
"allowed" : true ,
"patchType" : "JSONPatch" ,
"patch" : "W3sib3AiOiAiYWRkIiwgInBhdGgiOiAiL3NwZWMvcmVwbGljYXMiLCAidmFsdWUiOiAzfV0="
}
}
准入 Webhook 可以选择性地返回在 HTTP Warning
头中返回给请求客户端的警告消息,警告代码为 299。
警告可以与允许或拒绝的准入响应一起发送。
如果你正在实现返回一条警告的 Webhook,则:
不要在消息中包括 "Warning:" 前缀
使用警告消息描述该客户端进行 API 请求时会遇到或应意识到的问题
如果可能,将警告限制为 120 个字符
注意:
超过 256 个字符的单条警告消息在返回给客户之前可能会被 API 服务器截断。
如果超过 4096 个字符的警告消息(来自所有来源),则额外的警告消息会被忽略。
{
"apiVersion" : "admission.k8s.io/v1" ,
"kind" : "AdmissionReview" ,
"response" : {
"uid" : "<value from request.uid>" ,
"allowed" : true ,
"warnings" : [
"duplicate envvar entries specified with name MY_ENV" ,
"memory request less than 4MB specified for container mycontainer, which will not start successfully"
]
}
}
Webhook 配置
要注册准入 Webhook,请创建 MutatingWebhookConfiguration
或 ValidatingWebhookConfiguration
API 对象。
MutatingWebhookConfiguration
或ValidatingWebhookConfiguration
对象的名称必须是有效的
DNS 子域名 。
每种配置可以包含一个或多个 Webhook。如果在单个配置中指定了多个
Webhook,则应为每个 Webhook 赋予一个唯一的名称。
这是必需的,以使生成的审计日志和指标更易于与激活的配置相匹配。
每个 Webhook 定义以下内容。
匹配请求-规则
每个 Webhook 必须指定用于确定是否应将对 apiserver 的请求发送到 Webhook 的规则列表。
每个规则都指定一个或多个 operations、apiGroups、apiVersions 和 resources 以及资源的 scope:
operations
列出一个或多个要匹配的操作。
可以是 CREATE
、UPDATE
、DELETE
、CONNECT
或 *
以匹配所有内容。
apiGroups
列出了一个或多个要匹配的 API 组。""
是核心 API 组。"*"
匹配所有 API 组。
apiVersions
列出了一个或多个要匹配的 API 版本。"*"
匹配所有 API 版本。
resources
列出了一个或多个要匹配的资源。
"*"
匹配所有资源,但不包括子资源。
"*/*"
匹配所有资源,包括子资源。
"pods/*"
匹配 pod 的所有子资源。
"*/status"
匹配所有 status 子资源。
scope
指定要匹配的范围。有效值为 "Cluster"
、"Namespaced"
和 "*"
。
子资源匹配其父资源的范围。默认值为 "*"
。
"Cluster"
表示只有集群作用域的资源才能匹配此规则(API 对象 Namespace 是集群作用域的)。
"Namespaced"
意味着仅具有名字空间的资源才符合此规则。
"*"
表示没有作用域限制。
如果传入请求与任何 Webhook rules
的指定 operations
、groups
、versions
、
resources
和 scope
匹配,则该请求将发送到 Webhook。
以下是可用于指定应拦截哪些资源的规则的其他示例。
匹配针对 apps/v1
和 apps/v1beta1
组中 deployments
和 replicasets
资源的 CREATE
或 UPDATE
请求:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
...
webhooks :
- name : my-webhook.example.com
rules :
- operations : ["CREATE" , "UPDATE" ]
apiGroups : ["apps" ]
apiVersions : ["v1" , "v1beta1" ]
resources : ["deployments" , "replicasets" ]
scope : "Namespaced"
...
匹配所有 API 组和版本中的所有资源(但不包括子资源)的创建请求:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
rules :
- operations : ["CREATE" ]
apiGroups : ["*" ]
apiVersions : ["*" ]
resources : ["*" ]
scope : "*"
匹配所有 API 组和版本中所有 status
子资源的更新请求:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
rules :
- operations : ["UPDATE" ]
apiGroups : ["*" ]
apiVersions : ["*" ]
resources : ["*/status" ]
scope : "*"
匹配请求:objectSelector
通过指定 objectSelector
,Webhook 能够根据可能发送的对象的标签来限制哪些请求被拦截。
如果指定,则将对 objectSelector
和可能发送到 Webhook 的 object 和 oldObject
进行评估。如果两个对象之一与选择算符匹配,则认为该请求已匹配。
空对象(对于创建操作而言为 oldObject
,对于删除操作而言为 newObject
),
或不能带标签的对象(例如 DeploymentRollback
或 PodProxyOptions
对象)
被认为不匹配。
仅当选择使用 Webhook 时才使用对象选择器,因为最终用户可以通过设置标签来
跳过准入 Webhook。
这个例子展示了一个变更性质的 Webhook,它将匹配带有标签 foo:bar
的所有资源(但不包括子资源)的
CREATE
操作:
apiVersion : admissionregistration.k8s.io/v1
kind : MutatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
objectSelector :
matchLabels :
foo : bar
rules :
- operations : ["CREATE" ]
apiGroups : ["*" ]
apiVersions : ["*" ]
resources : ["*" ]
scope : "*"
有关标签选择算符的更多示例,请参见标签的概念 。
匹配请求:namespaceSelector
通过指定 namespaceSelector
,
Webhook 可以根据具有名字空间的资源所处的名字空间的标签来选择拦截哪些资源的操作。
namespaceSelector
根据名字空间的标签是否匹配选择算符,决定是否针对具名字空间的资源
(或 Namespace 对象)的请求运行 Webhook。
如果对象是除 Namespace 以外的集群范围的资源,则 namespaceSelector
标签无效。
本例给出的变更性质的 Webhook 将匹配到对名字空间中具名字空间的资源的 CREATE
请求,
前提是这些资源不含值为 "0" 或 "1" 的 "runlevel" 标签:
apiVersion : admissionregistration.k8s.io/v1
kind : MutatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
namespaceSelector :
matchExpressions :
- key : runlevel
operator : NotIn
values : ["0" , "1" ]
rules :
- operations : ["CREATE" ]
apiGroups : ["*" ]
apiVersions : ["*" ]
resources : ["*" ]
scope : "Namespaced"
此示例显示了一个验证性质的 Webhook,它将匹配到对某名字空间中的任何具名字空间的资源的
CREATE
请求,前提是该名字空间具有值为 "prod" 或 "staging" 的 "environment" 标签:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
namespaceSelector :
matchExpressions :
- key : environment
operator : In
values : ["prod" , "staging" ]
rules :
- operations : ["CREATE" ]
apiGroups : ["*" ]
apiVersions : ["*" ]
resources : ["*" ]
scope : "Namespaced"
有关标签选择算符的更多示例,
请参见标签的概念 。
匹配请求:matchPolicy
API 服务器可以通过多个 API 组或版本来提供对象。
例如,如果一个 Webhook 仅为某些 API 组/版本指定了规则(例如
apiGroups:["apps"], apiVersions:["v1","v1beta1"]
),而修改资源的请求是通过另一个
API 组/版本(例如 extensions/v1beta1
)发出的,该请求将不会被发送到 Webhook。
matchPolicy
允许 Webhook 定义如何使用其 rules
匹配传入的请求。
允许的值为 Exact
或 Equivalent
。
Exact
表示仅当请求与指定规则完全匹配时才应拦截该请求。
Equivalent
表示如果某个请求意在修改 rules
中列出的资源,
即使该请求是通过其他 API 组或版本发起,也应拦截该请求。
在上面给出的示例中,仅为 apps/v1
注册的 Webhook 可以使用 matchPolicy
:
matchPolicy: Exact
表示不会将 extensions/v1beta1
请求发送到 Webhook
matchPolicy:Equivalent
表示将 extensions/v1beta1
请求发送到 Webhook
(将对象转换为 Webhook 指定的版本:apps/v1
)
建议指定 Equivalent
,确保升级后启用 API 服务器中资源的新版本时,
Webhook 继续拦截他们期望的资源。
当 API 服务器停止提供某资源时,该资源不再被视为等同于该资源的其他仍在提供服务的版本。
例如,extensions/v1beta1
中的 Deployment 已被废弃,计划在 v1.16 中移除。
移除后,带有 apiGroups:["extensions"], apiVersions:["v1beta1"], resources: ["deployments"]
规则的 Webhook 将不再拦截通过 apps/v1
API 来创建的 Deployment。
因此,Webhook 应该优先注册稳定版本的资源。
此示例显示了一个验证性质的 Webhook,该 Webhook 拦截对 Deployment 的修改(无论 API 组或版本是什么),
始终会发送一个 apps/v1
版本的 Deployment 对象:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
matchPolicy : Equivalent
rules :
- operations : ["CREATE" ,"UPDATE" ,"DELETE" ]
apiGroups : ["apps" ]
apiVersions : ["v1" ]
resources : ["deployments" ]
scope : "Namespaced"
准入 Webhook 所用的 matchPolicy
默认为 Equivalent
。
匹配请求:matchConditions
特性状态:
Kubernetes v1.30 [stable]
(enabled by default: true)
如果你需要细粒度地过滤请求,你可以为 Webhook 定义匹配条件 。
如果你发现匹配规则、objectSelectors
和 namespaceSelectors
仍然不能提供你想要的何时进行 HTTP
调用的过滤条件,那么添加这些条件会很有用。
匹配条件是 CEL 表达式 。
所有匹配条件都必须为 true 才能调用 Webhook。
以下是一个例子,说明了匹配条件的几种不同用法:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
matchPolicy : Equivalent
rules :
- operations : ['CREATE' ,'UPDATE' ]
apiGroups : ['*' ]
apiVersions : ['*' ]
resources : ['*' ]
failurePolicy : 'Ignore' # 失败时继续处理请求但跳过 Webhook (可选值)
sideEffects : None
clientConfig :
service :
namespace : my-namespace
name : my-webhook
caBundle : '<omitted>'
# 你可以为每个 Webhook 配置最多 64 个 matchConditions
matchConditions :
- name : 'exclude-leases' # 每个匹配条件必须有唯一的名称
expression : '!(request.resource.group == "coordination.k8s.io" && request.resource.resource == "leases")' # 匹配非租约资源
- name : 'exclude-kubelet-requests'
expression : '!("system:nodes" in request.userInfo.groups)' # 匹配非节点用户发出的请求
- name : 'rbac' # 跳过 RBAC 请求,该请求将由第二个 Webhook 处理
expression : 'request.resource.group != "rbac.authorization.k8s.io"'
# 这个示例演示了如何使用 “authorizer”。
# 授权检查比简单的表达式更复杂,因此在这个示例中,使用第二个 Webhook 来针对 RBAC 请求进行处理。
# 两个 Webhook 都可以由同一个端点提供服务。
- name : rbac.my-webhook.example.com
matchPolicy : Equivalent
rules :
- operations : ['CREATE' ,'UPDATE' ]
apiGroups : ['rbac.authorization.k8s.io' ]
apiVersions : ['*' ]
resources : ['*' ]
failurePolicy : 'Fail' # 失败时拒绝请求 (默认值)
sideEffects : None
clientConfig :
service :
namespace : my-namespace
name : my-webhook
caBundle : '<omitted>'
# 你可以为每个 Webhook 配置最多 64 个 matchConditions
matchConditions :
- name : 'breakglass'
# 跳过由授权给 “breakglass” 的用户在这个 Webhook 上发起的请求。
# “breakglass” API 不需要在这个检查之外存在。
expression : '!authorizer.group("admissionregistration.k8s.io").resource("validatingwebhookconfigurations").name("my-webhook.example.com").check("breakglass").allowed()'
说明:
你可以为每个 Webhook 在 matchConditions
字段中定义最多 64 个匹配条件。
匹配条件可以访问以下 CEL 变量:
object
- 来自传入请求的对象。对于 DELETE 请求,该值为 null。
该对象版本可能根据 matchPolicy 进行转换。
oldObject
- 现有对象。对于 CREATE 请求,该值为 null。
request
- AdmissionReview 的请求部分,不包括 object 和 oldObject。
authorizer
- 一个 CEL 鉴权组件。可用于对请求的主体(经过身份认证的用户)执行鉴权检查。
更多详细信息,请参阅 Kubernetes CEL 库文档中的
Authz 。
authorizer.requestResource
- 对配置的请求资源(组、资源、(子资源)、名字空间、名称)进行授权检查的快捷方式。
了解有关 CEL 表达式的更多信息,请参阅
Kubernetes 参考文档中的通用表达式语言 。
如果在对匹配条件求值时出现错误,则不会调用 Webhook。根据以下方式确定是否拒绝请求:
如果任何一个 匹配条件求值结果为 false
(不管其他错误),API 服务器将跳过 Webhook。
否则:
API 服务器确定请求应发送到 Webhook 后,它需要知道如何调用 Webhook。
此信息在 Webhook 配置的 clientConfig
节中指定。
Webhook 可以通过 URL 或服务引用来调用,并且可以选择包含自定义 CA 包,以用于验证 TLS 连接。
URL
url
以标准 URL 形式给出 Webhook 的位置(scheme://host:port/path
)。
host
不应引用集群中运行的服务;通过指定 service
字段来使用服务引用。
主机可以通过某些 API 服务器中的外部 DNS 进行解析。
(例如,kube-apiserver
无法解析集群内 DNS,因为这将违反分层规则)。host
也可以是 IP 地址。
请注意,将 localhost
或 127.0.0.1
用作 host
是有风险的,
除非你非常小心地在所有运行 apiserver 的、可能需要对此 Webhook
进行调用的主机上运行。这样的安装方式可能不具有可移植性,即很难在新集群中启用。
scheme 必须为 "https";URL 必须以 "https://" 开头。
使用用户或基本身份验证(例如:user:password@
)是不允许的。
使用片段(#...
)和查询参数(?...
)也是不允许的。
这是配置为调用 URL 的变更性质的 Webhook 的示例
(并且期望使用系统信任根证书来验证 TLS 证书,因此不指定 caBundle):
apiVersion : admissionregistration.k8s.io/v1
kind : MutatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
clientConfig :
url : "https://my-webhook.example.com:9443/my-webhook-path"
服务引用
clientConfig
内部的 Service 是对该 Webhook 服务的引用。
如果 Webhook 在集群中运行,则应使用 service
而不是 url
。
服务的 namespace
和 name
是必需的。
port
是可选的,默认值为 443。path
是可选的,默认为 "/"。
这是一个 mutating Webhook 的示例,该 mutating Webhook 配置为在子路径 "/my-path" 端口
"1234" 上调用服务,并使用自定义 CA 包针对 ServerName
my-service-name.my-service-namespace.svc
验证 TLS 连接:
apiVersion : admissionregistration.k8s.io/v1
kind : MutatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
clientConfig :
caBundle : <CA_BUNDLE>
service :
namespace : my-service-namespace
name : my-service-name
path : /my-path
port : 1234
说明:
你必须在以上示例中将 <CA_BUNDLE>
替换为一个有效的 VA 证书包,
这是一个用 PEM 编码的 CA 证书包,用于校验 Webhook 的服务器证书。
副作用
Webhook 通常仅对发送给他们的 AdmissionReview
内容进行操作。
但是,某些 Webhook 在处理 admission 请求时会进行带外更改。
进行带外更改的(产生“副作用”的)Webhook 必须具有协调机制(如控制器),
该机制定期确定事物的实际状态,并调整由准入 Webhook 修改的带外数据以反映现实情况。
这是因为对准入 Webhook 的调用不能保证所准入的对象将原样保留,或根本不保留。
以后,Webhook 可以修改对象的内容,在写入存储时可能会发生冲突,
或者服务器可以在持久保存对象之前关闭电源。
此外,处理 dryRun: true
admission 请求时,具有副作用的 Webhook 必须避免产生副作用。
一个 Webhook 必须明确指出在使用 dryRun
运行时不会有副作用,
否则 dry-run
请求将不会发送到该 Webhook,而 API 请求将会失败。
Webhook 使用 Webhook 配置中的 sideEffects
字段显示它们是否有副作用:
None
:调用 Webhook 没有副作用。
NoneOnDryRun
:调用 Webhook 可能会有副作用,但是如果将带有 dryRun: true
属性的请求发送到 Webhook,则 Webhook 将抑制副作用(该 Webhook 可识别 dryRun
)。
这是一个验证性质的 Webhook 的示例,表明它对 dryRun: true
请求没有副作用:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
sideEffects : NoneOnDryRun
超时
由于 Webhook 会增加 API 请求的延迟,因此应尽快完成自身的操作。
timeoutSeconds
用来配置在将调用视为失败之前,允许 API 服务器等待 Webhook 响应的时间长度。
如果超时在 Webhook 响应之前被触发,则基于失败策略 ,将忽略
Webhook 调用或拒绝 API 调用。
超时值必须设置在 1 到 30 秒之间。
这是一个自定义超时设置为 2 秒的 validating Webhook 的示例:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
timeoutSeconds : 2
准入 Webhook 所用的超时时间默认为 10 秒。
再调用策略
变更性质的准入插件(包括 Webhook)的任何一种排序方式都不会适用于所有情况。
(参见 https://issue.k8s.io/64333 示例)。
变更性质的 Webhook 可以向对象中添加新的子结构(例如向 pod
中添加 container
),
已经运行的其他修改插件可能会对这些新结构有影响
(就像在所有容器上设置 imagePullPolicy
一样)。
要允许变更性质的准入插件感应到其他插件所做的更改,
如果变更性质的 Webhook 修改了一个对象,则会重新运行内置的变更性质的准入插件,
并且变更性质的 Webhook 可以指定 reinvocationPolicy
来控制是否也重新调用它们。
可以将 reinvocationPolicy
设置为 Never
或 IfNeeded
。 默认为 Never
。
Never
: 在一次准入测试中,不得多次调用 Webhook。
IfNeeded
: 如果在最初的 Webhook 调用之后被其他对象的插件修改了被接纳的对象,
则可以作为准入测试的一部分再次调用该 Webhook。
要注意的重要因素有:
不能保证附加调用的次数恰好是一。
如果其他调用导致对该对象的进一步修改,则不能保证再次调用 Webhook。
使用此选项的 Webhook 可能会重新排序,以最大程度地减少额外调用的次数。
要在确保所有修改都完成后验证对象,请改用验证性质的 Webhook
(推荐用于有副作用的 Webhook)。
这是一个变更性质的 Webhook 的示例,该 Webhook 在以后的准入插件修改对象时被重新调用:
apiVersion : admissionregistration.k8s.io/v1
kind : MutatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
reinvocationPolicy : IfNeeded
变更性质的 Webhook 必须具有幂等性 ,
并且能够成功处理已被接纳并可能被修改的对象的变更性质的 Webhook。
对于所有变更性质的准入 Webhook 都是如此,
因为它们可以在对象中进行的任何更改可能已经存在于用户提供的对象中,但是对于选择重新调用的 Webhook
来说是必不可少的。
失败策略
failurePolicy
定义了如何处理准入 Webhook 中无法识别的错误和超时错误。允许的值为 Ignore
或 Fail
。
Ignore
表示调用 Webhook 的错误将被忽略并且允许 API 请求继续。
Fail
表示调用 Webhook 的错误导致准入失败并且 API 请求被拒绝。
这是一个变更性质的 Webhook,配置为在调用准入 Webhook 遇到错误时拒绝 API 请求:
apiVersion : admissionregistration.k8s.io/v1
kind : MutatingWebhookConfiguration
webhooks :
- name : my-webhook.example.com
failurePolicy : Fail
准入 Webhook 所用的默认 failurePolicy
是 Fail
。
监控 Admission Webhook
API 服务器提供了监视准入 Webhook 行为的方法。这些监视机制可帮助集群管理员回答以下问题:
哪个变更性质的 Webhook 改变了 API 请求中的对象?
变更性质的 Webhook 对对象做了哪些更改?
哪些 Webhook 经常拒绝 API 请求?是什么原因拒绝?
变更性质的 Webhook 审计注解
有时,了解 API 请求中的哪个变更性质的 Webhook 使对象改变以及该 Webhook 应用了哪些更改很有用。
Kubernetes API 服务器针对每个变更性质的 Webhook 调用执行审计 操作。
每个调用都会生成一个审计注解,记述请求对象是否发生改变,
可选地还可以根据 Webhook 的准入响应生成一个注解,记述所应用的修补。
针对给定请求的给定执行阶段,注解被添加到审计事件中,
然后根据特定策略进行预处理并写入后端。
事件的审计级别决定了要记录哪些注解:
在 Metadata
或更高审计级别上,将使用 JSON 负载记录带有键名
mutation.webhook.admission.k8s.io/round_{round idx}_index_{order idx}
的注解,
该注解表示针对给定请求调用了 Webhook,以及该 Webhook 是否更改了对象。
例如,对于正在被重新调用的某 Webhook,所记录的注解如下。
Webhook 在 mutating Webhook 链中排在第三个位置,并且在调用期间未改变请求对象。
# 审计事件相关记录
{
"kind": "Event" ,
"apiVersion": "audit.k8s.io/v1" ,
"annotations": {
"mutation.webhook.admission.k8s.io/round_1_index_2": "{\"configuration\":\"my-mutating-webhook-configuration.example.com\",\"webhook\":\"my-webhook.example.com\",\"mutated\": false }"
# 其他注解
...
}
# 其他字段
...
}
# 反序列化的注解值
{
"configuration": "my-mutating-webhook-configuration.example.com" ,
"webhook": "my-webhook.example.com" ,
"mutated": false
}
对于在第一轮中调用的 Webhook,所记录的注解如下。
Webhook 在变更性质的 Webhook 链中排在第一位,并在调用期间改变了请求对象。
# 审计事件相关记录
{
"kind": "Event" ,
"apiVersion": "audit.k8s.io/v1" ,
"annotations": {
"mutation.webhook.admission.k8s.io/round_0_index_0": "{\"configuration\":\"my-mutating-webhook-configuration.example.com\",\"webhook\":\"my-webhook-always-mutate.example.com\",\"mutated\": true }"
# 其他注解
...
}
# 其他字段
...
}
# 反序列化的注解值
{
"configuration": "my-mutating-webhook-configuration.example.com" ,
"webhook": "my-webhook-always-mutate.example.com" ,
"mutated": true
}
在 Request
或更高审计级别上,将使用 JSON 负载记录带有键名为
patch.webhook.admission.k8s.io/round_{round idx}_index_{order idx}
的注解,
该注解表明针对给定请求调用了 Webhook 以及应用于请求对象之上的修改。
例如,以下是针对正在被重新调用的某 Webhook 所记录的注解。
Webhook 在变更性质的 Webhook 链中排在第四,并在其响应中包含一个 JSON 补丁,
该补丁已被应用于请求对象。
# 审计事件相关记录
{
"kind": "Event" ,
"apiVersion": "audit.k8s.io/v1" ,
"annotations": {
"patch.webhook.admission.k8s.io/round_1_index_3": "{\"configuration\":\"my-other-mutating-webhook-configuration.example.com\",\"webhook\":\"my-webhook-always-mutate.example.com\",\"patch\":[{\"op\":\"add\",\"path\":\"/data/mutation-stage\",\"value\":\"yes\"}],\"patchType\":\"JSONPatch\"}"
# 其他注解
...
}
# 其他字段
...
}
# 反序列化的注解值
{
"configuration": "my-other-mutating-webhook-configuration.example.com" ,
"webhook": "my-webhook-always-mutate.example.com" ,
"patchType": "JSONPatch" ,
"patch": [
{
"op": "add" ,
"path": "/data/mutation-stage" ,
"value": "yes"
}
]
}
准入 Webhook 度量值
API 服务器从 /metrics
端点公开 Prometheus 指标,这些指标可用于监控和诊断 API 服务器状态。
以下指标记录了与准入 Webhook 相关的状态。
apiserver 准入 Webhook 拒绝次数
有时,了解哪些准入 Webhook 经常拒绝 API 请求以及拒绝的原因是很有用的。
在 v1.16+ 中,kube-apiserver 提供了 Prometheus 计数器度量值,记录
准入 Webhook 的拒绝次数。
度量值的标签给出了 Webhook 拒绝该请求的原因:
name
:拒绝请求 Webhook 的名称。
operation
:请求的操作类型可以是 CREATE
、UPDATE
、DELETE
和 CONNECT
其中之一。
type
:Admission Webhook 类型,可以是 admit
和 validating
其中之一。
error_type
:标识在 Webhook 调用期间是否发生了错误并且导致了拒绝。其值可以是以下之一:
calling_webhook_error
:发生了来自准入 Webhook 的无法识别的错误或超时错误,
并且 Webhook 的 失败策略 设置为 Fail
。
no_error
:未发生错误。Webhook 在准入响应中以 allowed: false
值拒绝了请求。
度量标签 rejection_code
记录了在准入响应中设置的 .status.code
。
apiserver_internal_error
:apiserver 发生内部错误。
rejection_code
:当 Webhook 拒绝请求时,在准入响应中设置的 HTTP 状态码。
拒绝计数指标示例:
# HELP apiserver_admission_webhook_rejection_count [ALPHA] Admission webhook rejection count, identified by name and broken out for each admission type (validating or admit) and operation. Additional labels specify an error type (calling_webhook_error or apiserver_internal_error if an error occurred; no_error otherwise) and optionally a non-zero rejection code if the webhook rejects the request with an HTTP status code (honored by the apiserver when the code is greater or equal to 400). Codes greater than 600 are truncated to 600, to keep the metrics cardinality bounded.
# TYPE apiserver_admission_webhook_rejection_count counter
apiserver_admission_webhook_rejection_count{error_type="calling_webhook_error",name="always-timeout-webhook.example.com",operation="CREATE",rejection_code="0",type="validating"} 1
apiserver_admission_webhook_rejection_count{error_type="calling_webhook_error",name="invalid-admission-response-webhook.example.com",operation="CREATE",rejection_code="0",type="validating"} 1
apiserver_admission_webhook_rejection_count{error_type="no_error",name="deny-unwanted-configmap-data.example.com",operation="CREATE",rejection_code="400",type="validating"} 13
最佳实践和警告
幂等性
幂等的变更性质的准入 Webhook 能够成功处理已经被它接纳甚或修改的对象。
即使多次执行该准入测试,也不会产生与初次执行结果相异的结果。
幂等 mutating admission Webhook 的示例:
对于 CREATE
Pod 请求,将 Pod 的字段 .spec.securityContext.runAsNonRoot
设置为 true,以实施安全最佳实践。
对于 CREATE
Pod 请求,如果未设置容器的字段
.spec.containers[].resources.limits
,设置默认资源限制值。
对于 CREATE
Pod 请求,如果 Pod 中不存在名为 foo-sidecar
的边车容器,
向 Pod 注入一个 foo-sidecar
容器。
在上述情况下,可以安全地重新调用 Webhook,或接受已经设置了字段的对象。
非幂等 mutating admission Webhook 的示例:
对于 CREATE
Pod 请求,注入名称为 foo-sidecar
并带有当前时间戳的边车容器(例如 foo-sidecar-19700101-000000
)。
对于 CREATE/UPDATE
Pod 请求,如果容器已设置标签 "env"
则拒绝,
否则将 "env": "prod"
标签添加到容器。
对于 CREATE
Pod 请求,盲目地添加一个名为 foo-sidecar
的边车容器,
而未查看 Pod 中是否已经有 foo-sidecar
容器。
在上述第一种情况下,重新调用该 Webhook 可能导致同一个边车容器多次注入到
Pod 中,而且每次使用不同的容器名称。
类似地,如果 Sidecar 已存在于用户提供的 Pod 中,则 Webhook 可能注入重复的容器。
在上述第二种情况下,重新调用 Webhook 将导致 Webhook 自身输出失败。
在上述第三种情况下,重新调用 Webhook 将导致 Pod 规约中的容器重复,
从而使请求无效并被 API 服务器拒绝。
拦截对象的所有版本
建议通过将 .webhooks[].matchPolicy
设置为 Equivalent
,
以确保准入 Webhooks 始终拦截对象的所有版本。
建议准入 Webhooks 应该更偏向注册资源的稳定版本。
如果无法拦截对象的所有版本,可能会导致准入策略未再某些版本的请求上执行。
有关示例,请参见匹配请求:matchPolicy 。
可用性
建议准入 Webhook 尽快完成执行(时长通常是毫秒级),因为它们会增加 API 请求的延迟。
建议对 Webhook 使用较小的超时值。有关更多详细信息,请参见超时 。
建议准入 Webhook 应该采用某种形式的负载均衡机制,以提供高可用性和高性能。
如果集群中正在运行 Webhook,则可以在服务后面运行多个 Webhook 后端,以利用该服务支持的负载均衡。
确保看到对象的最终状态
如果某准入 Webhook 需要保证自己能够看到对象的最终状态以实施策略,
则应该使用一个验证性质的 Webhook,
因为可以通过变更性质的 Webhook 看到对象后对其进行修改。
例如,一个变更性质的准入 Webhook 被配置为在每个 CREATE
Pod
请求中注入一个名称为 "foo-sidecar" 的边车容器。
如果必须 存在边车容器,则还应配置一个验证性质的准入 Webhook 以拦截
CREATE
Pod 请求,并验证要创建的对象中是否存在具有预期配置的名称为
"foo-sidecar" 的容器。
避免自托管的 Webhooks 中出现死锁
如果集群内的 Webhook 配置能够拦截启动其自己的 Pod 所需的资源,
则该 Webhook 可能导致其自身部署时发生死锁。
例如,某变更性质的准入 Webhook 配置为仅当 Pod 中设置了某个标签
(例如 "env": "prod"
)时,才接受 CREATE
Pod 请求。
Webhook 服务器在未设置 "env"
标签的 Deployment 中运行。当运行 Webhook 服务器的
容器的节点运行不正常时,Webhook 部署尝试将容器重新调度到另一个节点。
但是,由于未设置 "env"
标签,因此请求将被现有的 Webhook 服务器拒绝,并且调度迁移不会发生。
建议使用 namespaceSelector 排除
Webhook 所在的名字空间。
副作用
建议准入 Webhook 应尽可能避免副作用,这意味着该准入 Webhook 仅对发送给他们的
AdmissionReview
的内容起作用,并且不要进行额外更改。
如果 Webhook 没有任何副作用,则 .webhooks[].sideEffects
字段应设置为
None
。
如果在准入执行期间存在副作用,则应在处理 dryRun
为 true
的 AdmissionReview
对象时避免产生副作用,并且其 .webhooks[].sideEffects
字段应设置为
NoneOnDryRun
。更多详细信息,请参见副作用 。
避免对 kube-system 名字空间进行操作
kube-system
名字空间包含由 Kubernetes 系统创建的对象,
例如用于控制平面组件的服务账号,诸如 kube-dns
之类的 Pod 等。
意外更改或拒绝 kube-system
名字空间中的请求可能会导致控制平面组件停止运行或者导致未知行为发生。
如果你的准入 Webhook 不想修改 Kubernetes 控制平面的行为,请使用
namespaceSelector
避免拦截 kube-system
名字空间。
3.10 - 管理服务账号
ServiceAccount 为 Pod 中运行的进程提供了一个身份。
Pod 内的进程可以使用其关联服务账号的身份,向集群的 API 服务器进行身份认证。
有关服务账号的介绍,
请参阅配置服务账号 。
本任务指南阐述有关 ServiceAccount 的几个概念。
本指南还讲解如何获取或撤销代表 ServiceAccount 的令牌。
准备开始
你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。
建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。
如果你还没有集群,你可以通过 Minikube
构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
为了能够准确地跟随这些步骤,确保你有一个名为 examplens
的名字空间。
如果你没有,运行以下命令创建一个名字空间:
kubectl create namespace examplens
用户账号与服务账号
Kubernetes 区分用户账号和服务账号的概念,主要基于以下原因:
用户账号是针对人而言的。而服务账号是针对运行在 Pod 中的应用进程而言的,
在 Kubernetes 中这些进程运行在容器中,而容器是 Pod 的一部分。
用户账号是全局性的。其名称在某集群中的所有名字空间中必须是唯一的。
无论你查看哪个名字空间,代表用户的特定用户名都代表着同一个用户。
在 Kubernetes 中,服务账号是名字空间作用域的。
两个不同的名字空间可以包含具有相同名称的 ServiceAccount。
通常情况下,集群的用户账号可能会从企业数据库进行同步,
创建新用户需要特殊权限,并且涉及到复杂的业务流程。
服务账号创建有意做得更轻量,允许集群用户为了具体的任务按需创建服务账号。
将 ServiceAccount 的创建与新用户注册的步骤分离开来,
使工作负载更易于遵从权限最小化原则。
对人员和服务账号审计所考虑的因素可能不同;这种分离更容易区分不同之处。
针对复杂系统的配置包可能包含系统组件相关的各种服务账号的定义。
因为服务账号的创建约束不多并且有名字空间域的名称,所以这种配置通常是轻量的。
绑定的服务账号令牌
ServiceAccount 令牌可以被绑定到 kube-apiserver 中存在的 API 对象。
这可用于将令牌的有效性与另一个 API 对象的存在与否关联起来。
支持的对象类型如下:
Pod(用于投射卷的挂载,见下文)
Secret(可用于允许通过删除 Secret 来撤销令牌)
节点(在 v1.30 中,创建新的节点绑定令牌是 Alpha 特性,使用现有的节点绑定特性是 Beta 特性)
当将令牌绑定到某对象时,该对象的 metadata.name
和 metadata.uid
将作为额外的“私有声明”存储在所发布的 JWT 中。
当将被绑定的令牌提供给 kube-apiserver 时,服务帐户身份认证组件将提取并验证这些声明。
如果所引用的对象或 ServiceAccount 正处于删除中(例如,由于 finalizer 的原因),
那么在 .metadata.deletionTimestamp
时间戳之后的 60 秒(或更长时间)后的某一时刻,
使用该令牌进行身份认证将会失败。
如果所引用的对象不再存在(或其 metadata.uid
不匹配),则请求将无法通过认证。
特性状态:
Kubernetes v1.30 [beta]
(enabled by default: true)
当服务帐户令牌被绑定到某 Pod 对象时,一些额外的元数据也会被嵌入到令牌中,
包括所绑定 Pod 的 spec.nodeName
字段的值以及该节点的 uid(如果可用)。
当使用令牌进行身份认证时,kube-apiserver 不会 检查此节点信息的合法性。
由于节点信息被包含在令牌内,所以集成商在检查 JWT 时不必获取 Pod 或 Node API 对象来检查所关联的 Node 名称和 uid。
查验和检视私有声明
TokenReview
API 可用于校验并从令牌中提取私有声明:
首先,假设你有一个名为 test-pod
的 Pod 和一个名为 my-sa
的服务帐户。
创建绑定到此 Pod 的令牌:
kubectl create token my-sa --bound-object-kind= "Pod" --bound-object-name= "test-pod"
将此令牌复制到名为 tokenreview.yaml
的新文件中:
apiVersion : authentication.k8s.io/v1
kind : TokenReview
spec :
token : <来自第二步的令牌内容>
将此资源提交给 API 服务器进行审核:
kubectl create -o yaml -f tokenreview.yaml # 我们使用 '-o yaml' 以便检视命令输出
你应该看到如下所示的输出:
apiVersion : authentication.k8s.io/v1
kind : TokenReview
metadata :
creationTimestamp : null
spec :
token : <token>
status :
audiences :
- https://kubernetes.default.svc.cluster.local
authenticated : true
user :
extra :
authentication.kubernetes.io/credential-id :
- JTI=7ee52be0-9045-4653-aa5e-0da57b8dccdc
authentication.kubernetes.io/node-name :
- kind-control-plane
authentication.kubernetes.io/node-uid :
- 497e9d9a-47aa-4930-b0f6-9f2fb574c8c6
authentication.kubernetes.io/pod-name :
- test-pod
authentication.kubernetes.io/pod-uid :
- e87dbbd6-3d7e-45db-aafb-72b24627dff5
groups :
- system:serviceaccounts
- system:serviceaccounts:default
- system:authenticated
uid : f8b4161b-2e2b-11e9-86b7-2afc33b31a7e
username : system:serviceaccount:default:my-sa
说明:
尽管你使用了 kubectl create -f
来创建此资源,并与 Kubernetes
中的其他资源类型类似的方式定义它,但 TokenReview 是一种特殊类别,
kube-apiserver 实际上并不将 TokenReview 对象持久保存到 etcd 中。
因此 kubectl get tokenreview
不是一个有效的命令。
绑定的服务账号令牌卷机制
特性状态:
Kubernetes v1.22 [stable]
(enabled by default: true)
默认情况下,Kubernetes 控制平面(特别是 ServiceAccount 准入控制器 )
添加一个投射卷 到 Pod,
此卷包括了访问 Kubernetes API 的令牌。
以下示例演示如何查找已启动的 Pod:
...
- name : kube-api-access-<随机后缀>
projected :
sources :
- serviceAccountToken :
path : token # 必须与应用所预期的路径匹配
- configMap :
items :
- key : ca.crt
path : ca.crt
name : kube-root-ca.crt
- downwardAPI :
items :
- fieldRef :
apiVersion : v1
fieldPath : metadata.namespace
path : namespace
该清单片段定义了由三个数据源组成的投射卷。在当前场景中,每个数据源也代表该卷内的一条独立路径。这三个数据源是:
serviceAccountToken
数据源,包含 kubelet 从 kube-apiserver 获取的令牌。
kubelet 使用 TokenRequest API 获取有时间限制的令牌。为 TokenRequest 服务的这个令牌会在
Pod 被删除或定义的生命周期(默认为 1 小时)结束之后过期。该令牌绑定到特定的 Pod,
并将其 audience(受众)设置为与 kube-apiserver
的 audience 相匹配。
这种机制取代了之前基于 Secret 添加卷的机制,之前 Secret 代表了针对 Pod 的 ServiceAccount 但不会过期。
configMap
数据源。ConfigMap 包含一组证书颁发机构数据。
Pod 可以使用这些证书来确保自己连接到集群的 kube-apiserver(而不是连接到中间件或意外配置错误的对等点上)。
downwardAPI
数据源,用于查找包含 Pod 的名字空间的名称,
并使该名称信息可用于在 Pod 内运行的应用程序代码。
Pod 内挂载这个特定卷的所有容器都可以访问上述信息。
说明:
没有特定的机制可以使通过 TokenRequest 签发的令牌无效。
如果你不再信任为某个 Pod 绑定的服务账号令牌,
你可以删除该 Pod。删除 Pod 将使其绑定的服务账号令牌过期。
手动管理 ServiceAccount 的 Secret
v1.22 之前的 Kubernetes 版本会自动创建凭据访问 Kubernetes API。
这种更老的机制基于先创建令牌 Secret,然后将其挂载到正运行的 Pod 中。
在包括 Kubernetes v1.31 在内最近的几个版本中,使用
TokenRequest
API 直接获得 API 凭据,
并使用投射卷挂载到 Pod 中。使用这种方法获得的令牌具有绑定的生命周期,
当挂载的 Pod 被删除时这些令牌将自动失效。
你仍然可以手动创建
Secret 来保存服务账号令牌;例如在你需要一个永不过期的令牌的时候。
一旦你手动创建一个 Secret 并将其关联到 ServiceAccount,
Kubernetes 控制平面就会自动将令牌填充到该 Secret 中。
说明:
尽管存在手动创建长久 ServiceAccount 令牌的机制,但还是推荐使用
TokenRequest
获得短期的 API 访问令牌。
清理自动生成的传统 ServiceAccount 令牌
在 1.24 版本之前,Kubernetes 自动为 ServiceAccount 生成基于 Secret 的令牌。
为了区分自动生成的令牌和手动创建的令牌,Kubernetes 会检查 ServiceAccount 的
Secret 字段是否有引用。如果该 Secret 被 secrets
字段引用,
它被视为自动生成的传统令牌。否则,它被视为手动创建的传统令牌。例如:
apiVersion : v1
kind : ServiceAccount
metadata :
name : build-robot
namespace : default
secrets :
- name : build-robot-secret # 对于手动生成的令牌通常不会存在此字段
从 1.29 版本开始,如果传统 ServiceAccount
令牌在一定时间段(默认设置为一年)内未被使用,则会被标记为无效。
在定义的时间段(同样默认为一年)持续未被使用的令牌将由控制平面自动清除。
如果用户使用一个无效的自动生成的令牌,令牌验证器将执行以下操作:
为键值对 authentication.k8s.io/legacy-token-invalidated: <secret name>/<namespace>
添加审计注解,
invalid_legacy_auto_token_uses_total
指标计数加一,
更新 Secret 标签 kubernetes.io/legacy-token-last-used
为新日期,
返回一个提示令牌已经无效的报错。
当收到这个校验报错时,用户可以通过移除 kubernetes.io/legacy-token-invalid-since
标签更新 Secret,以临时允许使用此令牌。
以下是一个自动生成的传统令牌示例,它被标记了 kubernetes.io/legacy-token-last-used
和 kubernetes.io/legacy-token-invalid-since
标签:
apiVersion : v1
kind : Secret
metadata :
name : build-robot-secret
namespace : default
labels :
kubernetes.io/legacy-token-last-used : 2022-10-24
kubernetes.io/legacy-token-invalid-since : 2023-10-25
annotations :
kubernetes.io/service-account.name : build-robot
type : kubernetes.io/service-account-token
控制平面细节
ServiceAccount 控制器
ServiceAccount 控制器管理名字空间内的 ServiceAccount,
并确保每个活跃的名字空间中都存在名为 default
的 ServiceAccount。
令牌控制器
服务账号令牌控制器作为 kube-controller-manager
的一部分运行,以异步的形式工作。
其职责包括:
监测 ServiceAccount 的删除并删除所有相应的服务账号令牌 Secret。
监测服务账号令牌 Secret 的添加,保证相应的 ServiceAccount 存在,
如有需要,向 Secret 中添加令牌。
监测服务账号令牌 Secret 的删除,如有需要,从相应的 ServiceAccount 中移除引用。
你必须通过 --service-account-private-key-file
标志为
kube-controller-manager
的令牌控制器传入一个服务账号私钥文件。
该私钥用于为所生成的服务账号令牌签名。同样地,你需要通过
--service-account-key-file
标志将对应的公钥通知给
kube-apiserver。公钥用于在身份认证过程中校验令牌。
ServiceAccount 准入控制器
对 Pod 的改动通过一个被称为准入控制器 的插件来实现。
它是 API 服务器的一部分。当 Pod 被创建时,该准入控制器会同步地修改 Pod。
如果该插件处于激活状态(在大多数发行版中都是默认激活的),当 Pod 被创建时它会进行以下操作:
如果该 Pod 没有设置 .spec.serviceAccountName
,
准入控制器为新来的 Pod 将 ServiceAccount 的名称设为 default
。
准入控制器保证新来的 Pod 所引用的 ServiceAccount 确实存在。
如果没有 ServiceAccount 具有匹配的名称,则准入控制器拒绝新来的 Pod。
这个检查甚至适用于 default
ServiceAccount。
如果服务账号的 automountServiceAccountToken
字段或 Pod 的
automountServiceAccountToken
字段都未显式设置为 false
:
准入控制器变更新来的 Pod,添加一个包含 API
访问令牌的额外卷 。
准入控制器将 volumeMount
添加到 Pod 中的每个容器,
忽略已为 /var/run/secrets/kubernetes.io/serviceaccount
路径定义的卷挂载的所有容器。
对于 Linux 容器,此卷挂载在 /var/run/secrets/kubernetes.io/serviceaccount
;
在 Windows 节点上,此卷挂载在等价的路径上。
如果新来 Pod 的规约不包含任何 imagePullSecrets
,则准入控制器添加 imagePullSecrets
,
并从 ServiceAccount
进行复制。
传统 ServiceAccount 令牌追踪控制器
特性状态:
Kubernetes v1.28 [stable]
(enabled by default: true)
此控制器在 kube-system
命名空间中生成名为
kube-apiserver-legacy-service-account-token-tracking
的 ConfigMap。
这个 ConfigMap 记录了系统开始监视传统服务账号令牌的时间戳。
传统 ServiceAccount 令牌清理器
特性状态:
Kubernetes v1.30 [stable]
(enabled by default: true)
传统 ServiceAccount 令牌清理器作为 kube-controller-manager
的一部分运行,
每 24 小时检查一次,查看是否有任何自动生成的传统 ServiceAccount
令牌在特定时间段 内未被使用。如果有的话,清理器会将这些令牌标记为无效。
清理器的工作方式是首先检查控制平面创建的 ConfigMap(前提是启用了
LegacyServiceAccountTokenTracking
)。如果当前时间是 ConfigMap
所包含日期之后的特定时间段 ,清理器会遍历集群中的 Secret 列表,
并评估每个类型为 kubernetes.io/service-account-token
的 Secret。
如果一个 Secret 满足以下所有条件,清理器会将其标记为无效:
Secret 是自动生成的,意味着它被 ServiceAccount 双向引用。
Secret 当前没有被任何 Pod 挂载。
Secret 自从创建或上次使用以来的特定时间段 未被使用过。
清理器通过向 Secret 添加名为 kubernetes.io/legacy-token-invalid-since
的标签,
并将此值设置为当前日期,来标记 Secret 为无效。
如果一个无效的 Secret 在特定时间段 内未被使用,清理器将会删除它。
说明:
上述所有的特定时间段 都默认为一年。集群管理员可以通过 kube-controller-manager
组件的 --legacy-service-account-token-clean-up-period
命令行参数来配置此值。
TokenRequest API
特性状态:
Kubernetes v1.22 [stable]
你使用 ServiceAccount 的
TokenRequest
子资源为该 ServiceAccount 获取有时间限制的令牌。
你不需要调用它来获取在容器中使用的 API 令牌,
因为 kubelet 使用投射卷 对此进行了设置。
如果你想要从 kubectl
使用 TokenRequest API,
请参阅为 ServiceAccount 手动创建 API 令牌 。
Kubernetes 控制平面(特别是 ServiceAccount 准入控制器)向 Pod 添加了一个投射卷,
kubelet 确保该卷包含允许容器作为正确 ServiceAccount 进行身份认证的令牌。
(这种机制取代了之前基于 Secret 添加卷的机制,之前 Secret 代表了 Pod 所用的 ServiceAccount 但不会过期。)
以下示例演示如何查找已启动的 Pod:
...
- name : kube-api-access-<random-suffix>
projected :
defaultMode : 420 # 这个十进制数等同于八进制 0644
sources :
- serviceAccountToken :
expirationSeconds : 3607
path : token
- configMap :
items :
- key : ca.crt
path : ca.crt
name : kube-root-ca.crt
- downwardAPI :
items :
- fieldRef :
apiVersion : v1
fieldPath : metadata.namespace
path : namespace
该清单片段定义了由三个数据源信息组成的投射卷。
serviceAccountToken
数据源,包含 kubelet 从 kube-apiserver 获取的令牌。
kubelet 使用 TokenRequest API 获取有时间限制的令牌。为 TokenRequest 服务的这个令牌会在
Pod 被删除或定义的生命周期(默认为 1 小时)结束之后过期。在令牌过期之前,kubelet 还会刷新该令牌。
该令牌绑定到特定的 Pod,并将其 audience(受众)设置为与 kube-apiserver
的 audience 相匹配。
configMap
数据源。ConfigMap 包含一组证书颁发机构数据。
Pod 可以使用这些证书来确保自己连接到集群的 kube-apiserver(而不是连接到中间件或意外配置错误的对等点上)。
downwardAPI
数据源。这个 downwardAPI
卷获得包含 Pod 的名字空间的名称,
并使该名称信息可用于在 Pod 内运行的应用程序代码。
挂载此卷的 Pod 内的所有容器均可以访问上述信息。
创建额外的 API 令牌
注意:
只有令牌请求 机制不合适,才需要创建长久的 API 令牌。
令牌请求机制提供有时间限制的令牌;因为随着这些令牌过期,它们对信息安全方面的风险也会降低。
要为 ServiceAccount 创建一个不过期、持久化的 API 令牌,
请创建一个类型为 kubernetes.io/service-account-token
的 Secret,
附带引用 ServiceAccount 的注解。控制平面随后生成一个长久的令牌,
并使用生成的令牌数据更新该 Secret。
以下是此类 Secret 的示例清单:
apiVersion : v1
kind : Secret
type : kubernetes.io/service-account-token
metadata :
name : mysecretname
annotations :
kubernetes.io/service-account.name : myserviceaccount
若要基于此示例创建 Secret,运行以下命令:
kubectl -n examplens create -f https://k8s.io/examples/secret/serviceaccount/mysecretname.yaml
若要查看该 Secret 的详细信息,运行以下命令:
kubectl -n examplens describe secret mysecretname
输出类似于:
Name: mysecretname
Namespace: examplens
Labels: <none>
Annotations: kubernetes.io/service-account.name=myserviceaccount
kubernetes.io/service-account.uid=8a85c4c4-8483-11e9-bc42-526af7764f64
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1362 bytes
namespace: 9 bytes
token: ...
如果你在 examplens
名字空间中启动一个新的 Pod,它可以使用你刚刚创建的
myserviceaccount
service-account-token Secret。
删除/废止 ServiceAccount 令牌
如果你知道 Secret 的名称且该 Secret 包含要移除的令牌:
kubectl delete secret name-of-secret
否则,先找到 ServiceAccount 所用的 Secret。
# 此处假设你已有一个名为 'examplens' 的名字空间
kubectl -n examplens get serviceaccount/example-automated-thing -o yaml
输出类似于:
apiVersion : v1
kind : ServiceAccount
metadata :
annotations :
kubectl.kubernetes.io/last-applied-configuration : |
{"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"example-automated-thing","namespace":"examplens"}}
creationTimestamp : "2019-07-21T07:07:07Z"
name : example-automated-thing
namespace : examplens
resourceVersion : "777"
selfLink : /api/v1/namespaces/examplens/serviceaccounts/example-automated-thing
uid : f23fd170-66f2-4697-b049-e1e266b7f835
secrets :
- name : example-automated-thing-token-zyxwv
随后删除你现在知道名称的 Secret:
kubectl -n examplens delete secret/example-automated-thing-token-zyxwv
清理
如果创建了一个 examplens
名字空间进行试验,你可以移除它:
kubectl delete namespace examplens
接下来
3.11 - 证书和证书签名请求
特性状态:
Kubernetes v1.19 [stable]
Kubernetes 证书和信任包(trust bundle)API 可以通过为 Kubernetes API 的客户端提供编程接口,
实现 X.509 凭据的自动化制备,
从而请求并获取证书颁发机构(CA)发布的 X.509 证书 。
此外,Kubernetes 还对分发信任包 提供了实验性(Alpha)支持。
证书签名请求
特性状态:
Kubernetes v1.19 [stable]
CertificateSigningRequest
(CSR)资源用来向指定的签名者申请证书签名,
在最终签名之前,申请可能被批准,也可能被拒绝。
请求签名流程
CertificateSigningRequest 资源类型允许客户端基于签名请求申请发放 X.509 证书。
CertificateSigningRequest 对象在 spec.request
字段中包含一个 PEM 编码的 PKCS#10 签名请求。
CertificateSigningRequest 使用 spec.signerName
字段标示签名者(请求的接收方)。
注意,spec.signerName
在 certificates.k8s.io/v1
之后的 API 版本是必填项。
在 Kubernetes v1.22 和以后的版本,客户可以设置 spec.expirationSeconds
字段(可选)来为颁发的证书设定一个特定的有效期。该字段的最小有效值是 600
,也就是 10 分钟。
创建完成的 CertificateSigningRequest,要先通过批准,然后才能签名。
根据所选的签名者,CertificateSigningRequest
可能会被控制器 自动批准。
否则,就必须人工批准,
人工批准可以使用 REST API(或 client-go),也可以执行 kubectl certificate approve
命令。
同样,CertificateSigningRequest 也可能被驳回,
这就相当于通知了指定的签名者,这个证书不能签名。
对于已批准的证书,下一步是签名。
对应的签名控制器首先验证签名条件是否满足,然后才创建证书。
签名控制器然后更新 CertificateSigningRequest,
将新证书保存到现有 CertificateSigningRequest 对象的 status.certificate
字段中。
此时,字段 status.certificate
要么为空,要么包含一个用 PEM 编码的 X.509 证书。
直到签名完成前,CertificateSigningRequest 的字段 status.certificate
都为空。
一旦 status.certificate
字段完成填充,请求既算完成,
客户端现在可以从 CertificateSigningRequest 资源中获取已签名的证书的 PEM 数据。
当然如果不满足签名条件,签名者可以拒签。
为了减少集群中遗留的过时的 CertificateSigningRequest 资源的数量,
一个垃圾收集控制器将会周期性地运行。
此垃圾收集器会清除在一段时间内没有改变过状态的 CertificateSigningRequest:
已批准的请求:1 小时后自动删除
已拒绝的请求:1 小时后自动删除
已失败的请求:1 小时后自动删除
挂起的请求:24 小时后自动删除
所有请求:在颁发的证书过期后自动删除
证书签名鉴权
授权创建 CertificateSigningRequest 和检索 CertificateSigningRequest:
verbs(动词):create
、get
、list
、watch
,
group(组):certificates.k8s.io
,
resource(资源):certificatesigningrequests
例如:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : csr-creator
rules :
- apiGroups :
- certificates.k8s.io
resources :
- certificatesigningrequests
verbs :
- create
- get
- list
- watch
授权批准 CertificateSigningRequest:
verbs(动词):get
、list
、watch
,
group(组):certificates.k8s.io
,
resource(资源):certificatesigningrequests
verbs(动词):update
,
group(组):certificates.k8s.io
,
resource(资源):certificatesigningrequests/approval
verbs(动词):approve
,
group(组):certificates.k8s.io
,
resource(资源):signers
,
resourceName:<signerNameDomain>/<signerNamePath>
或 <signerNameDomain>/*
例如:
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : csr-approver
rules :
- apiGroups :
- certificates.k8s.io
resources :
- certificatesigningrequests
verbs :
- get
- list
- watch
- apiGroups :
- certificates.k8s.io
resources :
- certificatesigningrequests/approval
verbs :
- update
- apiGroups :
- certificates.k8s.io
resources :
- signers
resourceNames :
- example.com/my-signer-name # example.com/* 可用于为 “example.com” 域中的所有签名者授权
verbs :
- approve
授权签名 CertificateSigningRequest:
verbs(动词):get
、list
、watch
,
group(组):certificates.k8s.io
,
resource(资源):certificatesigningrequests
verbs(动词):update
,
group(组):certificates.k8s.io
,
resource(资源):certificatesigningrequests/status
verbs(动词):sign
,
group(组):certificates.k8s.io
,
resource(资源):signers
,
resourceName:<signerNameDomain>/<signerNamePath>
或 <signerNameDomain>/*
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRole
metadata :
name : csr-signer
rules :
- apiGroups :
- certificates.k8s.io
resources :
- certificatesigningrequests
verbs :
- get
- list
- watch
- apiGroups :
- certificates.k8s.io
resources :
- certificatesigningrequests/status
verbs :
- update
- apiGroups :
- certificates.k8s.io
resources :
- signers
resourceNames :
- example.com/my-signer-name # example.com/* 可用于为 “example.com” 域中的所有签名者授权
verbs :
- sign
签名者
签名者抽象地代表可能签署或已签署安全证书的一个或多个实体。
任何要在特定集群以外提供的签名者都应该提供关于签名者工作方式的信息,
以便消费者可以理解这对于 CertifcateSigningRequest 和(如果启用的)
ClusterTrustBundle 的意义。此类信息包括:
信任分发 :信任锚点(CA 证书或证书包)是如何分发的。
许可的主体 :当一个受限制的主体(subject)发送请求时,相应的限制和应对手段。
许可的 x509 扩展 :包括 IP subjectAltNames、DNS subjectAltNames、
Email subjectAltNames、URI subjectAltNames 等,请求一个受限制的扩展项时的应对手段。
许可的密钥用途/扩展的密钥用途 :当用途和签名者在 CSR 中指定的用途不同时,
相应的限制和应对手段。
过期时间/证书有效期 :过期时间由签名者确定、由管理员配置、还是由 CSR spec.expirationSeconds
字段指定等,
以及签名者决定的过期时间与 CSR spec.expirationSeconds
字段不同时的应对手段。
允许/不允许 CA 位 :当 CSR 包含一个签名者并不允许的 CA 证书的请求时,相应的应对手段。
一般来说,当 CSR 被批准通过,且证书被签名后,CertificateSigningRequest
的 status.certificate
字段将包含一个 PEM 编码的 X.509 证书。
有些签名者在 status.certificate
字段中存储多个证书。
在这种情况下,签名者的说明文档应当指明附加证书的含义。
例如,这是要在 TLS 握手时提供的证书和中继证书。
如果要让信任锚点 (根证书)可用,应该将其与 CertificateSigningRequest 及其 status.certificate
字段分开处理。例如,你可以使用 ClusterTrustBundle。
PKCS#10 签名请求格式并没有一种标准的方法去设置证书的过期时间或者生命期,
因此,证书的过期时间或者生命期必须通过 CSR 对象的 spec.expirationSeconds
字段来设置。
当 spec.expirationSeconds
没有被指定时,内置的签名者默认使用 ClusterSigningDuration
配置选项
(kube-controller-manager 的命令行选项 --cluster-signing-duration
),该选项的默认值设为 1 年。
当 spec.expirationSeconds
被指定时,spec.expirationSeconds
和 ClusterSigningDuration
中的最小值会被使用。
说明:
spec.expirationSeconds
字段是在 Kubernetes v1.22 中加入的。早期的 Kubernetes 版本并不认识该字段。
v1.22 版本之前的 Kubernetes API 服务器会在创建对象的时候忽略该字段。
Kubernetes 签名者
Kubernetes 提供了内置的签名者,每个签名者都有一个众所周知的 signerName
:
kubernetes.io/kube-apiserver-client
:签名的证书将被 API 服务器视为客户端证书,
kube-controller-manager 不会自动批准它。
信任分发:签名的证书将被 API 服务器视为客户端证书,CA 证书包不通过任何其他方式分发。
许可的主体:没有主体限制,但审核人和签名者可以选择不批准或不签署。
某些主体,比如集群管理员级别的用户或组因部署和安装方式不同而不同,
所以批准和签署之前需要进行额外仔细审查。
用来限制 system:masters
的 CertificateSubjectRestriction 准入插件默认处于启用状态,
但它通常不是集群中唯一的集群管理员主体。
许可的 x509 扩展:允许 subjectAltName 和 key usage 扩展,弃用其他扩展。
许可的密钥用途:必须包含 ["client auth"]
,但不能包含
["digital signature", "key encipherment", "client auth"]
之外的键。
过期时间/证书有效期:对于 kube-controller-manager 实现的签名者,
设置为 --cluster-signing-duration
选项和 CSR 对象的 spec.expirationSeconds
字段(如有设置该字段)中的最小值。
允许/不允许 CA 位:不允许。
kubernetes.io/kube-apiserver-client-kubelet
:签名的证书将被 kube-apiserver 视为客户端证书。
kube-controller-manager 可以自动批准它。
信任分发:签名的证书将被 API 服务器视为客户端证书,CA 证书包不通过任何其他方式分发。
许可的主体:组织名必须是 ["system:nodes"]
,通用名称为 "system:node:${NODE_NAME}
" 开头
许可的 x509 扩展:允许 key usage 扩展,禁用 subjectAltName 扩展,并删除其他扩展。
许可的密钥用途:["key encipherment", "digital signature", "client auth"]
或 ["digital signature", "client auth"]
。
过期时间/证书有效期:对于 kube-controller-manager 实现的签名者,
设置为 --cluster-signing-duration
选项和 CSR 对象的 spec.expirationSeconds
字段(如有设置该字段)中的最小值。
允许/不允许 CA 位:不允许。
kubernetes.io/kubelet-serving
:签名服务端证书,该服务证书被 API 服务器视为有效的 kubelet 服务端证书,
但没有其他保证。kube-controller-manager 不会自动批准它。
信任分发:签名的证书必须被 kube-apiserver 认可,可有效的中止 kubelet 连接,CA 证书包不通过任何其他方式分发。
许可的主体:组织名必须是 ["system:nodes"]
,通用名称为 "system:node:${NODE_NAME}
" 开头
许可的 x509 扩展:允许 key usage、DNSName/IPAddress subjectAltName 等扩展,
禁止 EmailAddress、URI subjectAltName 等扩展,并丢弃其他扩展。
至少有一个 DNS 或 IP 的 SubjectAltName 存在。
许可的密钥用途:["key encipherment", "digital signature", "server auth"]
或 ["digital signature", "server auth"]
。
过期时间/证书有效期:对于 kube-controller-manager 实现的签名者,
设置为 --cluster-signing-duration
选项和 CSR 对象的 spec.expirationSeconds
字段(如有设置该字段)中的最小值。
允许/不允许 CA 位:不允许。
kubernetes.io/legacy-unknown
:不保证信任。Kubernetes 的一些第三方发行版可能会使用它签署的客户端证书。
稳定版的 CertificateSigningRequest API(certificates.k8s.io/v1
以及之后的版本)不允许将
signerName
设置为 kubernetes.io/legacy-unknown
。
kube-controller-manager 不会自动批准这类请求。
信任分发:没有。这个签名者在 Kubernetes 集群中没有标准的信任或分发。
许可的主体:全部。
许可的 x509 扩展:允许 subjectAltName 和 key usage 等扩展,并弃用其他扩展。
许可的密钥用途:全部。
过期时间/证书有效期:对于 kube-controller-manager 实现的签名者,
设置为 --cluster-signing-duration
选项和 CSR 对象的 spec.expirationSeconds
字段(如有设置该字段)中的最小值。
允许/不允许 CA 位 - 不允许。
kube-controller-manager 为每个内置签名者实现了控制平面签名 。
注意:所有这些故障仅在 kube-controller-manager 日志中报告。
说明:
spec.expirationSeconds
字段是在 Kubernetes v1.22 中加入的,早期的 Kubernetes 版本并不认识该字段,
v1.22 版本之前的 Kubernetes API 服务器会在创建对象的时候忽略该字段。
对于这些签名者,信任的分发发生在带外(out of band)。上述信任之外的任何信任都是完全巧合的。
例如,一些发行版可能会将 kubernetes.io/legacy-unknown
作为 kube-apiserver 的客户端证书,
但这个做法并不标准。
这些用途都没有以任何方式涉及到 ServiceAccount 中的 Secrets .data[ca.crt]
。
此 CA 证书包只保证使用默认的服务(kubernetes.default.svc
)来验证到 API 服务器的连接。
签名
控制平面签名者
Kubernetes 控制平面实现了每一个
Kubernetes 签名者 ,
每个签名者的实现都是 kube-controller-manager 的一部分。
说明:
在 Kubernetes v1.18 之前,
kube-controller-manager 签名所有标记为 approved 的 CSR。
说明:
spec.expirationSeconds
字段是在 Kubernetes v1.22 中加入的,早期的 Kubernetes 版本并不认识该字段,
v1.22 版本之前的 Kubernetes API 服务器会在创建对象的时候忽略该字段。
基于 API 的签名者
REST API 的用户可以通过向待签名的 CSR 的 status
子资源提交更新请求来对 CSR 进行签名。
作为这个请求的一部分,status.certificate
字段应设置为已签名的证书。
此字段可包含一个或多个 PEM 编码的证书。
所有的 PEM 块必须具备 "CERTIFICATE" 标签,且不包含文件头,且编码的数据必须是
RFC5280 第 4 节
中描述的 BER 编码的 ASN.1 证书结构。
证书内容示例:
-----BEGIN CERTIFICATE-----
MIIDgjCCAmqgAwIBAgIUC1N1EJ4Qnsd322BhDPRwmg3b/oAwDQYJKoZIhvcNAQEL
BQAwXDELMAkGA1UEBhMCeHgxCjAIBgNVBAgMAXgxCjAIBgNVBAcMAXgxCjAIBgNV
BAoMAXgxCjAIBgNVBAsMAXgxCzAJBgNVBAMMAmNhMRAwDgYJKoZIhvcNAQkBFgF4
MB4XDTIwMDcwNjIyMDcwMFoXDTI1MDcwNTIyMDcwMFowNzEVMBMGA1UEChMMc3lz
dGVtOm5vZGVzMR4wHAYDVQQDExVzeXN0ZW06bm9kZToxMjcuMC4wLjEwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDne5X2eQ1JcLZkKvhzCR4Hxl9+ZmU3
+e1zfOywLdoQxrPi+o4hVsUH3q0y52BMa7u1yehHDRSaq9u62cmi5ekgXhXHzGmm
kmW5n0itRECv3SFsSm2DSghRKf0mm6iTYHWDHzUXKdm9lPPWoSOxoR5oqOsm3JEh
Q7Et13wrvTJqBMJo1GTwQuF+HYOku0NF/DLqbZIcpI08yQKyrBgYz2uO51/oNp8a
sTCsV4OUfyHhx2BBLUo4g4SptHFySTBwlpRWBnSjZPOhmN74JcpTLB4J5f4iEeA7
2QytZfADckG4wVkhH3C2EJUmRtFIBVirwDn39GXkSGlnvnMgF3uLZ6zNAgMBAAGj
YTBfMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMB
Af8EAjAAMB0GA1UdDgQWBBTREl2hW54lkQBDeVCcd2f2VSlB1DALBgNVHREEBDAC
ggAwDQYJKoZIhvcNAQELBQADggEBABpZjuIKTq8pCaX8dMEGPWtAykgLsTcD2jYr
L0/TCrqmuaaliUa42jQTt2OVsVP/L8ofFunj/KjpQU0bvKJPLMRKtmxbhXuQCQi1
qCRkp8o93mHvEz3mTUN+D1cfQ2fpsBENLnpS0F4G/JyY2Vrh19/X8+mImMEK5eOy
o0BMby7byUj98WmcUvNCiXbC6F45QTmkwEhMqWns0JZQY+/XeDhEcg+lJvz9Eyo2
aGgPsye1o3DpyXnyfJWAWMhOz7cikS5X2adesbgI86PhEHBXPIJ1v13ZdfCExmdd
M1fLPhLyR54fGaY+7/X8P9AZzPefAkwizeXwe9ii6/a08vWoiE4=
-----END CERTIFICATE-----
非 PEM 内容可能会出现在证书 PEM 块前后的位置,且未经验证,
以允许使用 RFC7468 第 5.2 节 中描述的解释性文本。
当使用 JSON 或 YAML 格式时,此字段是 base-64 编码。
包含上述示例证书的 CertificateSigningRequest 如下所示:
apiVersion : certificates.k8s.io/v1
kind : CertificateSigningRequest
...
status :
certificate : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JS..."
批准和驳回
签名者 基于 CertificateSigningRequest 签发证书之前,
通常会检查 CSR 的签发是否已被批准 。
控制平面的自动化批准
kube-controller-manager 内建了一个证书批准者,其 signerName 为
kubernetes.io/kube-apiserver-client-kubelet
,
该批准者将 CSR 上用于节点凭据的各种权限委托给权威认证机构。
kube-controller-manager 将 SubjectAccessReview 资源发送(POST)到 API 服务器,
以便检验批准证书的授权。
使用 kubectl
批准或驳回
Kubernetes 管理员(拥有足够的权限)可以手工批准(或驳回)CertificateSigningRequest,
此操作使用 kubectl certificate approve
和 kubectl certificate deny
命令实现。
使用 kubectl 批准一个 CSR:
kubectl certificate approve <certificate-signing-request-name>
同样地,驳回一个 CSR:
kubectl certificate deny <certificate-signing-request-name>
使用 Kubernetes API 批准或驳回
REST API 的用户可以通过向待批准的 CSR 的 approval
子资源提交更新请求来批准 CSR。
例如,你可以编写一个
operator
来监视特定类型的 CSR,然后发送一个更新来批准它。
当你发出批准或驳回的指令时,根据你期望的状态来选择设置 Approved
或 Denied
。
批准(Approved
)的 CSR:
apiVersion : certificates.k8s.io/v1
kind : CertificateSigningRequest
...
status :
conditions :
- lastUpdateTime : "2020-02-08T11:37:35Z"
lastTransitionTime : "2020-02-08T11:37:35Z"
message : Approved by my custom approver controller
reason : ApprovedByMyPolicy # 你可以将此字段设置为任意字符串
type : Approved
驳回(Denied
)的 CSR:
apiVersion : certificates.k8s.io/v1
kind : CertificateSigningRequest
...
status :
conditions :
- lastUpdateTime : "2020-02-08T11:37:35Z"
lastTransitionTime : "2020-02-08T11:37:35Z"
message : Denied by my custom approver controller
reason : DeniedByMyPolicy # 你可以将此字段设置为任意字符串
type : Denied
status.conditions.reason
字段通常设置为一个首字母大写的对机器友好的原因码;
这是一个命名约定,但你也可以随你的个人喜好设置。
如果你想添加一个供人类使用的注释,那就用 status.conditions.message
字段。
集群信任包
特性状态:
Kubernetes v1.27 [alpha]
说明:
在 Kubernetes 1.31 中,如果想要使用此 API,
必须同时启用 ClusterTrustBundle
特性门控
以及 certificates.k8s.io/v1alpha1
API 组 。
ClusterTrustBundle 是一个作用域为集群的对象,向集群内的对象分发 X.509 信任锚点(根证书)。
此对象旨在与 CertificateSigningRequest 中的签名者 概念协同工作。
ClusterTrustBundle 可以使用两种模式:
签名者关联 和签名者未关联 。
常见属性和验证
所有 ClusterTrustBundle 对象都对其 trustBundle
字段的内容进行强大的验证。
该字段必须包含一个或多个经 DER 序列化的 X.509 证书,每个证书都封装在 PEM CERTIFICATE
块中,
这些证书必须解析为有效的 X.509 证书。
诸如块间数据和块内标头之类的 PEM 特性在对象验证期间要么被拒绝,要么可能被对象的消费者忽略。
此外,消费者被允许使用自己的任意但稳定的排序方式重新排序 bundle 中的证书。
ClusterTrustBundle 对象应该在集群内被视为全局可读的。
如果集群使用 RBAC 鉴权,
则所有 ServiceAccount 都具有默认授权,允许它们 get 、list 和 watch
所有 ClusterTrustBundle 对象。如果你使用自己的鉴权机制,并且在集群中启用了
ClusterTrustBundle,则应设置等效规则以使这些对象在集群内公开,使这些对象按预期工作。
如果你没有默认在集群中列出集群信任包的权限,则可以扮演具有访问权限的 ServiceAccount,
以查看可用的 ClusterTrustBundle:
kubectl get clustertrustbundles --as= 'system:serviceaccount:mynamespace:default'
签名者关联的 ClusterTrustBundle
签名者关联的 ClusterTrustBundle 与签名者名称 关联,例如:
apiVersion : certificates.k8s.io/v1alpha1
kind : ClusterTrustBundle
metadata :
name : example.com:mysigner:foo
spec :
signerName : example.com/mysigner
trustBundle : "<... PEM data ...>"
这些 ClusterTrustBundle 预期由集群中的特定签名者控制器维护,因此它们具有多个安全特性:
要创建或更新与一个签名者关联的 ClusterTrustBundle,你必须获准证明 该签名者
(自定义鉴权动词 attest
API 组 certificates.k8s.io
;资源路径 signers
)。
你可以为特定资源名称 <signerNameDomain>/<signerNamePath>
或匹配 <signerNameDomain>/*
等模式来配置鉴权。
与签名者关联的 ClusterTrustBundle 必须 使用从其 spec.signerName
字段派生的前缀命名。
斜杠(/
)被替换为英文冒号(:
),最后追加一个英文冒号,后跟任意名称。
例如,签名者 example.com/mysigner
可以关联到 ClusterTrustBundle example.com:mysigner:<arbitrary-name>
。
与签名者关联的 ClusterTrustBundle 通常通过组合签名者名称有关的
字段选择算符
或单独使用标签选择算符 在工作负载中被消耗。
签名者未关联的 ClusterTrustBundle
签名者未关联的 ClusterTrustBundle 具有空白的 spec.signerName
字段,例如:
apiVersion : certificates.k8s.io/v1alpha1
kind : ClusterTrustBundle
metadata :
name : foo
spec :
# 未指定 signerName 所以该字段留空
trustBundle : "<... PEM data ...>"
它们主要用于集群配置场景。每个与签名者未关联的 ClusterTrustBundle 都是一个独立的对象,
与签名者关联的 ClusterTrustBundle 的惯常分组行为形成了对比。
与签名者为关联的 ClusterTrustBundle 没有 attest
动词要求。
相反,你可以使用通常的机制(如基于角色的访问控制)直接控制对它们的访问。
为了将它们与与签名者关联的 ClusterTrustBundle 区分开来,与签名者未关联的
ClusterTrustBundle 的名称必须不 包含英文冒号(:
)。
从 Pod 访问 ClusterTrustBundle
特性状态:
Kubernetes v1.29 [alpha]
ClusterTrustBundle 的内容可以注入到容器文件系统,这与 ConfigMap 和 Secret 类似。
更多细节参阅 ClusterTrustBundle 投射卷源 。
如何为用户签发证书
为了让普通用户能够通过认证并调用 API,需要执行几个步骤。
首先,该用户必须拥有 Kubernetes 集群签发的证书,
然后将该证书提供给 Kubernetes API。
创建私钥
下面的脚本展示了如何生成 PKI 私钥和 CSR。
设置 CSR 的 CN 和 O 属性很重要。CN 是用户名,O 是该用户归属的组。
你可以参考 RBAC 了解标准组的信息。
openssl genrsa -out myuser.key 2048
openssl req -new -key myuser.key -out myuser.csr -subj "/CN=myuser"
创建 CertificateSigningRequest
创建一个 CertificateSigningRequest ,
并通过 kubectl 将其提交到 Kubernetes 集群。
下面是生成 CertificateSigningRequest 的脚本。
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: myuser
spec:
request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZqQ0NBVDRDQVFBd0VURVBNQTBHQTFVRUF3d0dZVzVuWld4aE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQTByczhJTHRHdTYxakx2dHhWTTJSVlRWMDNHWlJTWWw0dWluVWo4RElaWjBOCnR2MUZtRVFSd3VoaUZsOFEzcWl0Qm0wMUFSMkNJVXBGd2ZzSjZ4MXF3ckJzVkhZbGlBNVhwRVpZM3ExcGswSDQKM3Z3aGJlK1o2MVNrVHF5SVBYUUwrTWM5T1Nsbm0xb0R2N0NtSkZNMUlMRVI3QTVGZnZKOEdFRjJ6dHBoaUlFMwpub1dtdHNZb3JuT2wzc2lHQ2ZGZzR4Zmd4eW8ybmlneFNVekl1bXNnVm9PM2ttT0x1RVF6cXpkakJ3TFJXbWlECklmMXBMWnoyalVnald4UkhCM1gyWnVVV1d1T09PZnpXM01LaE8ybHEvZi9DdS8wYk83c0x0MCt3U2ZMSU91TFcKcW90blZtRmxMMytqTy82WDNDKzBERHk5aUtwbXJjVDBnWGZLemE1dHJRSURBUUFCb0FBd0RRWUpLb1pJaHZjTgpBUUVMQlFBRGdnRUJBR05WdmVIOGR4ZzNvK21VeVRkbmFjVmQ1N24zSkExdnZEU1JWREkyQTZ1eXN3ZFp1L1BVCkkwZXpZWFV0RVNnSk1IRmQycVVNMjNuNVJsSXJ3R0xuUXFISUh5VStWWHhsdnZsRnpNOVpEWllSTmU3QlJvYXgKQVlEdUI5STZXT3FYbkFvczFqRmxNUG5NbFpqdU5kSGxpT1BjTU1oNndLaTZzZFhpVStHYTJ2RUVLY01jSVUyRgpvU2djUWdMYTk0aEpacGk3ZnNMdm1OQUxoT045UHdNMGM1dVJVejV4T0dGMUtCbWRSeEgvbUNOS2JKYjFRQm1HCkkwYitEUEdaTktXTU0xMzhIQXdoV0tkNjVoVHdYOWl4V3ZHMkh4TG1WQzg0L1BHT0tWQW9FNkpsYWFHdTlQVmkKdjlOSjVaZlZrcXdCd0hKbzZXdk9xVlA3SVFjZmg3d0drWm89Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo=
signerName: kubernetes.io/kube-apiserver-client
expirationSeconds: 86400 # one day
usages:
- client auth
EOF
需要注意的几点:
usage
字段必须是 'client auth
'
expirationSeconds
可以设置为更长(例如 864000
是十天)或者更短(例如 3600
是一个小时)
request
字段是 CSR 文件内容的 base64 编码值,
要得到该值,可以执行命令:
cat myuser.csr | base64 | tr -d "\n"
批准 CertificateSigningRequest
使用 kubectl 创建 CSR 并批准。
获取 CSR 列表:
批准 CSR:
kubectl certificate approve myuser
取得证书
从 CSR 取得证书:
kubectl get csr/myuser -o yaml
证书的内容使用 base64 编码,存放在字段 status.certificate
。
从 CertificateSigningRequest 导出颁发的证书:
kubectl get csr myuser -o jsonpath = '{.status.certificate}' | base64 -d > myuser.crt
创建角色和角色绑定
创建了证书之后,为了让这个用户能访问 Kubernetes 集群资源,现在就要创建
Role 和 RoleBinding 了。
下面是为这个新用户创建 Role 的示例命令:
kubectl create role developer --verb= create --verb= get --verb= list --verb= update --verb= delete --resource= pods
下面是为这个新用户创建 RoleBinding 的示例命令:
kubectl create rolebinding developer-binding-myuser --role= developer --user= myuser
添加到 kubeconfig
最后一步是将这个用户添加到 kubeconfig 文件。
首先,你需要添加新的凭据:
kubectl config set-credentials myuser --client-key= myuser.key --client-certificate= myuser.crt --embed-certs= true
然后,你需要添加上下文:
kubectl config set-context myuser --cluster= kubernetes --user= myuser
来测试一下,把上下文切换为 myuser
:
kubectl config use-context myuser
接下来
参阅管理集群中的 TLS 认证
查看 kube-controller-manager 中签名者 部分的源代码
查看 kube-controller-manager 中批准者 部分的源代码
有关 X.509 本身的详细信息,请参阅 RFC 5280 第 3.1 节
有关 PKCS#10 证书签名请求语法的信息,请参阅 RFC 2986
阅读 ClusterTrustBundle 相关内容:
3.12 - 从 PodSecurityPolicy 映射到 Pod 安全性标准
下面的表格列举了 PodSecurityPolicy
对象上的配置参数,这些字段是否会变更或检查 Pod 配置,以及这些配置值如何映射到
Pod 安全性标准(Pod Security Standards)
之上。
对于每个可应用的参数,表格中给出了
Baseline 和
Restricted
配置下可接受的取值。
对这两种配置而言不可接受的取值均归入
Privileged
配置下。“无意见”意味着对所有 Pod 安全性标准而言所有取值都可接受。
如果想要了解如何一步步完成迁移,可参阅从 PodSecurityPolicy 迁移到内置的 PodSecurity 准入控制器 。
PodSecurityPolicy 规约
下面表格中所列举的字段是 PodSecurityPolicySpec
的一部分,是通过 .spec
字段路径来设置的。
从 PodSecurityPolicySpec 字段映射到 Pod Security 标准
PodSecurityPolicySpec
类型
Pod 安全性标准中对应设置
privileged
检查性质
Baseline & Restricted : false
/ 未定义 / nil
defaultAddCapabilities
更改性质 & 检查性质
需求满足下面的 allallowedCapabilities
allowedCapabilities
检查性质
Baseline :下面各项的子集
AUDIT_WRITE
CHOWN
DAC_OVERRIDE
FOWNER
FSETID
KILL
MKNOD
NET_BIND_SERVICE
SETFCAP
SETGID
SETPCAP
SETUID
SYS_CHROOT
Restricted :空 / 未定义 / nil 或仅 包含 NET_BIND_SERVICE
的列表
requiredDropCapabilities
更改性质 & 检查性质
Baseline :无意见
Restricted :必须包含 ALL
volumes
检查性质
Baseline 除下列取值之外的任何值
Restricted :下列取值的子集
configMap
csi
downwardAPI
emptyDir
ephemeral
persistentVolumeClaim
projected
secret
hostNetwork
检查性质
Baseline & Restricted :false
/ 未定义 / nil
hostPorts
检查性质
Baseline & Restricted :未定义 / nil / 空
hostPID
检查性质
Baseline & Restricted :false
/ 未定义 / nil
hostIPC
检查性质
Baseline & Restricted :false
/ 未定义 / nil
seLinux
更改性质 & 检查性质
Baseline & Restricted :
seLinux.rule
为 MustRunAs
,且 options
如下:
user
未设置(""
/ 未定义 / nil)
role
未设置(""
/ 未定义 / nil)
type
未设置或者取值为 container_t
、container_init_t
、container_kvm_t
或 container_engine_t
之一
level
是任何取值
runAsUser
变更性质 & 检查性质
Baseline :任何取值
Restricted :rule
是 MustRunAsNonRoot
runAsGroup
变更性质(MustRunAs)& 检查性质
无意见
supplementalGroups
变更性质 & 检查性质
无意见
fsGroup
变更性质 & 验证性质
无意见
readOnlyRootFilesystem
变更性质 & 检查性质
无意见
defaultAllowPrivilegeEscalation
变更性质
无意见(非变更性质)
allowPrivilegeEscalation
变更性质 & 检查性质
只有设置为 false
时才执行变更动作
Baseline :无意见
Restricted :false
allowedHostPaths
检查性质
无意见(volumes 优先)
allowedFlexVolumes
检查性质
无意见(volumes 优先)
allowedCSIDrivers
检查性质
无意见(volumes 优先)
allowedUnsafeSysctls
检查性质
Baseline & Restricted :未定义 / nil / 空
forbiddenSysctls
检查性质
无意见
allowedProcMountTypes
(alpha feature)
检查性质
Baseline & Restricted :["Default"]
或者未定义 / nil / 空
runtimeClass
.defaultRuntimeClassName
变更性质
无意见
runtimeClass
.allowedRuntimeClassNames
检查性质
无意见
PodSecurityPolicy 注解
下面表格中所列举的注解 可以通过
.metadata.annotations
设置到 PodSecurityPolicy 对象之上。
将 PodSecurityPolicy 注解映射到 Pod 安全性标准
PSP 注解
类型
Pod 安全性标准中对应设置
seccomp.security.alpha.kubernetes.io
/defaultProfileName
变更性质
无意见
seccomp.security.alpha.kubernetes.io
/allowedProfileNames
检查性质
Baseline :"runtime/default,"
(其中尾部的逗号允许取消设置)
Restricted :"runtime/default"
(没有尾部逗号)
localhost/*
取值对于 Baseline 和 Restricted 都是可接受的
apparmor.security.beta.kubernetes.io
/defaultProfileName
变更性质
无意见
apparmor.security.beta.kubernetes.io
/allowedProfileNames
检查性质
Baseline :"runtime/default,"
(其中尾部的逗号允许取消设置)
Restricted :"runtime/default"
(没有尾部逗号)
localhost/*
取值对于 Baseline 和 Restricted 都是可接受的
3.13 - Kubelet 认证/鉴权
概述
kubelet 的 HTTPS 端点公开了 API,
这些 API 可以访问敏感度不同的数据,
并允许你在节点上和容器内以不同级别的权限执行操作。
本文档介绍了如何对 kubelet 的 HTTPS 端点的访问进行认证和鉴权。
Kubelet 身份认证
默认情况下,未被已配置的其他身份认证方法拒绝的对 kubelet 的 HTTPS 端点的请求会被视为匿名请求,
并被赋予 system:anonymous
用户名和 system:unauthenticated
组。
要禁用匿名访问并向未经身份认证的请求发送 401 Unauthorized
响应,请执行以下操作:
带 --anonymous-auth=false
标志启动 kubelet
要对 kubelet 的 HTTPS 端点启用 X509 客户端证书认证:
带 --client-ca-file
标志启动 kubelet,提供一个 CA 证书包以供验证客户端证书
带 --kubelet-client-certificate
和 --kubelet-client-key
标志启动 API 服务器
有关更多详细信息,请参见
API 服务器身份验证文档
要启用 API 持有者令牌(包括服务帐户令牌)以对 kubelet 的 HTTPS 端点进行身份验证,请执行以下操作:
确保在 API 服务器中启用了 authentication.k8s.io/v1beta1
API 组
带 --authentication-token-webhook
和 --kubeconfig
标志启动 kubelet
kubelet 调用已配置的 API 服务器上的 TokenReview
API,以根据持有者令牌确定用户信息
Kubelet 鉴权
任何成功通过身份验证的请求(包括匿名请求)之后都会被鉴权。
默认的鉴权模式为 AlwaysAllow
,它允许所有请求。
细分对 kubelet API 的访问权限可能有多种原因:
启用了匿名身份验证,但是应限制匿名用户调用 kubelet API 的能力
启用了持有者令牌认证,但应限制任意 API 用户(如服务帐户)调用 kubelet API 的能力
启用了客户端证书身份验证,但仅应允许已配置的 CA 签名的某些客户端证书使用 kubelet API
要细分对 kubelet API 的访问权限,请将鉴权委派给 API 服务器:
确保在 API 服务器中启用了 authorization.k8s.io/v1beta1
API 组
带 --authorization-mode=Webhook
和 --kubeconfig
标志启动 kubelet
kubelet 调用已配置的 API 服务器上的 SubjectAccessReview
API,
以确定每个请求是否得到鉴权
kubelet 使用与 API 服务器相同的
请求属性
方法对 API 请求执行鉴权。
请求的动词根据传入请求的 HTTP 动词确定:
HTTP 动词
请求动词
POST
create
GET, HEAD
get
PUT
update
PATCH
patch
DELETE
delete
资源和子资源是根据传入请求的路径确定的:
Kubelet API
资源
子资源
/stats/*
nodes
stats
/metrics/*
nodes
metrics
/logs/*
nodes
log
/spec/*
nodes
spec
/checkpoint/*
nodes
checkpoint
其它所有
nodes
proxy
名字空间和 API 组属性始终是空字符串,
资源名称始终是 kubelet 的 Node
API 对象的名称。
在此模式下运行时,请确保传递给 API 服务器的由 --kubelet-client-certificate
和
--kubelet-client-key
标志标识的用户具有以下属性的鉴权:
verb=*, resource=nodes, subresource=proxy
verb=*, resource=nodes, subresource=stats
verb=*, resource=nodes, subresource=log
verb=*, resource=nodes, subresource=spec
verb=*, resource=nodes, subresource=metrics
3.14 - TLS 启动引导
在一个 Kubernetes 集群中,工作节点上的组件(kubelet 和 kube-proxy)需要与
Kubernetes 控制平面组件通信,尤其是 kube-apiserver。
为了确保通信本身是私密的、不被干扰,并且确保集群的每个组件都在与另一个可信的组件通信,
我们强烈建议使用节点上的客户端 TLS 证书。
启动引导这些组件的正常过程,尤其是需要证书来与 kube-apiserver 安全通信的工作节点,
可能会是一个具有挑战性的过程,因为这一过程通常不受 Kubernetes 控制,需要不少额外工作。
这也使得初始化或者扩缩一个集群的操作变得具有挑战性。
为了简化这一过程,从 1.4 版本开始,Kubernetes 引入了一个证书请求和签名 API。
该提案可在这里 看到。
本文档描述节点初始化的过程,如何为 kubelet 配置 TLS 客户端证书启动引导,
以及其背后的工作原理。
初始化过程
当工作节点启动时,kubelet 执行以下操作:
寻找自己的 kubeconfig
文件
检索 API 服务器的 URL 和凭据,通常是来自 kubeconfig
文件中的
TLS 密钥和已签名证书
尝试使用这些凭据来与 API 服务器通信
假定 kube-apiserver 成功地认证了 kubelet 的凭据数据,它会将 kubelet
视为一个合法的节点并开始将 Pod 分派给该节点。
注意,签名的过程依赖于:
kubeconfig
中包含密钥和本地主机的证书
证书被 kube-apiserver 所信任的一个证书机构(CA)所签名
负责部署和管理集群的人有以下责任:
创建 CA 密钥和证书
将 CA 证书发布到 kube-apiserver 运行所在的控制平面节点上
为每个 kubelet 创建密钥和证书;强烈建议为每个 kubelet 使用独一无二的、
CN 取值与众不同的密钥和证书
使用 CA 密钥对 kubelet 证书签名
将 kubelet 密钥和签名的证书发布到 kubelet 运行所在的特定节点上
本文中描述的 TLS 启动引导过程有意简化甚至完全自动化上述过程,
尤其是第三步之后的操作,因为这些步骤是初始化或者扩缩集群时最常见的操作。
启动引导初始化
在启动引导初始化过程中,会发生以下事情:
kubelet 启动
kubelet 看到自己没有 对应的 kubeconfig
文件
kubelet 搜索并发现 bootstrap-kubeconfig
文件
kubelet 读取该启动引导文件,从中获得 API 服务器的 URL 和用途有限的一个“令牌(Token)”
kubelet 建立与 API 服务器的连接,使用上述令牌执行身份认证
kubelet 现在拥有受限制的凭据来创建和取回证书签名请求(CSR)
kubelet 为自己创建一个 CSR,并将其 signerName 设置为 kubernetes.io/kube-apiserver-client-kubelet
CSR 被以如下两种方式之一批复:
如果配置了,kube-controller-manager 会自动批复该 CSR
如果配置了,一个外部进程,或者是人,使用 Kubernetes API 或者使用 kubectl
来批复该 CSR
kubelet 所需要的证书被创建
证书被发放给 kubelet
kubelet 取回该证书
kubelet 创建一个合适的 kubeconfig
,其中包含密钥和已签名的证书
kubelet 开始正常操作
可选地,如果配置了,kubelet 在证书接近于过期时自动请求更新证书
更新的证书被批复并发放;取决于配置,这一过程可能是自动的或者手动完成
本文的其余部分描述配置 TLS 启动引导的必要步骤及其局限性。
配置
要配置 TLS 启动引导及可选的自动批复,你必须配置以下组件的选项:
kube-apiserver
kube-controller-manager
kubelet
集群内的资源:ClusterRoleBinding
以及可能需要的 ClusterRole
此外,你需要有 Kubernetes 证书机构(Certificate Authority,CA)。
证书机构
就像在没有 TLS 启动引导支持的情况下,你会需要证书机构(CA)密钥和证书。
这些数据会被用来对 kubelet 证书进行签名。
如前所述,将证书机构密钥和证书发布到控制平面节点是你的责任。
就本文而言,我们假定这些数据被发布到控制平面节点上的 /var/lib/kubernetes/ca.pem
(证书)和
/var/lib/kubernetes/ca-key.pem
(密钥)文件中。
我们将这两个文件称作“Kubernetes CA 证书和密钥”。
所有 Kubernetes 组件(kubelet、kube-apiserver、kube-controller-manager)
都使用这些凭据,并假定这里的密钥和证书都是 PEM 编码的。
kube-apiserver 配置
启用 TLS 启动引导对 kube-apiserver 有若干要求:
能够识别对客户端证书进行签名的 CA
能够对启动引导的 kubelet 执行身份认证,并将其置入 system:bootstrappers
组
能够对启动引导的 kubelet 执行鉴权操作,允许其创建证书签名请求(CSR)
识别客户证书
对于所有客户端证书的认证操作而言,这是很常见的。
如果还没有设置,要为 kube-apiserver 命令添加 --client-ca-file=FILENAME
标志来启用客户端证书认证,在标志中引用一个包含用来签名的证书的证书机构包,
例如:--client-ca-file=/var/lib/kubernetes/ca.pem
。
初始启动引导认证
为了让启动引导的 kubelet 能够连接到 kube-apiserver 并请求证书,
它必须首先在服务器上认证自身身份。你可以使用任何一种能够对 kubelet
执行身份认证的身份认证组件 。
尽管所有身份认证策略都可以用来对 kubelet 的初始启动凭据来执行认证,
但出于容易准备的因素,建议使用如下两个身份认证组件:
启动引导令牌(Bootstrap Token)
令牌认证文件
启动引导令牌是一种对 kubelet 进行身份认证的方法,相对简单且容易管理,
且不需要在启动 kube-apiserver 时设置额外的标志。
无论选择哪种方法,这里的需求是 kubelet 能够被身份认证为某个具有如下权限的用户:
创建和读取 CSR
在启用了自动批复时,能够在请求节点客户端证书时得到自动批复
使用启动引导令牌执行身份认证的 kubelet 会被认证为 system:bootstrappers
组中的用户。这是使用启动引导令牌的一种标准方法。
随着这个功能特性的逐渐成熟,你需要确保令牌绑定到某基于角色的访问控制(RBAC)策略上,
从而严格限制请求(使用启动引导令牌 )
仅限于客户端申请提供证书。当 RBAC 被配置启用时,可以将令牌限制到某个组,
从而提高灵活性。例如,你可以在准备节点期间禁止某特定启动引导组的访问。
启动引导令牌
启动引导令牌的细节在这里 详述。
启动引导令牌在 Kubernetes 集群中存储为 Secret 对象,被发放给各个 kubelet。
你可以在整个集群中使用同一个令牌,也可以为每个节点发放单独的令牌。
这一过程有两个方面:
基于令牌 ID、机密数据和范畴信息创建 Kubernetes Secret
将令牌发放给 kubelet
从 kubelet 的角度,所有令牌看起来都很像,没有特别的含义。
从 kube-apiserver 服务器的角度,启动引导令牌是很特殊的。
根据其 type
、namespace
和 name
,kube-apiserver 能够将其认作特殊的令牌,
并授予携带该令牌的任何人特殊的启动引导权限,换言之,将其视为
system:bootstrappers
组的成员。这就满足了 TLS 启动引导的基本需求。
关于创建 Secret 的进一步细节可访问这里 。
如果你希望使用启动引导令牌,你必须在 kube-apiserver 上使用下面的标志启用之:
--enable-bootstrap-token-auth=true
令牌认证文件
kube-apiserver 能够将令牌视作身份认证依据。
这些令牌可以是任意数据,但必须表示为基于某安全的随机数生成器而得到的至少
128 位混沌数据。这里的随机数生成器可以是现代 Linux 系统上的
/dev/urandom
。生成令牌的方式有很多种。例如:
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
上面的命令会生成类似于 02b50b05283e98dd0fd71db496ef01e8
这样的令牌。
令牌文件看起来是下面的例子这样,其中前面三个值可以是任何值,
用引号括起来的组名称则只能用例子中给的值。
02b50b05283e98dd0fd71db496ef01e8,kubelet-bootstrap,10001,"system:bootstrappers"
向 kube-apiserver 添加 --token-auth-file=FILENAME
标志(或许这要对 systemd
的单元文件作修改)以启用令牌文件。有关进一步细节的文档,
可参见这里 。
授权 kubelet 创建 CSR
现在启动引导节点被 身份认证 为 system:bootstrappers
组的成员,
它需要被 授权 创建证书签名请求(CSR)并在证书被签名之后将其取回。
幸运的是,Kubernetes 提供了一个 ClusterRole
,其中精确地封装了这些许可,
system:node-bootstrapper
。
为了实现这一点,你只需要创建 ClusterRoleBinding
,将 system:bootstrappers
组绑定到集群角色 system:node-bootstrapper
。
# 允许启动引导节点创建 CSR
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRoleBinding
metadata :
name : create-csrs-for-bootstrapping
subjects :
- kind : Group
name : system:bootstrappers
apiGroup : rbac.authorization.k8s.io
roleRef :
kind : ClusterRole
name : system:node-bootstrapper
apiGroup : rbac.authorization.k8s.io
kube-controller-manager 配置
尽管 API 服务器从 kubelet 收到证书请求并对这些请求执行身份认证,
但真正负责发放签名证书的是控制器管理器(controller-manager)。
控制器管理器通过一个证书发放的控制回路来执行此操作。该操作的执行方式是使用磁盘上的文件用
cfssl 本地签名组件来完成。
目前,所发放的所有证书都有一年的有效期,并设定了默认的一组密钥用法。
为了让控制器管理器对证书签名,它需要:
能够访问你之前所创建并分发的 “Kubernetes CA 密钥和证书”
启用 CSR 签名
访问密钥和证书
如前所述,你需要创建一个 Kubernetes CA 密钥和证书,并将其发布到控制平面节点。
这些数据会被控制器管理器来对 kubelet 证书进行签名。
由于这些被签名的证书反过来会被 kubelet 用来在 kube-apiserver 执行普通的
kubelet 身份认证,很重要的一点是为控制器管理器所提供的 CA 也被 kube-apiserver
信任用来执行身份认证。CA 密钥和证书是通过 kube-apiserver 的标志
--client-ca-file=FILENAME
(例如 --client-ca-file=/var/lib/kubernetes/ca.pem
)来设定的,
正如 kube-apiserver 配置节所述。
要将 Kubernetes CA 密钥和证书提供给 kube-controller-manager,可使用以下标志:
--cluster-signing-cert-file= "/etc/path/to/kubernetes/ca/ca.crt" --cluster-signing-key-file= "/etc/path/to/kubernetes/ca/ca.key"
例如:
--cluster-signing-cert-file= "/var/lib/kubernetes/ca.pem" --cluster-signing-key-file= "/var/lib/kubernetes/ca-key.pem"
所签名的证书的合法期限可以通过下面的标志来配置:
--cluster-signing-duration
批复
为了对 CSR 进行批复,你需要告诉控制器管理器批复这些 CSR 是可接受的。
这是通过将 RBAC 访问权限授予正确的组来实现的。
许可权限有两组:
nodeclient
:如果节点在为节点创建新的证书,则该节点还没有证书。
该节点使用前文所列的令牌之一来执行身份认证,因此是 system:bootstrappers
组的成员。
selfnodeclient
:如果节点在对证书执行续期操作,则该节点已经拥有一个证书。
节点持续使用现有的证书将自己认证为 system:nodes
组的成员。
要允许 kubelet 请求并接收新的证书,可以创建一个 ClusterRoleBinding
将启动引导节点所处的组 system:bootstrappers
绑定到为其赋予访问权限的 ClusterRole
system:certificates.k8s.io:certificatesigningrequests:nodeclient
:
# 批复 "system:bootstrappers" 组的所有 CSR
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRoleBinding
metadata :
name : auto-approve-csrs-for-group
subjects :
- kind : Group
name : system:bootstrappers
apiGroup : rbac.authorization.k8s.io
roleRef :
kind : ClusterRole
name : system:certificates.k8s.io:certificatesigningrequests:nodeclient
apiGroup : rbac.authorization.k8s.io
要允许 kubelet 对其客户端证书执行续期操作,可以创建一个 ClusterRoleBinding
将正常工作的节点所处的组 system:nodes
绑定到为其授予访问许可的 ClusterRole
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
:
# 批复 "system:nodes" 组的 CSR 续约请求
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRoleBinding
metadata :
name : auto-approve-renewals-for-nodes
subjects :
- kind : Group
name : system:nodes
apiGroup : rbac.authorization.k8s.io
roleRef :
kind : ClusterRole
name : system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
apiGroup : rbac.authorization.k8s.io
作为 kube-controller-manager
的一部分的 csrapproving
控制器是自动被启用的。
该控制器使用 SubjectAccessReview
API
来确定给定用户是否被授权请求 CSR,之后基于鉴权结果执行批复操作。
为了避免与其它批复组件发生冲突,内置的批复组件不会显式地拒绝任何 CSR。
该组件仅是忽略未被授权的请求。控制器也会作为垃圾收集的一部分清除已过期的证书。
kubelet 配置
最后,当控制平面节点被正确配置并且所有必要的身份认证和鉴权机制都就绪时,
我们可以配置 kubelet。
kubelet 需要以下配置来执行启动引导:
一个用来存储所生成的密钥和证书的路径(可选,可以使用默认配置)
一个用来指向尚不存在的 kubeconfig
文件的路径;kubelet 会将启动引导配置文件放到这个位置
一个指向启动引导 kubeconfig
文件的路径,用来提供 API 服务器的 URL 和启动引导凭据,
例如,启动引导令牌
可选的:轮换证书的指令
启动引导 kubeconfig
文件应该放在一个 kubelet 可访问的路径下,例如
/var/lib/kubelet/bootstrap-kubeconfig
。
其格式与普通的 kubeconfig
文件完全相同。示例文件可能看起来像这样:
apiVersion : v1
kind : Config
clusters :
- cluster :
certificate-authority : /var/lib/kubernetes/ca.pem
server : https://my.server.example.com:6443
name : bootstrap
contexts :
- context :
cluster : bootstrap
user : kubelet-bootstrap
name : bootstrap
current-context : bootstrap
preferences : {}
users :
- name : kubelet-bootstrap
user :
token : 07401b.f395accd246ae52d
需要额外注意的一些因素有:
certificate-authority
:指向 CA 文件的路径,用来对 kube-apiserver 所出示的服务器证书进行验证
server
:用来访问 kube-apiserver 的 URL
token
:要使用的令牌
令牌的格式并不重要,只要它与 kube-apiserver 的期望匹配即可。
在上面的例子中,我们使用的是启动引导令牌。
如前所述,任何合法的身份认证方法都可以使用,不限于令牌。
因为启动引导 kubeconfig
文件是一个标准的 kubeconfig
文件,你可以使用
kubectl
来生成该文件。要生成上面的示例文件:
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig set-cluster bootstrap --server='https://my.server.example.com:6443' --certificate-authority=/var/lib/kubernetes/ca.pem
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig set-credentials kubelet-bootstrap --token=07401b.f395accd246ae52d
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig set-context bootstrap --user=kubelet-bootstrap --cluster=bootstrap
kubectl config --kubeconfig=/var/lib/kubelet/bootstrap-kubeconfig use-context bootstrap
要指示 kubelet 使用启动引导 kubeconfig
文件,可以使用下面的 kubelet 标志:
--bootstrap-kubeconfig="/var/lib/kubelet/bootstrap-kubeconfig" --kubeconfig="/var/lib/kubelet/kubeconfig"
在启动 kubelet 时,如果 --kubeconfig
标志所指定的文件并不存在,会使用通过标志
--bootstrap-kubeconfig
所指定的启动引导 kubeconfig 配置来向 API 服务器请求客户端证书。
在证书请求被批复并被 kubelet 收回时,一个引用所生成的密钥和所获得证书的 kubeconfig
文件会被写入到通过 --kubeconfig
所指定的文件路径下。
证书和密钥文件会被放到 --cert-dir
所指定的目录中。
客户端和服务证书
前文所述的内容都与 kubelet 客户端 证书相关,尤其是 kubelet 用来向
kube-apiserver 认证自身身份的证书。
kubelet 也可以使用 服务(Serving) 证书。kubelet 自身向外提供一个 HTTPS 末端,
包含若干功能特性。要保证这些末端的安全性,kubelet 可以执行以下操作之一:
使用通过 --tls-private-key-file
和 --tls-cert-file
所设置的密钥和证书
如果没有提供密钥和证书,则创建自签名的密钥和证书
通过 CSR API 从集群服务器请求服务证书
TLS 启动引导所提供的客户端证书默认被签名为仅用于 client auth
(客户端认证),
因此不能作为提供服务的证书,或者 server auth
。
不过,你可以启用服务器证书,至少可以部分地通过证书轮换来实现这点。
证书轮换
Kubernetes v1.8 和更高版本的 kubelet 实现了对客户端证书与/或服务证书进行轮换这一特性。
请注意,服务证书轮换是一项 Beta 特性,需要 kubelet 上 RotateKubeletServerCertificate
特性的支持(默认启用)。
你可以配置 kubelet 使其在现有凭据过期时通过创建新的 CSR 来轮换其客户端证书。
要启用此功能,请使用 kubelet 配置文件 的
rotateCertificates
字段或将以下命令行参数传递给 kubelet(已弃用):
--rotate-certificates
启用 RotateKubeletServerCertificate
会让 kubelet
在启动引导其客户端凭据之后请求一个服务证书且 对该服务证书执行轮换操作。
要启用此特性,请使用 kubelet 配置文件 的
serverTLSBootstrap
字段将以下命令行参数传递给 kubelet(已弃用):
--rotate-server-certificates
说明:
出于安全原因 ,Kubernetes 核心中所实现的
CSR 批复控制器并不会自动批复节点的服务 证书。
要使用 RotateKubeletServerCertificate
功能特性,
集群运维人员需要运行一个定制的控制器或者手动批复服务证书的请求。
对 kubelet 服务证书的批复过程因集群部署而异,通常应该仅批复如下 CSR:
由节点发出的请求(确保 spec.username
字段形式为 system:node:<nodeName>
且 spec.groups
包含 system:nodes
)
请求中包含服务证书用法(确保 spec.usages
中包含 server auth
,可选地也可包含
digital signature
和 key encipherment
,且不包含其它用法)
仅包含隶属于请求节点的 IP 和 DNS 的 subjectAltNames
,没有 URI 和 Email
形式的 subjectAltNames
(解析 spec.request
中的 x509 证书签名请求可以检查
subjectAltNames
)
其它身份认证组件
本文所描述的所有 TLS 启动引导内容都与 kubelet 相关。不过,其它组件也可能需要直接与
kube-apiserver 直接通信。容易想到的是 kube-proxy,同样隶属于
Kubernetes 的节点组件并且运行在所有节点之上,不过也可能包含一些其它负责监控或者联网的组件。
与 kubelet 类似,这些其它组件也需要一种向 kube-apiserver 认证身份的方法。
你可以用几种方法来生成这类凭据:
较老的方式:和 kubelet 在 TLS 启动引导之前所做的一样,用类似的方式创建和分发证书。
DaemonSet:由于 kubelet 自身被加载到所有节点之上,并且有足够能力来启动基本服务,
你可以运行将 kube-proxy 和其它特定节点的服务作为 kube-system
名字空间中的
DaemonSet 来执行,而不是独立的进程。由于 DaemonSet 位于集群内部,
你可以为其指派一个合适的服务账户,使之具有适当的访问权限来完成其使命。
这也许是配置此类服务的最简单的方法。
kubectl 批复
CSR 可以在编译进控制器管理器内部的批复工作流之外被批复。
签名控制器并不会立即对所有证书请求执行签名操作。相反,
它会等待这些请求被某具有适当特权的用户标记为 “Approved(已批准)”状态。
这一流程有意允许由外部批复控制器来自动执行的批复,
或者由控制器管理器内置的批复控制器来自动批复。
不过,集群管理员也可以使用 kubectl
来手动批准证书请求。
管理员可以通过 kubectl get csr
来列举所有的 CSR,使用
kubectl descsribe csr <name>
来描述某个 CSR 的细节。
管理员可以使用 kubectl certificate approve <name
来批准某 CSR,或者
kubectl certificate deny <name>
来拒绝某 CSR。
3.15 - 验证准入策略(ValidatingAdmissionPolicy)
特性状态:
Kubernetes v1.30 [stable]
本页面提供验证准入策略(Validating Admission Policy)的概述。
什么是验证准入策略?
验证准入策略提供一种声明式的、进程内的替代方案来验证准入 Webhook。
验证准入策略使用通用表达语言 (Common Expression Language,CEL) 来声明策略的验证规则。
验证准入策略是高度可配置的,使配置策略的作者能够根据集群管理员的需要,
定义可以参数化并限定到资源的策略。
哪些资源构成策略
策略通常由三种资源构成:
ValidatingAdmissionPolicy
描述策略的抽象逻辑(想想看:“这个策略确保一个特定标签被设置为一个特定值”)。
一个 ValidatingAdmissionPolicyBinding
将上述资源联系在一起,并提供作用域。
如果你只想为 Pods
设置一个 owner
标签,你就需要在这个绑定中指定这个限制。
参数资源为 ValidatingAdmissionPolicy
提供信息,使其成为一个具体的声明
(想想看:“owner
标签必须被设置为以 .company.com
结尾的形式")。
参数资源的模式(Schema)使用诸如 ConfigMap 或 CRD 这类原生类型定义。
ValidatingAdmissionPolicy
对象指定它们期望参数资源所呈现的类型。
至少要定义一个 ValidatingAdmissionPolicy
和一个相对应的 ValidatingAdmissionPolicyBinding
才能使策略生效。
如果 ValidatingAdmissionPolicy
不需要参数配置,不设置 ValidatingAdmissionPolicy
中的
spec.paramKind
即可。
开始使用验证准入策略
验证准入策略是集群控制平面的一部分。你应该非常谨慎地编写和部署它们。下面介绍如何快速试验验证准入策略。
创建一个 ValidatingAdmissionPolicy
以下是一个 ValidatingAdmissionPolicy 的示例:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "demo-policy.example.com"
spec :
failurePolicy : Fail
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ]
validations :
- expression : "object.spec.replicas <= 5"
spec.validations
包含使用通用表达式语言 (CEL)
来验证请求的 CEL 表达式。
如果表达式的计算结果为 false,则根据 spec.failurePolicy
字段强制执行验证检查处理。
要配置一个在某集群中使用的验证准入策略,需要一个绑定。
以下是一个 ValidatingAdmissionPolicyBinding 的示例:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicyBinding
metadata :
name : "demo-binding-test.example.com"
spec :
policyName : "demo-policy.example.com"
validationActions : [Deny]
matchResources :
namespaceSelector :
matchLabels :
environment : test
尝试创建副本集合不满足验证表达式的 Deployment 时,将返回包含以下消息的错误:
ValidatingAdmissionPolicy 'demo-policy.example.com' with binding 'demo-binding-test.example.com' denied request: failed expression: object.spec.replicas <= 5
上面提供的是一个简单的、无配置参数的 ValidatingAdmissionPolicy。
验证操作
每个 ValidatingAdmissionPolicyBinding
必须指定一个或多个
validationActions
来声明如何执行策略的 validations
。
支持的 validationActions
包括:
Deny
:验证失败会导致请求被拒绝。
Warn
:验证失败会作为警告 报告给请求客户端。
Audit
:验证失败会包含在 API 请求的审计事件中。
例如,要同时向客户端发出验证失败的警告并记录验证失败的审计记录,请使用以下配置:
validationActions : [Warn, Audit]
Deny
和 Warn
不能一起使用,因为这种组合会不必要地将验证失败重复输出到
API 响应体和 HTTP 警告头中。
如果 validation
求值为 false,则始终根据这些操作执行。
由 failurePolicy
定义的失败仅在 failurePolicy
设置为 Fail
(或未指定)时根据这些操作执行,
否则这些失败将被忽略。
有关验证失败审计注解的详细信息,
请参见审计注解:验证失败 。
参数资源
参数资源允许策略配置与其定义分开。
一个策略可以定义 paramKind,给出参数资源的 GVK,
然后一个策略绑定可以通过名称(通过 policyName)将某策略与某特定的参数资源(通过 paramRef)联系起来。
如果需要参数配置,下面是一个带有参数配置的 ValidatingAdmissionPolicy 的例子:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "replicalimit-policy.example.com"
spec :
failurePolicy : Fail
paramKind :
apiVersion : rules.example.com/v1
kind : ReplicaLimit
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ]
validations :
- expression : "object.spec.replicas <= params.maxReplicas"
reason : Invalid
ValidatingAdmissionPolicy 的 spec.paramKind
字段指定用于参数化此策略的资源类型。
在这个例子中,它是由自定义资源 ReplicaLimit 配置的。
在这个例子中请注意 CEL 表达式是如何通过 CEL params 变量引用参数的,如:params.maxReplicas
。
spec.matchConstraints
指定此策略要检查哪些资源。
请注意,诸如 ConfigMap
之类的原生类型也可以用作参数引用。
spec.validations
字段包含 CEL 表达式。
如果表达式的计算结果为 false,则根据 spec.failurePolicy
字段强制执行验证检查操作。
验证准入策略的作者负责提供 ReplicaLimit 参数 CRD。
要配置一个在某集群中使用的验证准入策略,需要创建绑定和参数资源。
以下是 ValidatingAdmissionPolicyBinding 集群范围 参数的示例 - 相同的参数将用于验证与绑定匹配的每个资源请求:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicyBinding
metadata :
name : "replicalimit-binding-test.example.com"
spec :
policyName : "replicalimit-policy.example.com"
validationActions : [Deny]
paramRef :
name : "replica-limit-test.example.com"
namespace : "default"
matchResources :
namespaceSelector :
matchLabels :
environment : test
请注意,此绑定将参数应用于 test
环境中所有资源的策略中。
参数资源可以如下:
apiVersion : rules.example.com/v1
kind : ReplicaLimit
metadata :
name : "replica-limit-test.example.com"
namespace : "default"
maxReplicas : 3
此策略参数资源将限制 Deployment 最多有 3 个副本。
一个准入策略可以有多个绑定。
要绑定所有的其他环境,限制 maxReplicas 为 100,请创建另一个 ValidatingAdmissionPolicyBinding:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicyBinding
metadata :
name : "replicalimit-binding-nontest"
spec :
policyName : "replicalimit-policy.example.com"
validationActions : [Deny]
paramRef :
name : "replica-limit-prod.example.com"
namespace : "default"
matchResources :
namespaceSelector :
matchExpressions :
- key : environment
operator : NotIn
values :
- test
请注意,此绑定将不同的参数应用于不在 test
环境中的资源。
并有一个参数资源:
apiVersion : rules.example.com/v1
kind : ReplicaLimit
metadata :
name : "replica-limit-prod.example.com"
maxReplicas : 100
对于每个准入请求,API 服务器都会评估与请求匹配的每个(策略、绑定、参数)组合的 CEL 表达式。
要获得准入资格,必须通过所有 评估。
如果多个绑定与请求匹配,则将为每个绑定评估策略,并且它们必须全部通过评估,策略才会被视为通过。
如果多个参数与同一个绑定匹配,则系统将为每个参数评估策略规则,并且这些规则也必须全部通过才能认为该绑定通过。
多个绑定之间可以在匹配条件存在重叠。系统针对匹配的绑定参数所有组合来评估策略。如果多个绑定与其匹配,
或者同一个绑定与多个参数匹配,则策略甚至可以被多次评估。
如果参数资源尚未被绑定,代表参数资源的 params 对象将不会被设置,
所以对于需要参数资源的策略,添加一个检查来确保参数资源被绑定,这会很有用。
如果策略的 paramKind
未指定或绑定的 paramRef
未指定,则不会绑定参数资源,
并且 params
将为空。
对于需要参数配置的场景,我们建议在 spec.validations[0].expression
中添加一个参数检查:
- expression: "params != null"
message: "params missing but required to bind to this policy"
可选参数
将可选参数作为参数资源的一部分,并且只在参数存在时执行检查操作,这样做会比较方便。
CEL 提供了 has()
方法,它检查传递给它的键是否存在。CEL 还实现了布尔短路逻辑。
如果逻辑 OR 的前半部分计算为 true,则不会计算另一半(因为无论如何整个 OR 的结果都为真)。
结合这两者,我们可以提供一种验证可选参数的方法:
!has(params.optionalNumber) || (params.optionalNumber >= 5 && params.optionalNumber <= 10)
在这里,我们首先用 !has(params.optionalNumber)
检查可选参数是否存在。
如果 optionalNumber
没有被定义,那么表达式就会短路,因为 !has(params.optionalNumber)
的计算结果为 true。
如果 optionalNumber
被定义了,那么将计算 CEL 表达式的后半部分,
并且 optionalNumber
将被检查以确保它包含一个 5 到 10 之间的值(含 5 到 10)。
按命名空间设置的参数
作为 ValidatingAdmissionPolicy 及其 ValidatingAdmissionPolicyBinding 的作者,
你可以选择指定其作用于集群范围还是某个命名空间。如果你为绑定的 paramRef
指定 namespace
,
则控制平面仅在该命名空间中搜索参数。
但是,如果 ValidatingAdmissionPolicyBinding 中未指定 namespace
,则 API
服务器可以在请求所针对的命名空间中搜索相关参数。
例如,如果你请求修改 default
命名空间中的 ConfigMap,并且存在未设置 namespace
的相关
ValidatingAdmissionPolicyBinding,则 API 服务器在 default
命名空间中查找参数对象。
此设计支持依赖于所操作资源的命名空间的策略配置,以实现更精细的控制。
参数选择算符
除了在绑定中用 name
来指定参数之外,你还可以选择设置标签选择算符,
这样对于与策略的 paramKind
参数匹配,且位于参数的 namespace
(如果适用)内的所有资源,
如果与标签选择算符匹配,都会被评估。有关标签选择算符如何匹配资源的更多信息,
请参阅选择算符 。
如果发现多个参数满足条件,则会针对所找到的每个参数来评估策略规则,并将结果进行“与”运算。
如果设置了 namespace
,则只有所提供的命名空间中类别为 paramKind
的对象才会被匹配。
否则,当 namespace
为空且 paramKind
为命名空间作用域的资源时,使用被准入请求中指定的 namespace
。
鉴权检查
我们为参数资源引入了鉴权检查。
用户应该对 ValidatingAdmissionPolicy
中的 paramKind
和 ValidatingAdmissionPolicyBinding
中的 paramRef
所引用的资源有 read
权限。
请注意,如果 paramKind
中的资源没能通过 restmapper 解析,则用户需要拥有对组的所有资源的
read
访问权限。
失效策略
failurePolicy
定义了如何处理错误配置和准入策略的 CEL 表达式取值为 error 的情况。
允许的值是 Ignore
或 Fail
。
Ignore
意味着调用 ValidatingAdmissionPolicy 的错误被忽略,允许 API 请求继续。
Fail
意味着调用 ValidatingAdmissionPolicy 的错误导致准入失败并拒绝 API 请求。
请注意,failurePolicy
是在 ValidatingAdmissionPolicy
中定义的:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
spec :
...
failurePolicy : Ignore # 默认为 "Fail"
validations :
- expression : "object.spec.xyz == params.x"
检查表达式
spec.validations[i].expression
代表将使用 CEL 来计算表达式。
要了解更多信息,请参阅 CEL 语言规范 。
CEL 表达式可以访问按 CEL 变量来组织的 Admission 请求/响应的内容,以及其他一些有用的变量 :
'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。
'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。
'request' - 准入请求 的属性。
'params' - 被计算的策略绑定引用的参数资源。如果未设置 paramKind
,该值为 null。
namespaceObject
- 作为 Kubernetes 资源的、传输对象所在的名字空间。
如果传入对象是集群作用域的,则此值为 null。
authorizer
- 一个 CEL 鉴权组件。可以用来为请求的主体(经过身份验证的用户)执行鉴权检查。
更多细节可以参考 AuthzSelectors
和 Kubernetes CEL 库的文档中的 Authz 。
authorizer.requestResource
- 针对请求资源(组、资源、(子资源)、命名空间、名称)所配置的鉴权检查的快捷方式。
总是可以从对象的根访问的属性有 apiVersion
、kind
、metadata.name
和 metadata.generateName
。
其他元数据属性不能访问。
列表类型为 "set" 或 "map" 的数组上的等价关系比较会忽略元素顺序,即 [1, 2] == [2, 1]。
使用 x-kubernetes-list-type 连接数组时使用列表类型的语义:
'set':X + Y
执行并集,其中 X
中所有元素的数组位置被保留,Y
中不相交的元素被追加,保留其元素的偏序关系。
'map':X + Y
执行合并,保留 X
中所有键的数组位置,但是当 X
和 Y
的键集相交时,其值被 Y
的值覆盖。
Y
中键值不相交的元素被追加,保留其元素之间的偏序关系。
检查表达式示例
表达式
目的
object.minReplicas <= object.replicas && object.replicas <= object.maxReplicas
检查定义副本的三个字段是否大小关系正确
'Available' in object.stateCounts
检查映射中是否存在键为 Available
的条目
(size(object.list1) == 0) != (size(object.list2) == 0)
检查两个列表是否有且只有一个非空
!('MY_KEY' in object.map1) || object['MY_KEY'].matches('^[a-zA-Z]*$')
检查映射中存在特定的键时其取值符合某规则
object.envars.filter(e, e.name == 'MY_ENV').all(e, e.value.matches('^[a-zA-Z]*$')
验证 listMap 中所有键名为 "MY_ENV" 的条目的 “value” 字段,确保其符合规则
has(object.expired) && object.created + object.ttl < object.expired
检查 expired 日期在 create 日期加上 ttl 时长之后
object.health.startsWith('ok')
检查 health 字符串字段的取值有 “ok” 前缀
object.widgets.exists(w, w.key == 'x' && w.foo < 10)
对于 listMap 中键为 “x” 的条目,检查该条目的 "foo" 属性的值是否小于 10
type(object) == string ? object == '100%' : object == 1000
对于 int-or-string 字段,分别处理类型为 int 或 string 的情况
object.metadata.name.startsWith(object.prefix)
检查对象名称是否以另一个字段值为前缀
object.set1.all(e, !(e in object.set2))
检查两个 listSet 是否不相交
size(object.names) == size(object.details) && object.names.all(n, n in object.details)
检查映射 “details” 所有的键和 listSet “names” 中的条目是否一致
size(object.clusters.filter(c, c.name == object.primary)) == 1
检查 “primary” 字段的值在 listMap “clusters” 中只出现一次
了解关于 CEL 规则的更多信息, 请阅读
CEL 支持的求值表达式 。
spec.validation[i].reason
表示一个机器可读的描述,说明为什么这次检查失败。
如果这是列表中第一个失败的检查,其原因以及相应的 HTTP 响应代码会被用在给客户端的 HTTP 响应中。
目前支持的原因有:Unauthorized
、Forbidden
、Invalid
、RequestEntityTooLarge
。
如果未设置,将在对客户端的响应中使用 StatusReasonInvalid
。
匹配请求:matchConditions
如果需要进行精细的请求过滤,可以为 ValidatingAdmissionPolicy
定义 匹配条件(match conditions) 。
如果发现匹配规则、objectSelectors
和 namespaceSelectors
仍无法提供所需的过滤功能,则使用这些条件非常有用。
匹配条件是 CEL 表达式 。
所有匹配条件必须求值为 true 时才会对资源进行评估。
以下示例说明了匹配条件的几个不同用法:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "demo-policy.example.com"
spec :
failurePolicy : Fail
matchConstraints :
resourceRules :
- apiGroups : ["*" ]
apiVersions : ["*" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["*" ]
matchConditions :
- name : 'exclude-leases' # 每个匹配条件必须有一个唯一的名称
expression : '!(request.resource.group == "coordination.k8s.io" && request.resource.resource == "leases")' # 匹配非租约资源
- name : 'exclude-kubelet-requests'
expression : '!("system:nodes" in request.userInfo.groups)' # 匹配非节点用户发出的请求
- name : 'rbac' # 跳过 RBAC 请求
expression : 'request.resource.group != "rbac.authorization.k8s.io"'
validations :
- expression : "!object.metadata.name.contains('demo') || object.metadata.namespace == 'demo'"
这些匹配条件可以访问与验证表达式相同的 CEL 变量。
在评估匹配条件时出现错误时,将不会评估策略。根据以下方式确定是否拒绝请求:
如果任何一个 匹配条件求值结果为 false
(不管其他错误),API 服务器将跳过 Webhook。
否则:
审计注解
auditAnnotations
可用于在 API 请求的审计事件中包括审计注解。
例如,以下是带有审计注解的准入策略:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "demo-policy.example.com"
spec :
failurePolicy : Fail
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ]
validations :
- expression : "object.spec.replicas > 50"
messageExpression : "'Deployment spec.replicas set to ' + string(object.spec.replicas)"
auditAnnotations :
- key : "high-replica-count"
valueExpression : "'Deployment spec.replicas set to ' + string(object.spec.replicas)"
当使用此准入策略验证 API 请求时,生成的审计事件将如下所示:
# 记录的审计事件
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"annotations": {
"demo-policy.example.com/high-replica-count": "Deployment spec.replicas set to 128"
# 其他注解
...
}
# 其他字段
...
}
在此示例中,只有 Deployment 的 spec.replicas
大于 50 时才会包含注解,
否则 CEL 表达式将求值为 null,并且不会包含注解。
请注意,审计注解键以 ValidatingAdmissionWebhook
的名称和 /
为前缀。
如果另一个准入控制器(例如准入 Webhook)使用完全相同的审计注解键,
则第一个包括审计注解值的准入控制器将出现在审计事件中,而所有其他值都将被忽略。
消息表达式
为了在策略拒绝请求时返回更友好的消息,我们在 spec.validations[i].messageExpression
中使用 CEL 表达式来构造消息。
与验证表达式类似,消息表达式可以访问 object
、oldObject
、request
和 params
。
但是,与验证不同,消息表达式必须求值为字符串。
例如,为了在策略引用参数时更好地告知用户拒绝原因,我们可以有以下验证:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "deploy-replica-policy.example.com"
spec :
paramKind :
apiVersion : rules.example.com/v1
kind : ReplicaLimit
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ]
validations :
- expression : "object.spec.replicas <= params.maxReplicas"
messageExpression : "'object.spec.replicas must be no greater than ' + string(params.maxReplicas)"
reason : Invalid
在创建限制副本为 3 的 Params 对象并设置绑定之后,当我们尝试创建具有 5 个副本的 Deployment
时,我们将收到以下消息:
$ kubectl create deploy --image=nginx nginx --replicas=5
error: failed to create deployment: deployments.apps "nginx" is forbidden: ValidatingAdmissionPolicy 'deploy-replica-policy.example.com' with binding 'demo-binding-test.example.com' denied request: object.spec.replicas must be no greater than 3
这比静态消息 "too many replicas" 更具说明性。
如果既定义了消息表达式,又在 spec.validations[i].message
中定义了静态消息,
则消息表达式优先于静态消息。但是,如果消息表达式求值失败,则将使用静态消息。
此外,如果消息表达式求值为多行字符串,则会丢弃求值结果并使用静态消息(如果存在)。
请注意,静态消息也要检查是否存在多行字符串。
类型检查
创建或更新策略定义时,验证过程将解析它包含的表达式,在发现错误时报告语法错误并拒绝该定义。
之后,引用的变量将根据 spec.matchConstraints
的匹配类型检查类型错误,包括缺少字段和类型混淆。
类型检查的结果可以从 status.typeChecking
中获得。
status.typeChecking
的存在表示类型检查已完成,而空的 status.typeChecking
表示未发现错误。
例如,给定以下策略定义:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "deploy-replica-policy.example.com"
spec :
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ]
validations :
- expression : "object.replicas > 1" # 应为 "object.spec.replicas > 1"
message : "must be replicated"
reason : Invalid
status 字段将提供以下信息:
status :
typeChecking :
expressionWarnings :
- fieldRef : spec.validations[0].expression
warning : |-
apps/v1, Kind=Deployment: ERROR: <input>:1:7: undefined field 'replicas'
| object.replicas > 1
| ......^
如果在 spec.matchConstraints
中匹配了多个资源,则所有匹配的资源都将进行检查。
例如,以下策略定义:
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "replica-policy.example.com"
spec :
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ,"replicasets" ]
validations :
- expression : "object.replicas > 1" # 应为 "object.spec.replicas > 1"
message : "must be replicated"
reason : Invalid
将具有多个类型,并在警告消息中提供每种类型的类型检查结果。
status :
typeChecking :
expressionWarnings :
- fieldRef : spec.validations[0].expression
warning : |-
apps/v1, Kind=Deployment: ERROR: <input>:1:7: undefined field 'replicas'
| object.replicas > 1
| ......^
apps/v1, Kind=ReplicaSet: ERROR: <input>:1:7: undefined field 'replicas'
| object.replicas > 1
| ......^
类型检查具有以下限制:
没有通配符匹配。
如果 spec.matchConstraints.resourceRules
中的任何一个 apiGroups
、apiVersions
或 resources
包含 "\*"
,则不会检查与 "\*"
匹配的类型。
匹配的类型数量最多为 10 种。这是为了防止手动指定过多类型的策略消耗过多计算资源。
按升序处理组、版本,然后是资源,忽略第 11 个及其之后的组合。
类型检查不会以任何方式影响策略行为。即使类型检查检测到错误,策略也将继续评估。
如果在评估期间出现错误,则失败策略将决定其结果。
类型检查不适用于 CRD(自定义资源定义),包括匹配的 CRD 类型和 paramKind 的引用。
对 CRD 的支持将在未来发布中推出。
变量组合
如果表达式变得太复杂,或者表达式的一部分可重用且进行评估时计算开销较大,可以将表达式的某些部分提取为变量。
变量是一个命名表达式,后期可以在其他表达式中的 variables
中引用。
spec :
variables :
- name : foo
expression : "'foo' in object.spec.metadata.labels ? object.spec.metadata.labels['foo'] : 'default'"
validations :
- expression : variables.foo == 'bar'
变量在首次引用时会被延迟求值。评估期间发生的任何错误都将在评估引用表达式期间报告,
结果和可能的错误都会被记录下来,且在运行时开销中仅计为一次。
变量的顺序很重要,因为一个变量可以引用在它之前定义的其他变量。
对顺序的要求可以防止循环引用。
以下是强制镜像仓库名称与其命名空间中定义的环境相匹配的一个较复杂示例。
# 此策略强制除 "exempt" Deployment 或任何不属于 “example.com” 组织的容器
#(例如常见的 sidecar)外的 Deployment 的所有容器的镜像库与其命名空间的环境标签相匹配。
# 例如,如果命名空间的标签为 {"environment": "staging"},则所有容器镜像必须是
# staging.example.com/* 或根本不包含 “example.com”,除非 Deployment 有
# {"exempt": "true"} 标签。
apiVersion : admissionregistration.k8s.io/v1
kind : ValidatingAdmissionPolicy
metadata :
name : "image-matches-namespace-environment.policy.example.com"
spec :
failurePolicy : Fail
matchConstraints :
resourceRules :
- apiGroups : ["apps" ]
apiVersions : ["v1" ]
operations : ["CREATE" , "UPDATE" ]
resources : ["deployments" ]
variables :
- name : environment
expression : "'environment' in namespaceObject.metadata.labels ? namespaceObject.metadata.labels['environment'] : 'prod'"
- name : exempt
expression : "'exempt' in object.metadata.labels && object.metadata.labels['exempt'] == 'true'"
- name : containers
expression : "object.spec.template.spec.containers"
- name : containersToCheck
expression : "variables.containers.filter(c, c.image.contains('example.com/'))"
validations :
- expression : "variables.exempt || variables.containersToCheck.all(c, c.image.startsWith(variables.environment + '.'))"
messageExpression : "'only ' + variables.environment + ' images are allowed in namespace ' + namespaceObject.metadata.name"
在此策略被绑定到 default
命名空间(标签为 environment: prod
)的情况下,
以下创建 Deployment 的尝试将被拒绝。
kubectl create deploy --image= dev.example.com/nginx invalid
错误信息类似于:
error: failed to create deployment: deployments.apps "invalid" is forbidden: ValidatingAdmissionPolicy 'image-matches-namespace-environment.policy.example.com' with binding 'demo-binding-test.example.com' denied request: only prod images are allowed in namespace default
4 - 众所周知的标签、注解和污点
Kubernetes 保留 kubernetes.io
和 k8s.io
名字空间中的所有标签、注解和污点。
本文档既可作为值的参考,也可作为分配值的协调点。
API 对象上使用的标签、注解和污点
apf.kubernetes.io/autoupdate-spec
类别:注解
例子:apf.kubernetes.io/autoupdate-spec: "true"
用于:FlowSchema
和 PriorityLevelConfiguration
对象
如果在 FlowSchema 或 PriorityLevelConfiguration 上将此注解设置为 true,
那么该对象的 spec
将由 kube-apiserver 进行管理。如果 API 服务器不识别 APF 对象,
并且你对其添加了自动更新的注解,则 API 服务器将删除整个对象。否则,API 服务器不管理对象规约。
更多细节参阅维护强制性和建议的配置对象
app.kubernetes.io/component
类别:标签
例子:app.kubernetes.io/component: "database"
用于:所有对象(通常用于工作负载资源 )。
应用架构中的组件。
推荐标签 之一。
app.kubernetes.io/created-by(已弃用)
类别:标签
示例:app.kubernetes.io/created-by: "controller-manager"
用于:所有对象(通常用于工作负载资源 )。
创建此资源的控制器/用户。
app.kubernetes.io/instance
类别:标签
示例:app.kubernetes.io/instance: "mysql-abcxyz"
用于:所有对象(通常用于工作负载资源 )。
标识应用实例的唯一名称。要分配一个不唯一的名称,可使用 app.kubernetes.io/name 。
推荐标签 之一。
app.kubernetes.io/managed-by
类别:标签
示例:app.kubernetes.io/managed-by: "helm"
用于:所有对象(通常用于工作负载资源 )。
用于管理应用操作的工具。
推荐标签 之一。
app.kubernetes.io/name
类别:标签
示例:app.kubernetes.io/name: "mysql"
用于:所有对象(通常用于工作负载资源 )。
应用的名称。
推荐标签 之一。
app.kubernetes.io/part-of
类别:标签
示例:app.kubernetes.io/part-of: "wordpress"
用于:所有对象(通常用于工作负载资源 )。
此应用所属的更高级别应用的名称。
推荐标签 之一。
app.kubernetes.io/version
类别:标签
示例:app.kubernetes.io/version: "5.7.21"
用于:所有对象(通常用于工作负载资源 )。
值的常见形式包括:
推荐标签 之一。
applyset.kubernetes.io/additional-namespaces (alpha)
类别:注解
示例:applyset.kubernetes.io/additional-namespaces: "namespace1,namespace2"
用于:作为 ApplySet 父对象使用的对象。
此注解处于 Alpha 阶段。
对于 Kubernetes 1.31 版本,如果定义它们的
CustomResourceDefinition
打了 applyset.kubernetes.io/is-parent-type
标签,
那么你可以在 Secret、ConfigMap 或自定义资源上使用此注解。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
此注解应用于父对象,这些父对象用于跟踪 ApplySet 以优化 ApplySet 成员对象列表。
它在 AppySet 规范中是可选的,因为工具可以执行发现或使用不同的优化。
然而,对于 Kubernetes 1.31 版本,它是 kubectl 必需的。
当存在时,注解的值必须是一个以逗号分隔的 group-kinds 列表,采用完全限定的名称格式,例如 <resource>.<group>
。
applyset.kubernetes.io/contains-group-resources (alpha)
类别:注解
示例:applyset.kubernetes.io/contains-group-resources: "certificates.cert-manager.io,configmaps,deployments.apps,secrets,services"
用于:作为 ApplySet 父对象使用的对象。
此注解处于 Alpha 阶段。
对于 Kubernetes 1.31 版本, 如果定义它们的
CustomResourceDefinition
打了 applyset.kubernetes.io/is-parent-type
标签,
那么你可以在 Secret、ConfigMap 或自定义资源上使用此注解。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
此注解应用于父对象,这些父对象用于跟踪 ApplySet 以优化 ApplySet 成员对象列表。
它在 AppySet 规范中是可选的,因为工具可以执行发现或使用不同的优化。
然而,对于 Kubernetes 1.31 版本,它是 kubectl 必需的。
当存在时,注解的值必须是一个以逗号分隔的 group-kinds 列表,采用完全限定的名称格式,例如 <resource>.<group>
。
applyset.kubernetes.io/contains-group-resources(已弃用)
类别:注解
例子:applyset.kubernetes.io/contains-group-resources: "certificates.cert-manager.io,configmaps,deployments.apps,secrets,services"
用于:作为 ApplySet 父对象的对象。
对于 Kubernetes 1.31 版本,如果定义它们的
CustomResourceDefinition 打了 applyset.kubernetes.io/is-parent-type
标签,
那么你可以在 Secret、ConfigMap 或自定义资源上使用此注解。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
此注解应用于父对象,这些父对象用于跟踪 ApplySet 以优化 ApplySet 成员对象列表。
它在 AppySet 规范中是可选的,因为工具可以执行发现或使用不同的优化。
然而,对于 Kubernetes 1.31 版本,它是 kubectl 必需的。
当存在时,注解的值必须是一个以逗号分隔的 group-kinds 列表,采用完全限定的名称格式,例如 <resource>.<group>
。
applyset.kubernetes.io/id (alpha)
类别:标签
示例:applyset.kubernetes.io/id: "applyset-0eFHV8ySqp7XoShsGvyWFQD3s96yqwHmzc4e0HR1dsY-v1"
用于:作为 ApplySet 父对象使用的对象。
此注解处于 Alpha 阶段。
对于 Kubernetes 1.31 版本, 如果定义它们的
CustomResourceDefinition
打了 applyset.kubernetes.io/is-parent-type
标签,那么你可以在 Secret、ConfigMap 或自定义资源上使用此注解。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
此标签使对象成为 AppySet 父对象。
它的值是 ApplySet 的唯一 ID,该 ID 派生自父对象本身的标识。
该 ID 必须 是所在对象的 group-kind-name-namespace 的 hash 的 base64 编码(使用 RFC4648 的 URL 安全编码),
格式为:<base64(sha256(<name>.<namespace>.<kind>.<group>))>
。
此标签的值与对象 UID 之间没有关系。
applyset.kubernetes.io/is-parent-type (alpha)
类别:标签
示例:applyset.kubernetes.io/is-parent-type: "true"
用于:自定义资源 (CRD)
此注解处于 Alpha 阶段。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
你可以在 CustomResourceDefinition (CRD) 上设置这个标签,
以将它定义的自定义资源类型(而不是 CRD 本身)标识为 ApplySet 的允许父类。
这个标签唯一允许的值是 "true"
;如果你想将一个 CRD 标记为不是 ApplySet 的有效父级,请省略这个标签。
applyset.kubernetes.io/part-of (alpha)
类别:标签
示例:applyset.kubernetes.io/part-of: "applyset-0eFHV8ySqp7XoShsGvyWFQD3s96yqwHmzc4e0HR1dsY-v1"
用于:所有对象。
此注解处于 Alpha 阶段。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
此标签使对象成为 ApplySet 的成员。
标签的值 必须 与父对象上的 applyset.kubernetes.io/id
标签的值相匹配。
类别:注解
示例:applyset.kubernetes.io/tooling: "kubectl/v1.31"
用于:作为 ApplySet 父对象使用的对象。
此注解处于 Alpha 阶段。
对于 Kubernetes 1.31 版本, 如果定义它们的
CustomResourceDefinition
打了 applyset.kubernetes.io/is-parent-type
标签,那么你可以在 Secret、ConfigMap 或自定义资源上使用此注解。
规范的部分功能用来实现在 kubectl 中基于 ApplySet 的删除 。
此注解应用于父对象,这些父对象用于跟踪 ApplySet 以指示哪个工具管理 AppySet。
工具应该拒绝改变属于其他工具 ApplySets。
该值必须采用 <toolname>/<semver>
格式。
apps.kubernetes.io/pod-index (beta)
类别:标签
例子:apps.kubernetes.io/pod-index: "0"
用于:Pod
当 StatefulSet 控制器为 StatefulSet 创建 Pod 时,该控制器会在 Pod 上设置这个标签。
标签的值是正在创建的 Pod 的序号索引。
更多细节参阅 StatefulSet 主题中的
Pod 索引标签 。
请注意,PodIndexLabel
特性门控必须被启用,才能将此标签添加到 Pod 上。
resource.kubernetes.io/pod-claim-name
类别:注解
示例:resource.kubernetes.io/pod-claim-name: "my-pod-claim"
用于:ResourceClaim
该注解被赋予自动生成的 ResourceClaim。
注解的值对应于触发 ResourceClaim 创建的 Pod 在 .spec
中的资源声明名称。
此注解是动态资源分配 的内部实现细节。
你不需要读取或修改此注解的值。
cluster-autoscaler.kubernetes.io/safe-to-evict
类别:注解
例子:cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
用于:Pod
当这个注解设置为 "true"
时,即使其他规则通常会阻止驱逐操作,也会允许该集群自动扩缩器驱逐一个 Pod。
集群自动扩缩器从不驱逐将此注解显式设置为 "false"
的 Pod;你可以针对要保持运行的重要 Pod 设置此注解。
如果未设置此注解,则集群自动扩缩器将遵循其 Pod 级别的行为。
config.kubernetes.io/local-config
类别:注解
例子:config.kubernetes.io/local-config: "true"
用于:所有对象
该注解用于清单中的对象,表示某对象是本地配置,不应提交到 Kubernetes API。
对于这个注解,当值为 "true"
时,表示该对象仅被客户端工具使用,不应提交到 API 服务器。
当值为 "false"
时,可以用来声明该对象应提交到 API 服务器,即使它是本地对象。
该注解是 Kubernetes 资源模型 (KRM) 函数规范的一部分,被 Kustomize 和其他类似的第三方工具使用。
例如,Kustomize 会从其最终构建输出中删除带有此注解的对象。
container.apparmor.security.beta.kubernetes.io/*(已弃用)
类别:注解
例子:container.apparmor.security.beta.kubernetes.io/my-container: my-custom-profile
用于:Pod
此注解允许你为 Kubernetes Pod 中的容器指定 AppArmor 安全配置文件。
从 Kubernetes v1.30 开始,此注解应该通过 appArmorProfile
字段进行设置。
更多细节参阅 AppArmor 教程。
该教程演示了如何使用 AppArmor 限制容器的权能和访问权限。
所指定的配置文件定义了容器进程必须遵守的规则集和限制集。这有助于针对容器实施安全策略和隔离措施。
internal.config.kubernetes.io/* (保留的前缀)
类别:注解
用于:所有对象
该前缀被保留,供遵从 Kubernetes 资源模型 (KRM) 函数规范的编排工具内部使用。
带有该前缀的注解仅在编排过程中使用,不会持久化到文件系统。
换句话说,编排工具应从本地文件系统读取文件时设置这些注解,并在将函数输出写回文件系统时删除它们。
除非特定注解另有说明,KRM 函数不得 修改带有此前缀的注解。
这使得编排工具可以添加额外的内部注解,而不需要更改现有函数。
internal.config.kubernetes.io/path
类别:注解
例子:internal.config.kubernetes.io/path: "relative/file/path.yaml"
用于:所有对象
此注解记录了加载对象清单文件的(斜线分隔、与操作系统无关)相对路径。
该路径相对于文件系统上由编排工具确定的固定位置。
该注解是 Kubernetes 资源模型 (KRM) 函数规范的一部分,被 Kustomize 和其他类似的第三方工具使用。
KRM 函数不应 在输入对象上修改此注解,除非它正在修改引用的文件。
KRM 函数可以 在它所生成的对象上包含这个注解。
internal.config.kubernetes.io/index
类别:注解
例子:internal.config.kubernetes.io/index: "2"
用于:所有对象
该注解记录了包含对象的 YAML 文档在加载对象的清单文件中的零索引位置。
请注意,YAML 文档由三个破折号 (---) 分隔,每个文档可以包含一个对象。
如果未指定此注解,则该值为 0。
该注解是 Kubernetes 资源模型 (KRM) 函数规范的一部分,被 Kustomize 和其他类似的第三方工具使用。
KRM 函数不应 在输入对象上修改此注解,除非它正在修改引用的文件。
KRM 函数可以 在它所生成的对象上包含这个注解。
kubernetes.io/arch
类别:标签
例子:kubernetes.io/arch: "amd64"
用于:Node
Kubelet 使用 Go 定义的 runtime.GOARCH
填充它。如果你混合使用 ARM 和 X86 节点,这会很方便。
kubernetes.io/os
类别:标签
例子:kubernetes.io/os: "linux"
用于:Node,Pod
对于节点,kubelet 会根据 Go 定义的 runtime.GOOS
填充这个值。
你可以很方便地在集群中混合使用操作系统(例如:混合使用 Linux 和 Windows 节点)。
你还可以在 Pod 上设置这个标签。
Kubernetes 允许你为此标签设置任何值;如果你使用此标签,
你应该将其设置为与该 Pod 实际使用的操作系统相对应的 Go runtime.GOOS
字符串。
当 Pod 的 kubernetes.io/os 标签值与节点上的标签值不匹配时,节点上的 kubelet 不会运行该 Pod。
但是,kube-scheduler 并未考虑这一点。
另外,如果你为 Pod 指定的操作系统与运行该 kubelet 的节点操作系统不相同,那么 kubelet 会拒绝运行该 Pod。
请查看 Pod 操作系统 了解更多详情。
类别:标签
例子:kubernetes.io/metadata.name: "mynamespace"
用于:Namespace
Kubernetes API 服务器(控制平面 的一部分)在所有
Namespace 上设置此标签。标签值被设置 Namespace 的名称。你无法更改此标签的值。
如果你想使用标签选择算符 定位特定 Namespace,这很有用。
kubernetes.io/limit-ranger
类别:注解
例子:kubernetes.io/limit-ranger: "LimitRanger plugin set: cpu, memory request for container nginx; cpu, memory limit for container nginx"
用于:Pod
Kubernetes 默认不提供任何资源限制,这意味着除非你明确定义限制,否则你的容器将可以无限消耗 CPU 和内存。
你可以为 Pod 定义默认请求或默认限制。为此,你可以在相关命名空间中创建一个 LimitRange。
在你定义 LimitRange 后部署的 Pod 将受到这些限制。
注解 kubernetes.io/limit-ranger
记录了为 Pod 指定的资源默认值,以及成功应用这些默认值。
有关更多详细信息,请阅读 LimitRanges 。
kubernetes.io/config.hash
类别:注解
例子:kubernetes.io/config.hash: "df7cc47f8477b6b1226d7d23a904867b"
用于:Pod
当 kubelet 基于给定的清单创建静态 Pod 时,kubelet 会将此注解挂接到静态 Pod 上。
注解的取值是 Pod 的 UID。请注意,kubelet 还会将 .spec.nodeName
设置为当前节点名称,
就像 Pod 被调度到此节点一样。
kubernetes.io/config.mirror
类别:注解
例子:kubernetes.io/config.mirror: "df7cc47f8477b6b1226d7d23a904867b"
用于:Pod
对于 kubelet 在节点上创建的静态 Pod,
系统会在 API 服务器上创建镜像 Pod 。
kubelet 添加一个注解以指示此 Pod 实际上是镜像 Pod。
注解的值是从 kubernetes.io/config.hash
注解复制过来的,即 Pod 的 UID。
在更新设置了此注解的 Pod 时,注解不能被更改或移除。
如果 Pod 没有此注解,此注解在 Pod 更新期间不能被添加。
kubernetes.io/config.source
类别:注解
例子:kubernetes.io/config.source: "file"
用于:Pod
此注解由 kubelet 添加,以指示 Pod 的来源。
对于静态 Pod,注解的值可以是 file
或 http
之一,具体取决于 Pod 清单所在的位置。
对于在 API 服务器上创建并调度到当前节点的 Pod,注解的值是 api
。
kubernetes.io/config.seen
类别:注解
例子:kubernetes.io/config.seen: "2023-10-27T04:04:56.011314488Z"
用于:Pod
当 kubelet 第一次看到 Pod 时,kubelet 可以将此注解添加到 Pod 上,
注解的值是格式为 RFC3339 的当前时间戳。
addonmanager.kubernetes.io/mode
类别:标签
示例:addonmanager.kubernetes.io/mode: "Reconcile"
用于:所有对象。
要指定如何管理外接插件,你可以使用 addonmanager.kubernetes.io/mode
标签。
这个标签可以有三个标签之一:Reconcile
,EnsureExists
,或者 Ignore
。
Reconcile
:插件资源将定期与预期状态协调。如果有任何差异,插件管理器将根据需要重新创建、重新配置或删除资源。
如果没有指定标签,此值是默认值。
EnsureExists
:插件资源将仅检查是否存在,但在创建后不会修改。当没有具有该名称的资源实例时,
外接程序管理器将创建或重新创建资源。
Ignore
:插件资源将被忽略。此模式对于与外接插件管理器不兼容或由其他控制器管理的插件程序非常有用。
有关详细信息,请参见
Addon-manager 。
beta.kubernetes.io/arch(已弃用)
类别:标签
此标签已被弃用。请改用 kubernetes.io/arch
。
beta.kubernetes.io/os(已弃用)
类别:标签
此标签已被弃用。请改用 kubernetes.io/os
。
kube-aggregator.kubernetes.io/automanaged
类别:标签
例子:kube-aggregator.kubernetes.io/automanaged: "onstart"
用于:APIService
kube-apiserver
会在由 API 服务器自动创建的所有 APIService 对象上设置这个标签。
该标签标记了控制平面应如何管理该 APIService。你不应自行添加、修改或删除此标签。
说明:
当自动托管的 APIService 对象没有内置或自定义资源 API 对应于该 APIService 的 API 组/版本时,
它将被 kube-apiserver 删除。
有两个可能的值:
onstart
:API 服务器应在启动时协调 APIService,但在其他时间不会进行协调。
true
:API 服务器应持续协调此 APIService。
service.alpha.kubernetes.io/tolerate-unready-endpoints(已弃用)
类别:注解
用于:StatefulSet
Service 上的这个注解表示 Endpoints 控制器是否应该继续为未准备好的 Pod 创建 Endpoints。
这些 Service 的 Endpoints 保留其 DNS 记录,并从 kubelet 启动 Pod 中的所有容器并将其标记为
Running 的那一刻起继续接收 Service 的流量,直到 kubelet 停止所有容器并从 API 服务器删除 Pod 为止。
autoscaling.alpha.kubernetes.io/behavior(已弃用)
类别:注解
用于:HorizontalPodAutoscaler
此注解曾在早期的 Kubernetes 版本中用于配置 HorizontalPodAutoscaler(HPA)的扩缩容行为。
它允许你指定 HPA 应如何扩容或缩容 Pod,包括设置稳定窗口和扩缩容策略。
在所有受支持的 Kubernetes 版本中,设置此注解没有任何效果。
kubernetes.io/hostname
类别:标签
例子:kubernetes.io/hostname: "ip-172-20-114-199.ec2.internal"
用于:Node
Kubelet 使用主机名填充此标签。请注意,可以通过将 --hostname-override
标志传递给 kubelet
来替代“实际”主机名。
此标签也用作拓扑层次结构的一部分。有关详细信息,请参阅 topology.kubernetes.io/zone 。
kubernetes.io/change-cause
类别:注解
例子:kubernetes.io/change-cause: "kubectl edit --record deployment foo"
用于:所有对象
此注解是对某些事物发生变更的原因的最佳猜测。
将 --record
添加到可能会更改对象的 kubectl
命令时会填充它。
kubernetes.io/description
类别:注解
例子:kubernetes.io/description: "Description of K8s object."
用于:所有对象
此注解用于描述给定对象的特定行为。
kubernetes.io/enforce-mountable-secrets
类别:注解
例子:kubernetes.io/enforce-mountable-secrets: "true"
用于:ServiceAccount
此注解的值必须为 true 才能生效。
当你将此注解设置为 "true" 时,Kubernetes 会对以此 ServiceAccount 运行的 Pod 强制执行以下规则:
作为卷挂载的 Secret 必须列在 ServiceAccount 的 secrets
字段中。
针对容器(包括边车容器和 Init 容器)在 envFrom
中引用的 Secret 也必须列在 ServiceAccount 的 secrets
字段中。
如果 Pod 中的任一容器引用了未在 ServiceAccount 的 secrets
字段中列出的 Secret(即使该引用被标记为 optional
),
则 Pod 将启动失败,并报错表示不合规的 Secret 引用。
在 Pod 的 imagePullSecrets
中引用的 Secret 必须出现在 ServiceAccount 的 imagePullSecrets
字段中,
否则 Pod 将启动失败,并报错表示不合规的镜像拉取 Secret 引用。
当你创建或更新 Pod 时,系统会检查这些规则。
如果 Pod 未遵循这些规则,Pod 将启动失败,并且你将看到一条错误消息。
如果 Pod 已经在运行,并且你将 kubernetes.io/enforce-mountable-secrets
注解更改为 true,
或者你编辑关联的 ServiceAccount 以移除 Pod 已经在使用的对 Secret 的引用,那么 Pod 将继续运行。
node.kubernetes.io/exclude-from-external-load-balancers
类别:标签
例子:node.kubernetes.io/exclude-from-external-load-balancers
用于:Node
你可以向特定的 Worker 节点添加标签,以将这些节点从外部负载均衡器使用的后端服务器列表中去除。
以下命令可用于从后端集的后端服务器列表中排除一个 Worker 节点:
kubectl label nodes <节点名称> node.kubernetes.io/exclude-from-external-load-balancers= true
controller.kubernetes.io/pod-deletion-cost
类别:注解
例子:controller.kubernetes.io/pod-deletion-cost: "10"
用于:Pod
该注解用于设置
Pod 删除成本 允许用户影响
ReplicaSet 缩减顺序。注解解析为 int32
类型。
cluster-autoscaler.kubernetes.io/enable-ds-eviction
类别:注解
例子:cluster-autoscaler.kubernetes.io/enable-ds-eviction: "true"
用于:Pod
该注解控制 DaemonSet Pod 是否应由 ClusterAutoscaler 驱逐。
该注解需要在 DaemonSet 清单中的 DaemonSet Pod 上指定。
当该注解设为 "true"
时,即使其他规则通常会阻止驱逐,也将允许 ClusterAutoscaler 驱逐 DaemonSet Pod。
要取消允许 ClusterAutoscaler 驱逐 DaemonSet Pod,你可以为重要的 DaemonSet Pod 将该注解设为 "false"
。
如果未设置该注解,则 Cluster Autoscaler 将遵循其整体行为(即根据其配置驱逐 DaemonSet)。
说明:
该注解仅影响 DaemonSet Pod。
kubernetes.io/ingress-bandwidth
类别:注解
示例:kubernetes.io/ingress-bandwidth: 10M
用于:Pod
你可以对 Pod 应用服务质量流量控制并有效限制其可用带宽。
入站流量(到 Pod)通过控制排队的数据包来处理,以有效地处理数据。
要限制 Pod 的带宽,请编写对象定义 JSON 文件并使用 kubernetes.io/ingress-bandwidth
注解指定数据流量速度。用于指定入站的速率单位是每秒,
作为量纲(Quantity) 。
例如,10M
表示每秒 10 兆比特。
说明:
入站流量控制注解是一项实验性功能。
如果要启用流量控制支持,必须将 bandwidth
插件添加到 CNI 配置文件(默认为 /etc/cni/net.d
)
并确保二进制文件包含在你的 CNI bin 目录中(默认为 /opt/cni/bin
)。
kubernetes.io/egress-bandwidth
类别:注解
示例:kubernetes.io/egress-bandwidth: 10M
用于:Pod
出站流量(来自 pod)由策略控制,策略只是丢弃超过配置速率的数据包。
你为一个 Pod 所设置的限制不会影响其他 Pod 的带宽。
要限制 Pod 的带宽,请编写对象定义 JSON 文件并使用 kubernetes.io/egress-bandwidth
注解指定数据流量速度。
用于指定出站的速率单位是每秒比特数,
以量纲(Quantity) 的形式给出。
例如,10M
表示每秒 10 兆比特。
说明:
出站流量控制注解是一项实验性功能。
如果要启用流量控制支持,必须将 bandwidth
插件添加到 CNI 配置文件(默认为 /etc/cni/net.d
)
并确保二进制文件包含在你的 CNI bin 目录中(默认为 /opt/cni/bin
)。
beta.kubernetes.io/instance-type(已弃用)
类别:标签
node.kubernetes.io/instance-type
类别:标签
例子:node.kubernetes.io/instance-type: "m3.medium"
用于:Node
Kubelet 使用云驱动定义的实例类型填充它。
仅当你使用云驱动时才会设置此项。如果你希望将某些工作负载定位到某些实例类型,
则此设置非常方便,但通常你希望依靠 Kubernetes 调度程序来执行基于资源的调度。
你应该基于属性而不是实例类型来调度(例如:需要 GPU,而不是需要 g2.2xlarge
)。
failure-domain.beta.kubernetes.io/region(已弃用)
类别:标签
failure-domain.beta.kubernetes.io/zone(已弃用)
类别:标签
pv.kubernetes.io/bind-completed
类别:注解
例子:pv.kubernetes.io/bind-completed: "yes"
用于:PersistentVolumeClaim
当在 PersistentVolumeClaim (PVC) 上设置此注解时,表示 PVC 的生命周期已通过初始绑定设置。
当存在此注解时,该信息会改变控制平面解释 PVC 对象状态的方式。此注解的值对 Kubernetes 无关紧要。
pv.kubernetes.io/bound-by-controller
类别:注解
例子:pv.kubernetes.io/bound-by-controller: "yes"
用于:PersistentVolume、PersistentVolumeClaim
如果此注解设置在 PersistentVolume 或 PersistentVolumeClaim 上,则表示存储绑定
(PersistentVolume → PersistentVolumeClaim,或 PersistentVolumeClaim → PersistentVolume)
已由控制器 配置完毕。
如果未设置此注解,且存在存储绑定,则缺少该注解意味着绑定是手动完成的。此注解的值无关紧要。
pv.kubernetes.io/provisioned-by
类别:注解
例子:pv.kubernetes.io/provisioned-by: "kubernetes.io/rbd"
用于:PersistentVolume
此注解被添加到已由 Kubernetes 动态制备的 PersistentVolume (PV)。
它的值是创建卷的卷插件的名称。它同时服务于用户(显示 PV 的来源)和 Kubernetes(识别其决策中动态制备的 PV)。
pv.kubernetes.io/migrated-to
类别:注解
例子:pv.kubernetes.io/migrated-to: pd.csi.storage.gke.io
用于:PersistentVolume、PersistentVolumeClaim
它被添加到 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC),应该由其相应的 CSI
驱动程序通过 CSIMigration
特性门控动态制备/删除。设置此注解后,Kubernetes 组件将“停止”,
而 external-provisioner
将作用于对象。
statefulset.kubernetes.io/pod-name
类别:标签
例子:statefulset.kubernetes.io/pod-name: "mystatefulset-7"
当 StatefulSet 控制器为 StatefulSet 创建 Pod 时,控制平面会在该 Pod 上设置此标签。标签的值是正在创建的 Pod 的名称。
有关详细信息,请参阅 StatefulSet 主题中的
Pod 名称标签 。
scheduler.alpha.kubernetes.io/node-selector
类别:注解
例子:scheduler.alpha.kubernetes.io/node-selector: "name-of-node-selector"
用于:Namespace
PodNodeSelector
使用此注解键为名字空间中的 Pod 设置节点选择算符。
topology.kubernetes.io/region
类别:标签
例子:topology.kubernetes.io/region: "us-east-1"
用于:Node、PersistentVolume
请参阅 topology.kubernetes.io/zone 。
topology.kubernetes.io/zone
类别:标签
例子:topology.kubernetes.io/zone: "us-east-1c"
用于:Node、PersistentVolume
在 Node 上 :kubelet
或外部 cloud-controller-manager
使用 cloudprovider
提供的信息填充它。
仅当你使用 cloudprovider
时才会设置此项。
但是,如果它在你的拓扑中有意义,你应该考虑在 Node 上设置它。
在 PersistentVolume 上 :拓扑感知卷配置器将自动在 PersistentVolume
上设置 Node 亲和性约束。
一个 Zone 代表一个逻辑故障域。Kubernetes 集群通常跨越多个 Zone 以提高可用性。
虽然 Zone 的确切定义留给基础设施实现,但 Zone 的常见属性包括 Zone 内非常低的网络延迟、Zone
内的免费网络流量以及与其他 Zone 的故障独立性。例如,一个 Zone 内的 Node 可能共享一个网络交换机,
但不同 Zone 中的 Node 无法共享交换机。
一个 Region 代表一个更大的域,由一个或多个 Zone 组成。Kubernetes 集群跨多个 Region 并不常见,
虽然 Zone 或 Region 的确切定义留给基础设施实现,
但 Region 的共同属性包括它们之间的网络延迟比它们内部更高,它们之间的网络流量成本非零,
以及与其他 Zone 或 Region 的故障独立性。例如,一个 Region 内的 Node 可能共享电力基础设施
(例如 UPS 或发电机),但不同 Region 的 Node 通常不会共享电力基础设施。
Kubernetes 对 Zone 和 Region 的结构做了一些假设:
Zone 和 Region 是分层的:Zone 是 Region 的严格子集,没有 Zone 可以在两个 Region 中;
Zone 名称跨 Region 是唯一的;例如,Region “africa-east-1” 可能由 Zone “africa-east-1a”
和 “africa-east-1b” 组成。
你可以大胆假设拓扑标签不会改变。尽管严格地讲标签是可变的,
但节点的用户可以假设给定节点只能通过销毁和重新创建才能完成 Zone 间移动。
Kubernetes 可以通过多种方式使用这些信息。例如,调度程序会自动尝试将 ReplicaSet 中的 Pod
分布在单 Zone 集群中的多个节点上(以便减少节点故障的影响,请参阅 kubernetes.io/hostname )。
对于多 Zone 集群,这种分布行为也适用于 Zone(以减少 Zone 故障的影响)。
Zone 级别的 Pod 分布是通过 SelectorSpreadPriority 实现的。
SelectorSpreadPriority 是一个尽力而为的放置机制。如果集群中的 Zone 是异构的
(例如:节点数量不同、节点类型不同或 Pod 资源需求有别等),这种放置机制可能会让你的
Pod 无法实现跨 Zone 均匀分布。
如果需要,你可以使用同质 Zone(节点数量和类型均相同)来减少不均匀分布的可能性。
调度程序还将(通过 VolumeZonePredicate 条件)确保申领给定卷的 Pod 仅被放置在与该卷相同的 Zone 中。
卷不能跨 Zone 挂接。
你应该考虑手动添加标签(或添加对 PersistentVolumeLabel
的支持)。
基于 PersistentVolumeLabel
,调度程序可以防止 Pod 挂载来自其他 Zone 的卷。
如果你的基础架构没有此限制,则不需要将 Zone 标签添加到卷上。
volume.beta.kubernetes.io/storage-provisioner(已弃用)
类别:注解
例子:volume.beta.kubernetes.io/storage-provisioner: "k8s.io/minikube-hostpath"
用于:PersistentVolumeClaim
此注解自 v1.23 已被弃用。
参见 volume.kubernetes.io/storage-provisioner 。
volume.beta.kubernetes.io/storage-class(已弃用)
类别:注解
例子:volume.beta.kubernetes.io/storage-class: "example-class"
用于:PersistentVolume、PersistentVolumeClaim
此注解可以为 PersistentVolume(PV)或 PersistentVolumeClaim(PVC)指定
StorageClass 。
当 storageClassName
属性和 volume.beta.kubernetes.io/storage-class
注解均被指定时,
注解 volume.beta.kubernetes.io/storage-class
将优先于 storageClassName
属性。
此注解已被弃用。作为替代方案,你应该为 PersistentVolumeClaim 或 PersistentVolume 设置
storageClassName
字段 。
volume.beta.kubernetes.io/mount-options(已弃用)
类别:注解
例子:volume.beta.kubernetes.io/mount-options: "ro,soft"
用于:PersistentVolume
针对 PersistentVolume 挂载到一个节点上的情形,
Kubernetes 管理员可以指定更多的挂载选项 。
volume.kubernetes.io/storage-provisioner
类别:注解
用于:PersistentVolumeClaim
此注解将被添加到根据需要动态制备的 PVC 上。
其取值是假设为 PVC 制备卷时卷插件的名称。
volume.kubernetes.io/selected-node
类别:注解
用于:PersistentVolumeClaim
此注解被添加到调度程序所触发的 PVC 上,对应的 PVC 需要被动态制备。注解值是选定节点的名称。
volumes.kubernetes.io/controller-managed-attach-detach
类别:注解
用于:Node
如果节点已在其自身上设置了注解 volumes.kubernetes.io/controller-managed-attach-detach
,
那么它的存储挂接和解除挂接的操作是交由
卷挂接/解除挂接 控制器 来管理的。
注解的值并不重要。
node.kubernetes.io/windows-build
类别:标签
例子:node.kubernetes.io/windows-build: "10.0.17763"
用于:Node
当 kubelet 在 Microsoft Windows 上运行时,它会自动标记其所在节点以记录所使用的 Windows Server 的版本。
标签的值采用 “MajorVersion.MinorVersion.BuildNumber” 格式。
storage.alpha.kubernetes.io/migrated-plugins
类别:注解
例子:storage.alpha.kubernetes.io/migrated-plugins: "kubernetes.io/cinder"
用于:CSINode(一个扩展 API)
系统会自动为映射到安装 CSIDriver 的节点的 CSINode 对象添加此注解。
此注解显示已迁移插件的树内插件名称,其值取决于集群的树内云驱动存储类型。
例如,如果树内云驱动存储类型为 CSIMigrationvSphere
,则此节点的 CSINode 实例应更新为:
storage.alpha.kubernetes.io/migerated-plugins: "kubernetes.io/vsphere-volume"
service.kubernetes.io/headless
类别:标签
例子:service.kubernetes.io/headless: ""
用于:Endpoints
当拥有的 Service 是无头类型时,控制平面将此标签添加到 Endpoints 对象。
更多细节参阅无头服务 。
service.kubernetes.io/topology-aware-hints(已弃用)
例子:service.kubernetes.io/topology-aware-hints: "Auto"
用于:Service
此注解曾用于在 Service 中启用拓扑感知提示(topology aware hints) 。
然而,拓扑感知提示已经做了更名操作,
此概念现在名为拓扑感知路由(topology aware routing) 。
在 Service 上将该注解设置为 Auto
会配置 Kubernetes 控制平面,
以将拓扑提示添加到该 Service 关联的 EndpointSlice 上。你也可以显式地将该注解设置为 Disabled
。
如果你使用的是早于 1.31 的 Kubernetes 版本,
请查阅该版本对应的文档,了解其拓扑感知路由的工作方式。
此注解没有其他有效值。如果你不希望为 Service 启用拓扑感知提示,不要添加此注解。
service.kubernetes.io/topology-mode
类别:注解
例子:service.kubernetes.io/topology-mode: Auto
用于:Service
此注解提供了一种定义 Service 如何处理网络拓扑的方式;
例如,你可以配置 Service,以便 Kubernetes 更倾向于将客户端和服务器之间的流量保持在同一拓扑区域内。
在某些情况下,这有助于降低成本或提高网络性能。
更多细节参阅拓扑感知路由 。
kubernetes.io/service-name
类别:标签
例子:kubernetes.io/service-name: "my-website"
用于:EndpointSlice
Kubernetes 使用这个标签将
EndpointSlices
与服务 关联。
这个标签记录了 EndpointSlice 后备服务的名称 。
所有 EndpointSlice 都应将此标签设置为其关联服务的名称。
kubernetes.io/service-account.name
类别:注解
示例:kubernetes.io/service-account.name: "sa-name"
用于:Secret
这个注解记录了令牌(存储在 kubernetes.io/service-account-token
类型的 Secret 中)所代表的
ServiceAccount 的名称 。
kubernetes.io/service-account.uid
类别:注解
示例:kubernetes.io/service-account.uid: da68f9c6-9d26-11e7-b84e-002dc52800da
用于:Secret
该注解记录了令牌(存储在 kubernetes.io/service-account-token
类型的 Secret 中)所代表的
ServiceAccount 的唯一 ID 。
kubernetes.io/legacy-token-last-used
类别:标签
例子:kubernetes.io/legacy-token-last-used: 2022-10-24
用于:Secret
控制面仅为 kubernetes.io/service-account-token
类型的 Secret 添加此标签。
该标签的值记录着控制面最近一次接到客户端使用服务账号令牌进行身份验证请求的日期(ISO 8601
格式,UTC 时区)
如果上一次使用老的令牌的时间在集群获得此特性(添加于 Kubernetes v1.26)之前,则不会设置此标签。
kubernetes.io/legacy-token-invalid-since
类别:标签
例子:kubernetes.io/legacy-token-invalid-since: 2023-10-27
用于:Secret
控制平面会自动将此标签添加到类别为 kubernetes.io/service-account-token
的自动生成的 Secret 中。
此标签将基于 Secret 的令牌标记为无效的认证令牌。此标签的值记录了控制平面检测到自动生成的
Secret 在指定时间段内(默认是一年)未被使用的日期(ISO 8601 格式,UTC 时区)。
endpointslice.kubernetes.io/managed-by
类别:标签
例子:endpointslice.kubernetes.io/managed-by: "endpointslice-controller.k8s.io"
用于:EndpointSlice
用于标示管理 EndpointSlice 的控制器或实体。该标签旨在使不同的 EndpointSlice
对象能够由同一集群内的不同控制器或实体管理。
endpointslice.kubernetes.io/skip-mirror
类别:标签
例子:endpointslice.kubernetes.io/skip-mirror: "true"
用于:Endpoints
可以在 Endpoints 资源上将此标签设置为 "true"
,以指示 EndpointSliceMirroring
控制器不应使用 EndpointSlice 镜像此 Endpoints 资源。
service.kubernetes.io/service-proxy-name
类别:标签
例子:service.kubernetes.io/service-proxy-name: "foo-bar"
用于:Service
kube-proxy 自定义代理会使用这个标签,它将服务控制委托给自定义代理。
experimental.windows.kubernetes.io/isolation-type(已弃用)
类别:注解
例子:experimental.windows.kubernetes.io/isolation-type: "hyperv"
用于:Pod
此注解用于运行具有 Hyper-V 隔离的 Windows 容器。
说明:
从 v1.20 开始,此注解已弃用。1.21 中移除了实验性 Hyper-V 支持。
ingressclass.kubernetes.io/is-default-class
类别:注解
例子:ingressclass.kubernetes.io/is-default-class: "true"
用于:IngressClass
当单个 IngressClass 资源将此注解设置为 "true"
时,新的未指定 Ingress 类的 Ingress
资源将被设置为此默认类。
nginx.ingress.kubernetes.io/configuration-snippet
类别:注解
例子:nginx.ingress.kubernetes.io/configuration-snippet: " more_set_headers \"Request-Id: $req_id\";\nmore_set_headers \"Example: 42\";\n"
用于:Ingress
你可以使用此注解在使用 NGINX Ingress Controller 的 Ingress 上设置额外配置。
自 Ingress 控制器 1.9.0 版本以来,configuration-snippet
注解默认会被忽略。
要使用此注解,必须显式启用 NGINX Ingress 控制器的 allow-snippet-annotations
设置。
在多租户集群中启用该注解可能是危险的,因为这可能导致权限受限的用户能够获取集群中的所有 Secret。
kubernetes.io/ingress.class(已弃用)
类别:注解
用于:Ingress
说明:
从 v1.18 开始,此注解被弃用,改为鼓励使用 spec.ingressClassName
。
storageclass.kubernetes.io/is-default-class
类别:注解
例子:storageclass.kubernetes.io/is-default-class: "true"
用于:StorageClass
当单个 StorageClass 资源将此注解设置为 "true"
时,新的未指定存储类的 PersistentVolumeClaim
资源将被设置为此默认类。
alpha.kubernetes.io/provided-node-ip (alpha)
类别:注解
例子:alpha.kubernetes.io/provided-node-ip: "10.0.0.1"
用于:Node
kubelet 可以在 Node 上设置此注解来表示其配置的 IPv4 与/或 IPv6 地址。
如果 kubelet 被启动时 --cloud-provider
标志设置为任一云驱动(包括外部云驱动和传统树内云驱动)
kubelet 会在 Node 上设置此注解以表示从命令行标志(--node-ip
)设置的 IP 地址。
云控制器管理器通过云驱动验证此 IP 是否有效。
batch.kubernetes.io/job-completion-index
类别:注解、标签
例子:batch.kubernetes.io/job-completion-index: "3"
用于:Pod
kube-controller-manager 中的 Job 控制器为使用 Indexed
完成模式 创建的 Pod
设置此标签和注解。
请注意,PodIndexLabel
特性门控必须被启用,才能将其添加为 Pod 的标签 ,否则它只会用作注解。
batch.kubernetes.io/cronjob-scheduled-timestamp
类别:注解
例子:batch.kubernetes.io/cronjob-scheduled-timestamp: "2016-05-19T03:00:00-07:00"
用于:CronJob 所控制的 Job 和 Pod
此注解在 Job 是 CronJob 的一部分时用于记录 Job 的原始(预期)创建时间戳。
控制平面会将该值设置为 RFC3339 格式的时间戳。如果 Job 属于设置了时区的 CronJob,
则时间戳以该时区为基准。否则,时间戳以 controller-manager 的本地时间为准。
kubectl.kubernetes.io/default-container
类别:注解
例子:kubectl.kubernetes.io/default-container: "front-end-app"
此注解的值是此 Pod 的默认容器名称。例如,未指定 -c
或 --container
标志时执行
kubectl logs
或 kubectl exec
命令将使用此默认容器。
kubectl.kubernetes.io/default-logs-container(已弃用)
类别:注解
例子:kubectl.kubernetes.io/default-logs-container: "front-end-app"
此注解的值是针对此 Pod 的默认日志记录容器的名称。例如,不带 -c
或 --container
标志的 kubectl logs
将使用此默认容器。
kubectl.kubernetes.io/last-applied-configuration
类别:注解
例子:参见以下代码片段
kubectl.kubernetes.io/last-applied-configuration : >
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"example","namespace":"default"},"spec":{"selector":{"matchLabels":{"app.kubernetes.io/name":foo}},"template":{"metadata":{"labels":{"app.kubernetes.io/name":"foo"}},"spec":{"containers":[{"image":"container-registry.example/foo-bar:1.42","name":"foo-bar","ports":[{"containerPort":42}]}]}}}}
用于:所有对象
kubectl 命令行工具使用此注解作为一种旧的机制来跟踪变更。
该机制已被服务器端应用 取代。
kubectl.kubernetes.io/restartedAt
类别:注解
例子:kubectl.kubernetes.io/restartedAt: "2024-06-21T17:27:41Z"
用于:Deployment、ReplicaSet、StatefulSet、DaemonSet、Pod
此注解包含资源(Deployment、ReplicaSet、StatefulSet 或 DaemonSet)的最新重启时间,
kubectl 通过触发一次 rollout 来强制创建新的 Pod。
kubectl rollout restart <RESOURCE>
命令触发资源重启时给资源的所有 Pod 的模板元数据打上此注解补丁。
在上述例子中,最新的重启时间显示为 2024 年 6 月 21 日 17:27:41 UTC。
你不应假设此注解代表最近一次更新的日期/时间;在上次手动触发的 rollout 之后,可能还进行了其他独立更改。
如果你手动在 Pod 上设置此注解,什么都不会发生。这个重启的副作用是工作负载管理和 Pod 模板化的工作方式所造成的。
endpoints.kubernetes.io/over-capacity
类别:注解
例子:endpoints.kubernetes.io/over-capacity:truncated
用于:Endpoints
如果关联的 服务(Service) 有超过 1000 个后备端点,
则控制平面 将此注解添加到
Endpoints 对象。
此注解表示 Endpoints 对象已超出容量,并且已将 Endpoints 数截断为 1000。
如果后端端点的数量低于 1000,则控制平面将移除此注解。
endpoints.kubernetes.io/last-change-trigger-time
类别:注解
例子:endpoints.kubernetes.io/last-change-trigger-time: "2023-07-20T04:45:21Z"
用于:Endpoints
此注解设置在 Endpoints 对象上,
表示时间戳(此时间戳以 RFC 3339 日期时间字符串格式存储。例如,“2018-10-22T19:32:52.1Z”)。
这是某个 Pod 或 Service 对象发生变更并触发 Endpoints 对象变更的时间戳。
control-plane.alpha.kubernetes.io/leader(已弃用)
类别:注解
例子:control-plane.alpha.kubernetes.io/leader={"holderIdentity":"controller-0","leaseDurationSeconds":15,"acquireTime":"2023-01-19T13:12:57Z","renewTime":"2023-01-19T13:13:54Z","leaderTransitions":1}
用于:Endpoints
控制平面 先前在
Endpoints
对象上设置此注解。此注解提供以下细节:
当前的领导者是谁。
获取当前领导权的时间。
租约(领导权)的持续时间,以秒为单位。
当前租约(当前领导权)应被续约的时间。
过去发生的领导权转换次数。
Kubernetes 现在使用租约 来管理 Kubernetes 控制平面的领导者分配。
batch.kubernetes.io/job-tracking(已弃用)
类别:注解
例子:batch.kubernetes.io/job-tracking: ""
用于:Job
Job 上存在此注解表明控制平面正在使用 Finalizer 追踪 Job 。
添加或删除此注解不再有效(Kubernetes v1.27 及更高版本),
所有 Job 均通过 Finalizer 进行追踪。
job-name (deprecated)
类别:标签
示例:job-name: "pi"
用于:由 Jobs 控制的 Jobs 和 Pods
说明:
由 Kubernetes 1.27 开始,此标签被弃用。
Kubernetes 1.27 及更高版本忽略这个标签,改为具有 job-name
前缀的标签。
controller-uid (deprecated)
类别:标签
示例:controller-uid: "$UID"
用于:由 Jobs 控制的 Job 和 Pod
说明:
由 Kubernetes 1.27 开始,此标签被弃用。
Kubernetes 1.27 及更高版本忽略这个标签,改为具有 controller-uid
前缀的标签。
batch.kubernetes.io/job-name
类别:标签
示例:batch.kubernetes.io/job-name: "pi"
用于:由 Job 控制的 Job 和 Pod
这个标签被用作一种用户友好的方式来获得与某个 Job 相对应的 Pod。
job-name
来自 Job 的 name
并且允许以一种简单的方式获得与 Job 对应的 Pod。
batch.kubernetes.io/controller-uid
类别:标签
示例:batch.kubernetes.io/controller-uid: "$UID"
用于:由 Job 控制的 Job 和 Pod
这个标签被用作一种编程方式来获得对应于某个 Job 的所有 Pod。
controller-uid
是在 selector
字段中设置的唯一标识符,
因此 Job 控制器可以获取所有对应的 Pod。
scheduler.alpha.kubernetes.io/defaultTolerations
类别:注解
例子:scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Equal", "value": "value1", "effect": "NoSchedule", "key": "dedicated-node"}]'
用于:Namespace
此注解需要启用
PodTolerationRestriction
准入控制器。此注解键允许为某个命名空间分配容忍度,在这个命名空间中创建的所有新 Pod 都会被添加这些容忍度。
scheduler.alpha.kubernetes.io/tolerationsWhitelist
类别:注解
示例:scheduler.alpha.kubernetes.io/tolerationsWhitelist: '[{"operator": "Exists", "effect": "NoSchedule", "key": "dedicated-node"}]'
用于:命名空间
此注解只有在启用(Alpha)
PodTolerationRestriction
控制器时才生效。注解值是一个 JSON 文档,它为它所注解的命名空间定义了一个允许容忍的列表。
当你创建一个 Pod 或修改其容忍度时,API 服务器将检查容忍度,以查看它们是否在允许列表中。
只有在检查成功的情况下,Pod 才被允操作。
scheduler.alpha.kubernetes.io/preferAvoidPods(已弃用)
类别:注解
用于:Node
此注解需要启用 NodePreferAvoidPods 调度插件 。
该插件自 Kubernetes 1.22 起已被弃用。
请改用污点和容忍度 。
node.kubernetes.io/not-ready
类别:污点
例子:node.kubernetes.io/not-ready: "NoExecute"
用于:Node
Node 控制器通过监控 Node 的健康状况来检测 Node 是否准备就绪,并相应地添加或删除此污点。
node.kubernetes.io/unreachable
类别:污点
例子:node.kubernetes.io/unreachable: "NoExecute"
用于:Node
Node 控制器将此污点添加到对应节点状况
Ready
为 Unknown
的 Node 上。
node.kubernetes.io/unschedulable
类别:污点
例子:node.kubernetes.io/unschedulable: "NoSchedule"
用于:Node
在初始化 Node 期间,为避免竞争条件,此污点将被添加到 Node 上。
node.kubernetes.io/memory-pressure
类别:污点
例子:node.kubernetes.io/memory-pressure: "NoSchedule"
用于:Node
kubelet 根据在 Node 上观察到的 memory.available
和 allocatableMemory.available
检测内存压力。
然后将观察到的值与可以在 kubelet 上设置的相应阈值进行比较,以确定是否应添加/删除 Node 状况和污点。
node.kubernetes.io/disk-pressure
类别:污点
例子:node.kubernetes.io/disk-pressure :"NoSchedule"
用于:Node
kubelet 根据在 Node 上观察到的 imagefs.available
、imagefs.inodesFree
、nodefs.available
和 nodefs.inodesFree
(仅限 Linux )检测磁盘压力。
然后将观察到的值与可以在 kubelet 上设置的相应阈值进行比较,以确定是否应添加/删除 Node 状况和污点。
node.kubernetes.io/network-unavailable
类别:污点
例子:node.kubernetes.io/network-unavailable: "NoSchedule"
用于:Node
当使用的云驱动指示需要额外的网络配置时,此注解最初由 kubelet 设置。
只有云上的路由被正确地配置了,此污点才会被云驱动移除。
node.kubernetes.io/pid-pressure
类别:污点
例子:node.kubernetes.io/pid-pressure: "NoSchedule"
用于:Node
kubelet 检查 /proc/sys/kernel/pid_max
大小的 D 值和 Kubernetes 在 Node 上消耗的 PID,
以获取可用 PID 数量,并将其作为 pid.available
指标值。
然后该指标与在 kubelet 上设置的相应阈值进行比较,以确定是否应该添加/删除 Node 状况和污点。
node.kubernetes.io/out-of-service
类别:污点
例子:node.kubernetes.io/out-of-service:NoExecute
用于:Node
用户可以手动将污点添加到节点,将其标记为停止服务。
如果 kube-controller-manager
上启用了 NodeOutOfServiceVolumeDetach
特性门控 ,
并且一个节点被这个污点标记为停止服务,如果节点上的 Pod 没有对应的容忍度,
这类 Pod 将被强制删除,并且,针对在节点上被终止 Pod 的卷分离操作将被立即执行。
注意:
有关何时以及如何使用此污点的更多详细信息,
请参阅非正常节点关闭 。
node.cloudprovider.kubernetes.io/uninitialized
类别:污点
例子:node.cloudprovider.kubernetes.io/uninitialized: "NoSchedule"
用于:Node
在使用“外部”云驱动启动 kubelet 时,在 Node 上设置此污点以将其标记为不可用,直到来自
cloud-controller-manager 的控制器初始化此 Node,然后移除污点。
node.cloudprovider.kubernetes.io/shutdown
类别:污点
例子:node.cloudprovider.kubernetes.io/shutdown: "NoSchedule"
用于:Node
如果 Node 处于云驱动所指定的关闭状态,则 Node 会相应地被设置污点,对应的污点和效果为
node.cloudprovider.kubernetes.io/shutdown
和 NoSchedule
。
feature.node.kubernetes.io/*
类别:标签
示例:feature.node.kubernetes.io/network-sriov.capable: "true"
用于:节点
这些特性作为标签在运行 NFD 的节点上的 KubernetesNode 对象中公布。
所有内置的标签都使用 feature.node.kubernetes.io 标签命名空间,并且格式为
feature.node.kubernetes.io/<feature-name>: <true>
。
NFD 有许多用于创建特定于供应商和应用程序的标签的扩展点。
有关详细信息,请参阅定制资源 .
nfd.node.kubernetes.io/master.version
类别:注解
示例:nfd.node.kubernetes.io/master.version: "v0.6.0"
用于:节点
对于调度 NFD-master 的节点,
此注解记录 NFD-master 的版本。它仅用于提供信息。
nfd.node.kubernetes.io/worker.version
类别:注解
示例:nfd.node.kubernetes.io/worker.version: "v0.4.0"
用于:节点
这个注解记录 NFD-worker
的版本(如果在节点上运行了一个 NFD-worker 的话)。
此注解只用于提供信息。
nfd.node.kubernetes.io/feature-labels
类别:注解
示例:nfd.node.kubernetes.io/feature-labels: "cpu-cpuid.ADX,cpu-cpuid.AESNI,cpu-hardware_multithreading,kernel-version.full"
用于:节点
此注解记录由 Node Feature Discovery (NFD)
管理的以逗号分隔的节点特性标签列表。NFD 将其用于内部机制。你不应该自己编辑这个注解。
nfd.node.kubernetes.io/extended-resources
类别:注解
示例:nfd.node.kubernetes.io/extended-resources: "accelerator.acme.example/q500,example.com/coprocessor-fx5"
用于:节点
此注解记录由 Node Feature Discovery (NFD)
管理的以逗号分隔的扩展资源 列表。
NFD 将其用于内部机制。你不应该自己编辑这个注解。
nfd.node.kubernetes.io/node-name
类别:标签
例子:nfd.node.kubernetes.io/node-name: node-1
用于:Node
此标签指定哪个节点是 NodeFeature 对象的目标节点。
NodeFeature 对象的创建者必须设置此标签,而此对象的使用者应该使用此标签过滤为某个节点指定的特性。
说明:
这些节点特性发现(Node Feature Discovery, NFD)的标签或注解仅适用于运行 NFD 的节点。
要了解关于 NFD 及其组件的信息,
请访问官方文档 。
service.beta.kubernetes.io/aws-load-balancer-access-log-emit-interval (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-access-log-emit-interval: "5"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解为 Service 配置负载均衡器。
此注解值决定负载均衡器写入日志条目的频率。例如,如果你将该值设置为 5,则日志的写入间隔为 5 秒。
service.beta.kubernetes.io/aws-load-balancer-access-log-enabled (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: "false"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解为 Service 配置负载均衡器。
如果你将此注解设置为 "true",则访问日志将被启用。
service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-name (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: example
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解为 Service 配置负载均衡器。
负载均衡器将日志写入到一个你指定名称的 S3 桶。
service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-prefix (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-access-log-enabled: "/example"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解为 Service 配置负载均衡器。
负载均衡器用你指定的前缀写入日志对象。
示例:service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: "Environment=demo,Project=example"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解取值中逗号分隔的键/值对为负载均衡器配置标记(这是 AWS 的一个概念)。
service.beta.kubernetes.io/aws-load-balancer-alpn-policy (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-alpn-policy: HTTP2Optional
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-attributes (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-attributes: "deletion_protection.enabled=true"
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-backend-protocol (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解取值配置负载均衡器的监听器。
service.beta.kubernetes.io/aws-load-balancer-connection-draining-enabled (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-connection-draining-enabled: "false"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解取值配置负载均衡器。
负载均衡器的连接排空设置取决于你所设置的值。
service.beta.kubernetes.io/aws-load-balancer-connection-draining-timeout (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-connection-draining-timeout: "60"
用于:Service
如果你为 type: LoadBalancer
的服务配置连接排空 ,
且你使用 AWS 云服务,则集成机制将根据此注解来配置排空期。
你所设置的值决定了排空超时秒数。
service.beta.kubernetes.io/aws-load-balancer-ip-address-type (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-ip-address-type: ipv4
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
负载均衡器配置了一个空闲超时时间(以秒为单位)应用到其连接。
如果在空闲超时时间到期之前没有发送或接收任何数据,负载均衡器将关闭连接。
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。如果你将此注解设置为 "true",
每个负载均衡器节点将在所有启用的可用区 中的注册目标上均匀地分发请求。
如果你禁用跨区负载均衡,则每个负载均衡器节点仅在其可用区中跨注册目标均匀地分发请求。
service.beta.kubernetes.io/aws-load-balancer-eip-allocations (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-eip-allocations: "eipalloc-01bcdef23bcdef456,eipalloc-def1234abc4567890"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
取值是逗号分隔的弹性 IP 地址分配 ID 列表。
此注解仅与 type: LoadBalancer
的 Service 相关,其中负载均衡器是 AWS Network Load Balancer。
示例:service.beta.kubernetes.io/aws-load-balancer-extra-security-groups: "sg-12abcd3456,sg-34dcba6543"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值是一个逗号分隔的附加 AWS VPC 安全组列表,用于配置负载均衡器。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-healthy-threshold (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-healthy-threshold: "3"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值指定后端需要连续成功多少次健康检查才能被视为流量健康。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-interval (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-interval: "30"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值指定负载均衡器进行健康检查探测之间的间隔秒数。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-path (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: /healthcheck
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值决定了 HTTP 健康检查所用的 URL 的路径部分。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-port (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-port: "24"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值决定了负载均衡器执行健康检查时连接到哪个端口。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: TCP
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值决定了负载均衡器如何检查后端目标的健康。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-timeout (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-timeout: "3"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值指定探测还未成功之前将自动视为已失败的秒数。
service.beta.kubernetes.io/aws-load-balancer-healthcheck-unhealthy-threshold (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-healthcheck-unhealthy-threshold: "3"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
此注解值指定后端需要连续多少次失败的健康检查才被视为流量不健康。
service.beta.kubernetes.io/aws-load-balancer-internal (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-internal: "true"
用于:Service
与 AWS 弹性负载均衡集成的云控制器管理器会根据此注解配置负载均衡器。
当你将此注解设置为 "true" 时,此集成机制将配置一个内部负载均衡器。
如果你使用 AWS 负载均衡器控制器 ,
参见 service.beta.kubernetes.io/aws-load-balancer-scheme
。
service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-group-rules (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-group-rules: "true"
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-name (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-name: my-elb
用于:Service
如果你对 Service 上设置了这个注解,并且还使用 service.beta.kubernetes.io/aws-load-balancer-type: "external"
为该 Service 添加了注解,并在集群中使用了
AWS 负载均衡器控制器 ,那么
AWS 负载均衡器控制器将该负载均衡器的名称设置为针对这个注解设置的值。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "true"
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-private-ipv4-addresses (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-private-ipv4-addresses: "198.51.100.0,198.51.100.64"
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
用于:Service
官方的 Kubernetes 与 AWS 弹性负载均衡集成会根据此注解配置负载均衡器。
唯一允许的值是 "*"
,表示负载均衡器应该使用 PROXY 协议将 TCP 连接封装到后端 Pod 中。
service.beta.kubernetes.io/aws-load-balancer-scheme (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-scheme: internal
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-security-groups(已弃用)
例子:service.beta.kubernetes.io/aws-load-balancer-security-groups: "sg-53fae93f,sg-8725gr62r"
用于:Service
AWS 负载均衡器控制器使用此注解来指定要附加到 AWS 负载均衡器的安全组的逗号分隔列表。
安全名称和 ID 均被支持,其中名称匹配 Name
标记,而不是 groupName
属性。
当将此注解添加到 Service 时,负载均衡器控制器会将注解引用的安全组附加到负载均衡器上。
如果你省略了此注解,AWS 负载均衡器控制器会自动创建一个新的安全组并将其附加到负载均衡器上。
说明:
Kubernetes v1.27 及更高版本不直接设置或读取此注解。然而,AWS 负载均衡器控制器
(作为 Kubernetes 项目的一部分)仍在使用
service.beta.kubernetes.io/aws-load-balancer-security-groups
注解。
service.beta.kubernetes.io/load-balancer-source-ranges (deprecated)
示例:service.beta.kubernetes.io/load-balancer-source-ranges: "192.0.2.0/25"
用于:Service
AWS 负载均衡器控制器 使用此注解。
你应该为 Service 设置 .spec.loadBalancerSourceRanges
作为替代方案。
service.beta.kubernetes.io/aws-load-balancer-ssl-cert (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012"
用于:Service
官方与 AWS 弹性负载均衡的集成会根据此注解为 type: LoadBalancer
的服务配置 TLS。
该注解的值是负载均衡器的监听器应该使用的 X.509 证书的 AWS 资源名称(ARN)。
(TLS 协议基于一种更老的、简称为 SSL 的技术)。
service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy: ELBSecurityPolicy-TLS-1-2-2017-01
官方与 AWS 弹性负载均衡的集成会根据此注解为 type: LoadBalancer
的服务配置 TLS。
该注解的值是与客户端对等方进行 TLS 协商的 AWS 策略的名称。
service.beta.kubernetes.io/aws-load-balancer-ssl-ports (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "*"
官方与 AWS 弹性负载均衡的集成会根据此注解为 type: LoadBalancer
的服务配置 TLS。
此注解的值可以是 "*"
(这意味着所有负载均衡器的端口应使用 TLS)或逗号分隔的端口号列表。
service.beta.kubernetes.io/aws-load-balancer-subnets (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-subnets: "private-a,private-b"
Kubernetes 官方与 AWS 的集成使用此注解来配置负载均衡器,并决定在哪些 AWS 可用区部署托管的负载均衡服务。
该值可以是逗号分隔的子网名称列表或逗号分隔的子网 ID 列表。
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: "stickiness.enabled=true,stickiness.type=source_ip"
用于:Service
AWS 负载均衡器控制器 使用此注解。
参见 AWS 负载均衡器控制器文档中的注解 。
service.beta.kubernetes.io/aws-load-balancer-target-node-labels (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-target-node-labels: "kubernetes.io/os=Linux,topology.kubernetes.io/region=us-east-2"
Kubernetes 官方与 AWS 的集成使用此注解来确定集群中的哪些节点应被视为负载均衡器的有效目标。
service.beta.kubernetes.io/aws-load-balancer-type (beta)
示例:service.beta.kubernetes.io/aws-load-balancer-type: external
Kubernetes 官方与 AWS 的集成使用此注解来决定 AWS 云提供商是否应管理 type: LoadBalancer
的服务。
有两个允许的值:
nlb
云控制器管理器配置 Network Load Balancer
external
云控制器管理器不配置任何负载均衡器
如果你在 AWS 上部署 type: LoadBalancer
的服务,并且没有设置任何
service.beta.kubernetes.io/aws-load-balancer-type
注解,AWS 集成将部署经典的弹性负载均衡器。
这种行为是不带注解的默认行为,除非你另有指定。
当你针对 type: LoadBalancer
的服务将此注解设置为 external
,
并且你的集群中已经成功部署了 AWS 负载均衡器控制器时,
AWS 负载均衡器控制器将尝试根据服务规约部署一个负载均衡器。
注意:
不要在现有 Service 对象上修改或添加 service.beta.kubernetes.io/aws-load-balancer-type
注解。
参阅 AWS 关于此主题的文档以了解更多细节。
service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset(已弃用)
例子:service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset: "false"
用于:Service
此注解仅适用于由 Azure 标准负载均衡器支持的服务。
此注解用于指定负载均衡器是否应在空闲超时时禁用或启用 TCP 重置。
如果启用,它有助于提升应用行为的可预测度、检测连接的终止以及移除过期的连接并发起新的连接等。
你可以将值设置为 true 或 false。
更多细节参阅负载均衡器 TCP 重置 。
pod-security.kubernetes.io/enforce
类别:标签
例子:pod-security.kubernetes.io/enforce: "baseline"
用于:Namespace
值必须 是 privileged
、baseline
或 restricted
之一,它们对应于
Pod 安全标准 级别。
特别地,enforce
标签 禁止 在带标签的 Namespace 中创建任何不符合指示级别要求的 Pod。
请请参阅在名字空间级别实施 Pod 安全性 了解更多信息。
pod-security.kubernetes.io/enforce-version
类别:标签
例子:pod-security.kubernetes.io/enforce-version: "1.31"
用于:Namespace
值必须 是 latest
或格式为 v<MAJOR>.<MINOR>
的有效 Kubernetes 版本。
此注解决定了在验证提交的 Pod 时要应用的
Pod 安全标准 策略的版本。
请参阅在名字空间级别实施 Pod 安全性 了解更多信息。
pod-security.kubernetes.io/audit
类别:标签
例子:pod-security.kubernetes.io/audit: "baseline"
用于:Namespace
值必须 是与 Pod 安全标准 级别相对应的
privileged
、baseline
或 restricted
之一。
具体来说,audit
标签不会阻止在带标签的 Namespace 中创建不符合指示级别要求的 Pod,
但会向该 Pod 添加审计注解。
请参阅在名字空间级别实施 Pod 安全性 了解更多信息。
pod-security.kubernetes.io/audit-version
类别:标签
例子:pod-security.kubernetes.io/audit-version: "1.31"
用于:Namespace
值必须 是 latest
或格式为 v<MAJOR>.<MINOR>
的有效 Kubernetes 版本。
此注解决定了在验证提交的 Pod 时要应用的
Pod 安全标准 策略的版本。
请参阅在名字空间级别实施 Pod 安全性 了解更多信息。
pod-security.kubernetes.io/warn
类别:标签
例子:pod-security.kubernetes.io/warn: "baseline"
用于:Namespace
值必须 是与 Pod 安全标准 级别相对应的
privileged
、baseline
或 restricted
之一。特别地,
warn
标签不会阻止在带标签的 Namespace 中创建不符合指示级别概述要求的 Pod,但会在这样做后向用户返回警告。
请注意,在创建或更新包含 Pod 模板的对象时也会显示警告,例如 Deployment、Jobs、StatefulSets 等。
请参阅在名字空间级别实施 Pod 安全性 了解更多信息。
pod-security.kubernetes.io/warn-version
类别:标签
例子:pod-security.kubernetes.io/warn-version: "1.31"
用于:Namespace
值必须 是 latest
或格式为 v<MAJOR>.<MINOR>
的有效 Kubernetes 版本。
此注解决定了在验证提交的 Pod 时要应用的
Pod 安全标准 策略的版本。
请注意,在创建或更新包含 Pod 模板的对象时也会显示警告,
例如 Deployment、Job、StatefulSet 等。
请参阅在名字空间级别实施 Pod 安全性 了解更多信息。
rbac.authorization.kubernetes.io/autoupdate
类别:注解
例子:rbac.authorization.kubernetes.io/autoupdate: "false"
用于:ClusterRole、ClusterRoleBinding、Role、RoleBinding
当在 kube-apiserver 创建的默认 RBAC 对象上将此注解设置为 "true"
时,
这些对象会在服务器启动时自动更新以添加缺少的权限和主体(额外的权限和主体留在原处)。
要防止自动更新特定的 Role 或 RoleBinding,请将此注解设置为 "false"
。
如果你创建自己的 RBAC 对象并将此注解设置为 "false"
,则 kubectl auth reconcile
(允许协调在清单 中给出的任意 RBAC 对象)
尊重此注解并且不会自动添加缺少的权限和主体。
kubernetes.io/psp(已弃用)
类别:注解
例如:kubernetes.io/psp: restricted
用于:Pod
这个注解只在你使用 PodSecurityPolicies 时才有意义。
Kubernetes v1.31 不支持 PodSecurityPolicy API。
当 PodSecurityPolicy 准入控制器接受一个 Pod 时,会修改该 Pod,并给这个 Pod 添加此注解。
注解的值是用来对 Pod 进行验证检查的 PodSecurityPolicy 的名称。
seccomp.security.alpha.kubernetes.io/pod (非功能性)
类别:注解
用于:Pod
v1.25 之前的 Kubernetes 允许你使用此注解配置 seccomp 行为。
请参考使用 seccomp 限制容器的系统调用 ,
了解为 Pod 指定 seccomp 限制的受支持方法。
container.seccomp.security.alpha.kubernetes.io/[NAME] (非功能性)
类别:注解
用于:Pod
v1.25 之前的 Kubernetes 允许你使用此注解配置 seccomp 行为。
请参考使用 seccomp 限制容器的系统调用
了解为 Pod 指定 seccomp 限制的受支持方法。
snapshot.storage.kubernetes.io/allow-volume-mode-change
类别:注解
例子:snapshot.storage.kubernetes.io/allow-volume-mode-change: "true"
用于:VolumeSnapshotContent
值可以是 true
或者 false
。取值决定了当从 VolumeSnapshot 创建 PersistentVolumeClaim 时,
用户是否可以修改源卷的模式。
更多信息请参阅转换快照的卷模式 和
Kubernetes CSI 开发者文档 。
scheduler.alpha.kubernetes.io/critical-pod(已弃用)
类别:注解
例子:scheduler.alpha.kubernetes.io/critical-pod: ""
用于:Pod
此注解让 Kubernetes 控制平面知晓某个 Pod 是一个关键的 Pod,这样 descheduler
将不会移除该 Pod。
说明:
从 v1.16 开始,此注解被移除,取而代之的是
Pod 优先级 。
用于审计的注解
在审计注解 页面上查看更多详细信息。
kubeadm
kubeadm.alpha.kubernetes.io/cri-socket
类别:注解
例子:kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/container.sock
用于:Node
kubeadm 用来保存 init
/join
时提供给 kubeadm 以后使用的 CRI 套接字信息的注解。
kubeadm 使用此信息为 Node 对象设置注解。
此注解仍然是 “alpha” 阶段,因为理论上这应该是 KubeletConfiguration 中的一个字段。
kubeadm.kubernetes.io/etcd.advertise-client-urls
类别:注解
例子:kubeadm.kubernetes.io/etcd.advertise-client-urls: https://172.17.0.18:2379
用于:Pod
kubeadm 为本地管理的 etcd Pod 设置的注解,用来跟踪 etcd 客户端应连接到的 URL 列表。
这主要用于 etcd 集群健康检查目的。
kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint
类别:注解
例子:kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: https://172.17.0.18:6443
用于:Pod
kubeadm 为本地管理的 kube-apiserver
Pod 设置的注解,用以跟踪该 API 服务器实例的公开宣告地址/端口端点。
kubeadm.kubernetes.io/component-config.hash
类别:注解
用于:ConfigMap
例子:kubeadm.kubernetes.io/component-config.hash: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae
kubeadm 为它所管理的 ConfigMaps 设置的注解,用于配置组件。它包含一个哈希(SHA-256)值,
用于确定用户是否应用了不同于特定组件的 kubeadm 默认设置的设置。
node-role.kubernetes.io/control-plane
类别:标签
用于:节点
用来指示该节点用于运行控制平面组件的标记标签。Kubeadm 工具将此标签应用于其管理的控制平面节点。
其他集群管理工具通常也会设置此污点。
你可以使用此标签来标记控制平面节点,以便更容易地将 Pod 仅安排到这些节点上,
或者避免在控制平面上运行 Pod。如果设置了此标签,
EndpointSlice 控制器 在计算拓扑感知提示时将忽略该节点。
node-role.kubernetes.io/control-plane
类别:污点
示例:node-role.kubernetes.io/control-plane:NoSchedule
用于:节点
Kubeadm 应用在控制平面节点上的污点, 用来限制启动 Pod,并且只允许特定 Pod 可调度到这些节点上。
如果应用此污点,则控制平面节点只允许对其进行关键工作负载调度。可以在特定节点上使用以下命令手动删除此污染。
kubectl taint nodes <节点名称> node-role.kubernetes.io/control-plane:NoSchedule-
node-role.kubernetes.io/master(已弃用)
类别:污点
用于:Node
例子:node-role.kubernetes.io/master:NoSchedule
kubeadm 先前应用在控制平面节点上的污点,仅允许在其上调度关键工作负载。
替换为 node-role.kubernetes.io/control-plane
;
kubeadm 不再设置或使用这个废弃的污点。
4.1 - 审计注解
该页面作为 kubernetes.io 名字空间的审计注解的参考。这些注解适用于 API 组
audit.k8s.io
中的 Event
对象。
说明:
Kubernetes API 中不使用以下注解。当你在集群中启用审计 时,
审计事件数据将使用 API 组 audit.k8s.io
中的 Event
写入。
注解适用于审计事件。
审计事件不同于事件 API
(API 组 events.k8s.io
)中的对象。
k8s.io/deprecated
例子:k8s.io/deprecated: "true"
值必须 为 "true" 或 "false"。值为 "true" 时表示该请求使用了已弃用的 API 版本。
k8s.io/removed-release
例子:k8s.io/removed-release: "1.22"
值必须 为 "." 的格式。当请求使用了已弃用的 API 版本时,
该值会被设置为目标移除的版本。
pod-security.kubernetes.io/exempt
例子:pod-security.kubernetes.io/exempt: namespace
值必须 是对应于 Pod 安全豁免 维度的
user
、namespace
或 runtimeClass
之一。
此注解指示 PodSecurity 基于哪个维度的强制豁免执行。
pod-security.kubernetes.io/enforce-policy
例子:pod-security.kubernetes.io/enforce-policy: restricted:latest
值必须 是对应于 Pod 安全标准 级别的
privileged:<版本>
、baseline:<版本>
、restricted:<版本>
,
关联的版本必须 是 latest
或格式为 v<MAJOR>.<MINOR>
的有效 Kubernetes 版本。
此注解通知有关在 PodSecurity 准入期间允许或拒绝 Pod 的执行级别。
有关详细信息,请参阅 Pod 安全标准 。
pod-security.kubernetes.io/audit-violations
例子:pod-security.kubernetes.io/audit-violations: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "example" must set securityContext.allowPrivilegeEscalation=false), ...
注解值给出审计策略违规的详细说明,它包含所违反的
Pod 安全标准 级别以及
PodSecurity 执行中违反的特定策略及对应字段。
有关详细信息,请参阅 Pod 安全标准 。
authorization.k8s.io/decision
例子:authorization.k8s.io/decision: "forbid"
值必须是 forbid 或者 allow 。
此注解在 Kubernetes 审计日志中表示请求是否获得授权。
有关详细信息,请参阅审计 。
authorization.k8s.io/reason
例子:authorization.k8s.io/reason: "Human-readable reason for the decision"
此注解给出了 Kubernetes 审计日志中 decision 的原因。
有关详细信息,请参阅审计 。
missing-san.invalid-cert.kubernetes.io/$hostname
例子:missing-san.invalid-cert.kubernetes.io/example-svc.example-namespace.svc: "relies on a legacy Common Name field instead of the SAN extension for subject validation"
由 Kubernetes v1.24 及更高版本使用
此注解表示 webhook 或聚合 API 服务器正在使用缺少 subjectAltNames
的无效证书。
Kubernetes 1.19 已经默认禁用,且 Kubernetes 1.23 已经移除对这些证书的支持。
使用这些证书向端点发出的请求将失败。
使用这些证书的服务应尽快替换它们,以避免在 Kubernetes 1.23+ 环境中运行时中断。
Go 文档中有更多关于此的信息:
X.509 CommonName 弃用 。
insecure-sha1.invalid-cert.kubernetes.io/$hostname
例子:insecure-sha1.invalid-cert.kubernetes.io/example-svc.example-namespace.svc: "uses an insecure SHA-1 signature"
由 Kubernetes v1.24 及更高版本使用
此注解表示 webhook 或聚合 API 服务器所使用的是使用 SHA-1 签名的不安全证书。
Kubernetes 1.24 已经默认禁用,并将在未来的版本中删除对这些证书的支持。
使用这些证书的服务应尽快替换它们,以确保正确保护连接并避免在未来版本中出现中断。
Go 文档中有更多关于此的信息:
拒绝 SHA-1 证书 。
validation.policy.admission.k8s.io/validation_failure
例子:validation.policy.admission.k8s.io/validation_failure: '[{"message": "Invalid value", {"policy": "policy.example.com", {"binding": "policybinding.example.com", {"expressionIndex": "1", {"validationActions": ["Audit"]}]'
由 Kubernetes v1.27 及更高版本使用。
此注解表示 API 请求的准入策略验证评估为 false,
或者当策略配置为 failurePolicy: Fail
时验证报错。
注解的值是一个 JSON 对象。JSON 中的 message
字段提供了有关验证失败的信息。
JSON 中的 policy
、binding
和 expressionIndex
分别标识了 ValidatingAdmissionPolicy
的名称、
ValidatingAdmissionPolicyBinding
的名称以及失败的
CEL 表达式在策略 validations
中的索引。
validationActions
显示针对此验证失败采取的操作。
有关 validationActions
的更多详细信息,
请参阅验证准入策略 。
5 - Kubernetes API
Kubernetes API 是通过 RESTful 接口提供 Kubernetes 功能服务并负责集群状态存储的应用程序。
Kubernetes 资源和"意向记录"都是作为 API 对象储存的,并可以通过调用 RESTful 风格的 API 进行修改。
API 允许以声明方式管理配置。
用户可以直接和 Kubernetes API 交互,也可以通过 kubectl
这样的工具进行交互。
核心的 Kubernetes API 是很灵活的,可以扩展以支持定制资源。
5.1 - 工作负载资源
5.1.1 - Pod
Pod 是可以在主机上运行的容器的集合。
apiVersion: v1
import "k8s.io/api/core/v1"
Pod
Pod 是可以在主机上运行的容器的集合。此资源由客户端创建并调度到主机上。
PodSpec
PodSpec 是对 Pod 的描述。
容器
os (PodOS)
指定 Pod 中容器的操作系统。如果设置了此属性,则某些 Pod 和容器字段会受到限制。
如果 os 字段设置为 linux
,则必须不能设置以下字段:
securityContext.windowsOptions
如果 os 字段设置为 windows
,则必须不能设置以下字段:
spec.hostPID
spec.hostIPC
spec.hostUsers
spec.securityContext.seLinuxOptions
spec.securityContext.seccompProfile
spec.securityContext.fsGroup
spec.securityContext.fsGroupChangePolicy
spec.securityContext.sysctls
spec.shareProcessNamespace
spec.securityContext.runAsUser
spec.securityContext.runAsGroup
spec.securityContext.supplementalGroups
spec.containers[*].securityContext.seLinuxOptions
spec.containers[*].securityContext.seccompProfile
spec.containers[*].securityContext.capabilities
spec.containers[*].securityContext.readOnlyRootFilesystem
spec.containers[*].securityContext.privileged
spec.containers[*].securityContext.allowPrivilegeEscalation
spec.containers[*].securityContext.procMount
spec.containers[*].securityContext.runAsUser
spec.containers[*].securityContext.runAsGroup
PodOS 定义一个 Pod 的操作系统参数。
卷
调度
affinity (Affinity)
如果指定了,则作为 Pod 的调度约束。
Affinity 是一组亲和性调度规则。
affinity.nodeAffinity (NodeAffinity )
描述 Pod 的节点亲和性调度规则。
affinity.podAffinity (PodAffinity )
描述 Pod 亲和性调度规则(例如,将此 Pod 与其他一些 Pod 放在同一节点、区域等)。
affinity.podAntiAffinity (PodAntiAffinity )
描述 Pod 反亲和性调度规则(例如,避免将此 Pod 与其他一些 Pod 放在相同的节点、区域等)。
tolerations ([]Toleration)
如果设置了此字段,则作为 Pod 的容忍度。
这个 Toleration 所附加到的 Pod 能够容忍任何使用匹配运算符 <operator>
匹配三元组 <key,value,effect>
所得到的污点。
priorityClassName (string)
如果设置了此字段,则用来标明 Pod 的优先级。
"system-node-critical"
和 "system-cluster-critical"
是两个特殊关键字,
分别用来表示两个最高优先级,前者优先级更高一些。
任何其他名称都必须通过创建具有该名称的 PriorityClass 对象来定义。
如果未指定此字段,则 Pod 优先级将为默认值。如果没有默认值,则为零。
topologySpreadConstraints ([]TopologySpreadConstraint)
补丁策略:基于 topologyKey
键合并
映射:topologyKey, whenUnsatisfiable
键组合的唯一值 將在合并期间保留
TopologySpreadConstraints 描述一组 Pod 应该如何跨拓扑域来分布。调度器将以遵从此约束的方式来调度 Pod。
所有 topologySpreadConstraints 条目会通过逻辑与操作进行组合。
TopologySpreadConstraint 指定如何在规定的拓扑下分布匹配的 Pod。
topologySpreadConstraints.maxSkew (int32),必需
maxSkew 描述 Pod 可能分布不均衡的程度。当 whenUnsatisfiable=DoNotSchedule
时,
此字段值是目标拓扑中匹配的 Pod 数量与全局最小值之间的最大允许差值。
全局最小值是候选域中匹配 Pod 的最小数量,如果候选域的数量小于 minDomains
,则为零。
例如,在一个包含三个可用区的集群中,maxSkew 设置为 1,具有相同 labelSelector
的 Pod 分布为 2/2/1:
在这种情况下,全局最小值为 1。
| zone1 | zone2 | zone3 |
| PP | PP | P |
如果 maxSkew 为 1,传入的 Pod 只能调度到 "zone3",变成 2/2/2;
将其调度到 "zone1"("zone2")将使"zone1"("zone2")上的实际偏差(Actual Skew)为 3-1,进而违反
maxSkew 限制(1)。
如果 maxSkew 为 2,则可以将传入的 Pod 调度到任何区域。
当 whenUnsatisfiable=ScheduleAnyway
时,此字段被用来给满足此约束的拓扑域更高的优先级。
此字段是一个必填字段。默认值为 1,不允许为 0。
topologySpreadConstraints.topologyKey (string),必需
topologyKey 是节点标签的键名。如果节点的标签中包含此键名且键值亦相同,则被认为在相同的拓扑域中。
我们将每个 <键, 值>
视为一个 "桶(Bucket)",并尝试将数量均衡的 Pod 放入每个桶中。
我们定义域(Domain)为拓扑域的特定实例。
此外,我们定义一个候选域(Eligible Domain)为其节点与 nodeAffinityPolicy 和 nodeTaintsPolicy 的要求匹配的域。
例如,如果 topologyKey 是 "kubernetes.io/hostname"
,则每个 Node 都是该拓扑的域。
而如果 topologyKey 是 "topology.kubernetes.io/zone"
,则每个区域都是该拓扑的一个域。
这是一个必填字段。
topologySpreadConstraints.whenUnsatisfiable (string),必需
whenUnsatisfiable 表示如果 Pod 不满足分布约束,如何处理它。
DoNotSchedule
(默认):告诉调度器不要调度它。
ScheduleAnyway
:告诉调度器将 Pod 调度到任何位置,但给予能够降低偏差的拓扑更高的优先级。
当且仅当该 Pod 的每个可能的节点分配都会违反某些拓扑对应的 "maxSkew" 时,
才认为传入 Pod 的约束是 "不可满足的"。
例如,在一个包含三个区域的集群中,maxSkew 设置为 1,具有相同 labelSelector 的 Pod 分布为 3/1/1:
| zone1 | zone2 | zone3 |
| P P P | P | P |
如果 whenUnsatisfiable 设置为 DoNotSchedule
,则传入的 Pod 只能调度到 "zone2"("zone3"),
Pod 分布变成 3/2/1(3/1/2),因为 "zone2"("zone3")上的实际偏差(Actual Skew) 为 2-1,
满足 maxSkew 约束(1)。
换句话说,集群仍然可以不平衡,但调度器不会使其更加地 不平衡。
这是一个必填字段。
topologySpreadConstraints.matchLabelKeys ([]string)
原子性:将在合并期间被替换
matchLabelKeys 是一组 Pod 标签键,用于通过计算 Pod 分布方式来选择 Pod。
新 Pod 标签中不存在的键将被忽略。这些键用于从新来的 Pod 标签中查找值,这些键值标签与 labelSelector 进行逻辑与运算,
通过计算 Pod 的分布方式来选择现有 Pod 的组。matchLabelKeys 和 labelSelector
中禁止存在相同的键。未设置 labelSelector 时无法设置 matchLabelKeys。
新来的 Pod 标签中不存在的键将被忽略。null 或空的列表意味着仅与 labelSelector 匹配。
这是一个 Beta 字段,需要启用 MatchLabelKeysInPodTopologySpread 特性门控(默认启用)。
topologySpreadConstraints.minDomains (int32)
minDomains 表示符合条件的域的最小数量。当符合拓扑键的候选域个数小于 minDomains 时,
Pod 拓扑分布特性会将 "全局最小值" 视为 0,然后进行偏差的计算。
当匹配拓扑键的候选域的数量等于或大于 minDomains 时,此字段的值对调度没有影响。
因此,当候选域的数量少于 minDomains 时,调度程序不会将超过 maxSkew 个 Pods 调度到这些域。
如果字段值为 nil,所表达的约束为 minDomains 等于 1。
字段的有效值为大于 0 的整数。当字段值不为 nil 时,whenUnsatisfiable 必须为 DoNotSchedule
。
例如,在一个包含三个区域的集群中,maxSkew 设置为 2,minDomains 设置为 5,具有相同 labelSelector
的 Pod 分布为 2/2/2:
| zone1 | zone2 | zone3 |
| PP | PP | PP |
域的数量小于 5(minDomains 取值),因此"全局最小值"被视为 0。
在这种情况下,无法调度具有相同 labelSelector 的新 Pod,因为如果基于新 Pod 计算的偏差值将为
3(3-0)。将这个 Pod 调度到三个区域中的任何一个,都会违反 maxSkew 约束。
此字段是一个 Beta 字段,需要启用 MinDomainsInPodTopologySpread 特性门控(默认被启用)。
topologySpreadConstraints.nodeAffinityPolicy (string)
nodeAffinityPolicy 表示我们在计算 Pod 拓扑分布偏差时将如何处理 Pod 的 nodeAffinity/nodeSelector。
选项为:
Honor:只有与 nodeAffinity/nodeSelector 匹配的节点才会包括到计算中。
Ignore:nodeAffinity/nodeSelector 被忽略。所有节点均包括到计算中。
如果此值为 nil,此行为等同于 Honor 策略。
这是通过 NodeInclusionPolicyInPodTopologySpread 特性标志默认启用的 Beta 级别特性。
topologySpreadConstraints.nodeTaintsPolicy (string)
nodeTaintsPolicy 表示我们在计算 Pod 拓扑分布偏差时将如何处理节点污点。选项为:
Honor:包括不带污点的节点以及新来 Pod 具有容忍度且带有污点的节点。
Ignore:节点污点被忽略。包括所有节点。
如果此值为 nil,此行为等同于 Ignore 策略。
这是通过 NodeInclusionPolicyInPodTopologySpread 特性标志默认启用的 Beta 级别特性。
生命周期
terminationGracePeriodSeconds (int64)
可选字段,表示 Pod 需要体面终止的所需的时长(以秒为单位)。字段值可以在删除请求中减少。
字段值必须是非负整数。零值表示收到 kill 信号则立即停止(没有机会关闭)。
如果此值为 nil,则将使用默认宽限期。
宽限期是从 Pod 中运行的进程收到终止信号后,到进程被 kill 信号强制停止之前,Pod 可以继续存在的时间(以秒为单位)。
应该将此值设置为比你的进程的预期清理时间更长。默认为 30 秒。
主机名和名称解析
setHostnameAsFQDN (boolean)
如果为 true,则 Pod 的主机名将配置为 Pod 的 FQDN,而不是叶名称(默认值)。
在 Linux 容器中,这意味着将内核的 hostname 字段(struct utsname 的 nodename 字段)设置为 FQDN。
在 Windows 容器中,这意味着将注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
的 hostname 键设置为 FQDN。如果 Pod 没有 FQDN,则此字段不起作用。
默认为 false。
hostAliases ([]HostAlias)
补丁策略:基于 ip
键合并
hostAliases 是一个可选的列表属性,包含要被注入到 Pod 的 hosts 文件中的主机和 IP 地址。
这仅对非 hostNetwork Pod 有效。
HostAlias 结构保存 IP 和主机名之间的映射,这些映射将作为 Pod 的 hosts 文件中的条目注入。
主机名字空间
hostIPC (boolean)
使用主机的 IPC 名字空间。可选:默认为 false。
shareProcessNamespace (boolean)
在 Pod 中的所有容器之间共享单个进程名字空间。设置了此字段之后,容器将能够查看来自同一 Pod 中其他容器的进程并发出信号,
并且每个容器中的第一个进程不会被分配 PID 1。hostPID
和 shareProcessNamespace
不能同时设置。
可选:默认为 false。
服务账号
安全上下文
securityContext (PodSecurityContext)
SecurityContext 包含 Pod 级别的安全属性和常见的容器设置。
可选:默认为空。每个字段的默认值见类型描述。
PodSecurityContext 包含 Pod 级别的安全属性和常用容器设置。
一些字段也存在于 container.securityContext
中。container.securityContext
中的字段值优先于 PodSecurityContext 的字段值。
securityContext.runAsUser (int64)
运行容器进程入口点(Entrypoint)的 UID。如果未指定,则默认为镜像元数据中指定的用户。
也可以在 SecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在对应容器中所设置的 SecurityContext 值优先。
注意,spec.os.name
为 "windows" 时不能设置此字段。
securityContext.runAsNonRoot (boolean)
指示容器必须以非 root 用户身份运行。如果为 true,kubelet 将在运行时验证镜像,
以确保它不会以 UID 0(root)身份运行。如果镜像中确实使用 root 账号启动,则容器无法被启动。
如果此字段未设置或为 false,则不会执行此类验证。也可以在 SecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
securityContext.runAsGroup (int64)
运行容器进程入口点(Entrypoint)的 GID。如果未设置,则使用运行时的默认值。
也可以在 SecurityContext 中设置。如果同时在 SecurityContext 和 PodSecurityContext 中设置,
则在对应容器中设置的 SecurityContext 值优先。
注意,spec.os.name
为 "windows" 时不能设置该字段。
securityContext.supplementalGroups ([]int64)
此字段包含将应用到每个容器中运行的第一个进程的组列表。
容器进程的组成员身份取决于容器的主 GID、fsGroup(如果指定了的话)
和在容器镜像中为容器进程的 uid 定义的组成员身份,以及这里所给的列表。
如果未指定,则不会向任何容器添加其他组。
注意,在容器镜像中为容器进程的 uid 定义的组成员身份仍然有效,
即使它们未包含在此列表中也是如此。
注意,当 spec.os.name
为 windows
时,不能设置此字段。
securityContext.fsGroup (int64)
应用到 Pod 中所有容器的特殊补充组。某些卷类型允许 kubelet 将该卷的所有权更改为由 Pod 拥有:
文件系统的属主 GID 将是 fsGroup 字段值
setgid
位已设置(在卷中创建的新文件将归 fsGroup 所有)
权限位将与 rw-rw----
进行按位或操作
如果未设置此字段,kubelet 不会修改任何卷的所有权和权限。
注意,spec.os.name
为 "windows" 时不能设置此字段。
securityContext.fsGroupChangePolicy (string)
fsGroupChangePolicy 定义了在卷被在 Pod 中暴露之前更改其属主和权限的行为。
此字段仅适用于支持基于 fsGroup 的属主权(和权限)的卷类型。它不会影响临时卷类型,
例如:secret
、configmap
和 emptydir
。
有效值为 "OnRootMismatch"
和 "Always"
。如果未设置,则使用 "Always"
。
注意,spec.os.name
为 "windows" 时不能设置此字段。
securityContext.seccompProfile (SeccompProfile)
此 Pod 中的容器使用的 seccomp 选项。注意,spec.os.name
为 "windows" 时不能设置此字段。
SeccompProfile 定义 Pod 或容器的 seccomp 配置文件设置。只能设置一个配置文件源。
securityContext.seLinuxOptions (SELinuxOptions)
应用于所有容器的 SELinux 上下文。如果未设置,容器运行时将为每个容器分配一个随机 SELinux 上下文。
也可以在 SecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在对应容器中设置的 SecurityContext 值优先。
注意,spec.os.name
为 "windows" 时不能设置该字段。
SELinuxOptions 是要应用于容器的标签
securityContext.seLinuxOptions.level (string)
level 是应用于容器的 SELinux 级别标签。
securityContext.seLinuxOptions.role (string)
role 是应用于容器的 SELinux 角色标签。
securityContext.seLinuxOptions.type (string)
type 是适用于容器的 SELinux 类型标签。
securityContext.seLinuxOptions.user (string)
user 是应用于容器的 SELinux 用户标签。
securityContext.windowsOptions (WindowsSecurityContextOptions)
要应用到所有容器上的、特定于 Windows 的设置。
如果未设置此字段,将使用容器的 SecurityContext 中的选项。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
注意,spec.os.name
为 "linux" 时不能设置该字段。
WindowsSecurityContextOptions 包含特定于 Windows 的选项和凭据。
securityContext.windowsOptions.gmsaCredentialSpec (string)
gmsaCredentialSpec 是 GMSA 准入 Webhook
内嵌由 gmsaCredentialSpecName 字段所指定的 GMSA 凭证规约内容的地方。
securityContext.windowsOptions.gmsaCredentialSpecName (string)
gmsaCredentialSpecName 是要使用的 GMSA 凭证规约的名称。
securityContext.windowsOptions.hostProcess (boolean)
hostProcess 确定容器是否应作为"主机进程"容器运行。
一个 Pod 的所有容器必须具有相同的有效 hostProcess 值(不允许混合设置了 hostProcess
的容器和未设置 hostProcess 容器)。
此外,如果 hostProcess 为 true,则 hostNetwork 也必须设置为 true。
securityContext.windowsOptions.runAsUserName (string)
Windows 中用来运行容器进程入口点的用户名。如果未设置,则默认为镜像元数据中指定的用户。
也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
Alpha 级别
resourceClaims 定义了在允许 Pod 启动之前必须分配和保留哪些 ResourceClaims。
这些资源将可供那些按名称使用它们的容器使用。
这是一个 Alpha 特性的字段,需要启用 DynamicResourceAllocation 特性门控来开启此功能。
此字段不可变更。
PodResourceClaim 通过 ClaimSource 引用一个 ResourceClaim。
它为 ClaimSource 添加一个名称,作为 Pod 内 ResourceClaim 的唯一标识。
需要访问 ResourceClaim 的容器可使用此名称引用它。
resourceClaims.name (string), 必需
在 Pod 中,name
是此资源声明的唯一标识。此字段值必须是 DNS_LABEL。
resourceClaims.source (ClaimSource)
source
描述了在哪里可以找到 resourceClaim
。
ClaimSource 描述对 ResourceClaim 的引用。
应该设置且仅设置如下字段之一。此类型的消费者必须将空对象视为具有未知值。
resourceClaims.source.resourceClaimName (string)
resourceClaimName 是与此 Pod 位于同一命名空间中的 ResourceClaim 对象的名称。
resourceClaims.source.resourceClaimTemplateName (string)
resourceClaimTemplateName 是与此 Pod 位于同一命名空间中的 ResourceClaimTemplate
对象的名称。
该模板将用于创建一个新的 ResourceClaim,新的 ResourceClaim 将被绑定到此 Pod。
删除此 Pod 时,ResourceClaim 也将被删除。
Pod 名称和资源名称,连同生成的组件,将用于为 ResourceClaim 形成唯一名称,
该名称将记录在 pod.status.resourceClaimStatuses 中。
不属于此 Pod 但与此名称重名的现有 ResourceClaim 不会被用于此 Pod,
以避免错误地使用不相关的资源。Pod 的调度和启动动作会因此而被阻塞,
直到不相关的 ResourceClaim 被删除。
此字段是不可变更的,创建 ResourceClaim 后控制平面不会对相应的 ResourceClaim 进行任何更改。
schedulingGates ([]PodSchedulingGate)
补丁策略:基于 name
键合并
映射:键 name
的唯一值将在合并过程中保留
schedulingGates 是一个不透明的值列表,如果指定,将阻止调度 Pod。
如果 schedulingGates 不为空,则 Pod 将保持 SchedulingGated 状态,调度程序将不会尝试调度 Pod。
SchedulingGates 只能在 Pod 创建时设置,并且只能在创建之后删除。
此特性为 Beta 特性,需要通过 PodSchedulingReadiness 特性门控启用。
PodSchedulingGate 与 Pod 相关联以保护其调度。
已弃用
容器
要在 Pod 中运行的单个应用容器。
镜像
Entrypoint
端口
ports ([]ContainerPort)
补丁策略:基于 containerPort
键合并
映射:键 containerPort, protocol
组合的唯一值将在合并期间保留
要从容器暴露的端口列表。此处不指定端口不会阻止该端口被暴露。
任何侦听容器内默认 "0.0.0.0"
地址的端口都可以从网络访问。使用策略合并补丁来修改此数组可能会破坏数据。
更多细节请参阅 https://github.com/kubernetes/kubernetes/issues/108255 。
无法更新。
ContainerPort 表示单个容器中的网络端口。
环境变量
env ([]EnvVar)
补丁策略:基于 name
键合并
要在容器中设置的环境变量列表。无法更新。
EnvVar 表示容器中存在的环境变量。
env.valueFrom (EnvVarSource)
环境变量值的来源。如果 value 值不为空,则不能使用。
EnvVarSource 表示 envVar 值的来源。
env.valueFrom.fieldRef (ObjectFieldSelector )
选择 Pod 的一个字段:支持 metadata.name
、metadata.namespace
、metadata.labels['<KEY>']
、
metadata.annotations['<KEY>']
、spec.nodeName
、spec.serviceAccountName
、status.hostIP
status.podIP
、status.podIPs
。
env.valueFrom.secretKeyRef (SecretKeySelector)
在 Pod 的名字空间中选择 Secret 的主键。
SecretKeySelector 选择一个 Secret 的主键。
envFrom ([]EnvFromSource)
用来在容器中填充环境变量的数据源列表。在源中定义的键必须是 C_IDENTIFIER。
容器启动时,所有无效主键都将作为事件报告。
当一个键存在于多个源中时,与最后一个来源关联的值将优先。
由 env 定义的条目中,与此处键名重复者,以 env 中定义为准。无法更新。
EnvFromSource 表示一组 ConfigMaps 的来源
envFrom.prefix (string)
附加到 ConfigMap 中每个键名之前的可选标识符。必须是 C_IDENTIFIER。
envFrom.secretRef (SecretEnvSource)
要从中选择主键的 Secret。
SecretEnvSource 选择一个 Secret 来填充环境变量。
目标 Secret 的 data 字段的内容将键值对表示为环境变量。
卷
volumeDevices ([]VolumeDevice)
补丁策略:基于 devicePath
键合并
volumeDevices 是容器要使用的块设备列表。
volumeDevice 描述了容器内原始块设备的映射。
volumeDevices.devicePath (string),必需
devicePath 是设备将被映射到的容器内的路径。
volumeDevices.name (string),必需
name 必须与 Pod 中的 persistentVolumeClaim 的名称匹配
资源
生命周期
terminationMessagePolicy (string)
指示应如何填充终止消息。字段值 File
将使用 terminateMessagePath 的内容来填充成功和失败的容器状态消息。
如果终止消息文件为空并且容器因错误退出,FallbackToLogsOnError
将使用容器日志输出的最后一块。
日志输出限制为 2048 字节或 80 行,以较小者为准。默认为 File
。无法更新。
安全上下文
securityContext (SecurityContext)
SecurityContext 定义了容器应该运行的安全选项。如果设置,SecurityContext 的字段将覆盖
PodSecurityContext 的等效字段。更多信息:
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/security-context/
SecurityContext 保存将应用于容器的安全配置。某些字段在 SecurityContext 和 PodSecurityContext 中都存在。
当两者都设置时,SecurityContext 中的值优先。
securityContext.runAsUser (int64)
运行容器进程入口点的 UID。如果未指定,则默认为镜像元数据中指定的用户。
也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
注意,spec.os.name
为 "windows" 时不能设置该字段。
securityContext.runAsNonRoot (boolean)
指示容器必须以非 root 用户身份运行。
如果为 true,kubelet 将在运行时验证镜像,以确保它不会以 UID 0(root)身份运行,如果是,则无法启动容器。
如果未设置或为 false,则不会执行此类验证。也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
securityContext.runAsGroup (int64)
运行容器进程入口点的 GID。如果未设置,则使用运行时默认值。也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
注意,spec.os.name
为 "windows" 时不能设置该字段。
securityContext.allowPrivilegeEscalation (boolean)
allowPrivilegeEscalation 控制进程是否可以获得比其父进程更多的权限。此布尔值直接控制是否在容器进程上设置
no_new_privs
标志。allowPrivilegeEscalation 在容器处于以下状态时始终为 true:
以特权身份运行
具有 CAP_SYS_ADMIN
请注意,当 spec.os.name
为 "windows" 时,无法设置此字段。
securityContext.seccompProfile (SeccompProfile)
此容器使用的 seccomp 选项。如果在 Pod 和容器级别都提供了 seccomp 选项,则容器级别的选项会覆盖 Pod 级别的选项设置。
注意,spec.os.name
为 "windows" 时不能设置此字段。
SeccompProfile 定义 Pod 或容器的 seccomp 配置文件设置。只能设置一个配置文件源。
securityContext.seccompProfile.localhostProfile (string)
localhostProfile 指示应使用的在节点上的文件,文件中定义了配置文件。
该配置文件必须在节点上先行配置才能使用。
必须是相对于 kubelet 所配置的 seccomp 配置文件位置下的下级路径。
仅当 type 为 "Localhost" 时才必须设置。不得为任何其他类别设置此字段。
securityContext.seLinuxOptions (SELinuxOptions)
要应用到容器上的 SELinux 上下文。如果未设置此字段,容器运行时将为每个容器分配一个随机的 SELinux 上下文。
也可以在 PodSecurityContext 中设置。如果同时在 SecurityContext 和 PodSecurityContext 中设置,
则在 SecurityContext 中指定的值优先。注意,spec.os.name
为 "windows" 时不能设置此字段。
SELinuxOptions 是要应用到容器上的标签。
securityContext.seLinuxOptions.level (string)
level 是应用于容器的 SELinux 级别标签。
securityContext.seLinuxOptions.role (string)
role 是应用于容器的 SELinux 角色标签。
securityContext.seLinuxOptions.type (string)
type 是适用于容器的 SELinux 类型标签。
securityContext.seLinuxOptions.user (string)
user 是应用于容器的 SELinux 用户标签。
securityContext.windowsOptions (WindowsSecurityContextOptions)
要应用于所有容器上的特定于 Windows 的设置。如果未指定,将使用 PodSecurityContext 中的选项。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
注意,spec.os.name
为 "linux" 时不能设置此字段。
WindowsSecurityContextOptions 包含特定于 Windows 的选项和凭据。
securityContext.windowsOptions.hostProcess (boolean)
hostProcess 确定容器是否应作为 "主机进程" 容器运行。
一个 Pod 的所有容器必须具有相同的有效 hostProcess 值(不允许混合设置了 hostProcess 容器和未设置 hostProcess 的容器)。
此外,如果 hostProcess 为 true,则 hostNetwork 也必须设置为 true。
securityContext.windowsOptions.runAsUserName (string)
Windows 中运行容器进程入口点的用户名。如果未指定,则默认为镜像元数据中指定的用户。
也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。
调试
tty (boolean)
这个容器是否应该为自己分配一个 TTY,同时需要设置 stdin
为真。默认为 false。
EphemeralContainer
EphemeralContainer 是一个临时容器,你可以将其添加到现有 Pod 以用于用户发起的活动,例如调试。
临时容器没有资源或调度保证,它们在退出或 Pod 被移除或重新启动时不会重新启动。
如果临时容器导致 Pod 超出其资源分配,kubelet 可能会驱逐 Pod。
要添加临时容器,请使用现有 Pod 的 ephemeralcontainers
子资源。临时容器不能被删除或重新启动。
targetContainerName (string)
如果设置,则为 Pod 规约中此临时容器所针对的容器的名称。临时容器将在该容器的名字空间(IPC、PID 等)中运行。
如果未设置,则临时容器使用 Pod 规约中配置的名字空间。
容器运行时必须实现对此功能的支持。如果运行时不支持名字空间定位,则设置此字段的结果是未定义的。
镜像
入口点
环境变量
env ([]EnvVar)
补丁策略:基于 name
键合并
要在容器中设置的环境变量列表。无法更新。
EnvVar 表示容器中存在的环境变量。
envFrom ([]EnvFromSource)
在容器中填充环境变量的来源列表。在来源中定义的键名必须是 C_IDENTIFIER。
容器启动时,所有无效键都将作为事件报告。当一个键存在于多个来源中时,与最后一个来源关联的值将优先。
如果有重复主键,env 中定义的值将优先。无法更新。
EnvFromSource 表示一组 ConfigMap 来源
卷
volumeDevices ([]VolumeDevice)
补丁策略:基于 devicePath
键合并
volumeDevices 是容器要使用的块设备列表。
volumeDevice 描述容器内原始块设备的映射。
volumeDevices.devicePath (string),必需
devicePath 是设备将被映射到的容器内的路径。
volumeDevices.name (string),必需
name 必须与 Pod 中的 persistentVolumeClaim 的名称匹配。
生命周期
terminationMessagePolicy (string)
指示应如何填充终止消息。字段值为 File
表示将使用 terminateMessagePath
的内容来填充成功和失败的容器状态消息。
如果终止消息文件为空并且容器因错误退出,字段值 FallbackToLogsOnError
表示将使用容器日志输出的最后一块。日志输出限制为 2048 字节或 80 行,以较小者为准。
默认为 File
。无法更新。
调试
安全上下文
securityContext (SecurityContext)
可选字段。securityContext 定义了运行临时容器的安全选项。
如果设置了此字段,SecurityContext 的字段将覆盖 PodSecurityContext 的等效字段。
SecurityContext 保存将应用于容器的安全配置。
一些字段在 SecurityContext 和 PodSecurityContext 中都存在。
当两者都设置时,SecurityContext 中的值优先。
securityContext.runAsUser (int64)
运行容器进程入口点的 UID。如果未指定,则默认为镜像元数据中指定的用户。
也可以在 PodSecurityContext 中设置。如果同时在 SecurityContext 和 PodSecurityContext
中设置,则在 SecurityContext 中指定的值优先。
注意,spec.os.name
为 "windows" 时不能设置该字段。
securityContext.runAsNonRoot (boolean)
指示容器必须以非 root 用户身份运行。如果为 true,Kubelet 将在运行时验证镜像,
以确保它不会以 UID 0(root)身份运行,如果是,则无法启动容器。
如果未设置或为 false,则不会执行此类验证。也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext
中指定的值优先。
securityContext.runAsGroup (int64)
运行容器进程入口点的 GID。如果未设置,则使用运行时默认值。也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext
中指定的值优先。注意,spec.os.name
为 "windows" 时不能设置该字段。
securityContext.allowPrivilegeEscalation (boolean)
allowPrivilegeEscalation 控制进程是否可以获得比其父进程更多的权限。
此布尔值直接控制是否在容器进程上设置 no_new_privs
标志。allowPrivilegeEscalation
在容器处于以下状态时始终为 true:
以特权身份运行
具有 CAP_SYS_ADMIN
权能
请注意,当 spec.os.name
为 "windows" 时,无法设置此字段。
securityContext.seccompProfile (SeccompProfile)
此容器使用的 seccomp 选项。如果在 Pod 和容器级别都提供了 seccomp 选项,
则容器选项会覆盖 Pod 选项。注意,spec.os.name
为 "windows" 时不能设置该字段。
SeccompProfile 定义 Pod 或容器的 seccomp 配置文件设置。只能设置一个配置文件源。
securityContext.seccompProfile.localhostProfile (string)
localhostProfile 指示应使用在节点上的文件中定义的配置文件。
该配置文件必须在节点上预先配置才能工作。
必须是相对于 kubelet 配置的 seccomp 配置文件位置下的子路径。
仅当 type 为 "Localhost" 时才必须设置。不得为任何其他类别设置此字段。
securityContext.seLinuxOptions (SELinuxOptions)
要应用于容器的 SELinux 上下文。如果未指定,容器运行时将为每个容器分配一个随机
SELinux 上下文。也可以在 PodSecurityContext 中设置。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext
中指定的值优先。注意,spec.os.name
为 "windows" 时不能设置此字段。
SELinuxOptions 是要应用于容器的标签
securityContext.seLinuxOptions.level (string)
level 是应用于容器的 SELinux 级别标签。
securityContext.seLinuxOptions.role (string)
role 是应用于容器的 SELinux 角色标签。
securityContext.seLinuxOptions.type (string)
type 是适用于容器的 SELinux 类型标签。
securityContext.seLinuxOptions.user (string)
user 是应用于容器的 SELinux 用户标签。
securityContext.windowsOptions (WindowsSecurityContextOptions)
要应用到所有容器上的特定于 Windows 的设置。如果未指定,将使用 PodSecurityContext 中的选项。
如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext
中指定的值优先。注意,spec.os.name
为 "linux" 时不能设置此字段。
WindowsSecurityContextOptions 包含特定于 Windows 的选项和凭据。
securityContext.windowsOptions.gmsaCredentialSpec (string)
gmsaCredentialSpec 是 GMSA 准入 Webhook
内嵌由 gmsaCredentialSpecName 字段所指定的 GMSA 凭证规约内容的地方。
securityContext.windowsOptions.gmsaCredentialSpecName (string)
gmsaCredentialSpecName 是要使用的 GMSA 凭证规约的名称。
securityContext.windowsOptions.hostProcess (boolean)
hostProcess 确定容器是否应作为 "主机进程" 容器运行。
一个 Pod 的所有容器必须具有相同的有效 hostProcess 值
(不允许混合设置了 hostProcess 的容器和未设置 hostProcess 的容器)。
此外,如果 hostProcess 为 true,则 hostNetwork 也必须设置为 true。
securityContext.windowsOptions.runAsUserName (string)
Windows 中运行容器进程入口点的用户名。如果未指定,则默认为镜像元数据中指定的用户。
也可以在 PodSecurityContext 中设置。如果同时在 SecurityContext 和 PodSecurityContext
中设置,则在 SecurityContext 中指定的值优先。
不允许
ports ([]ContainerPort)
补丁策略:基于 containerPort
键合并
映射:键 containerPort, protocol
组合的唯一值将在合并期间保留
临时容器不允许使用端口。
ContainerPort 表示单个容器中的网络端口。
resources (ResourceRequirements)
临时容器不允许使用资源。临时容器使用已分配给 Pod 的空闲资源。
ResourceRequirements 描述计算资源的需求。
resources.claims ([]ResourceClaim)
映射:键 name
的唯一值将在合并过程中保留
claims 列出了此容器使用的资源名称,资源名称在 spec.resourceClaims
中定义。
这是一个 Alpha 特性字段,需要启用 DynamicResourceAllocation 功能门控开启此特性。
此字段不可变更,只能在容器级别设置。
ResourceClaim 引用 PodSpec.ResourceClaims
中的一项。
livenessProbe (Probe )
临时容器不允许使用探针。
readyProbe (Probe )
临时容器不允许使用探针。
startupProbe (Probe )
临时容器不允许使用探针。
LifecycleHandler
LifecycleHandler 定义了应在生命周期挂钩中执行的特定操作。
必须指定一个且只能指定一个字段,tcpSocket 除外。
tcpSocket (TCPSocketAction)
已弃用。不再支持 tcpSocket
作为 LifecycleHandler,但为向后兼容保留之。
当指定 tcp
处理程序时,此字段不会被验证,而生命周期回调将在运行时失败。
TCPSocketAction 描述基于打开套接字的动作。
tcpSocket.port (IntOrString),必需
容器上要访问的端口的编号或名称。端口号必须在 1 到 65535 的范围内。
名称必须是 IANA_SVC_NAME。
IntOrString 是一种可以保存 int32 或字符串值的类型。在 JSON 或 YAML 编组和解组中使用时,
会生成或使用内部类型。例如,这允许你拥有一个可以接受名称或数字的 JSON 字段。
tcpSocket.host (string)
可选字段。要连接的主机名,默认为 Pod IP。
NodeAffinity
节点亲和性是一组节点亲和性调度规则。
preferredDuringSchedulingIgnoredDuringExecution ([]PreferredSchedulingTerm)
调度程序会更倾向于将 Pod 调度到满足该字段指定的亲和性表达式的节点,
但它可能会选择违反一个或多个表达式的节点。最优选的节点是权重总和最大的节点,
即对于满足所有调度要求(资源请求、requiredDuringScheduling 亲和表达式等)的每个节点,
通过迭代该字段的元素来计算总和如果节点匹配相应的 matchExpressions,则将 "权重" 添加到总和中;
具有最高总和的节点是最优选的。
空的首选调度条件匹配所有具有隐式权重 0 的对象(即它是一个 no-op 操作)。
null 值的首选调度条件不匹配任何对象(即也是一个 no-op 操作)。
requiredDuringSchedulingIgnoredDuringExecution (NodeSelector)
如果在调度时不满足该字段指定的亲和性要求,则不会将 Pod 调度到该节点上。
如果在 Pod 执行期间的某个时间点不再满足此字段指定的亲和性要求(例如:由于更新),
系统可能会或可能不会尝试最终将 Pod 从其节点中逐出。
一个节点选择器代表一个或多个标签查询结果在一组节点上的联合;换言之,
它表示由节点选择器项表示的选择器的逻辑或组合。
requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms ([]NodeSelectorTerm),必需
必需的字段。节点选择条件列表。这些条件按逻辑或操作组合。
null 值或空值的节点选择器条件不匹配任何对象。这里的条件是按逻辑与操作组合的。
TopologySelectorTerm 类型实现了 NodeSelectorTerm 的一个子集。
requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement )
按节点标签列出的节点选择器需求列表。
requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement )
按节点字段列出的节点选择器要求列表。
PodAffinity
Pod 亲和性是一组 Pod 间亲和性调度规则。
preferredDuringSchedulingIgnoredDuringExecution ([]WeightedPodAffinityTerm)
调度器会更倾向于将 Pod 调度到满足该字段指定的亲和性表达式的节点,
但它可能会选择违反一个或多个表达式的节点。最优选择是权重总和最大的节点,
即对于满足所有调度要求(资源请求、requiredDuringScheduling
亲和表达式等)的每个节点,
通过迭代该字段的元素来计算总和,如果节点具有与相应 podAffinityTerm
匹配的 Pod,则将“权重”添加到总和中;
具有最高总和的节点是最优选的。
所有匹配的 WeightedPodAffinityTerm 字段的权重都是按节点累计的,以找到最优选的节点。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm (PodAffinityTerm),必需
必需的字段。一个 Pod 亲和性条件,对应一个与相应的权重值。
定义一组 Pod(即那些与给定名字空间相关的标签选择算符匹配的 Pod 集合),
当前 Pod 应该与所选 Pod 集合位于同一位置(亲和性)或位于不同位置(反亲和性),
其中“在同一位置”意味着运行在一个节点上,其键 topologyKey
的标签值与运行所选 Pod
集合中的某 Pod 的任何节点上的标签值匹配。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.topologyKey (string),必需
此 Pod 应与指定名字空间中与标签选择算符匹配的 Pod 集合位于同一位置(亲和性)
或位于不同位置(反亲和性),这里的“在同一位置”意味着运行在一个节点上,其键名为
topologyKey
的标签值与运行所选 Pod 集合中的某 Pod 的任何节点上的标签值匹配。
不允许使用空的 topologyKey
。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaceSelector (LabelSelector )
对条件所适用的名字空间集合的标签查询。
此条件会被应用到此字段所选择的名字空间和 namespaces 字段中列出的名字空间的组合之上。
选择算符为 null 和 namespaces 列表为 null 值或空表示“此 Pod 的名字空间”。
空的选择算符 ({}) 可用来匹配所有名字空间。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaces ([]string)
namespaces 指定此条件所适用的名字空间,是一个静态列表。
此条件会被应用到 namespaces 字段中列出的名字空间和由 namespaceSelector 选中的名字空间上。
namespaces 列表为 null 或空,以及 namespaceSelector 值为 null 均表示“此 Pod 的名字空间”。
requiredDuringSchedulingIgnoredDuringExecution ([]PodAffinityTerm)
如果在调度时不满足该字段指定的亲和性要求,则该 Pod 不会被调度到该节点上。
如果在 Pod 执行期间的某个时间点不再满足此字段指定的亲和性要求(例如:由于 Pod 标签更新),
系统可能会也可能不会尝试最终将 Pod 从其节点中逐出。
当此列表中有多个元素时,每个 podAffinityTerm
对应的节点列表是取其交集的,即必须满足所有条件。
定义一组 Pod(即那些与给定名字空间相关的标签选择算符匹配的 Pod 集合),当前 Pod 应该与该
Pod 集合位于同一位置(亲和性)或不位于同一位置(反亲和性)。
这里的“位于同一位置”含义是运行在一个节点上。基于 topologyKey
字段所给的标签键名,
检查所选 Pod 集合中各个 Pod 所在的节点上的标签值,标签值相同则认作“位于同一位置”。
requiredDuringSchedulingIgnoredDuringExecution.topologyKey (string),必需
此 Pod 应与指定名字空间中与标签选择算符匹配的 Pod 集合位于同一位置(亲和性)
或不位于同一位置(反亲和性),
这里的“位于同一位置”含义是运行在一个节点上。基于 topologyKey
字段所给的标签键名,
检查所选 Pod 集合中各个 Pod 所在的节点上的标签值,标签值相同则认作“位于同一位置”。
不允许使用空的 topologyKey
。
requiredDuringSchedulingIgnoredDuringExecution.namespaceSelector (LabelSelector )
对条件所适用的名字空间集合的标签查询。
当前条件将应用于此字段选择的名字空间和 namespaces 字段中列出的名字空间。
选择算符为 null 和 namespaces 列表为 null 或空值表示“此 Pod 的名字空间”。
空选择算符 ({}) 能够匹配所有名字空间。
requiredDuringSchedulingIgnoredDuringExecution.namespaces ([]string)
namespaces 指定当前条件所适用的名字空间名称的静态列表。
当前条件适用于此字段中列出的名字空间和由 namespaceSelector 选中的名字空间。
namespaces 列表为 null 或空,以及 namespaceSelector 为 null 表示“此 Pod 的名字空间”。
PodAntiAffinity
Pod 反亲和性是一组 Pod 间反亲和性调度规则。
preferredDuringSchedulingIgnoredDuringExecution ([]WeightedPodAffinityTerm)
调度器更倾向于将 Pod 调度到满足该字段指定的反亲和性表达式的节点,
但它可能会选择违反一个或多个表达式的节点。
最优选的节点是权重总和最大的节点,即对于满足所有调度要求(资源请求、requiredDuringScheduling
反亲和性表达式等)的每个节点,通过遍历元素来计算总和如果节点具有与相应 podAffinityTerm
匹配的 Pod,则此字段并在总和中添加"权重";具有最高加和的节点是最优选的。
所有匹配的 WeightedPodAffinityTerm 字段的权重都是按节点添加的,以找到最优选的节点。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm (PodAffinityTerm),必需
必需的字段。一个 Pod 亲和性条件,与相应的权重相关联。
定义一组 Pod(即那些与给定名字空间相关的标签选择算符匹配的 Pod 集合),
当前 Pod 应该与所选 Pod 集合位于同一位置(亲和性)或不位于同一位置(反亲和性),
其中 "在同一位置" 意味着运行在一个节点上,其键 topologyKey
的标签值与运行所选 Pod
集合中的某 Pod 的任何节点上的标签值匹配。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.topologyKey (string),必需
此 Pod 应与指定名字空间中与标签选择算符匹配的 Pod 集合位于同一位置(亲和性)
或不位于同一位置(反亲和性),这里的 "在同一位置" 意味着运行在一个节点上,其键名为
topologyKey
的标签值与运行所选 Pod 集合中的某 Pod 的任何节点上的标签值匹配。
不允许使用空的 topologyKey
。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaceSelector (LabelSelector )
对条件所适用的名字空间集合的标签查询。
此条件会被应用到此字段所选择的名字空间和 namespaces 字段中列出的名字空间的组合之上。
选择算符为 null 和 namespaces 列表为 null 值或空表示 "此 Pod 的名字空间"。
空的选择算符 ({}) 可用来匹配所有名字空间。
preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaces ([]string)
namespaces 指定此条件所适用的名字空间,是一个静态列表。
此条件会被应用到 namespaces 字段中列出的名字空间和由 namespaceSelector 选中的名字空间上。
namespaces 列表为 null 或空,以及 namespaceSelector 值为 null 均表示 "此 Pod 的名字空间"。
requiredDuringSchedulingIgnoredDuringExecution ([]PodAffinityTerm)
如果在调度时不满足该字段指定的反亲和性要求,则该 Pod 不会被调度到该节点上。
如果在 Pod 执行期间的某个时间点不再满足此字段指定的反亲和性要求(例如:由于 Pod 标签更新),
系统可能会或可能不会尝试最终将 Pod 从其节点中逐出。
当有多个元素时,每个 podAffinityTerm
对应的节点列表是取其交集的,即必须满足所有条件。
定义一组 Pod(即那些与给定名字空间相关的标签选择算符匹配的 Pod 集合),当前 Pod 应该与该
Pod 集合位于同一位置(亲和性)或不位于同一位置(反亲和性)。
这里的 "位于同一位置" 含义是运行在一个节点上。基于 topologyKey
字段所给的标签键名,
检查所选 Pod 集合中各个 Pod 所在的节点上的标签值,标签值相同则认作 "位于同一位置"。
requiredDuringSchedulingIgnoredDuringExecution.topologyKey (string),必需
此 Pod 应与指定名字空间中与标签选择算符匹配的 Pod 集合位于同一位置(亲和性)
或不位于同一位置(反亲和性),
这里的 "位于同一位置" 含义是运行在一个节点上。基于 topologyKey
字段所给的标签键名,
检查所选 Pod 集合中各个 Pod 所在的节点上的标签值,标签值相同则认作 "位于同一位置"。
不允许使用空的 topologyKey
。
requiredDuringSchedulingIgnoredDuringExecution.namespaceSelector (LabelSelector )
对条件所适用的名字空间集合的标签查询。
当前条件将应用于此字段选择的名字空间和 namespaces 字段中列出的名字空间。
选择算符为 null 和 namespaces 列表为 null 或空值表示 “此 Pod 的名字空间”。
空选择算符 ({}) 能够匹配所有名字空间。
requiredDuringSchedulingIgnoredDuringExecution.namespaces ([]string)
namespaces 指定当前条件所适用的名字空间名称的静态列表。
当前条件适用于此字段中列出的名字空间和由 namespaceSelector 选中的名字空间。
namespaces 列表为 null 或空,以及 namespaceSelector 为 null 表示 “此 Pod 的名字空间”。
探针
探针描述了要对容器执行的健康检查,以确定它是否处于活动状态或准备好接收流量。
tcpSocket (TCPSocketAction)
tcpSocket 指定涉及 TCP 端口的操作。
TCPSocketAction
描述基于打开套接字的动作。
tcpSocket.port (IntOrString),必需
容器上要访问的端口的端口号或名称。端口号必须在 1 到 65535 内。名称必须是 IANA_SVC_NAME。
IntOrString 是一种可以保存 int32 或字符串的类型。在 JSON 或 YAML 编组和解组时,
它会生成或使用内部类型。例如,这允许你拥有一个可以接受名称或数字的 JSON 字段。
tcpSocket.host (string)
可选字段。要连接的主机名,默认为 Pod IP。
terminationGracePeriodSeconds (int64)
Pod 需要在探针失败时体面终止所需的时间长度(以秒为单位),为可选字段。
宽限期是 Pod 中运行的进程收到终止信号后,到进程被终止信号强制停止之前的时间长度(以秒为单位)。
你应该将此值设置为比你的进程的预期清理时间更长。
如果此值为 nil,则将使用 Pod 的 terminateGracePeriodSeconds
。
否则,此值将覆盖 Pod 规约中设置的值。字段值值必须是非负整数。
零值表示收到终止信号立即停止(没有机会关闭)。
这是一个 Beta 字段,需要启用 ProbeTerminationGracePeriod 特性门控。最小值为 1。
如果未设置,则使用 spec.terminationGracePeriodSeconds
。
grpc (GRPCAction)
GRPC 指定涉及 GRPC 端口的操作。
PodStatus
PodStatus 表示有关 Pod 状态的信息。状态内容可能会滞后于系统的实际状态,
尤其是在托管 Pod 的节点无法联系控制平面的情况下。
nominatedNodeName (string)
仅当此 Pod 抢占节点上的其他 Pod 时才设置 nominatedNodeName
,
但抢占操作的受害者会有体面终止期限,因此此 Pod 无法立即被调度。
此字段不保证 Pod 会在该节点上调度。
如果其他节点更早进入可用状态,调度器可能会决定将 Pod 放置在其他地方。
调度器也可能决定将此节点上的资源分配给优先级更高的、在抢占操作之后创建的 Pod。
因此,当 Pod 被调度时,该字段可能与 Pod 规约中的 nodeName 不同。
phase (string)
Pod 的 phase 是对 Pod 在其生命周期中所处位置的简单、高级摘要。
conditions 数组、reason 和 message 字段以及各个容器的 status 数组包含有关 Pod
状态的进一步详细信息。phase 的取值有五种可能性:
Pending
:Pod 已被 Kubernetes 系统接受,但尚未创建容器镜像。
这包括 Pod 被调度之前的时间以及通过网络下载镜像所花费的时间。
Running
:Pod 已经被绑定到某个节点,并且所有的容器都已经创建完毕。至少有一个容器仍在运行,或者正在启动或重新启动过程中。
Succeeded
:Pod 中的所有容器都已成功终止,不会重新启动。
Failed
:Pod 中的所有容器都已终止,并且至少有一个容器因故障而终止。
容器要么以非零状态退出,要么被系统终止。
Unknown
:由于某种原因无法获取 Pod 的状态,通常是由于与 Pod 的主机通信时出错。
更多信息:
https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
message (string)
一条人类可读的消息,标示有关 Pod 为何处于这种情况的详细信息。
reason (string)
一条简短的驼峰式命名的消息,指示有关 Pod 为何处于此状态的详细信息。例如 'Evicted'。
podIP (string)
分配给 Pod 的 podIP 地址。至少在集群内可路由。如果尚未分配则为空。
resourceClaimStatuses ([]PodResourceClaimStatus)
补丁策略:retainKeys,基于键 name
合并
映射:键 name
的唯一值将在合并过程中保留
资源申领的状态。
对于每个引用 ResourceClaimTemplate 的 PodResourceClaim,PodResourceClaimStatus 被存储在
PodStatus 中。它存储为对应 ResourceClaim 生成的名称。
resourceClaimStatuses.name (string), required
Name 在 Pod 中唯一地标识此资源申领。
此名称必须与 pod.spec.resourceClaims 中的条目名称匹配,这意味着字符串必须是 DNS_LABEL。
resourceClaimStatuses.resourceClaimName (string)
resourceClaimName 是为 Pod 在其名字空间中生成的 ResourceClaim 的名称。
如果此项未被设置,则不需要生成 ResourceClaim。在这种情况下,可以忽略 pod.spec.resourceClaims 这个条目。
PodList
PodList 是 Pod 的列表。
操作
get
读取指定的 Pod
HTTP 请求
GET /api/v1/namespaces/{namespace}/pods/{name}
参数
响应
200 (Pod ): OK
401: Unauthorized
get
读取指定 Pod 的 ephemeralcontainers
HTTP 请求
GET /api/v1/namespaces/{namespace}/pods/{name}/ephemeralcontainers
参数
响应
200 (Pod ): OK
401: Unauthorized
get
读取指定 Pod 的日志
HTTP 请求
GET /api/v1/namespaces/{namespace}/pods/{name}/log
参数
follow (查询参数 ):boolean
跟踪 Pod 的日志流。默认为 false。
insecureSkipTLSVerifyBackend (查询参数 ):boolean
insecureSkipTLSVerifyBackend
表示 API 服务器不应确认它所连接的后端的服务证书的有效性。
这将使 API 服务器和后端之间的 HTTPS 连接不安全。
这意味着 API 服务器无法验证它接收到的日志数据是否来自真正的 kubelet。
如果 kubelet 配置为验证 API 服务器的 TLS 凭据,这并不意味着与真实 kubelet
的连接容易受到中间人攻击(例如,攻击者无法拦截来自真实 kubelet 的实际日志数据)。
tailLines (查询参数 ): integer
如果设置,则从日志末尾开始显示的行数。如果未指定,则从容器创建或 sinceSeconds
或
sinceTime
时刻显示日志。
timestamps (查询参数 ):boolean
如果为 true,则在每行日志输出的开头添加 RFC3339 或 RFC3339Nano 时间戳。默认为 false。
响应
200 (string): OK
401: Unauthorized
get
读取指定 Pod 的状态
HTTP 请求
GET /api/v1/namespaces/{namespace}/pods/{name}/status
参数
响应
200 (Pod ): OK
401: Unauthorized
list
列出或观察 Pod 种类的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/pods
参数
响应
200 (PodList ): OK
401: Unauthorized
list
列出或观察 Pod 种类的对象
HTTP 请求
GET /api/v1/pods
参数
响应
200 (PodList ): OK
401: Unauthorized
create
创建一个 Pod
HTTP 请求
POST /api/v1/namespaces/{namespace}/pods
参数
响应
200 (Pod ): OK
201 (Pod ): Created
202 (Pod ): Accepted
401: Unauthorized
update
替换指定的 Pod
HTTP 请求
PUT /api/v1/namespaces/{namespace}/pods/{name}
参数
响应
200 (Pod ): OK
201 (Pod ): Created
401: Unauthorized
update
替换指定 Pod 的 ephemeralcontainers
HTTP 请求
PUT /api/v1/namespaces/{namespace}/pods/{name}/ephemeralcontainers
参数
响应
200 (Pod ): OK
201 (Pod ): Created
401: Unauthorized
update
替换指定 Pod 的状态
HTTP 请求
PUT /api/v1/namespaces/{namespace}/pods/{name}/status
参数
响应
200 (Pod ): OK
201 (Pod ): Created
401: Unauthorized
patch
部分更新指定 Pod
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/pods/{name}
参数
响应
200 (Pod ): OK
201 (Pod ): Created
401: Unauthorized
patch
部分更新指定 Pod 的 ephemeralcontainers
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/pods/{name}/ephemeralcontainers
参数
响应
200 (Pod ): OK
201 (Pod ): Created
401: Unauthorized
patch
部分更新指定 Pod 的状态
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/pods/{name}/status
参数
响应
200 (Pod ): OK
201 (Pod ): Created
401: Unauthorized
delete
删除一个 Pod
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/pods/{name}
参数
响应
200 (Pod ): OK
202 (Pod ): Accepted
401: Unauthorize
deletecollection
删除 Pod 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/pods
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.2 - Binding
Binding 将一个对象与另一个对象绑定起来;例如,调度程序将一个 Pod 绑定到一个节点。
apiVersion: v1
import "k8s.io/api/core/v1"
Binding
Binding 将一个对象与另一个对象绑定在一起;例如,调度程序将一个 Pod 绑定到一个节点。
1.7 版中已弃用,请使用 Pod 的 Binding 子资源代替。
操作
create
创建 Binding
POST /api/v1/namespaces/{namespace}/bindings
参数
响应
200 (Binding ): OK
201 (Binding ): Created
202 (Binding ): Accepted
401: Unauthorized
create
创建 Pod 的 binding
POST /api/v1/namespaces/{namespace}/pods/{name}/binding
参数
响应
200 (Binding ): OK
201 (Binding ): Created
202 (Binding ): Accepted
401: Unauthorized
5.1.3 - PodTemplate
PodTemplate 描述一种模板,用来为预定义的 Pod 生成副本。
apiVersion: v1
import "k8s.io/api/core/v1"
PodTemplate
PodTemplate 描述一种模板,用来为预定义的 Pod 生成副本。
PodTemplateSpec
PodTemplateSpec 描述基于某模板所创建的 Pod 所应具有的数据。
PodTemplateList
PodTemplateList 是 PodTemplate 对象的列表。
操作
get
读取指定的 PodTemplate
HTTP 请求
GET /api/v1/namespaces/{namespace}/podtemplates/{name}
参数
name (路径参数 ):string,必需
PodTemplate 的名称
响应
200 (PodTemplate ): OK
401: Unauthorized
list
列出或监视 PodTemplate 类型的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/podtemplates
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (PodTemplateList ): OK
401: Unauthorized
list
列出或监视 PodTemplate 类型的对象
HTTP 请求
GET /api/v1/podtemplates
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (PodTemplateList ): OK
401: Unauthorized
create
创建一个 PodTemplate
HTTP 请求
POST /api/v1/namespaces/{namespace}/podtemplates
参数
响应
200 (PodTemplate ): OK
201 (PodTemplate ): Created
202 (PodTemplate ): Accepted
401: Unauthorized
update
替换指定的 PodTemplate
HTTP 请求
PUT /api/v1/namespaces/{namespace}/podtemplates/{name}
参数
name (路径参数 ):string,必需
PodTemplate 的名称
响应
200 (PodTemplate ): OK
201 (PodTemplate ): Created
401: Unauthorized
patch
部分更新指定的 PodTemplate
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/podtemplates/{name}
参数
name (路径参数 ):string,必需
PodTemplate 的名称
force (查询参数 ):boolean
force
响应
200 (PodTemplate ): OK
201 (PodTemplate ): Created
401: Unauthorized
delete
删除一个 PodTemplate
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/podtemplates/{name}
参数
name (路径参数 ):string,必需
PodTemplate 的名称
响应
200 (PodTemplate ): OK
202 (PodTemplate ): Accepted
401: Unauthorized
deletecollection
删除 PodTemplate 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/podtemplates
参数
limit (查询参数 ):integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.1.4 - ReplicaSet
ReplicaSet 确保在任何给定的时刻都在运行指定数量的 Pod 副本。
apiVersion: apps/v1
import "k8s.io/api/apps/v1"
ReplicaSet
ReplicaSet 确保在任何给定的时刻都在运行指定数量的 Pod 副本。
apiVersion : apps/v1
kind : ReplicaSet
ReplicaSetSpec
ReplicaSetSpec 是 ReplicaSet 的规约。
ReplicaSetStatus
ReplicaSetStatus 表示 ReplicaSet 的当前状态。
readyReplicas (int32)
readyReplicas 是此 ReplicaSet 在就绪状况下处理的目标 Pod 数量。
fullyLabeledReplicas (int32)
标签与 ReplicaSet 的 Pod 模板标签匹配的 Pod 数量。
ReplicaSetList
ReplicaSetList 是多个 ReplicaSet 的集合。
apiVersion : apps/v1
kind : ReplicaSetList
操作
get
读取指定的 ReplicaSet
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/replicasets/{name}
参数
响应
200 (ReplicaSet ): OK
401: Unauthorized
get
读取指定的 ReplicaSet 的状态
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status
参数
响应
200 (ReplicaSet ): OK
401: Unauthorized
list
列出或监视 ReplicaSet 类别的对象
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/replicasets
参数
响应
200 (ReplicaSetList ): OK
401: Unauthorized
list
列出或监视 ReplicaSet 类别的对象
HTTP 请求
GET /apis/apps/v1/replicasets
参数
响应
200 (ReplicaSetList ): OK
401: Unauthorized
create
创建 ReplicaSet
HTTP 请求
POST /apis/apps/v1/namespaces/{namespace}/replicasets
参数
响应
200 (ReplicaSet ): OK
201 (ReplicaSet ): Created
202 (ReplicaSet ): Accepted
401: Unauthorized
update
替换指定的 ReplicaSet
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/replicasets/{name}
参数
响应
200 (ReplicaSet ): OK
201 (ReplicaSet ): Created
401: Unauthorized
update
替换指定的 ReplicaSet 的状态
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status
参数
响应
200 (ReplicaSet ): OK
201 (ReplicaSet ): Created
401: Unauthorized
patch
部分更新指定的 ReplicaSet
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/replicasets/{name}
参数
响应
200 (ReplicaSet ): OK
201 (ReplicaSet ): Created
401: Unauthorized
patch
部分更新指定的 ReplicaSet 的状态
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status
参数
响应
200 (ReplicaSet ): OK
201 (ReplicaSet ): Created
401: Unauthorized
delete
删除 ReplicaSet
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/replicasets/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ReplicaSet 的集合
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/replicasets
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.5 - ReplicationController
ReplicationController 表示一个副本控制器的配置。
apiVersion: v1
import "k8s.io/api/core/v1"
ReplicationController
ReplicationController 表示一个副本控制器的配置。
ReplicationControllerSpec
ReplicationControllerSpec 表示一个副本控制器的规约。
ReplicationControllerStatus
ReplicationControllerStatus 表示一个副本控制器的当前状态。
conditions ([]ReplicationControllerCondition)
补丁策略:按照键 type
合并
Map:键 type
的唯一值将在合并期间保留
表示副本控制器当前状态的最新可用观测值。
ReplicationControllerCondition 描述某个点的副本控制器的状态。
conditions.status (string),必需
状况的状态,取值为 True、False 或 Unknown 之一。
conditions.type (string),必需
副本控制器状况的类型。
conditions.message (string)
这是一条人类可读的消息,指示有关上次转换的详细信息。
ReplicationControllerList
ReplicationControllerList 是副本控制器的集合。
操作
get
读取指定的 ReplicationController
HTTP 请求
GET /api/v1/namespaces/{namespace}/replicationcontrollers/{name}
参数
响应
200 (ReplicationController ): OK
401: Unauthorized
get
读取指定的 ReplicationController 的状态
HTTP 请求
GET /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status
参数
响应
200 (ReplicationController ): OK
401: Unauthorized
list
列出或监视 ReplicationController 类别的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/replicationcontrollers
参数
响应
200 (ReplicationControllerList ): OK
401: Unauthorized
list
列出或监视 ReplicationController 类别的对象
HTTP 请求
GET /api/v1/replicationcontrollers
参数
响应
200 (ReplicationControllerList ): OK
401: Unauthorized
create
创建 ReplicationController
HTTP 请求
POST /api/v1/namespaces/{namespace}/replicationcontrollers
参数
响应
200 (ReplicationController ): OK
201 (ReplicationController ): Created
202 (ReplicationController ): Accepted
401: Unauthorized
update
替换指定的 ReplicationController
HTTP 请求
PUT /api/v1/namespaces/{namespace}/replicationcontrollers/{name}
参数
响应
200 (ReplicationController ): OK
201 (ReplicationController ): Created
401: Unauthorized
update
替换指定的 ReplicationController 的状态
HTTP 请求
PUT /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status
参数
响应
200 (ReplicationController ): OK
201 (ReplicationController ): Created
401: Unauthorized
patch
部分更新指定的 ReplicationController
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/replicationcontrollers/{name}
参数
响应
200 (ReplicationController ): OK
201 (ReplicationController ): Created
401: Unauthorized
patch
部分更新指定的 ReplicationController 的状态
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status
参数
响应
200 (ReplicationController ): OK
201 (ReplicationController ): Created
401: Unauthorized
delete
删除 ReplicationController
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/replicationcontrollers/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ReplicationController 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/replicationcontrollers
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.6 - Deployment
Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新。
apiVersion: apps/v1
import "k8s.io/api/apps/v1"
Deployment
Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新。
apiVersion : apps/v1
kind : Deployment
DeploymentSpec
DeploymentSpec 定义 Deployment 预期行为的规约。
selector (LabelSelector ),必需
供 Pod 所用的标签选择算符。通过此字段选择现有 ReplicaSet 的 Pod 集合,
被选中的 ReplicaSet 将受到这个 Deployment 的影响。此字段必须与 Pod 模板的标签匹配。
template (PodTemplateSpec ),必需
template 描述将要创建的 Pod。template.spec.restartPolicy
唯一被允许的值是 Always
。
strategy (DeploymentStrategy)
补丁策略:retainKeys
将现有 Pod 替换为新 Pod 时所用的部署策略。
DeploymentStrategy 描述如何将现有 Pod 替换为新 Pod。
strategy.type (string)
部署的类型。取值可以是 “Recreate” 或 “RollingUpdate”。默认为 RollingUpdate。
strategy.rollingUpdate (RollingUpdateDeployment)
滚动更新这些配置参数。仅当 type = RollingUpdate 时才出现。
控制滚动更新预期行为的规约。
strategy.rollingUpdate.maxSurge (IntOrString)
超出预期的 Pod 数量之后可以调度的最大 Pod 数量。该值可以是一个绝对数(例如:
5)或一个预期 Pod 的百分比(例如:10%)。如果 MaxUnavailable 为 0,则此字段不能为 0。
通过向上取整计算得出一个百分比绝对数。默认为 25%。例如:当此值设为 30% 时,
如果滚动更新启动,则可以立即对 ReplicaSet 扩容,从而使得新旧 Pod 总数不超过预期 Pod 数量的 130%。
一旦旧 Pod 被杀死,则可以再次对新的 ReplicaSet 扩容,
确保更新期间任何时间运行的 Pod 总数最多为预期 Pod 数量的 130%。
IntOrString 是可以保存 int32 或字符串的一个类型。
当用于 JSON 或 YAML 编组和取消编组时,它会产生或消费内部类型。
例如,这允许你拥有一个可以接受名称或数值的 JSON 字段。
strategy.rollingUpdate.maxUnavailable (IntOrString)
更新期间可能不可用的最大 Pod 数量。该值可以是一个绝对数(例如:
5)或一个预期 Pod 的百分比(例如:10%)。通过向下取整计算得出一个百分比绝对数。
如果 MaxSurge 为 0,则此字段不能为 0。默认为 25%。
例如:当此字段设为 30%,则在滚动更新启动时 ReplicaSet 可以立即缩容为预期 Pod 数量的 70%。
一旦新的 Pod 就绪,ReplicaSet 可以再次缩容,接下来对新的 ReplicaSet 扩容,
确保更新期间任何时间可用的 Pod 总数至少是预期 Pod 数量的 70%。
IntOrString 是可以保存 int32 或字符串的一个类型。
当用于 JSON 或 YAML 编组和取消编组时,它会产生或消费内部类型。
例如,这允许你拥有一个可以接受名称或数值的 JSON 字段。
revisionHistoryLimit (int32)
保留允许回滚的旧 ReplicaSet 的数量。这是一个指针,用于辨别显式零和未指定的值。默认为 10。
progressDeadlineSeconds (int32)
Deployment 在被视为失败之前取得进展的最大秒数。Deployment 控制器将继续处理失败的部署,
原因为 ProgressDeadlineExceeded 的状况将被显示在 Deployment 状态中。
请注意,在 Deployment 暂停期间将不会估算进度。默认为 600s。
paused (boolean)
指示部署被暂停。
DeploymentStatus
DeploymentStatus 是最近观测到的 Deployment 状态。
replicas (int32)
此部署所针对的(其标签与选择算符匹配)未终止 Pod 的总数。
availableReplicas (int32)
此部署针对的可用(至少 minReadySeconds 才能就绪)的 Pod 总数。
readyReplicas (int32)
readyReplicas 是此 Deployment 在就绪状况下处理的目标 Pod 数量。
conditions ([]DeploymentCondition)
补丁策略:按照键 type
合并
Map:键 type
的唯一值将在合并期间保留
表示 Deployment 当前状态的最新可用观测值。
DeploymentCondition 描述某个点的部署状态。
conditions.status (string),必需
状况的状态,取值为 True、False 或 Unknown 之一。
conditions.type (string),必需
Deployment 状况的类型。
conditions.message (string)
这是一条人类可读的消息,指示有关上次转换的详细信息。
conditions.reason (string)
状况上次转换的原因。
DeploymentList
DeploymentList 是 Deployment 的列表。
apiVersion : apps/v1
kind : DeploymentList
操作
get
读取指定的 Deployment
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
参数
响应
200 (Deployment ): OK
401: Unauthorized
get
读取指定的 Deployment 的状态
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status
参数
响应
200 (Deployment ): OK
401: Unauthorized
list
列出或监视 Deployment 类别的对象
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/deployments
参数
响应
200 (DeploymentList ): OK
401: Unauthorized
list
列出或监视 Deployment 类别的对象
HTTP 请求
GET /apis/apps/v1/deployments
参数
响应
200 (DeploymentList ): OK
401: Unauthorized
create
创建 Deployment
HTTP 请求
POST /apis/apps/v1/namespaces/{namespace}/deployments
参数
响应
200 (Deployment ): OK
201 (Deployment ): Created
202 (Deployment ): Accepted
401: Unauthorized
update
替换指定的 Deployment
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}
参数
响应
200 (Deployment ): OK
201 (Deployment ): Created
401: Unauthorized
update
替换指定的 Deployment 的状态
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status
参数
响应
200 (Deployment ): OK
201 (Deployment ): Created
401: Unauthorized
patch
部分更新指定的 Deployment
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}
参数
响应
200 (Deployment ): OK
201 (Deployment ): Created
401: Unauthorized
patch
部分更新指定的 Deployment 的状态
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}/status
参数
响应
200 (Deployment ): OK
201 (Deployment ): Created
401: Unauthorized
delete
删除 Deployment
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/deployments/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Deployment 的集合
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/deployments
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.7 - StatefulSet
StatefulSet 表示一组具有一致身份的 Pod
apiVersion: apps/v1
import "k8s.io/api/apps/v1"
StatefulSet
StatefulSet 表示一组具有一致身份的 Pod。身份定义为:
网络:一个稳定的 DNS 和主机名。
存储:根据要求提供尽可能多的 VolumeClaim。
StatefulSet 保证给定的网络身份将始终映射到相同的存储身份。
StatefulSetSpec
StatefulSetSpec 是 StatefulSet 的规约。
template (PodTemplateSpec ), 必需
template 是用来描述 Pod 的对象,检测到副本不足时将创建所描述的 Pod。
经由 StatefulSet 创建的每个 Pod 都将满足这个模板,但与 StatefulSet 的其余 Pod 相比,每个 Pod 具有唯一的标识。
每个 Pod 将以 <statefulsetname>-<podindex> 格式命名。
例如,名为 "web" 且索引号为 "3" 的 StatefulSet 中的 Pod 将被命名为 "web-3"。
template.spec.restartPolicy
唯一被允许的值是 Always
。
updateStrategy (StatefulSetUpdateStrategy)
updateStrategy 是一个 StatefulSetUpdateStrategy,表示当对 template 进行修订时,用何种策略更新 StatefulSet 中的 Pod 集合。
StatefulSetUpdateStrategy 表示 StatefulSet 控制器将用于执行更新的策略。其中包括为指定策略执行更新所需的额外参数。
updateStrategy.type (string)
type 表示 StatefulSetUpdateStrategy 的类型,默认为 RollingUpdate。
updateStrategy.rollingUpdate (RollingUpdateStatefulSetStrategy)
当 type 为 RollingUpdate 时,使用 rollingUpdate 来传递参数。
RollingUpdateStatefulSetStrategy 用于为 rollingUpdate 类型的更新传递参数。
updateStrategy.rollingUpdate.maxUnavailable (IntOrString)
更新期间不可用的 Pod 个数上限。取值可以是绝对数量(例如:5)或所需 Pod 的百分比(例如:10%)。
绝对数是通过四舍五入的百分比计算得出的。不能为 0,默认为 1。
此字段为 Alpha 级别,仅被启用 MaxUnavailableStatefulSet 特性的服务器支持。
此字段适用于 0 到 replicas-1 范围内的所有 Pod。这意味着如果在 0 到 replicas-1 范围内有任何不可用的 Pod,
这些 Pod 将被计入 maxUnavailable 中。
IntOrString 是一种可以包含 int32 或字符串数值的类型。在 JSON 或 YAML 编组和解组时,
会生成或使用内部类型。例如,此类型允许你定义一个可以接受名称或数字的 JSON 字段。
updateStrategy.rollingUpdate.partition (int32)
partition 表示 StatefulSet 应该被分区进行更新时的序数。
在滚动更新期间,序数在 replicas-1 和 partition 之间的所有 Pod 都会被更新。
序数在 partition-1 和 0 之间的所有 Pod 保持不变。
这一属性有助于进行金丝雀部署。默认值为 0。
podManagementPolicy (string)
podManagementPolicy 控制在初始规模扩展期间、替换节点上的 Pod 或缩减集合规模时如何创建 Pod。
默认策略是 “OrderedReady”,各个 Pod 按升序创建的(pod-0,然后是pod-1 等),
控制器将等到每个 Pod 都准备就绪后再继续。缩小集合规模时,Pod 会以相反的顺序移除。
另一种策略是 “Parallel”,意味着并行创建 Pod 以达到预期的规模而无需等待,并且在缩小规模时将立即删除所有 Pod。
revisionHistoryLimit (int32)
revisionHistoryLimit 是在 StatefulSet 的修订历史中维护的修订个数上限。
修订历史中包含并非由当前所应用的 StatefulSetSpec 版本未表示的所有修订版本。默认值为 10。
volumeClaimTemplates ([]PersistentVolumeClaim )
原子:将在合并期间被替换
volumeClaimTemplates 是允许 Pod 引用的申领列表。
StatefulSet controller 负责以维持 Pod 身份不变的方式将网络身份映射到申领之上。
此列表中的每个申领至少必须在模板的某个容器中存在匹配的(按 name 匹配)volumeMount。
此列表中的申领优先于模板中具有相同名称的所有卷。
minReadySeconds (int32)
新创建的 Pod 应准备就绪(其任何容器都未崩溃)的最小秒数,以使其被视为可用。
默认为 0(Pod 准备就绪后将被视为可用)。
persistentVolumeClaimRetentionPolicy (StatefulSetPersistentVolumeClaimRetentionPolicy)
persistentVolumeClaimRetentionPolicy 描述从 VolumeClaimTemplates 创建的持久卷申领的生命周期。
默认情况下,所有持久卷申领都根据需要创建并被保留到手动删除。
此策略允许更改申领的生命周期,例如在 StatefulSet 被删除或其中 Pod 集合被缩容时删除持久卷申领。
此属性需要启用 StatefulSetAutoDeletePVC 特性门控。特性处于 Beta 阶段。
StatefulSetPersistentVolumeClaimRetentionPolicy 描述了用于从 StatefulSet VolumeClaimTemplate 创建的 PVC 的策略
persistentVolumeClaimRetentionPolicy.whenDeleted (string)
whenDeleted 指定当 StatefulSet 被删除时,基于 StatefulSet VolumeClaimTemplates 所创建的 PVC 会发生什么。
默认策略 Retain
使 PVC 不受 StatefulSet 被删除的影响。Delete
策略会导致这些 PVC 也被删除。
persistentVolumeClaimRetentionPolicy.whenScaled (string)
whenScaled 指定当 StatefulSet 缩容时,基于 StatefulSet volumeClaimTemplates 创建的 PVC 会发生什么。
默认策略 Retain
使 PVC 不受缩容影响。 Delete
策略会导致超出副本个数的所有的多余 Pod 所关联的 PVC 被删除。
ordinals (StatefulSetOrdinals)
ordinals 控制 StatefulSet 中副本索引的编号。
默认序数行为是将索引 "0" 设置给第一个副本,对于每个额外请求的副本,该索引加一。
StatefulSetOrdinals 描述此 StatefulSet 中用于副本序数赋值的策略。
ordinals.start (int32)
start 是代表第一个副本索引的数字。它可用于从替代索引(例如:从 1 开始索引)而非默认的从 0 索引来为副本设置编号,
还可用于编排从一个 StatefulSet 到另一个 StatefulSet 的渐进式副本迁移动作。如果设置了此值,副本索引范围为
[.spec.ordinals.start, .spec.ordinals.start + .spec.replicas)。如果不设置,则默认为 0。
副本索引范围为 [0, .spec.replicas)。
StatefulSetStatus
StatefulSetStatus 表示 StatefulSet 的当前状态。
replicas (int32), 必需
replicas 是 StatefulSet 控制器创建的 Pod 个数。
readyReplicas (int32)
readyReplicas 是为此 StatefulSet 创建的、状况为 Ready 的 Pod 个数。
currentReplicas (int32)
currentReplicas 是 StatefulSet 控制器根据 currentReplicas 所指的 StatefulSet 版本创建的 Pod 个数。
updatedReplicas (int32)
updatedReplicas 是 StatefulSet 控制器根据 updateRevision 所指的 StatefulSet 版本创建的 Pod 个数。
availableReplicas (int32)
此 StatefulSet 所对应的可用 Pod 总数(就绪时长至少为 minReadySeconds)。
collisionCount (int32)
collisionCount 是 StatefulSet 的哈希冲突计数。
StatefulSet controller 在需要为最新的 controllerRevision 创建名称时使用此字段作为避免冲突的机制。
conditions ([]StatefulSetCondition)
补丁策略:根据 type
键执行合并操作
补丁策略:根据 type
键执行合并操作
表示 StatefulSet 当前状态的最新可用观察结果。
StatefulSetCondition 描述了 StatefulSet 在某个点的状态。
conditions.type (string), 必需
StatefulSet 状况的类型。
conditions.lastTransitionTime (Time)
最近一次状况从一种状态转换到另一种状态的时间。
Time 是 time.Time 的包装器,它支持对 YAML 和 JSON 的正确编组。
time 包的许多工厂方法提供了包装器。
conditions.message (string)
一条人类可读的消息,指示有关转换的详细信息。
conditions.reason (string)
状况最后一次转换的原因。
currentRevision (string)
currentRevision,如果不为空,表示用于在序列 [0,currentReplicas) 之间生成 Pod 的 StatefulSet 的版本。
updateRevision (string)
updateRevision,如果不为空,表示用于在序列 [replicas-updatedReplicas,replicas) 之间生成 Pod 的 StatefulSet 的版本。
observedGeneration (int64)
observedGeneration 是 StatefulSet 的最新一代。它对应于 StatefulSet 的代数,由 API 服务器在变更时更新。
StatefulSetList
StatefulSetList 是 StatefulSet 的集合。
操作
get
读取指定的 StatefulSet
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
参数
name (路径参数 ): string, 必需
StatefulSet 的名称。
响应
200 (StatefulSet ): OK
401: Unauthorized
get
读取指定 StatefulSet 的状态
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status
参数
name (路径参数 ): string, 必需
StatefulSet 的名称。
响应
200 (StatefulSet ): OK
401: Unauthorized
list
列出或监视 StatefulSet 类型的对象
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/statefulsets
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (StatefulSetList ): OK
401: Unauthorized
list
列出或监视 StatefulSet 类型的对象
HTTP 请求
GET /apis/apps/v1/statefulsets
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (StatefulSetList ): OK
401: Unauthorized
create
创建一个 StatefulSet
HTTP 请求
POST /apis/apps/v1/namespaces/{namespace}/statefulsets
参数
pretty
响应
200 (StatefulSet ): OK
201 (StatefulSet ): Created
202 (StatefulSet ): Accepted
401: Unauthorized
update
替换指定的 StatefulSet
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
参数
name (路径参数 ): string, 必需
StatefulSet 的名称 。
响应
200 (StatefulSet ): OK
201 (StatefulSet ): Created
401: Unauthorized
update
替换指定 StatefulSet 的状态
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status
参数
name (路径参数 ): string, 必需
StatefulSet 的名称。
响应
200 (StatefulSet ): OK
201 (StatefulSet ): Created
401: Unauthorized
patch
部分更新指定的 StatefulSet
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
参数
name (路径参数 ): string, 必需
StatefulSet 的名称。
force (查询参数 ): boolean
force
响应
200 (StatefulSet ): OK
201 (StatefulSet ): Created
401: Unauthorized
patch
部分更新指定 StatefulSet 的状态
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status
参数
name (路径参数 ): string, 必需
StatefulSet 的名称。
force (查询参数 ): boolean
force
响应
200 (StatefulSet ): OK
201 (StatefulSet ): Created
401: Unauthorized
delete
删除一个 StatefulSet
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}
参数
name (路径参数 ): string, 必需
StatefulSet 的名称。
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 StatefulSet 的集合
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.1.8 - ControllerRevision
ControllerRevision 实现了状态数据的不可变快照。
apiVersion: apps/v1
import "k8s.io/api/apps/v1"
ControllerRevision
ControllerRevision 实现了状态数据的不可变快照。
客户端负责序列化和反序列化对象,包含对象内部状态。
成功创建 ControllerRevision 后,将无法对其进行更新。
API 服务器将无法成功验证所有尝试改变 data 字段的请求。
但是,可以删除 ControllerRevisions。
请注意,由于 DaemonSet 和 StatefulSet 控制器都使用它来进行更新和回滚,所以这个对象是 Beta 版。
但是,它可能会在未来版本中更改名称和表示形式,客户不应依赖其稳定性。
它主要供控制器内部使用。
data (RawExtension)
data 是状态的序列化表示。
RawExtension 用于以外部版本来保存扩展数据。
要使用它,请生成一个字段,在外部、版本化结构中以 RawExtension 作为其类型,在内部结构中以 Object 作为其类型。
你还需要注册你的各个插件类型。
// 内部包:
type MyAPIObject struct {
runtime.TypeMeta `json:",inline"`
MyPlugin runtime.Object `json:"myPlugin"`
}
type PluginA struct {
AOption string `json:"aOption"`
}
// 外部包:
type MyAPIObject struct {
runtime.TypeMeta `json:",inline"`
MyPlugin runtime.RawExtension `json:"myPlugin"`
}
type PluginA struct {
AOption string `json:"aOption"`
}
// 在网络上,JSON 看起来像这样:
{
"kind" :"MyAPIObject" ,
"apiVersion" :"v1" ,
"myPlugin" : {
"kind" :"PluginA" ,
"aOption" :"foo" ,
},
}
那么会发生什么?
解码首先使用 json 或 yaml 将序列化数据解组到你的外部 MyAPIObject 中。
这会导致原始 JSON 被存储下来,但不会被解包。
下一步是复制(使用 pkg/conversion)到内部结构中。
runtime 包的 DefaultScheme 安装了转换函数,它将解析存储在 RawExtension 中的 JSON,
将其转换为正确的对象类型,并将其存储在 Object 中。
(TODO:如果对象是未知类型,将创建并存储一个 runtime.Unknown
对象。)
ControllerRevisionList
ControllerRevisionList 是一个包含 ControllerRevision 对象列表的资源。
kind : ControllerRevisionList
操作
get
读取特定的 ControllerRevision
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
参数
name (路径参数 ):string,必需
ControllerRevision 的名称
响应
200 (ControllerRevision ): OK
401: Unauthorized
list
列出或监视 ControllerRevision 类别的对象
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/controllerrevisions
参数
limit (查询参数 )): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (ControllerRevisionList ): OK
401: Unauthorized
list
列出或监视 ControllerRevision 类别的对象
HTTP 请求
GET /apis/apps/v1/controllerrevisions
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (ControllerRevisionList ): OK
401: Unauthorized
create
创建一个 ControllerRevision
HTTP 请求
POST /apis/apps/v1/namespaces/{namespace}/controllerrevisions
参数
响应
200 (ControllerRevision ): OK
201 (ControllerRevision ): Created
202 (ControllerRevision ): Accepted
401: Unauthorized
update
替换特定的 ControllerRevision
HTTP 参数
PUT /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
参数
name (路径参数 ):string,必需
ControllerRevision 的名称
响应
200 (ControllerRevision ): OK
201 (ControllerRevision ): Created
401: Unauthorized
patch
部分更新特定的 ControllerRevision
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
参数
name (路径参数 ):string,必需
ControllerRevision 的名称
force (查询参数 ): boolean
force
响应
200 (ControllerRevision ): OK
201 (ControllerRevision ): Created
401: Unauthorized
delete
删除一个 ControllerRevision
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
参数
name (路径参数 ):string,必需
ControllerRevision 的名称
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ControllerRevision 集合
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/controllerrevisions
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.1.9 - DaemonSet
DaemonSet 表示守护进程集的配置。
apiVersion: apps/v1
import "k8s.io/api/apps/v1"
DaemonSet
DaemonSet 表示守护进程集的配置。
apiVersion : apps/v1
kind : DaemonSet
DaemonSetSpec
DaemonSetSpec 是守护进程集的规约。
updateStrategy (DaemonSetUpdateStrategy)
用新 Pod 替换现有 DaemonSet Pod 的更新策略。
DaemonSetUpdateStrategy 是一个结构体,用于控制 DaemonSet 的更新策略。
DaemonSetStatus
DaemonSetStatus 表示守护进程集的当前状态。
conditions ([]DaemonSetCondition)
补丁策略:根据 type
键合并
Map:键 type
的唯一值将在合并期间保留
表示 DaemonSet 当前状态的最新可用观测信息。
DaemonSet Condition 描述了 DaemonSet 在某一时刻的状态。
conditions.status (string),必需
状况的状态,True、False、Unknown 之一。
conditions.type (string),必需
DaemonSet 状况的类型。
DaemonSetList
DaemonSetList 是守护进程集的集合。
apiVersion : apps/v1
kind : DaemonSetList
Operations
get
读取指定的 DaemonSet
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}
参数
name (路径参数 ): string, 必需
DaemonSet 的名称
响应
200 (DaemonSet ): OK
401: 未授权
get
读取指定的 DaemonSet 的状态
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status
参数
name (路径参数 ): string, 必需
DaemonSet 的名称
响应
200 (DaemonSet ): OK
401: 未授权
list
列表或查看 DaemonSet 类型的对象
HTTP 请求
GET /apis/apps/v1/namespaces/{namespace}/daemonsets
参数
limit (查询参数 ): integer
limit
pretty (查询参数 ): string
pretty
响应
200 (DaemonSetList ): OK
401: 未授权
list
列表或查看 DaemonSet 类型的对象
HTTP 请求
GET /apis/apps/v1/daemonsets
参数
limit (查询参数 ): integer
limit
pretty (查询参数 ): string
pretty
响应
200 (DaemonSetList ): OK
401: 未授权
create
创建一个 DaemonSet
HTTP 请求
POST /apis/apps/v1/namespaces/{namespace}/daemonsets
参数
响应
200 (DaemonSet ): OK
201 (DaemonSet ): 创建完成
202 (DaemonSet ): 已接受
401: 未授权
update
替换指定的 DaemonSet
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}
参数
响应
200 (DaemonSet ): OK
201 (DaemonSet ): 已创建
401: 未授权
update
替换指定 DaemonSet 的状态
HTTP 请求
PUT /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status
参数
响应
200 (DaemonSet ): OK
201 (DaemonSet ): 已创建
401: 未授权
patch
部分更新指定的 DaemonSet
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}
参数
响应
200 (DaemonSet ): OK
201 (DaemonSet ): 已创建
401: 未授权
patch
部分更新指定 DaemonSet 的状态
HTTP 请求
PATCH /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status
参数
响应
200 (DaemonSet ): OK
201 (DaemonSet ): 已创建
401: 未授权
delete
删除一个 DaemonSet
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}
参数
响应
200 (Status ): OK
202 (Status ): 已接受
401: 未授权
deletecollection
删除 DaemonSet 的集合
HTTP 请求
DELETE /apis/apps/v1/namespaces/{namespace}/daemonsets
参数
响应
200 (Status ): OK
401: 未授权
5.1.10 - Job
Job 表示单个任务的配置。
apiVersion: batch/v1
import "k8s.io/api/batch/v1"
Job
Job 表示单个任务的配置。
apiVersion : batch/v1
kind : Job
JobSpec
JobSpec 描述了任务执行的情况。
Replicas
Lifecycle
completionMode (string)
completionMode 指定如何跟踪 Pod 完成情况。它可以是 NonIndexed
(默认)或者 Indexed
。
NonIndexed
表示当有 .spec.completions
个成功完成的 Pod 时,认为 Job 完成。每个 Pod 完成都是彼此同源的。
Indexed
意味着 Job 的各个 Pod 会获得对应的完成索引值,从 0 到(.spec.completions - 1
),可在注解
"batch.kubernetes.io/job-completion-index" 中找到。当每个索引都对应有一个成功完成的 Pod 时,
该任务被认为是完成的。
当值为 Indexed
时,必须指定 .spec.completions
并且 .spec.parallelism
必须小于或等于 10^5。
此外,Pod 名称采用 $(job-name)-$(index)-$(random-string)
的形式,Pod 主机名采用
$(job-name)-$(index)
的形式。
将来可能添加更多的完成模式。如果 Job 控制器发现它无法识别的模式
(这种情况在升级期间由于版本偏差可能发生),则控制器会跳过 Job 的更新。
ttlSecondsAfterFinished (int32)
ttlSecondsAfterFinished 限制已完成执行(完成或失败)的任务的生命周期。如果设置了这个字段,
在 Job 完成 ttlSecondsAfterFinished 秒之后,就可以被自动删除。
当 Job 被删除时,它的生命周期保证(例如终结器)会被考察。
如果未设置此字段,则任务不会被自动删除。如果此字段设置为零,则任务在完成后即可立即删除。
Selector
Beta 级别
podFailurePolicy (PodFailurePolicy)
指定处理失效 Pod 的策略。特别是,它允许指定采取关联操作需要满足的一组操作和状况。
如果为空,则应用默认行为:由该任务的 .status.failed 字段表示的失效 Pod 的计数器将递增,
并针对 backoffLimit 进行检查。此字段不能与 restartPolicy=OnFailure 结合使用。
PodFailurePolicy 描述失效的 Pod 如何影响 backoffLimit。
podFailurePolicy.rules ([]PodFailurePolicyRule),必需
原子: 将在合并期间被替换
Pod 失效策略规则的列表。这些规则按顺序进行评估。一旦某规则匹配 Pod 失效,则其余规将被忽略。
当没有规则匹配 Pod 失效时,将应用默认的处理方式:
Pod 失效的计数器递增并针对 backoffLimit 进行检查。最多允许 20 个。
PodFailurePolicyRule 描述当满足要求时如何处理一个 Pod 失效。
在每个规则中可以使用 onExitCodes 和 onPodConditions 之一,但不能同时使用二者。
podFailurePolicy.rules.action (string),必需
指定当要求满足时对 Pod 失效采取的操作。可能的值是:
FailJob:表示 Pod 的任务被标记为 Failed 且所有正在运行的 Pod 都被终止。
FailIndex:表示 Pod 对应的索引被标记为 Failed 且 Pod 不会被重新启动。
此值是 Beta 级别的。当 JobBackoffLimitPerIndex
特性门控被启用时(默认被启用),可以使用此值。
后续会考虑增加其他值。客户端应通过跳过此规则对未知的操作做出反应。
podFailurePolicy.rules.onPodConditions.status (string),必需
指定必需的 Pod 状况状态。要匹配一个 Pod 状况,指定的状态必须等于该 Pod 状况状态。默认为 True。
podFailurePolicy.rules.onPodConditions.type (string),必需
指定必需的 Pod 状况类型。要匹配一个 Pod 状况,指定的类型必须等于该 Pod 状况类型。
podFailurePolicy.rules.onExitCodes (PodFailurePolicyOnExitCodesRequirement)
表示容器退出码有关的要求。
PodFailurePolicyOnExitCodesRequirement 描述根据容器退出码处理失效 Pod 的要求。
特别是,它为每个应用容器和 Init 容器状态查找在 Pod 状态中分别用 .status.containerStatuses 和
.status.initContainerStatuses 字段表示的 .state.terminated.exitCode。
成功完成的容器(退出码 0)被排除在此要求检查之外。
podFailurePolicy.rules.onExitCodes.operator (string),必需
表示容器退出码和指定值之间的关系。成功完成的容器(退出码 0)被排除在此要求检查之外。可能的值为:
后续会考虑增加其他值。客户端应通过假设不满足要求来对未知操作符做出反应。
podFailurePolicy.rules.onPodConditions ([]PodFailurePolicyOnPodConditionsPattern),必需
原子: 将在合并期间被替换
表示对 Pod 状况的要求。该要求表示为 Pod 状况模式的一个列表。
如果至少一个模式与实际的 Pod 状况匹配,则满足此要求。最多允许 20 个。
PodFailurePolicyOnPodConditionsPattern 描述与实际 Pod 状况类型匹配的模式。
- **podFailurePolicy.rules.onPodConditions.status** (string),必需
指定必需的 Pod 状况状态。要匹配一个 Pod 状况,指定的状态必须等于该 Pod 状况状态。默认为 True。
successPolicy (SuccessPolicy)
successPolicy 指定策略,用于判定何时可以声明任务为成功。如果为空,则应用默认行为 —— 仅当成功
Pod 的数量等于完成数量时,任务才会被声明为成功。指定了该字段时,该字段必须是不可变的,
并且仅适用于带索引的任务。一旦任务满足 successPolicy
,滞留 Pod 就会被终止。
此字段为 Beta 级。要使用此字段,你必须启用 JobSuccessPolicy
特性门控(默认启用)。
successPolicy 描述何时可以根据某些索引的成功将任务声明为成功。
successPolicy.rules ([]SuccessPolicyRule),必需
原子性:合并期间会被替换
rules 表示在 .status.succeeded >= .spec.completions
之前将任务声明为成功的备选规则列表。
一旦满足任何规则,就会添加 SucceededCriteriaMet
状况,并删除滞留的 Pod。
此类 Pod 的最终状态具有 Complete
状况。此外,这些规则按顺序进行评估;
一旦任务满足其中一条规则,其他规则将被忽略。最多允许 20 个元素。
SuccessPolicyRule 描述了将任务声明为成功的规则。每条规则必须至少指定 succeededIndexes
或 succeededCount
之一。
successPolicy.rules.succeededCount (int32)
succeededCount
指定任务成功索引集所需的最小规模。当 succeededCount
与 succeededIndexes
一起使用时,
仅检查由 succeededIndexes
指定的索引集合。例如,假定 succeededIndexes
是
"1-4",succeededCount 是 "3",而完成的索引是 "1"、"3" 和 "5",那么该任务不会被视为成功,
因为在该规则下只考虑了 "1" 和 "3" 索引。当该字段为 null 时,不会被视为具有默认值,
并且在任何时候都不会进行评估。当该字段被设置时,所设置的值应是一个正整数。
successPolicy.rules.succeededIndexes (string)
succeededIndexes
指定需要包含在实际完成索引集合中的各个索引。索引列表必须在 0 到 .spec.completions-1
之间,并且不能包含重复项。至少需要一个元素。索引表示为用逗号分隔的区间。
区间可以是一个十进制整数或一对由破折号分隔的十进制整数。数字序列用区间的第一个和最后一个元素来表示,
并用破折号分隔。例如,如果完成的索引是 1、3、4、5 和 7,则表示为 "1,3-5,7"。
当该字段为 null 时,该字段不会默认为任何值,并且在任何时候都不会进行评估。
Alpha 级别
backoffLimitPerIndex (int32)
指定在将特定索引的 Pod 标记为失败之前在对该 Pod 重试次数的限制。
启用后,各索引的失败次数将保存在 Pod 的 batch.kubernetes.io/job-index-failure-count
注解中。
仅当 Job 的 completionMode=Indexed 且 Pod 的重启策略为 Never 时才能设置此字段。
此字段是不可变更的。此字段是 Beta 级别的。
当 JobBackoffLimitPerIndex
特性门控被启用时(默认被启用),可以使用此字段。
managedBy (string)
managedBy
字段标明管理任务的控制器。
Kubernetes 的 Job 控制器会协调那些没有这个字段或字段值为保留字符串 kubernetes.io/job-controller
的任务,
但会跳过协调那些为此字段设置了自定义值的任务。字段值必须是一个包含有效域名前缀的路径(例如 acme.io/foo
)—— 第一个 /
之前的全部字符必须符合
RFC 1123 定义的有效子域。第一个 / 后面的所有字符必须是 RFC 3986 定义的有效 HTTP 路径字符。
字段值的长度不能超过 63 个字符。此字段是不可变的。
此字段处于 Beta 阶段。当启用 JobManagedBy
特性门控时(默认情况下禁用),任务控制器接受设置此字段。
podReplacementPolicy (string)
podReplacementPolicy 指定何时创建替代的 Pod。可能的值包括:
TerminatingOrFailed:表示当 Pod 处于终止中(具有 metadata.deletionTimestamp)或失败时,重新创建 Pod。
Failed:表示在创建替代的 Pod 之前,等待先前创建的 Pod 完全终止(处于 Failed 或 Succeeded 阶段)。
当使用 podFailurePolicy 时,Failed 是唯一允许值。
当不使用 podFailurePolicy 时,允许使用 TerminatingOrFailed 和 Failed。
这是一个 Beta 级别的字段。要使用此特性,请启用 JobPodReplacementPolicy 特性门控。
此特性默认处于被启用状态。
JobStatus
JobStatus 表示 Job 的当前状态。
startTime (Time)
表示任务控制器开始处理任务的时间。在挂起状态下创建 Job 时,直到第一次恢复时才会设置此字段。
每次从暂停中恢复任务时都会重置此字段。它表示为 RFC3339 格式的 UTC 时间。
一旦设置,仅当 Job 被挂起时才可移除该字段。Job 取消挂起或完成时,无法修改该字段。
Time 是 time.Time 的包装器,支持正确编码为 YAML 和 JSON。time 包提供的许多工厂方法都提供了包装器。
active (int32)
未处于终止进程中(未设置 deletionTimestamp
)的待处理和正在运行的 Pod 数量。对于已完成的 Job,该值为零。
failed (int32)
进入 Failed 阶段的 Pod 数量。该值单调增加。
succeeded (int32)
进入 Succeeded 阶段的 Pod 数量。对于给定的规范,该值会单调增加。
但是,由于弹性索引任务的缩减,该值可能会减少。
completedIndexes (string)
completedIndexes 以文本格式保存 .spec.completionMode
设置为 "Indexed"
的 Pod 已完成的索引。
索引用十进制整数表示,用逗号分隔。数字是按递增的顺序排列的。三个或更多的连续数字被压缩,
用系列的第一个和最后一个元素表示,用连字符分开。例如,如果完成的索引是 1、3、4、5 和 7,则表示为 "1、3-5、7"。
conditions ([]JobCondition)
补丁策略:根据 type
键合并
原子: 将在合并期间被替换
对象当前状态的最新可用观察结果。当任务失败时,其中一个状况的类型为 “Failed”,状态为 true。
当任务被暂停时,其中一个状况的类型为 “Suspended”,状态为true;当任务被恢复时,该状况的状态将变为 false。
任务完成时,其中一个状况的类型为 "Complete",状态为 true。
当任务处于最终状态(即 "Complete" 或 "Failed")时,即视为任务已完成。任务不能同时处于 "Complete" 和 "Failed" 状态。
此外,任务也不能处于 "Complete" 和 "FailureTarget" 状态。"Complete"、"Failed" 和 "FailureTarget" 状态不能被禁用。
更多信息:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/jobs-run-to-completion/
JobCondition 描述任务的当前状况。
conditions.status (string), 必需
状况的状态:True、False、Unknown 之一。
conditions.type (string), 必需
任务状况的类型:Completed 或 Failed。
conditions.lastProbeTime (Time)
最后一次探测的时间。
Time 是对 time.Time 的封装,支持正确编码为 YAML 和 JSON。我们为 time 包提供的许多工厂方法提供了封装器。
uncountedTerminatedPods (UncountedTerminatedPods)
UncountedTerminatedPods 保存已终止但尚未被任务控制器纳入状态计数器中的 Pod 的 UID 的集合。
任务控制器所创建 Pod 带有终结器。当 Pod 终止(成功或失败)时,控制器将执行三个步骤以在任务状态中对其进行说明:
将 Pod UID 添加到此字段的列表中。
去掉 Pod 中的终结器。
从数组中删除 Pod UID,同时为相应的计数器加一。
使用此字段可能无法跟踪旧任务,在这种情况下,该字段保持为空。对于已完成的任务,此结构为空。
UncountedTerminatedPods 持有已经终止的 Pod 的 UID,但还没有被计入工作状态计数器中。
Beta 级别
Alpha 级别
failedIndexes (string)
当设置了 spec.backoffLimitPerIndex
时,failedIndexes 保存失败的索引。
索引以文本格式表示,类似于 completedIndexes
字段,即这些索引是使用逗号分隔的十进制整数。
这些数字按升序列出。三个或更多连续的数字会被压缩,整个序列表示为第一个数字、连字符和最后一个数字。
例如,如果失败的索引是 1、3、4、5 和 7,则表示为 "1,3-5,7"。
失败索引集不能与完成索引集重叠。
该字段是 Beta 级别的。当 JobBackoffLimitPerIndex
特性门控被启用时(默认被启用),可以使用此字段。
JobList
JobList 是 Job 的集合。
apiVersion : batch/v1
kind : JobList
操作
get
读取指定的 Job
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
name (路径参数 ):string,必需
Job 的名称。
响应
200 (Job ): OK
401: Unauthorized
get
读取指定任务的状态
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
参数
响应
200 (Job ): OK
401: Unauthorized
list
列举或监测 Job 类别的对象
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/jobs
参数
limit (查询参数 ): integer
limit
pretty (查询参数 ): string
pretty
响应
200 (JobList ): OK
401: Unauthorized
list
列举或监测 Job 类别的对象
HTTP 请求
GET /apis/batch/v1/jobs
参数
limit (查询参数 ): integer
limit
pretty (查询参数 ): string
pretty
响应
200 (JobList ): OK
401: Unauthorized
create
创建一个 Job
HTTP 请求
POST /apis/batch/v1/namespaces/{namespace}/jobs
参数
响应
200 (Job ): OK
201 (Job ): Created
202 (Job ): Accepted
401: Unauthorized
update
替换指定的 Job
HTTP 请求
PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
响应
200 (Job ): OK
201 (Job ): Created
401: Unauthorized
update
替换指定 Job 的状态
HTTP 请求
PUT /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
参数
响应
200 (Job ): OK
201 (Job ): Created
401: Unauthorized
patch
部分更新指定的 Job
HTTP 请求
PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
响应
200 (Job ): OK
201 (Job ): Created
401: Unauthorized
patch
部分更新指定 Job 的状态
HTTP 请求
PATCH /apis/batch/v1/namespaces/{namespace}/jobs/{name}/status
参数
响应
200 (Job ): OK
201 (Job ): Created
401: Unauthorized
delete
删除一个 Job
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/jobs/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Job 的集合
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/jobs
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.11 - CronJob
CronJob 代表单个定时作业 (Cron Job) 的配置。
apiVersion: batch/v1
import "k8s.io/api/batch/v1"
CronJob
CronJob 代表单个定时作业(Cron Job) 的配置。
CronJobSpec
CronJobSpec 描述了作业的执行方式和实际将运行的时间。
CronJobStatus
CronJobStatus 表示某个定时作业的当前状态。
CronJobList
CronJobList 是定时作业的集合。
apiVersion : batch/v1
kind : CronJobList
操作
get
查看指定的 CronJob
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}
参数
响应
200 (CronJob ): OK
401: Unauthorized
get
查看指定 CronJob 的状态
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}/status
参数
响应
200 (CronJob ): OK
401: Unauthorized
list
查看或监视 CronJob 类别的对象
HTTP 请求
GET /apis/batch/v1/namespaces/{namespace}/cronjobs
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (CronJobList ): OK
401: Unauthorized
list
查看或监视 CronJob 类型的对象
HTTP 请求
GET /apis/batch/v1/cronjobs
参数
响应
200 (CronJobList ): OK
401: Unauthorized
create
创建一个 CronJob
HTTP 请求
POST /apis/batch/v1/namespaces/{namespace}/cronjobs
参数
响应
200 (CronJob ): OK
201 (CronJob ): Created
202 (CronJob ): Accepted
401: Unauthorized
update
替换指定的 CronJob
HTTP 请求
PUT /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}
参数
name (路径参数 ): string, 必需
CronJob 的名称
响应
200 (CronJob ): OK
201 (CronJob ): Created
401: Unauthorized
update
替换指定 CronJob 的状态
HTTP 请求
PUT /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}/status
参数
name (路径参数 ): string, 必需
CronJob 的名称
响应
200 (CronJob ): OK
201 (CronJob ): Created
401: Unauthorized
patch
部分更新指定的 CronJob
HTTP 请求
PATCH /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}
参数
name (路径参数 ): string, 必需
CronJob 的名称
force (查询参数 ): boolean
force
响应
200 (CronJob ): OK
201 (CronJob ): Created
401: Unauthorized
patch
部分更新指定 CronJob 的状态
HTTP 请求
PATCH /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}/status
参数
name (路径参数 ): string, 必需
CronJob 的名称
force (参数参数 ): boolean
force
响应
200 (CronJob ): OK
201 (CronJob ): Created
401: Unauthorized
delete
删除一个 CronJob
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/cronjobs/{name}
参数
name (路径参数 ): string, 必需
CronJob 的名称
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除一组 CronJob
HTTP 请求
DELETE /apis/batch/v1/namespaces/{namespace}/cronjobs
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.1.12 - HorizontalPodAutoscaler
水平 Pod 自动缩放器的配置。
apiVersion: autoscaling/v1
import "k8s.io/api/autoscaling/v1"
HorizontalPodAutoscaler
水平 Pod 自动缩放器的配置。
HorizontalPodAutoscalerSpec
水平 Pod 自动缩放器的规约。
scaleTargetRef (CrossVersionObjectReference),必填
对被扩缩资源的引用;
水平 Pod 自动缩放器将了解当前的资源消耗,并使用其 scale 子资源设置所需的 Pod 数量。
CrossVersionObjectReference 包含足够的信息来让你识别出所引用的资源。
HorizontalPodAutoscalerStatus
水平 Pod 自动缩放器的当前状态
HorizontalPodAutoscalerList
水平 Pod 自动缩放器对象列表。
操作
get
读取特定的 HorizontalPodAutoscaler
HTTP 请求
GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (HorizontalPodAutoscaler ): OK
401: Unauthorized
get
读取特定 HorizontalPodAutoscaler 的状态
HTTP 请求
GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
参数
响应
200 (HorizontalPodAutoscaler ): OK
401: Unauthorized
list
列出或监视 HorizontalPodAutoscaler 类别的对象
HTTP 参数
GET /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (HorizontalPodAutoscalerList ): OK
401: Unauthorized
list
列出或监视 HorizontalPodAutoscaler 类别的对象
HTTP 请求
GET /apis/autoscaling/v1/horizontalpodautoscalers
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (HorizontalPodAutoscalerList ): OK
401: Unauthorized
create
创建一个 HorizontalPodAutoscaler
HTTP 请求
POST /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
202 (HorizontalPodAutoscaler ): Accepted
401: Unauthorized
update
替换特定的 HorizontalPodAutoscaler
HTTP 请求
PUT /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
update
替换特定 HorizontalPodAutoscaler 的状态
HTTP 请求
PUT /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
patch
部分更新特定的 HorizontalPodAutoscaler
HTTP 请求
PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
force (查询参数 ): boolean
force
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
patch
部分更新特定 HorizontalPodAutoscaler 的状态
HTTP 请求
PATCH /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
参数
force (查询参数 ): boolean
force
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
delete
删除一个 HorizontalPodAutoscaler
HTTP 请求
DELETE /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 HorizontalPodAutoscaler 的集合
HTTP 请求
DELETE /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.1.13 - HorizontalPodAutoscaler
HorizontalPodAutoscaler 是水平 Pod 自动扩缩器的配置,它根据指定的指标自动管理实现 scale 子资源的任何资源的副本数。
apiVersion: autoscaling/v2
import "k8s.io/api/autoscaling/v2"
HorizontalPodAutoscaler
HorizontalPodAutoscaler 是水平 Pod 自动扩缩器的配置,
它根据指定的指标自动管理实现 scale 子资源的任何资源的副本数。
HorizontalPodAutoscalerSpec
HorizontalPodAutoscalerSpec 描述了 HorizontalPodAutoscaler 预期的功能。
scaleTargetRef (CrossVersionObjectReference),必需
scaleTargetRef 指向要扩缩的目标资源,用于收集 Pod 的相关指标信息以及实际更改的副本数。
CrossVersionObjectReference 包含足够的信息来让你识别出所引用的资源。
behavior (HorizontalPodAutoscalerBehavior)
behavior 配置目标在扩容(Up)和缩容(Down)两个方向的扩缩行为(分别用 scaleUp 和 scaleDown 字段)。
如果未设置,则会使用默认的 HPAScalingRules 进行扩缩容。
HorizontalPodAutoscalerBehavior 配置目标在扩容(Up)和缩容(Down)两个方向的扩缩行为
(分别用 scaleUp 和 scaleDown 字段)。
behavior.scaleDown (HPAScalingRules)
scaleDown 是缩容策略。如果未设置,则默认值允许缩减到 minReplicas 数量的 Pod,
具有 300 秒的稳定窗口(使用最近 300 秒的最高推荐值)。
HPAScalingRules 为一个方向配置扩缩行为。在根据 HPA 的指标计算 desiredReplicas 后应用这些规则。
可以通过指定扩缩策略来限制扩缩速度。可以通过指定稳定窗口来防止抖动,
因此不会立即设置副本数,而是选择稳定窗口中最安全的值。
behavior.scaleDown.policies ([]HPAScalingPolicy)
原子性:将在合并时被替换
policies 是可在扩缩容过程中使用的潜在扩缩策略的列表。必须至少指定一个策略,否则 HPAScalingRules 将被视为无效而丢弃。
HPAScalingPolicy 是一个单一的策略,它必须在指定的过去时间间隔内保持为 true。
behavior.scaleUp (HPAScalingRules)
scaleUp 是用于扩容的扩缩策略。如果未设置,则默认值为以下值中的较高者:
每 60 秒增加不超过 4 个 Pod
每 60 秒 Pod 数量翻倍
不使用稳定窗口。
HPAScalingRules 为一个方向配置扩缩行为。在根据 HPA 的指标计算 desiredReplicas 后应用这些规则。
可以通过指定扩缩策略来限制扩缩速度。可以通过指定稳定窗口来防止抖动,
因此不会立即设置副本数,而是选择稳定窗口中最安全的值。
behavior.scaleUp.policies ([]HPAScalingPolicy)
原子性:将在合并时被替换
policies 是可在扩缩容过程中使用的潜在扩缩策略的列表。必须至少指定一个策略,否则 HPAScalingRules 将被视为无效而丢弃。
HPAScalingPolicy 是一个单一的策略,它必须在指定的过去时间间隔内保持为 true。
- **behavior.scaleUp.policies.value** (int32),必需
value 包含策略允许的更改量。它必须大于零。
metrics ([]MetricSpec)
原子性:将在合并时被替换
metrics 包含用于计算预期副本数的规约(将使用所有指标的最大副本数)。
预期副本数是通过将目标值与当前值之间的比率乘以当前 Pod 数来计算的。
因此,使用的指标必须随着 Pod 数量的增加而减少,反之亦然。
有关每种类别的指标必须如何响应的更多信息,请参阅各个指标源类别。
如果未设置,默认指标将设置为 80% 的平均 CPU 利用率。
MetricSpec 指定如何基于单个指标进行扩缩容(一次只能设置 type
和一个其他匹配字段)
metrics.containerResource (ContainerResourceMetricSource)
containerResource 是指 Kubernetes 已知的资源指标(例如在请求和限制中指定的那些),
描述当前扩缩目标中每个 Pod 中的单个容器(例如 CPU 或内存)。
此类指标内置于 Kubernetes 中,在使用 “pods” 源的、按 Pod 计算的普通指标之外,还具有一些特殊的扩缩选项。
这是一个 Alpha 特性,可以通过 HPAContainerMetrics 特性标志启用。
ContainerResourceMetricSource 指示如何根据请求和限制中指定的 Kubernetes 已知的资源指标进行扩缩容,
此结构描述当前扩缩目标中的每个 Pod(例如 CPU 或内存)。在与目标值比较之前,这些值先计算平均值。
此类指标内置于 Kubernetes 中,并且在使用 “Pods” 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
只应设置一种 “target” 类别。
- **metrics.containerResource.name** (string),必需
name 是相关资源的名称。
metrics.external (ExternalMetricSource)
external 指的是不与任何 Kubernetes 对象关联的全局指标。
这一字段允许基于来自集群外部运行的组件(例如云消息服务中的队列长度,或来自运行在集群外部的负载均衡器的 QPS)的信息进行自动扩缩容。
ExternalMetricSource 指示如何基于 Kubernetes 对象无关的指标
(例如云消息传递服务中的队列长度,或来自集群外部运行的负载均衡器的 QPS)执行扩缩操作。
metrics.object (ObjectMetricSource)
object 是指描述单个 Kubernetes 对象的指标(例如,Ingress 对象上的 hits-per-second
)。
ObjectMetricSource 表示如何根据描述 Kubernetes 对象的指标进行扩缩容(例如,Ingress 对象的 hits-per-second
)
metrics.object.describedObject (CrossVersionObjectReference),必需
describeObject 表示对象的描述,如对象的 kind
、name
、apiVersion
。
CrossVersionObjectReference 包含足够的信息来让你识别所引用的资源。
metrics.pods (PodsMetricSource)
pods 是指描述当前扩缩目标中每个 Pod 的指标(例如,transactions-processed-per-second
)。
在与目标值进行比较之前,这些指标值将被平均。
PodsMetricSource 表示如何根据描述当前扩缩目标中每个 Pod 的指标进行扩缩容(例如,transactions-processed-per-second
)。
在与目标值进行比较之前,这些指标值将被平均。
metrics.resource (ResourceMetricSource)
resource 是指 Kubernetes 已知的资源指标(例如在请求和限制中指定的那些),
此结构描述当前扩缩目标中的每个 Pod(例如 CPU 或内存)。此类指标内置于 Kubernetes 中,
并且在使用 “Pods” 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
ResourceMetricSource 指示如何根据请求和限制中指定的 Kubernetes 已知的资源指标进行扩缩容,
此结构描述当前扩缩目标中的每个 Pod(例如 CPU 或内存)。在与目标值比较之前,这些指标值将被平均。
此类指标内置于 Kubernetes 中,并且在使用 “Pods” 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
只应设置一种 “target” 类别。
HorizontalPodAutoscalerStatus
HorizontalPodAutoscalerStatus 描述了水平 Pod 自动扩缩器的当前状态。
conditions ([]HorizontalPodAutoscalerCondition)
补丁策略:基于键 type
合并
Map:合并时将保留 type 键的唯一值
conditions 是此自动扩缩器扩缩其目标所需的一组条件,并指示是否满足这些条件。
HorizontalPodAutoscalerCondition 描述 HorizontalPodAutoscaler 在某一时间点的状态。
conditions.lastTransitionTime (Time)
lastTransitionTime 是状况最近一次从一种状态转换到另一种状态的时间。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。
currentMetrics ([]MetricStatus)
原子性:将在合并期间被替换
currentMetrics 是此自动扩缩器使用的指标的最后读取状态。
MetricStatus 描述了单个指标的最后读取状态。
currentMetrics.containerResource (ContainerResourceMetricStatus)
containerResource 是指 Kubernetes 已知的一种资源指标(例如在请求和限制中指定的那些),
描述当前扩缩目标中每个 Pod 中的单个容器(例如 CPU 或内存)。
此类指标内置于 Kubernetes 中,并且在使用 "Pods" 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
ContainerResourceMetricStatus 指示如何根据请求和限制中指定的 Kubernetes 已知的资源指标进行扩缩容,
此结构描述当前扩缩目标中的每个 Pod(例如 CPU 或内存)。此类指标内置于 Kubernetes 中,
并且在使用 “Pods” 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
currentMetrics.external (ExternalMetricStatus)
external 指的是不与任何 Kubernetes 对象关联的全局指标。这一字段允许基于来自集群外部运行的组件
(例如云消息服务中的队列长度,或来自集群外部运行的负载均衡器的 QPS)的信息进行自动扩缩。
ExternalMetricStatus 表示与任何 Kubernetes 对象无关的全局指标的当前值。
currentMetrics.object (ObjectMetricStatus)
object 是指描述单个 Kubernetes 对象的指标(例如,Ingress 对象的 hits-per-second
)。
ObjectMetricStatus 表示描述 Kubernetes 对象的指标的当前值(例如,Ingress 对象的 hits-per-second
)。
currentMetrics.object.describedObject (CrossVersionObjectReference),必需
describeObject 表示对象的描述,如对象的 kind
、name
、apiVersion
。
CrossVersionObjectReference 包含足够的信息来让你识别所引用的资源。
currentMetrics.pods (PodsMetricStatus)
pods 是指描述当前扩缩目标中每个 Pod 的指标(例如,transactions-processed-per-second
)。
在与目标值进行比较之前,这些指标值将被平均。
PodsMetricStatus 表示描述当前扩缩目标中每个 Pod 的指标的当前值(例如,transactions-processed-per-second
)。
currentMetrics.resource (ResourceMetricStatus)
resource 是指 Kubernetes 已知的资源指标(例如在请求和限制中指定的那些),
此结构描述当前扩缩目标中的每个 Pod(例如 CPU 或内存)。此类指标内置于 Kubernetes 中,
并且在使用 “Pods” 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
ResourceMetricSource 指示如何根据请求和限制中指定的 Kubernetes 已知的资源指标进行扩缩容,
此结构描述当前扩缩目标中的每个 Pod(例如 CPU 或内存)。在与目标值比较之前,这些指标值将被平均。
此类指标内置于 Kubernetes 中,并且在使用 “Pods” 源的、按 Pod 统计的普通指标之外支持一些特殊的扩缩选项。
HorizontalPodAutoscalerList
HorizontalPodAutoscalerList 是水平 Pod 自动扩缩器对象列表。
Operations
get
读取指定的 HorizontalPodAutoscaler
HTTP 请求
GET /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (HorizontalPodAutoscaler ): OK
401: Unauthorized
get
读取指定 HorizontalPodAutoscaler 的状态
HTTP 请求
GET /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
参数
响应
200 (HorizontalPodAutoscaler ): OK
401: Unauthorized
list
列出或观察 HorizontalPodAutoscaler 类别的对象
HTTP 请求
GET /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers
参数
响应
200 (HorizontalPodAutoscalerList ): OK
401: Unauthorized
list
列出或观察 HorizontalPodAutoscaler 类别的对象
HTTP 请求
GET /apis/autoscaling/v2/horizontalpodautoscalers
参数
响应
200 (HorizontalPodAutoscalerList ): OK
401: Unauthorized
create
创建一个 HorizontalPodAutoscaler
HTTP 请求
POST /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
202 (HorizontalPodAutoscaler ): Accepted
401: Unauthorized
update
替换指定的 HorizontalPodAutoscaler
HTTP 请求
PUT /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
update
替换指定 HorizontalPodAutoscaler 的状态
HTTP 请求
PUT /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
patch
部分更新指定的 HorizontalPodAutoscaler
HTTP 请求
PATCH /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
patch
部分更新指定 HorizontalPodAutoscaler 的状态
HTTP 请求
PATCH /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}/status
参数
响应
200 (HorizontalPodAutoscaler ): OK
201 (HorizontalPodAutoscaler ): Created
401: Unauthorized
delete
删除一个 HorizontalPodAutoscaler
HTTP 请求
DELETE /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 HorizontalPodAutoscaler 的集合
HTTP 请求
DELETE /apis/autoscaling/v2/namespaces/{namespace}/horizontalpodautoscalers
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.14 - PriorityClass
PriorityClass 定义了从优先级类名到优先级数值的映射。
apiVersion: scheduling.k8s.io/v1
import "k8s.io/api/scheduling/v1"
PriorityClass
PriorityClass 定义了从优先级类名到优先级数值的映射。
该值可以是任何有效的整数。
apiVersion : scheduling.k8s.io/v1
PriorityClassList
PriorityClassList 是优先级类的集合。
apiVersion : scheduling.k8s.io/v1
操作
get
读取特定的 PriorityClass
HTTP 请求
GET /apis/scheduling.k8s.io/v1/priorityclasses/{name}
参数
name (路径参数 ): string,必需
PriorityClass 名称
响应
200 (PriorityClass ): OK
401: Unauthorized
list
列出或观察 PriorityClass类的对象
HTTP 请求
GET /apis/scheduling.k8s.io/v1/priorityclasses
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (PriorityClassList ): OK
401: Unauthorized
create
创建一个 PriorityClass
HTTP 请求
POST /apis/scheduling.k8s.io/v1/priorityclasses
参数
响应
200 (PriorityClass ): OK
201 (PriorityClass ): Created
202 (PriorityClass ): Accepted
401: Unauthorized
update
替换指定的 PriorityClass
HTTP 请求
PUT /apis/scheduling.k8s.io/v1/priorityclasses/{name}
参数
name (路径参数 ): string,必需
PriorityClass 名称
响应
200 (PriorityClass ): OK
201 (PriorityClass ): Created
401: Unauthorized
patch
部分更新特定的 PriorityClass
HTTP 请求
PATCH /apis/scheduling.k8s.io/v1/priorityclasses/{name}
参数
name (路径参数 ): string,必需
PriorityClass 名称
force (查询参数 ):boolean
force
响应
200 (PriorityClass ): OK
201 (PriorityClass ): Created
401: Unauthorized
delete
删除一个 PriorityClass
HTTP 请求
DELETE /apis/scheduling.k8s.io/v1/priorityclasses/{name}
参数
name (路径参数 ): string,必需
PriorityClass 名称。
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 PriorityClass 集合
HTTP 请求
DELETE /apis/scheduling.k8s.io/v1/priorityclasses
参数
limit (查询参数 ):integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.1.15 - PodSchedulingContext v1alpha3
PodSchedulingContext 对象包含使用 "WaitForFirstConsumer" 分配模式的 ResourceClaims 来调度 Pod 所需的信息。
apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
PodSchedulingContext
PodSchedulingContext 对象包含调度某些 Pod 所需要的额外信息,这些 Pod 使用了
“WaitForFirstConsumer” 分配模式的 ResourceClaim。
本功能特性是 Alpha 级别的特性,需要启用 DRAControlPlaneController 特性门控。
PodSchedulingContextSpec
PodSchedulingContextSpec 描述了 Pod 所需要的资源在哪里。
potentialNodes ([]string)
原子:将在合并期间被替换
potentialNodes 列出可以运行 Pod 的节点。
该字段的大小限制为 128。对于许多集群来说,这已经足够大了。
较大的集群可能需要更多的尝试去找到一个适合所有待定资源的节点。
这个限制值可能会在以后提高,但不会降低。
selectedNode (string)
selectedNode 是一个节点,由 Pod 引用的 ResourceClaim 将在此节点上尝试,
且尝试的分配模式是 “WaitForFirstConsumer”。
PodSchedulingContextStatus
PodSchedulingContextStatus 描述 Pod 的资源可以从哪里分配。
resourceClaims ([]ResourceClaimSchedulingStatus)
映射:键 name
的唯一值将在合并过程中保留
resourceClaims 描述了每个 pod.spec.resourceClaim 条目的资源可用性,
其中对应的 ResourceClaim 使用 “WaitForFirstConsumer” 分配模式。
ResourceClaimSchedulingStatus 包含关于一个采用 “WaitForFirstConsumer”
分配模式的特定 ResourceClaim 的信息。
resourceClaims.name (string)
name 与 pod.spec.resourceClaims[*].name 字段匹配。
resourceClaims.unsuitableNodes ([]string)
原子:将在合并期间被替换
unsuitableNodes 列出 ResourceClaim 无法被分配的节点。
该字段的大小限制为 128,与 PodSchedulingSpec.PotentialNodes 相同。
这可能会在以后增加,但不会减少。
PodSchedulingContextList
PodSchedulingContextList 是 Pod 调度对象的集合。
操作
get
读取指定的 PodSchedulingContext
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}
参数
响应
200 (PodSchedulingContext ): OK
401: Unauthorized
get
读取指定 PodSchedulingContext 的状态
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}/status
参数
响应
200 (PodSchedulingContext ): OK
401: Unauthorized
list
列出或监视 PodSchedulingContext 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts
参数
响应
200 (PodSchedulingContextList ): OK
401: Unauthorized
list
列出或监视 PodSchedulingContext 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/podschedulingcontexts
参数
响应
200 (PodSchedulingContextList ): OK
401: Unauthorized
create
创建 PodSchedulingContext
HTTP 请求
POST /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts
参数
响应
200 (PodSchedulingContext ): OK
201 (PodSchedulingContext ): Created
202 (PodSchedulingContext ): Accepted
401: Unauthorized
update
替换指定的 PodSchedulingContext
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}
参数
响应
200 (PodSchedulingContext ): OK
201 (PodSchedulingContext ): Created
401: Unauthorized
update
替换指定 PodSchedulingContext 的状态
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}/status
参数
响应
200 (PodSchedulingContext ): OK
201 (PodSchedulingContext ): Created
401: Unauthorized
patch
部分更新指定的 PodSchedulingContext
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}
参数
响应
200 (PodSchedulingContext ): OK
201 (PodSchedulingContext ): Created
401: Unauthorized
patch
部分更新指定 PodSchedulingContext 的状态
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}/status
参数
响应
200 (PodSchedulingContext ): OK
201 (PodSchedulingContext ): Created
401: Unauthorized
delete
删除 PodSchedulingContext
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts/{name}
参数
响应
200 (PodSchedulingContext ): OK
202 (PodSchedulingContext ): Accepted
401: Unauthorized
deletecollection
删除 PodSchedulingContext 的集合
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/podschedulingcontexts
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.16 - ResourceClaim v1alpha3
ResourceClaim 描述对集群中供工作负载使用的资源的访问请求。
apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
ResourceClaim
ResourceClaim 描述对集群中供工作负载使用的资源的访问请求。
例如,如果某个工作负载需要具有特定属性的加速器设备,这就是表达该请求的方式。
状态部分跟踪此申领是否已被满足,以及具体分配了哪些资源。
这是一个 Alpha 级别的资源类型,需要启用 DynamicResourceAllocation 特性门控。
ResourceClaimSpec
ResourceClaimSpec 定义在 ResourceClaim 中正在被请求的资源及其配置方式。
controller (string)
controller 是用于处理此申领分配的 DRA 驱动的名称。
如果为空,则在调度 Pod 时分配由调度器处理。
必须是一个 DNS 子域,并且应以驱动供应商拥有的 DNS 域结尾。
这是一个 Alpha 字段,需要启用 DRAControlPlaneController 特性门控。
ResourceClaimStatus
ResourceClaimStatus 跟踪资源是否已被分配以及产生的结果是什么。
allocation (AllocationResult)
一旦申领已被成功分配,就会设置 allocation。
AllocationResult 包含已分配资源的属性。
allocation.controller (string)
controller 是处理了分配的 DRA 驱动的名称。
该驱动还负责对此申领的去配操作。当申领可以在不涉及驱动的情况下被去配时,此字段为空。
驱动可以分配由其他驱动提供的设备,因此此驱动名称可能与结果中列出的驱动名称不同。
这是一个 Alpha 字段,需要启用 DRAControlPlaneController 特性门控。
allocation.nodeSelector (NodeSelector)
nodeSelector 定义在哪儿可以使用分配的资源。如果不设置,则分配的资源在任何地方都可用。
节点选择算符表示在一组节点上一个或多个标签查询结果的并集;
也就是说,它表示由节点选择算符条件表示的选择算符的逻辑或计算结果。
allocation.nodeSelector.nodeSelectorTerms ([]NodeSelectorTerm),必需
原子:将在合并期间被替换
必需。节点选择算符条件的列表。这些条件以逻辑与进行计算。
一个 null 或空的节点选择算符条件不会与任何对象匹配。这些要求会按逻辑与的关系来计算。
TopologySelectorTerm 类别实现了 NodeSelectorTerm 的子集。
deallocationRequested (boolean)
表示某申领需要被去分配。如果设置了此字段,新的使用者不可以被添加到 reservedFor 中。
只有在申领需要由 DRA 驱动来去配时才会使用此字段。
该驱动必须为此申领执行去配操作并重置此字段,同时清除 allocation 字段。
这是一个 Alpha 字段,需要启用 DRAControlPlaneController 特性门控。
reservedFor ([]ResourceClaimConsumerReference)
补丁策略:根据键 uid
执行合并操作
映射:在合并期间将根据键 uid 保留唯一值
reservedFor 标明目前哪些实体允许使用申领。
如果 Pod 引用了未为其预留的 ResourceClaim,则该 Pod 将不会启动。
正在使用或可能正在使用的申领(因为它已被预留)不准被去配。
在有多个调度器实例的集群中,两个 Pod 可能会被不同的调度器同时调度。
当它们引用同一个已达到最大使用者数量的 ResourceClaim 时,只能有一个 Pod 被调度。
两个调度器都尝试将它们的 Pod 添加到 claim.status.reservedFor 字段,
但只有第一个到达 API 服务器的更新会被存储,另一个会因错误而失败。
发出此请求的调度器知道它必须将 Pod 重新放回队列,等待 ResourceClaim 再次可用。
最多可以有 32 个这样的预留。这一限制可能会在未来放宽,但不会减少。
ResourceClaimConsumerReference 包含足够的信息以便定位 ResourceClaim 的使用者。
用户必须是与 ResourceClaim 在同一名字空间中的资源。
reservedFor.name (string),必需
name 是所引用资源的名称。
reservedFor.resource (string),必需
resource 是所引用资源的类别,例如 "pods"。
reservedFor.uid (string),必需
uid 用于唯一标识资源的某实例。
reservedFor.apiGroup (string)
apiGroup 是所引用资源的组。对于核心 API 而言此值为空字符串。
字段值与创建资源时所用的 apiVersion 中的组匹配。
ResourceClaimList
ResourceClaimList 是申领的集合。
操作
get
读取指定的 ResourceClaim
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}
参数
响应
200 (ResourceClaim ): OK
401: Unauthorized
get
读取指定 ResourceClaim 的状态
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}/status
参数
响应
200 (ResourceClaim ): OK
401: Unauthorized
list
列出或监视 ResourceClaim 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims
参数
响应
200 (ResourceClaimList ): OK
401: Unauthorized
list
列出或监视 ResourceClaim 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/resourceclaims
参数
响应
200 (ResourceClaimList ): OK
401: Unauthorized
create
创建 ResourceClaim
HTTP 请求
POST /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims
参数
响应
200 (ResourceClaim ): OK
201 (ResourceClaim ): Created
202 (ResourceClaim ): Accepted
401: Unauthorized
update
替换指定的 ResourceClaim
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}
参数
响应
200 (ResourceClaim ): OK
201 (ResourceClaim ): Created
401: Unauthorized
update
替换指定 ResourceClaim 的状态
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}/status
参数
响应
200 (ResourceClaim ): OK
201 (ResourceClaim ): Created
401: Unauthorized
patch
部分更新指定的 ResourceClaim
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}
参数
响应
200 (ResourceClaim ): OK
201 (ResourceClaim ): Created
401: Unauthorized
patch
部分更新指定 ResourceClaim 的状态
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}/status
参数
响应
200 (ResourceClaim ): OK
201 (ResourceClaim ): Created
401: Unauthorized
delete
删除 ResourceClaim
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims/{name}
参数
响应
200 (ResourceClaim ): OK
202 (ResourceClaim ): Accepted
401: Unauthorized
deletecollection
删除 ResourceClaim 的集合
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaims
参数
响应
200 (Status ): OK
401: Unauthorized
5.1.17 - ResourceClaimTemplate v1alpha3
ResourceClaimTemplate 用于生成 ResourceClaim 对象。
apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
ResourceClaimTemplate
ResourceClaimTemplate 用于生成 ResourceClaim 对象。
这是一个 Alpha 类型的特性,需要启用 DynamicResourceAllocation 特性门控。
ResourceClaimTemplateSpec
ResourceClaimTemplateSpec 包含针对 ResourceClaim 的元数据和字段。
ResourceClaimTemplateList
ResourceClaimTemplateList 是申领模板的集合。
操作
get
读取指定的 ResourceClaimTemplate
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates/{name}
参数
响应
200 (ResourceClaimTemplate ): OK
401: Unauthorized
list
列出或监视 ResourceClaimTemplate 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates
参数
响应
200 (ResourceClaimTemplateList ): OK
401: Unauthorized
list
列出或监视 ResourceClaimTemplate 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/resourceclaimtemplates
参数
响应
200 (ResourceClaimTemplateList ): OK
401: Unauthorized
create
创建 ResourceClaimTemplate
HTTP 请求
POST /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates
参数
响应
200 (ResourceClaimTemplate ): OK
201 (ResourceClaimTemplate ): Created
202 (ResourceClaimTemplate ): Accepted
401: Unauthorized
update
替换指定的 ResourceClaimTemplate
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates/{name}
参数
响应
200 (ResourceClaimTemplate ): OK
201 (ResourceClaimTemplate ): Created
401: Unauthorized
patch
部分更新指定的 ResourceClaimTemplate
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates/{name}
参数
响应
200 (ResourceClaimTemplate ): OK
201 (ResourceClaimTemplate ): Created
401: Unauthorized
delete
删除 ResourceClaimTemplate
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates/{name}
参数
响应
200 (ResourceClaimTemplate ): OK
202 (ResourceClaimTemplate ): Accepted
401: Unauthorized
deletecollection
删除 ResourceClaimTemplate 的集合
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/namespaces/{namespace}/resourceclaimtemplates
参数
响应
200 (Status ): OK
401: Unauthorized
5.2 - Service 资源
5.2.1 - Service
Service 是软件服务(例如 mysql)的命名抽象,包含代理要侦听的本地端口(例如 3306)和一个选择算符,选择算符用来确定哪些 Pod 将响应通过代理发送的请求。
apiVersion: v1
import "k8s.io/api/core/v1”
Service
Service 是软件服务(例如 mysql)的命名抽象,包含代理要侦听的本地端口(例如 3306)和一个选择算符,
选择算符用来确定哪些 Pod 将响应通过代理发送的请求。
ServiceSpec
ServiceSpec 描述用户在服务上创建的属性。
selector (map[string]string)
将 Service 流量路由到具有与此 selector 匹配的标签键值对的 Pod。
如果为空或不存在,则假定该服务有一个外部进程管理其端点,Kubernetes 不会修改该端点。
仅适用于 ClusterIP、NodePort 和 LoadBalancer 类型。如果类型为 ExternalName,则忽略。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/
ports ([]ServicePort)
补丁策略:基于键 type
合并
Map:合并时将保留 type 键的唯一值
此 Service 公开的端口列表。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
ServicePort 包含有关 ServicePort 的信息。
ports.port (int32),必需
Service 将公开的端口。
ports.targetPort (IntOrString)
在 Service 所针对的 Pod 上要访问的端口号或名称。
编号必须在 1 到 65535 的范围内。名称必须是 IANA_SVC_NAME。
如果此值是一个字符串,将在目标 Pod 的容器端口中作为命名端口进行查找。
如果未指定字段,则使用 port
字段的值(直接映射)。
对于 clusterIP 为 None 的服务,此字段将被忽略,
应忽略不设或设置为 port
字段的取值。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#defining-a-service
IntOrString 是一种可以保存 int32 或字符串的类型。
在 JSON 或 YAML 编组和解组中使用时,它会生成或使用内部类型。
例如,这允许您拥有一个可以接受名称或数字的 JSON 字段。
ports.protocol (string)
此端口的 IP 协议。支持 “TCP”、“UDP” 和 “SCTP”。默认为 TCP。
ports.name (string)
Service 中此端口的名称。这必须是 DNS_LABEL。
ServiceSpec 中的所有端口的名称都必须唯一。
在考虑 Service 的端点时,这一字段值必须与 EndpointPort 中的 name
字段相同。
如果此服务上仅定义一个 ServicePort,则为此字段为可选。
ports.nodePort (int32)
当类型为 NodePort 或 LoadBalancer 时,Service 公开在节点上的端口,
通常由系统分配。如果指定了一个在范围内且未使用的值,则将使用该值,否则操作将失败。
如果在创建的 Service 需要该端口时未指定该字段,则会分配端口。
如果在创建不需要该端口的 Service时指定了该字段,则会创建失败。
当更新 Service 时,如果不再需要此字段(例如,将类型从 NodePort 更改为 ClusterIP),这个字段将被擦除。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#type-nodeport
ports.appProtocol (string)
此端口的应用协议,用作实现的提示,为他们理解的协议提供更丰富的行为。此字段遵循标准
Kubernetes 标签语法,有效值包括:
type (string)
type 确定 Service 的公开方式。默认为 ClusterIP。
有效选项为 ExternalName、ClusterIP、NodePort 和 LoadBalancer。
ClusterIP
为端点分配一个集群内部 IP 地址用于负载均衡。
Endpoints 由 selector 确定,如果未设置 selector,则需要通过手动构造 Endpoints 或 EndpointSlice 的对象来确定。
如果 clusterIP 为 None
,则不分配虚拟 IP,并且 Endpoints 作为一组端点而不是虚拟 IP 发布。
NodePort
建立在 ClusterIP 之上,并在每个节点上分配一个端口,该端口路由到与 clusterIP 相同的 Endpoints。
LoadBalancer
基于 NodePort 构建并创建一个外部负载均衡器(如果当前云支持),该负载均衡器路由到与 clusterIP 相同的 Endpoints。
externalName
将此 Service 别名为指定的 externalName。其他几个字段不适用于 ExternalName Service。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#publishing-services-service-types
ipFamilies ([]string)
原子: 将在合并期间被替换
iPFamilies 是分配给此服务的 IP 协议(例如 IPv4、IPv6)的列表。
该字段通常根据集群配置和 ipFamilyPolicy 字段自动设置。
如果手动指定该字段,且请求的协议在集群中可用,且 ipFamilyPolicy 允许,则使用;否则服务创建将失败。
该字段修改是有条件的:它允许添加或删除辅助 IP 协议,但不允许更改服务的主要 IP 协议。
有效值为 “IPv4” 和 “IPv6”。
该字段仅适用于 ClusterIP、NodePort 和 LoadBalancer 类型的服务,并且确实可用于“无头”服务。
更新服务设置类型为 ExternalName 时,该字段将被擦除。
该字段最多可以包含两个条目(双栈系列,按任意顺序)。
如果指定,这些协议栈必须对应于 clusterIPs 字段的值。
clusterIP 和 ipFamilies 都由 ipFamilyPolicy 字段管理。
ipFamilyPolicy (string)
iPFamilyPolicy 表示此服务请求或要求的双栈特性。
如果没有提供值,则此字段将被设置为 SingleStack。
服务可以是 “SingleStack”(单个 IP 协议)、
“PreferDualStack”(双栈配置集群上的两个 IP 协议或单栈集群上的单个 IP 协议)
或 “RequireDualStack”(双栈上的两个 IP 协议配置的集群,否则失败)。
ipFamilies 和 clusterIPs 字段取决于此字段的值。
更新服务设置类型为 ExternalName 时,此字段将被擦除。
clusterIP (string)
clusterIP 是服务的 IP 地址,通常是随机分配的。
如果地址是手动指定的,在范围内(根据系统配置),且没有被使用,它将被分配给服务,否则创建服务将失败。
clusterIP 一般不会被更改,除非 type 被更改为 ExternalName
(ExternalName 需要 clusterIP 为空)或 type 已经是 ExternalName 时,可以更改 clusterIP(在这种情况下,可以选择指定此字段)。
可选值 “None”、空字符串 (“”) 或有效的 IP 地址。
clusterIP 为 “None” 时会生成“无头服务”(无虚拟 IP),这在首选直接 Endpoint 连接且不需要代理时很有用。
仅适用于 ClusterIP、NodePort、和 LoadBalancer 类型的服务。
如果在创建 ExternalName 类型的 Service 时指定了 clusterIP,则创建将失败。
更新 Service type 为 ExternalName 时,clusterIP 会被移除。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
clusterIPs ([]string)
原子: 将在合并期间被替换
clusterIPs 是分配给该 Service 的 IP 地址列表,通常是随机分配的。
如果地址是手动指定的,在范围内(根据系统配置),且没有被使用,它将被分配给 Service;否则创建 Service 失败。
clusterIP 一般不会被更改,除非 type 被更改为 ExternalName
(ExternalName 需要 clusterIPs 为空)或 type 已经是 ExternalName 时,可以更改 clusterIPs(在这种情况下,可以选择指定此字段)。
可选值 “None”、空字符串 (“”) 或有效的 IP 地址。
clusterIPs 为 “None” 时会生成“无头服务”(无虚拟 IP),这在首选直接 Endpoint 连接且不需要代理时很有用。
适用于 ClusterIP、NodePort、和 LoadBalancer 类型的服务。
如果在创建 ExternalName 类型的 Service 时指定了 clusterIPs,则会创建失败。
更新 Service type 为 ExternalName 时,该字段将被移除。如果未指定此字段,则将从 clusterIP 字段初始化。
如果指定 clusterIPs,客户端必须确保 clusterIPs[0] 和 clusterIP 一致。
clusterIPs 最多可包含两个条目(双栈系列,按任意顺序)。
这些 IP 必须与 ipFamilies 的值相对应。
clusterIP 和 ipFamilies 都由 ipFamilyPolicy 管理。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
externalIPs ([]string)
原子:将在合并期间被替换
externalIPs 是一个 IP 列表,集群中的节点会为此 Service 接收针对这些 IP 地址的流量。
这些 IP 不被 Kubernetes 管理。用户需要确保流量可以到达具有此 IP 的节点。
一个常见的例子是不属于 Kubernetes 系统的外部负载均衡器。
sessionAffinity (string)
支持 “ClientIP” 和 “None”。用于维护会话亲和性。
启用基于客户端 IP 的会话亲和性。必须是 ClientIP 或 None。默认为 None。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
loadBalancerIP (string)
仅适用于服务类型:LoadBalancer。此功能取决于底层云提供商是否支持负载均衡器。
如果云提供商不支持该功能,该字段将被忽略。
已弃用:该字段信息不足,且其含义因实现而异。此字段是不可移植的,并且可能不支持双栈。。
我们鼓励用户在可用时使用特定于实现的注解。
loadBalancerSourceRanges ([]string)
原子:将在合并期间被替换
如果设置了此字段并且被平台支持,将限制通过云厂商的负载均衡器的流量到指定的客户端 IP。
如果云提供商不支持该功能,该字段将被忽略。更多信息:
https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/create-external-load-balancer/
loadBalancerClass (string)
loadBalancerClass 是此 Service 所属的负载均衡器实现的类。
如果设置了此字段,则字段值必须是标签风格的标识符,带有可选前缀,例如 ”internal-vip” 或 “example.com/internal-vip”。
无前缀名称是为最终用户保留的。该字段只能在 Service 类型为 “LoadBalancer” 时设置。
如果未设置此字段,则使用默认负载均衡器实现。默认负载均衡器现在通常通过云提供商集成完成,但应适用于任何默认实现。
如果设置了此字段,则假定负载均衡器实现正在监测具有对应负载均衡器类的 Service。
任何默认负载均衡器实现(例如云提供商)都应忽略设置此字段的 Service。
只有在创建或更新的 Service 的 type 为 “LoadBalancer” 时,才可设置此字段。
一经设定,不可更改。当 Service 的 type 更新为 “LoadBalancer” 之外的其他类型时,此字段将被移除。
externalName (string)
externalName 是发现机制将返回的外部引用,作为此服务的别名(例如 DNS CNAME 记录)。
不涉及代理。必须是小写的 RFC-1123 主机名 (https://tools.ietf.org/html/rfc1123 ),
并且要求 type
为 ExternalName
。
externalTrafficPolicy (string)
externalTrafficPolicy 描述了节点如何分发它们在 Service 的“外部访问”地址
(NodePort、ExternalIP 和 LoadBalancer IP)接收到的服务流量。
如果设置为 “Local”,代理将以一种假设外部负载均衡器将负责在节点之间服务流量负载均衡,
因此每个节点将仅向服务的节点本地端点传递流量,而不会伪装客户端源 IP。
(将丢弃错误发送到没有端点的节点的流量。)
“Cluster” 默认值使用负载均衡路由到所有端点的策略(可能会根据拓扑和其他特性进行修改)。
请注意,从集群内部发送到 External IP 或 LoadBalancer IP 的流量始终具有 “Cluster” 语义,
但是从集群内部发送到 NodePort 的客户端需要在选择节点时考虑流量路由策略。
internalTrafficPolicy (string)
internalTrafficPolicy 描述节点如何分发它们在 ClusterIP 上接收到的服务流量。
如果设置为 “Local”,代理将假定 Pod 只想与在同一节点上的服务端点通信,如果没有本地端点,它将丢弃流量。
“Cluster” 默认将流量路由到所有端点(可能会根据拓扑和其他特性进行修改)。
healthCheckNodePort (int32)
healthCheckNodePort 指定 Service 的健康检查节点端口。
仅适用于 type 为 LoadBalancer 且 externalTrafficPolicy 设置为 Local 的情况。
如果为此字段设定了一个值,该值在合法范围内且没有被使用,则使用所指定的值。
如果未设置此字段,则自动分配字段值。外部系统(例如负载平衡器)可以使用此端口来确定给定节点是否拥有此服务的端点。
在创建不需要 healthCheckNodePort 的 Service 时指定了此字段,则 Service 创建会失败。
要移除 healthCheckNodePort,需要更改 Service 的 type。
该字段一旦设置就无法更改。
publishNotReadyAddresses (boolean)
publishNotReadyAddresses 表示任何处理此 Service 端点的代理都应忽略任何准备就绪/未准备就绪的指示。
设置此字段的主要场景是为 StatefulSet 的服务提供支持,使之能够为其 Pod 传播 SRV DNS 记录,以实现对等发现。
为 Service 生成 Endpoints 和 EndpointSlice 资源的 Kubernetes 控制器对字段的解读是,
即使 Pod 本身还没有准备好,所有端点都可被视为 “已就绪”。
对于代理而言,如果仅使用 Kubernetes 通过 Endpoints 或 EndpointSlice 资源所生成的端点,
则可以安全地假设这种行为。
sessionAffinityConfig (SessionAffinityConfig)
sessionAffinityConfig 包含会话亲和性的配置。
SessionAffinityConfig 表示会话亲和性的配置。
sessionAffinityConfig.clientIP (ClientIPConfig)
clientIP 包含基于客户端 IP 的会话亲和性的配置。
ClientIPConfig 表示基于客户端 IP 的会话亲和性的配置。
allocateLoadBalancerNodePorts (boolean)
allocateLoadBalancerNodePorts 定义了是否会自动为 LoadBalancer 类型的 Service 分配 NodePort。默认为 true。
如果集群负载均衡器不依赖 NodePort,则可以设置此字段为 false。
如果调用者(通过指定一个值)请求特定的 NodePort,则无论此字段如何,都会接受这些请求。
该字段只能设置在 type 为 LoadBalancer 的 Service 上,如果 type 更改为任何其他类型,该字段将被移除。
trafficDistribution (string)
trafficDistribution 提供了一种流量如何被分配到 Service 端点的偏好表达方式。
各个实现可以将此字段用作提示,但不需要严格遵守。如果此字段未设置,实现将应用其默认路由策略。
如果设置为“PreferClose”,则实现应优先考虑在拓扑上接近的端点(例如,位于同一区域)。
这是一个 Beta 字段,需要启用 ServiceTrafficDistribution 特性。
ServiceStatus
ServiceStatus 表示 Service 的当前状态。
conditions ([]Condition)
补丁策略:基于键 type
合并
Map: 键类型的唯一值将在合并期间保留
服务的当前状态。
condition 包含此 API 资源某一方面当前的状态详细信息。
conditions.lastTransitionTime (Time),必需
lastTransitionTime 是状况最近一次状态转化的时间。
变化应该发生在下层状况发生变化的时候。如果不知道下层状况发生变化的时间,
那么使用 API 字段更改的时间是可以接受的。
Time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
为 time 包提供的许多工厂方法提供了包装类。
conditions.type (string),必需
condition 的类型,格式为 CamelCase 或 foo.example.com/CamelCase。
conditions.observedGeneration (int64)
observedGeneration 表示设置 condition 基于的 .metadata.generation 的过期次数。
例如,如果 .metadata.generation 当前为 12,但 .status.conditions[x].observedGeneration 为 9,
则 condition 相对于实例的当前状态已过期。
loadBalancer (LoadBalancerStatus)
loadBalancer 包含负载均衡器的当前状态(如果存在)。
LoadBalancerStatus 表示负载均衡器的状态。
loadBalancer.ingress ([]LoadBalancerIngress)
原子:将在合并期间被替换
ingress 是一个包含负载均衡器 Ingress 点的列表。Service 的流量需要被发送到这些 Ingress 点。
LoadBalancerIngress 表示负载平衡器入口点的状态: 用于服务的流量是否被发送到入口点。
loadBalancer.ingress.hostname (string)
hostname 是为基于 DNS 的负载均衡器 Ingress 点(通常是 AWS 负载均衡器)设置的。
loadBalancer.ingress.ip (string)
ip 是为基于 IP 的负载均衡器 Ingress 点(通常是 GCE 或 OpenStack 负载均衡器)设置的。
loadBalancer.ingress.ipMode (string)
ipMode 指定负载平衡器 IP 的行为方式,并且只能在设置了 ip 字段时指定。
将其设置为 VIP
表示流量将传送到节点,并将目标设置为负载均衡器的 IP 和端口。
将其设置为 Proxy
表示将流量传送到节点或 Pod,并将目标设置为节点的 IP 和节点端口或 Pod 的 IP 和端口。
服务实现可以使用此信息来调整流量路由。
loadBalancer.ingress.ports ([]PortStatus)
原子:将在合并期间被替换
ports 是 Service 的端口列表。如果设置了此字段,Service 中定义的每个端口都应该在此列表中。
loadBalancer.ingress.ports.protocol (string),必需
protocol 是所记录的服务端口状态的协议。支持的值为:“TCP”、“UDP”、“SCTP”。
loadBalancer.ingress.ports.error (string)
error 是记录 Service 端口的问题。
错误的格式应符合以下规则:
内置错误原因应在此文件中指定,应使用 CamelCase 名称。
云提供商特定错误原因的名称必须符合格式 foo.example.com/CamelCase。
ServiceList
ServiceList 包含一个 Service 列表。
操作
get
读取指定的 Service
HTTP 请求
GET /api/v1/namespaces/{namespace}/services/{name}
参数
响应
200(Service ): OK
401: Unauthorized
get
读取指定 Service 的状态
HTTP 请求
GET /api/v1/namespaces/{namespace}/services/{name}/status
参数
响应
200(Service ): OK
401: Unauthorized
list
列出或监测 Service 类型的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/services
参数
响应
200(ServiceList ): OK
401: Unauthorized
list
列出或监测 Service 类型的对象
HTTP 请求
GET /api/v1/services
参数
响应
200(ServiceList ): OK
401: Unauthorized
create
创建一个 Service
HTTP 请求
POST /api/v1/namespaces/{namespace}/services
参数
响应
200(Service ): OK
201(Service ): Created
202(Service ): Accepted
401: Unauthorized
update
替换指定的 Service
HTTP 请求
PUT /api/v1/namespaces/{namespace}/services/{name}
参数
响应
200(Service ): OK
201(Service ): Created
401: Unauthorized
update
替换指定 Service 的状态
HTTP 请求
PUT /api/v1/namespaces/{namespace}/services/{name}/status
参数
响应
200(Service ): OK
201(Service ): Created
401: Unauthorized
patch
部分更新指定的 Service
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/services/{name}
参数
响应
200(Service ): OK
201(Service ): Created
401: Unauthorized
patch
部分更新指定 Service 的状态
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/services/{name}/status
参数
响应
200(Service ): OK
201(Service ): Created
401: Unauthorized
delete
删除 Service
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/services/{name}
参数
响应
200(Service ): OK
202(Service ): Accepted
401: Unauthorized
deletecollection
删除 Service 集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/services
参数
响应
200(Status ): OK
401: Unauthorized
5.2.2 - Endpoints
Endpoints 是实现实际服务的端点的集合。
apiVersion: v1
import "k8s.io/api/core/v1"
Endpoints
Endpoints 是实现实际服务的端点的集合。举例:
Name: "mysvc",
Subsets: [
{
Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
},
{
Addresses: [{"ip": "10.10.3.3"}],
Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
},
]
apiVersion : v1
kind : Endpoints
metadata (ObjectMeta )
标准的对象元数据。更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
subsets ([]EndpointSubset)
Atomic:将在合并期间被替换
所有端点的集合是所有 subsets 的并集。不同地址会根据其 IP 地址被放入不同子集。
对于具有多个端口的单个地址,如果其中一些端口已就绪,而另一些端口未就绪(因为它们来自不同的容器),
将导致地址显示在不同端口的不同子集中。
任何地址都不可以同时出现在 addresses 和 notReadyAddress 中的相同子集内。
EndpointSubset 是一组具有公共端口集的地址。扩展的端点集是 addresses 和 ports 的笛卡尔乘积。例如假设:
{
Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
}
则最终的端点集可以看作:
a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
b: [ 10.10.1.1:309, 10.10.2.2:309 ]*
subsets.addresses ([]EndpointAddress)
Atomic:将在合并期间被替换
提供标记为就绪的相关端口的 IP 地址。
这些端点应该被认为是负载均衡器和客户端可以安全使用的。
EndpointAddress 是描述单个 IP 地址的元组。
subsets.addresses.ip (string), 必需
端点的 IP。不可以是本地回路(127.0.0.0/8 或 ::1)、
链路本地(169.254.0.0/16 或 fe80::/10)或链路本地多播(224.0.0.0/24
或 ff02::/16))地址。
subsets.addresses.hostname (string)
端点主机名称。
subsets.addresses.nodeName (string)
可选:承载此端点的节点。此字段可用于确定一个节点的本地端点。
subsets.addresses.targetRef (ObjectReference )
对提供端点的对象的引用。
subsets.notReadyAddresses ([]EndpointAddress)
**Atomic:将在合并期间被替换**
提供相关端口但由于尚未完成启动、最近未通过就绪态检查或最近未通过活跃性检查而被标记为当前未就绪的 IP 地址。
EndpointAddress 是描述单个 IP 地址的元组。
subsets.notReadyAddresses.ip (string), 必需
端点的 IP。不可以是本地环路(127.0.0.0/8 或 ::1)、
链路本地(169.254.0.0/16 或 fe80::/10)或链路本地多播(224.0.0.0/24
或 ff02::/16)地址。
subsets.notReadyAddresses.hostname (string)
端点主机名称。
subsets.notReadyAddresses.nodeName (string)
可选:承载此端点的节点。此字段可用于确定节点的本地端点。
subsets.notReadyAddresses.targetRef (ObjectReference )
对提供端点的对象的引用。
subsets.ports ([]EndpointPort)
Atomic:将在合并期间被替换
相关 IP 地址上可用的端口号。
EndpointPort 是描述单个端口的元组。
subsets.ports.port (int32), 必需
端点的端口号。
subsets.ports.protocol (string)
此端口的 IP 协议。必须是 UDP、TCP 或 SCTP。默认值为 TCP。
subsets.ports.name (string)
端口的名称。此字段必须与相应 ServicePort 中的 name
字段匹配。必须是 DNS_LABEL。
仅当定义了一个端口时才可选。
subsets.ports.appProtocol (string)
端口的应用程序协议。这被用作实现的提示,为他们理解的协议提供更丰富的行为。
此字段遵循标准的 Kubernetes 标签语法。有效值为:
EndpointsList
EndpointsList 是端点列表。
操作
get
读取指定的 Endpoints
HTTP 请求
GET /api/v1/namespaces/{namespace}/endpoints/{name}
参数
name (路径参数 ):string,必需
Endpoints 的名称。
响应
200 (Endpoints ): OK
401: Unauthorized
list
列出或监测 Endpoints 类型的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/endpoints
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (EndpointsList ): OK
401: Unauthorized
list
列出或监测 Endpoints 类型的对象
HTTP 请求
GET /api/v1/endpoints
参数
响应
200 (EndpointsList ): OK
401: Unauthorized
create
创建 Endpoints
HTTP 请求
POST /api/v1/namespaces/{namespace}/endpoints
参数
响应
200 (Endpoints ): OK
201 (Endpoints ): Created
202 (Endpoints ): Accepted
401: Unauthorized
update
替换指定的 Endpoints
HTTP 请求
PUT /api/v1/namespaces/{namespace}/endpoints/{name}
参数
name (路径参数 ):string,必需
Endpoints 名称
响应
200 (Endpoints ): OK
201 (Endpoints ): Created
401: Unauthorized
patch
部分更新指定的 Endpoints
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/endpoints/{name}
参数
name (路径参数 ):string,必需
Endpoints 名称
响应
200 (Endpoints ): OK
201 (Endpoints ): Created
401: Unauthorized
delete
删除 Endpoints
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/endpoints/{name}
参数
name (路径参数 ):string,必需
Endpoints 名称
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Endpoints 组
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/endpoints
参数
limit (查询参数 ):integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.2.3 - EndpointSlice
EndpointSlice 是实现某 Service 的端点的子集.
apiVersion: discovery.k8s.io/v1
import "k8s.io/api/discovery/v1"
EndpointSlice
EndpointSlice 是实现某 Service 的端点的子集。一个 Service 可以有多个 EndpointSlice 对象与之对应,
必须将所有的 EndpointSlice 拼接起来才能形成一套完整的端点集合。Service 通过标签来选择 EndpointSlice。
apiVersion :discovery.k8s.io/v1
kind :EndpointSlice
metadata (ObjectMeta )
标准的对象元数据。
addressType (string), 必需
addressType 指定当前 EndpointSlice 携带的地址类型。一个 EndpointSlice 只能携带同一类型的地址。
EndpointSlice 对象创建完成后不可以再更改 addressType 字段。
目前支持的地址类型为:
IPv4:表示 IPv4 地址。
IPv6:表示 IPv6 地址。
FQDN:表示完全限定域名。
endpoints ([]Endpoint), 必需
原子性:合并期间将被替换
endpoints 是当前 EndpointSlice 中一组唯一的端点。每个 EndpointSlice 最多可以包含 1000 个端点。
端点是实现某 Service 的一个逻辑“后端”。
endpoints.addresses ([]string), 必需
集合:不重复的值在合并期间会被保留
本端点的地址。此字段的内容会根据对应的 EndpointSlice addressType 字段的值进行解释。
消费者必须根据自身能力处理不同类型的地址。此字段必须至少包含 1 个地址,最多不超过 100 个地址。
假定这些地址都是可替换的,而且客户端也可能选择只用第一个元素。参阅: https://issue.k8s.io/106267
endpoints.conditions (EndpointConditions)
conditions 包含和本端点当前状态有关的信息。
EndpointConditions 是端点的当前状况。
endpoints.conditions.ready (boolean)
ready 说明此端点已经准备好根据相关的系统映射接收流量。nil 值表示状态未知。
在大多数情况下,消费者应将这种未知状态视为就绪(ready)。
考虑到兼容性,对于正在结束状态下的端点,永远不能将 ready 设置为“true”,
除非正常的就绪行为被显式覆盖,例如当关联的服务设置了 publishNotReadyAddresses 标志时。
endpoints.conditions.serving (boolean)
serving 和 ready 非常相似。唯一的不同在于,
即便某端点的状态为 Terminating 也可以设置 serving。
对于处在终止过程中的就绪端点,此状况应被设置为 “true”。
如果设置为 nil,则消费者应该以 ready 值为准。
endpoints.conditions.terminating (boolean)
terminating 说明当前端点正在终止过程中。nil 值表示状态未知。
消费者应将这种未知状态视为端点并不处于终止过程中。
endpoints.deprecatedTopology (map[string]string)
deprecatedTopology 包含 v1beta1 API 的拓扑信息部分。目前已经弃用了此字段,
移除 v1beta1 API 时(不早于 Kubernetes v1.24)会一起移除此字段。
此字段目前仍然可以存储值,但是不能通过 v1 API 写入数据。
向此字段写入数据的任何尝试都会被忽略,并且不会通知用户。
移除此字段后,可以在 zone 和 nodeName 字段中查看拓扑信息。
endpoints.hints (EndpointHints)
hints 是关于应该如何使用某端点的提示信息。
EndpointHints 提供应该如何使用某端点的提示信息。
endpoints.hostname (string)
此端点的主机名称。端点的使用者可以通过此字段区分各个端点(例如,通过 DNS 域名)。
使用同一主机名称的多个端点应被视为可替换(例如,DNS 中的多个 A 记录)。
必须为小写字母,并且需要通过 DNS Label (RFC 1123) 验证。
endpoints.nodeName (string)
nodeName 是托管此端点的 Node 的名称,使用 nodeName 可以决定 Node 本地有哪些端点。
endpoints.targetRef (ObjectReference )
targetRef 是对代表此端点的 Kubernetes 对象的引用。
endpoints.zone (string)
zone 是此端点所在的可用区(Zone)的名称。
ports ([]EndpointPort)
原子性:合并期间会被替代
ports 列出了当前 EndpointSlice 中各个端点所暴露的网络端口。每个端口的名称不得重复。
当 ports 列表为空时,表示没有已经指定暴露哪些端口。如果端口值被定义为 nil,表示暴露“所有端口”。
每个 EndpointSlice 最多可以包含 100 个端口。
EndpointPort 是 EndpointSlice 使用的端口。
ports.port (int32)
port 表示端点的端口号。如果未指定,就不限制端口,且必须根据消费者的具体环境进行解释。
ports.protocol (string)
protocol 表示此端口的 IP 协议。必须为 UDP、TCP 或 SCTP。默认为 TCP。
ports.name (string)
name 表示此端口的名称。EndpointSlice 中所有端口的名称都不得重复。
如果 EndpointSlice 是基于 Kubernetes Service 创建的,
那么此端口的名称和 Service.ports[].name 字段的值一致。默认为空字符串。
名称必须是空字符串,或者必须通过 DNS_LABEL 验证:
最多包含 63 个字符。
必须包含英文小写字母或'-'。
必须以字母开头并以字母结尾。
ports.appProtocol (string)
此端口的应用层协议。字段值被用作提示,允许协议实现为其所理解的协议提供更丰富的行为。
此字段遵循标准的 Kubernetes 标签句法。有效的取值是:
EndpointSliceList
EndpointSliceList 是 EndpointSlice 的列表。
操作
get
读取指定的 EndpointSlice
HTTP 请求
GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
name (路径参数 ):string, 必需
EndpointSlice 的名称
响应
200 (EndpointSlice ):OK
401:Unauthorized
list
列举或监测 EndpointSlice 类别的对象
HTTP 请求
GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (EndpointSliceList ): OK
401:Unauthorized
list
列举或监测 EndpointSlice 类别的对象
HTTP 请求
GET /apis/discovery.k8s.io/v1/endpointslices
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (EndpointSliceList ):OK
401:Unauthorized
create
创建 EndpointSlice
HTTP 请求
POST /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
参数
响应
200 (EndpointSlice ):OK
201 (EndpointSlice ):Created
202 (EndpointSlice ):Accepted
401:Unauthorized
update
替换指定的 EndpointSlice
HTTP 请求
PUT /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
name (路径参数 ):string, 必需
EndpointSlice 的名称
响应
200 (EndpointSlice ):OK
201 (EndpointSlice ):Created
401:Unauthorized
patch
部分更新指定的 EndpointSlice
HTTP 请求
PATCH /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
name (路径参数 ): string, 必需
EndpointSlice 的名称
force (查询参数 ):boolean
force
响应
200 (EndpointSlice ):OK
201 (EndpointSlice ):Created
401:Unauthorized
delete
删除 EndpointSlice
HTTP 请求
DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
name (路径参数 ):string, 必需
EndpointSlice 的名称
响应
200 (Status ):OK
202 (Status ):Accepted
401:Unauthorized
deletecollection
删除 EndpointSlice 的集合
HTTP 请求
DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
参数
limit (查询参数 ):integer
limit
响应
200 (Status ):OK
401:Unauthorized
5.2.4 - Ingress
Ingress 是允许入站连接到达后端定义的端点的规则集合。
apiVersion: networking.k8s.io/v1
import "k8s.io/api/networking/v1"
Ingress
Ingress 是允许入站连接到达后端定义的端点的规则集合。
Ingress 可以配置为向服务提供外部可访问的 URL、负载均衡流量、终止 SSL、提供基于名称的虚拟主机等。
IngressSpec
IngressSpec 描述用户希望存在的 Ingress。
defaultBackend (IngressBackend )
defaultBackend 是负责处理与任何规则都不匹配的请求的后端。
如果未指定 rules,则必须指定 defaultBackend。
如果未设置 defaultBackend,则不符合任何 rules 的请求的处理将由 Ingress 控制器决定。
ingressClassName (string)
ingressClassName 是 IngressClass 集群资源的名称。
Ingress 控制器实现使用此字段来了解它们是否应该通过传递连接(控制器 -> IngressClass -> Ingress 资源)为该
Ingress 资源提供服务。尽管 kubernetes.io/ingress.class
注解(简单的常量名称)从未正式定义,
但它被 Ingress 控制器广泛支持,以在 Ingress 控制器和 Ingress 资源之间创建直接绑定。
新创建的 Ingress 资源应该优先选择使用该字段。但是,即使注解已被正式弃用,
出于向后兼容性的原因,Ingress 控制器仍应能够处理该注解(如果存在)。
rules ([]IngressRule)
Atomic: 将在合并期间被替换
rules 是用于配置 Ingress 的主机规则列表。如果未指定或没有规则匹配,则所有流量都将发送到默认后端。
IngressRule 表示将指定主机下的路径映射到相关后端服务的规则。
传入请求首先评估主机匹配,然后路由到与匹配的 IngressRuleValue 关联的后端。
rules.host (string)
host 是 RFC 3986 定义的网络主机的完全限定域名。请注意以下与 RFC 3986 中定义的 URI 的 “host” 部分的偏差:
不允许 IP。当前 IngressRuleValue 只能应用于父 Ingress Spec 中的 IP。
由于不允许使用端口,因此不理会 “:” 分隔符。
当前 Ingress 的端口隐式为:
:80
用于 http
:443
用于 https
这两种情况在未来都可能发生变化。入站请求在通过 IngressRuleValue 处理之前先进行 host 匹配。
如果主机未指定,Ingress 将根据指定的 IngressRuleValue 规则路由所有流量。
host 可以是 “精确“ 的,设置为一个不含终止句点的网络主机域名(例如 “foo.bar.com” ),
也可以是一个 “通配符”,设置为以单个通配符标签为前缀的域名(例如 “.foo.com”)。
通配符 “ ” 必须单独显示为第一个 DNS 标签,并且仅与单个标签匹配。
你不能单独使用通配符作为标签(例如,Host=“*”)。请求将按以下方式与主机字段匹配:
如果 host 是精确匹配的,则如果 http Host
标头等于 host 值,则请求与此规则匹配。
如果 host 是用通配符给出的,那么如果 HTTP Host
标头与通配符规则的后缀(删除第一个标签)相同,
则请求与此规则匹配。
rules.http (HTTPIngressRuleValue)
HTTPIngressRuleValue 是指向后端的 http 选择算符列表。例如 http://<host>/<path>?<searchpart> -> 后端
,
其中 url
的部分对应于 RFC 3986,此资源将用于匹配最后一个 “/” 之后和第一个 “?” 之前的所有内容或 “#”。
tls ([]IngressTLS)
Atomic: 将在合并期间被替换
tls 表示 TLS 配置。目前,Ingress 仅支持一个 TLS 端口 443。
如果此列表的多个成员指定了不同的主机,如果实现 Ingress 的 Ingress 控制器支持 SNI,
则它们将根据通过 SNI TLS 扩展指定的主机名在同一端口上多路复用。
IngressTLS 描述与 Ingress 相关的传输层安全性。
tls.hosts ([]string)
Atomic: 将在合并期间被替换
hosts 是 TLS 证书中包含的主机列表。
此列表中的值必须与 tlsSecret 中使用的名称匹配。
默认为实现此 Ingress 的负载均衡控制器的通配符主机设置(如果未指定)。
tls.secretName (string)
secretName 是用于终止端口 443 上 TLS 通信的 Secret 的名称。
字段是可选的,以允许仅基于 SNI 主机名的 TLS 路由。
如果侦听器中的 SNI 主机与入口规则使用的 “Host” 标头字段冲突,则 SNI 主机用于终止,Host 标头的值用于路由。
IngressBackend
IngressBackend 描述给定服务和端口的所有端点。
resource (TypedLocalObjectReference )
resource 是对 Ingress 对象所在命名空间中另一个 Kubernetes 资源的引用。
如果指定了 resource,则不得指定 service.name 和 service.port。
此字段是一个与 service
互斥的设置。
service (IngressServiceBackend)
service 引用一个 Service 作为后端。此字段是一个与 resource
互斥的设置。
IngressServiceBackend 引用一个 Kubernetes Service 作为后端。
name 是引用的服务。服务必须与 Ingress 对象位于同一命名空间中。
service.port (ServiceBackendPort)
所引用的服务的端口。IngressServiceBackend 需要端口名或端口号。
ServiceBackendPort 是被引用的服务的端口。
service.port.name (string)
name 是服务上的端口名称。此字段是一个与 number
互斥的设置。
service.port.number (int32)
number 是服务上的数字形式端口号(例如 80)。此字段是一个与 name
互斥的设置。
IngressStatus
IngressStatus 描述 Ingress 的当前状态。
loadBalancer (IngressLoadBalancerStatus)
loadBalancer 包含负载均衡器的当前状态。
IngressLoadBalancerStatus 表示负载均衡器的状态。
loadBalancer.ingress ([]IngressLoadBalancerIngress)
原子性:将在合并期间被替换
ingress 是一个包含负载均衡器入口点的列表。
IngressLoadBalancerIngress 表示负载均衡器入口点的状态。
loadBalancer.ingress.hostname (string)
hostname 是为基于 DNS 的负载平衡器入口点所设置的主机名。
loadBalancer.ingress.ip (string)
ip 是为基于 IP 的负载平衡器入口点设置的 IP。
loadBalancer.ingress.ports ([]IngressPortStatus)
Atomic: 将在合并期间被替换
ports 提供有关此 LoadBalancer 公开端口的信息。
IngressPortStatus 表示服务端口的错误情况
loadBalancer.ingress.ports.protocol (string),必需
protocol 是入栈端口的协议。支持的值为:“TCP”、“UDP”、“SCTP”。
loadBalancer.ingress.ports.error (string)
error 用来记录服务端口的问题。错误的格式应符合以下规则:
应在此文件中指定内置错误码,并且错误码应使用驼峰法命名。
特定于云驱动的错误码名称必须符合 foo.example.com/CamelCase
格式。
IngressList
IngressList 是 Ingress 的集合。
items ([]Ingress ),必需
items 是 Ingress 的列表。
操作
get
读取指定的 Ingress
HTTP 请求
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
参数
name (路径参数 ):string,必需
Ingress 的名称。
响应
200 (Ingress ): OK
401: Unauthorized
get
读取指定 Ingress 状态
HTTP 请求
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
参数
响应
200 (Ingress ): OK
401: Unauthorized
list
列出或监测 Ingress 类型对象
HTTP 请求
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (IngressList ): OK
401: Unauthorized
list
列出或监测 Ingress 类型对象
HTTP 请求
GET /apis/networking.k8s.io/v1/ingresses
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (IngressList ): OK
401: Unauthorized
create
创建一个 Ingress
HTTP 请求
POST /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses
参数
响应
200 (Ingress ): OK
201 (Ingress ): Created
202 (Ingress ): Accepted
401: Unauthorized
update
替换指定的 Ingress
HTTP 请求
PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
参数
响应
200 (Ingress ): OK
201 (Ingress ): Created
401: Unauthorized
update
替换指定 Ingress 的状态
HTTP 请求
PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
参数
响应
200 (Ingress ): OK
201 (Ingress ): Created
401: Unauthorized
patch
部分更新指定的 Ingress
HTTP 请求
PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
参数
force (查询参数 ): boolean
force
响应
200 (Ingress ): OK
201 (Ingress ): Created
401: Unauthorized
patch
部分更新指定 Ingress 的状态
HTTP 请求
PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status
参数
force (查询参数 ): boolean
force
响应
200 (Ingress ): OK
201 (Ingress ): Created
401: Unauthorized
delete
删除一个 Ingress
HTTP 请求
DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Ingress 的集合
HTTP 请求
DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.2.5 - IngressClass
IngressClass 代表 Ingress 的类,被 Ingress 的规约引用。
apiVersion: networking.k8s.io/v1
import "k8s.io/api/networking/v1"
IngressClass
IngressClass 代表 Ingress 的类,被 Ingress 的规约引用。
ingressclass.kubernetes.io/is-default-class
注解可以用来标明一个 IngressClass 应该被视为默认的 Ingress 类。
当某个 IngressClass 资源将此注解设置为 true 时,
没有指定类的新 Ingress 资源将被分配到此默认类。
IngressClassSpec
IngressClassSpec 提供有关 Ingress 类的信息。
controller (string)
controller 是指应该处理此类的控制器名称。
这允许由同一控制器控制不同“口味”。例如,对于同一个实现的控制器你可能有不同的参数。
此字段应该指定为长度不超过 250 个字符的域前缀路径,例如 “acme.io/ingress-controller”。
该字段是不可变的。
parameters (IngressClassParametersReference)
parameters 是指向控制器中包含额外配置的自定义资源的链接。
如果控制器不需要额外的属性,这是可选的。
IngressClassParametersReference 标识一个 API 对象。这可以用来指定一个集群或者命名空间范围的资源
parameters.name (string),必需
name 是被引用资源的名称。
parameters.apiGroup (string)
apiGroup 是被引用资源的组。
如果未指定 apiGroup,则被指定的 kind 必须在核心 API 组中。
对于任何其他第三方类型,apiGroup 是必需的。
parameters.namespace (string)
namespace 是被引用资源的命名空间。
当范围被设置为 “namespace” 时,此字段是必需的;
当范围被设置为 “Cluster” 时,此字段必须不设置。
parameters.scope (string)
scope 表示是否引用集群或者命名空间范围的资源。
这可以设置为“集群”(默认)或者“命名空间”。
IngressClassList
IngressClassList 是 IngressClasses 的集合。
操作
get
读取指定的 IngressClass
HTTP 请求
GET /apis/networking.k8s.io/v1/ingressclasses/{name}
参数
name (路径参数 ):string,必需
IngressClass 的名称
响应
200 (IngressClass ): OK
401: Unauthorized
list
列出或监视 IngressClass 类型的对象
HTTP 请求
GET /apis/networking.k8s.io/v1/ingressclasses
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (IngressClassList ): OK
401: Unauthorized
create
创建一个 IngressClass
HTTP 请求
POST /apis/networking.k8s.io/v1/ingressclasses
参数
响应
200 (IngressClass ): OK
201 (IngressClass ): Created
202 (IngressClass ): Accepted
401: Unauthorized
update
替换指定的 IngressClass
HTTP 请求
PUT /apis/networking.k8s.io/v1/ingressclasses/{name}
参数
name (路径参数 ):string,必需
IngressClass 的名称
响应
200 (IngressClass ): OK
201 (IngressClass ): Created
401: Unauthorized
patch
部分更新指定的 IngressClass
HTTP 请求
PATCH /apis/networking.k8s.io/v1/ingressclasses/{name}
参数
name (路径参数 ):string,必需
IngressClass 的名称
force (查询参数 ):boolean
force
响应
200 (IngressClass ): OK
201 (IngressClass ): Created
401: Unauthorized
delete
删除一个 IngressClass
HTTP 请求
DELETE /apis/networking.k8s.io/v1/ingressclasses/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 IngressClass 的集合
DELETE /apis/networking.k8s.io/v1/ingressclasses
参数
limit (查询参数 ):integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.3 - 配置和存储资源
5.3.1 - ConfigMap
ConfigMap 包含供 Pod 使用的配置数据。
apiVersion: v1
import "k8s.io/api/core/v1"
ConfigMap
ConfigMap 包含供 Pod 使用的配置数据。
apiVersion : v1
kind : ConfigMap
binaryData (map[string][]byte)
binaryData 包含二进制数据。
每个键必须由字母、数字、“-”、“_” 或 “.” 组成。
binaryData 可以包含不在 UTF-8 范围中的字节序列。
binaryData 中存储的键不得与 data 字段中的键重叠,这在验证过程中是强制要求。
使用此字段需要 apiserver 和 kubelet 的版本高于 1.10。
data (map[string]string)
data 包含配置数据。
每个键必须由字母、数字、“-”、“_” 或 “.” 组成。
如果值包含非 UTF-8 字节序列,则必须使用 binaryData 字段。
data 中存储的键不得与 binaryData 字段中的键重叠,这在验证过程中是强制要求。
immutable (boolean)
如果 immutable 设为 true,
则确保不会更新 ConfigMap 中存储的数据(只能修改对象元数据)。
如果未设为 true,则可以随时修改此字段。
默认为 nil。
ConfigMapList
ConfigMapList 是包含 ConfigMap 对象列表的资源。
apiVersion : v1
kind : ConfigMapList
操作
get
读取指定的 ConfigMap
HTTP 请求
GET /api/v1/namespaces/{namespace}/configmaps/{name}
参数
响应
200 (ConfigMap ): OK
401: Unauthorized
list
列出或观测类别为 ConfigMap 的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/configmaps
参数
响应
200 (ConfigMapList ): OK
401: Unauthorized
list
列出或观测类别为 ConfigMap 的对象
HTTP 请求
GET /api/v1/configmaps
参数
响应
200 (ConfigMapList ): OK
401: Unauthorized
create
创建 ConfigMap
HTTP 请求
POST /api/v1/namespaces/{namespace}/configmaps
参数
响应
200 (ConfigMap ): OK
201 (ConfigMap ): Created
202 (ConfigMap ): Accepted
401: Unauthorized
update
替换指定的 ConfigMap
HTTP 请求
PUT /api/v1/namespaces/{namespace}/configmaps/{name}
参数
响应
200 (ConfigMap ): OK
201 (ConfigMap ): Created
401: Unauthorized
patch
部分更新指定的 ConfigMap
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/configmaps/{name}
参数
响应
200 (ConfigMap ): OK
201 (ConfigMap ): Created
401: Unauthorized
delete
删除 ConfigMap
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/configmaps/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ConfigMap 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/configmaps
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.2 - Secret
Secret 包含某些类别的秘密数据。
apiVersion: v1
import "k8s.io/api/core/v1"
Secret
Secret 包含某些类别的秘密数据。
data 字段值的总字节必须小于 MaxSecretSize 字节。
apiVersion : v1
kind : Secret
SecretList
SecretList 是 Secret 的列表。
apiVersion : v1
kind : SecretList
操作
get
读取指定的 Secret
HTTP 请求
GET /api/v1/namespaces/{namespace}/secrets/{name}
参数
响应
200 (Secret ): OK
401: Unauthorized
list
列出或观测类别为 Secret 的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/secrets
参数
响应
200 (SecretList ): OK
401: Unauthorized
list
列出或观测类别为 Secret 的对象
HTTP 请求
GET /api/v1/secrets
参数
响应
200 (SecretList ): OK
401: Unauthorized
create
创建 Secret
HTTP 请求
POST /api/v1/namespaces/{namespace}/secrets
参数
响应
200 (Secret ): OK
201 (Secret ): Created
202 (Secret ): Accepted
401: Unauthorized
update
替换指定的 Secret
HTTP 请求
PUT /api/v1/namespaces/{namespace}/secrets/{name}
参数
响应
200 (Secret ): OK
201 (Secret ): Created
401: Unauthorized
patch
部分更新指定的 Secret
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/secrets/{name}
参数
响应
200 (Secret ): OK
201 (Secret ): Created
401: Unauthorized
delete
删除 Secret
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/secrets/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Secret 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/secrets
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.3 - CSIDriver
CSIDriver 抓取集群上部署的容器存储接口(CSI)卷驱动有关的信息。
apiVersion: storage.k8s.io/v1
import "k8s.io/api/storage/v1"
CSIDriver
CSIDriver 抓取集群上部署的容器存储接口(CSI)卷驱动有关的信息。
Kubernetes 挂接/解除挂接控制器使用此对象来决定是否需要挂接。
Kubelet 使用此对象决定挂载时是否需要传递 Pod 信息。
CSIDriver 对象未划分命名空间。
CSIDriverSpec
CSIDriverSpec 是 CSIDriver 的规约。
fsGroupPolicy (string)
fsGroupPolicy 定义底层卷是否支持在挂载之前更改卷的所有权和权限。
有关更多详细信息,请参考特定的 FSGroupPolicy 值。
此字段在 Kubernetes 1.29 版本之前不可变更,现在可变更。
默认为 ReadWriteOnceWithFSType,这会检查每个卷,以决定 Kubernetes 是否应修改卷的所有权和权限。
采用默认策略时,如果定义了 fstype 且卷的访问模式包含 ReadWriteOnce,将仅应用定义的 fsGroup。
podInfoOnMount (boolean)
如果 podInfoOnMount 设为 true,则表示在挂载操作期间这个 CSI 卷驱动需要更多的
Pod 信息(例如 podName 和 podUID 等)。
如果设为 false,则挂载时将不传递 Pod 信息。默认为 false。
CSI 驱动将 podInfoOnMount 指定为驱动部署的一部分。
如果为 true,Kubelet 将在 CSI NodePublishVolume() 调用中作为 VolumeContext 传递 Pod 信息。
CSI 驱动负责解析和校验作为 VolumeContext 传递进来的信息。
如果 podInfoOnMount 设为 true,将传递以下 VolumeConext。
此列表可能变大,但将使用前缀。
"csi.storage.k8s.io/pod.name": pod.name
"csi.storage.k8s.io/pod.namespace": pod.namespace
"csi.storage.k8s.io/pod.uid": string(pod.UID)
"csi.storage.k8s.io/ephemeral":
如果此卷是 CSIVolumeSource 定义的一个临时内联卷,则为 “true”,否则为 “false”
“csi.storage.k8s.io/ephemeral” 是 Kubernetes 1.16 中一个新的功能特性。
只有同时支持 “Persistent” 和 “Ephemeral” VolumeLifecycleMode 的驱动,此字段才是必需的。
其他驱动可以保持禁用 Pod 信息或忽略此字段。
由于 Kubernetes 1.15 不支持此字段,所以在这类集群上部署驱动时,只能支持一种模式。
该部署就决定了是哪种模式,例如通过驱动的命令行参数。
此字段在 Kubernetes 1.29 版本之前不可变更,现在可变更。
requiresRepublish (boolean)
requiresRepublish 表示 CSI 驱动想要 NodePublishVolume
被周期性地调用,
以反映已挂载卷中的任何可能的变化。
此字段默认为 false。
注:成功完成对 NodePublishVolume 的初始调用后,对 NodePublishVolume 的后续调用只应更新卷的内容。
新的挂载点将不会被运行的容器察觉。
seLinuxMount (boolean)
seLinuxMount 指定 CSI 驱动是否支持 "-o context" 挂载选项。
当值为 “true” 时,CSI 驱动必须确保该 CSI 驱动提供的所有卷可以分别用不同的 -o context
选项进行挂载。
这对于将卷作为块设备上的文件系统或作为独立共享卷提供的存储后端来说是典型的方法。
当 Kubernetes 挂载在 Pod 中使用的已显式设置 SELinux 上下文的 ReadWriteOncePod 卷时,
将使用 "-o context=xyz" 挂载选项调用 NodeStage / NodePublish。
未来可能会扩展到其他的卷访问模式(AccessModes)。在任何情况下,Kubernetes 都会确保该卷仅使用同一 SELinux 上下文进行挂载。
当值为 “false” 时,Kubernetes 不会将任何特殊的 SELinux 挂载选项传递给驱动。
这通常用于代表更大共享文件系统的子目录的卷。
默认为 “false”。
storageCapacity (boolean)
如果设为 true,则 storageCapacity 表示 CSI 卷驱动希望 Pod 调度时考虑存储容量,
驱动部署将通过创建包含容量信息的 CSIStorageCapacity 对象来报告该存储容量。
部署驱动时可以立即启用这个检查。
这种情况下,只有此驱动部署已发布某些合适的 CSIStorageCapacity 对象,
才会继续制备新的卷,然后进行绑定。
换言之,可以在未设置此字段或此字段为 false 的情况下部署驱动,
并且可以在发布存储容量信息后再修改此字段。
此字段在 Kubernetes 1.22 及更早版本中不可变更,但现在可以变更。
tokenRequests ([]TokenRequest)
原子性:将在合并期间被替换
tokenRequests 表示 CSI 驱动需要供挂载卷所用的 Pod 的服务帐户令牌,进行必要的鉴权。
Kubelet 将在 CSI NodePublishVolume 调用中传递 VolumeContext 中的令牌。
CSI 驱动应解析和校验以下 VolumeContext:
"csi.storage.k8s.io/serviceAccount.tokens": {
"<audience>": {
"token": <token>,
"expirationTimestamp": <expiration timestamp in RFC3339>,
},
...
}
注:每个 tokenRequest 中的受众应该不同,且最多有一个令牌是空字符串。
要在令牌过期后接收一个新的令牌,requiresRepublish 可用于周期性地触发 NodePublishVolume。
tokenRequest 包含一个服务帐户令牌的参数。
tokenRequests.audience (string),必需
audience 是 “TokenRequestSpec” 中令牌的目标受众。
它默认为 kube apiserver 的受众。
volumeLifecycleModes ([]string)
集合:唯一值将在合并期间被保留
volumeLifecycleModes 定义这个 CSI 卷驱动支持哪种类别的卷。
如果列表为空,则默认值为 “Persistent”,这是 CSI 规范定义的用法,
并通过常用的 PV/PVC 机制在 Kubernetes 中实现。
另一种模式是 “Ephemeral”。
在这种模式下,在 Pod 规约中用 CSIVolumeSource 以内联方式定义卷,其生命周期与该 Pod 的生命周期相关联。
驱动必须感知到这一点,因为只有针对这种卷才会接收到 NodePublishVolume 调用。
有关实现此模式的更多信息,请参阅
https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html 。
驱动可以支持其中一种或多种模式,将来可能会添加更多模式。
此字段处于 Beta 阶段。此字段不可变更。
CSIDriverList
CSIDriverList 是 CSIDriver 对象的集合。
操作
get
读取指定的 CSIDriver
HTTP 请求
GET /apis/storage.k8s.io/v1/csidrivers/{name}
参数
name (路径参数 ): string,必需
CSIDriver 的名称。
pretty (查询参数 ): string
pretty
响应
200 (CSIDriver ): OK
401: Unauthorized
list
列出或观测类别为 CSIDriver 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1/csidrivers
参数
响应
200 (CSIDriverList ): OK
401: Unauthorized
create
创建 CSIDriver
HTTP 请求
POST /apis/storage.k8s.io/v1/csidrivers
参数
响应
200 (CSIDriver ): OK
201 (CSIDriver ): Created
202 (CSIDriver ): Accepted
401: Unauthorized
update
替换指定的 CSIDriver
HTTP 请求
PUT /apis/storage.k8s.io/v1/csidrivers/{name}
参数
响应
200 (CSIDriver ): OK
201 (CSIDriver ): Created
401: Unauthorized
patch
部分更新指定的 CSIDriver
HTTP 请求
PATCH /apis/storage.k8s.io/v1/csidrivers/{name}
参数
响应
200 (CSIDriver ): OK
201 (CSIDriver ): Created
401: Unauthorized
delete
删除 CSIDriver
HTTP 请求
DELETE /apis/storage.k8s.io/v1/csidrivers/{name}
参数
响应
200 (CSIDriver ): OK
202 (CSIDriver ): Accepted
401: Unauthorized
deletecollection
删除 CSIDriver 的集合
HTTP 请求
DELETE /apis/storage.k8s.io/v1/csidrivers
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.4 - CSINode
CSINode 包含节点上安装的所有 CSI 驱动有关的信息。
apiVersion: storage.k8s.io/v1
import "k8s.io/api/storage/v1"
CSINode
CSINode 包含节点上安装的所有 CSI 驱动有关的信息。CSI 驱动不需要直接创建 CSINode 对象。
只要这些驱动使用 node-driver-registrar 边车容器,kubelet 就会自动为 CSI 驱动填充 CSINode 对象,
作为 kubelet 插件注册操作的一部分。CSINode 的名称与节点名称相同。
如果不存在此对象,则说明该节点上没有可用的 CSI 驱动或 Kubelet 版本太低无法创建该对象。
CSINode 包含指向相应节点对象的 OwnerReference。
CSINodeSpec
CSINodeSpec 包含一个节点上安装的所有 CSI 驱动规约有关的信息。
drivers ([]CSINodeDriver),必需
补丁策略:按照键 name
合并
映射:键 name
的唯一值将在合并过程中保留
drivers 是节点上存在的所有 CSI 驱动的信息列表。如果列表中的所有驱动均被卸载,则此字段可以为空。
CSINodeDriver 包含一个节点上安装的一个 CSI 驱动规约有关的信息。
drivers.nodeID (string),必需
从驱动角度来看,这是节点的 nodeID。
对于未与节点共享相同命名法的存储系统,此字段使得 Kubernetes 能够与之进行通信。
例如,Kubernetes 可能将给定节点视为 "node1",但存储系统可以将同一节点视为 "nodeA"。
当 Kubernetes 向存储系统发出一条命令将一个卷挂接到特定的节点时,
它可以藉此字段使用存储系统所理解的 ID 引用节点名称,例如使用 “nodeA” 而不是 “node1”。
此字段是必需的。
drivers.allocatable (VolumeNodeResources)
allocatable 表示一个节点上可供调度的卷资源。此字段处于 beta 阶段。
VolumeNodeResources 是调度卷时所用的一组资源限制。
drivers.topologyKeys ([]string)
原子性:合并期间将被替换
topologyKeys 是驱动支持的键的列表。
在集群上初始化一个驱动时,该驱动将提供一组自己理解的拓扑键
(例如 “company.com/zone”、“company.com/region”)。
在一个节点上初始化一个驱动时,该驱动将提供相同的拓扑键和值。
Kubelet 将在其自己的节点对象上将这些拓扑键暴露为标签。
当 Kubernetes 进行拓扑感知的制备时,可以使用此列表决定应从节点对象中检索哪些标签并传回驱动。
不同的节点可以使用不同的拓扑键。
如果驱动不支持拓扑,则此字段可以为空。
CSINodeList
CSINodeList 是 CSINode 对象的集合。
操作
get
读取指定的 CSINode
HTTP 请求
GET /apis/storage.k8s.io/v1/csinodes/{name}
参数
name (路径参数 ): string,必需
CSINode 的名称
pretty (查询参数 ): string
pretty
响应
200 (CSINode ): OK
401: Unauthorized
list
列出或观测类别为 CSINode 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1/csinodes
参数
响应
200 (CSINodeList ): OK
401: Unauthorized
create
创建 CSINode
HTTP 请求
POST /apis/storage.k8s.io/v1/csinodes
参数
响应
200 (CSINode ): OK
201 (CSINode ): Created
202 (CSINode ): Accepted
401: Unauthorized
update
替换指定的 CSINode
HTTP 请求
PUT /apis/storage.k8s.io/v1/csinodes/{name}
参数
响应
200 (CSINode ): OK
201 (CSINode ): Created
401: Unauthorized
patch
部分更新指定的 CSINode
HTTP 请求
PATCH /apis/storage.k8s.io/v1/csinodes/{name}
参数
响应
200 (CSINode ): OK
201 (CSINode ): Created
401: Unauthorized
delete
删除 CSINode
HTTP 请求
DELETE /apis/storage.k8s.io/v1/csinodes/{name}
参数
响应
200 (CSINode ): OK
202 (CSINode ): Accepted
401: Unauthorized
deletecollection
删除 CSINode 的集合
HTTP 请求
DELETE /apis/storage.k8s.io/v1/csinodes
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.5 - CSIStorageCapacity
CSIStorageCapacity 存储一个 CSI GetCapacity 调用的结果。
apiVersion: storage.k8s.io/v1
import "k8s.io/api/storage/v1"
CSIStorageCapacity
CSIStorageCapacity 存储一个 CSI GetCapacity 调用的结果。
对于给定的 StorageClass,此结构描述了特定拓扑段中可用的容量。
当考虑在哪里实例化新的 PersistentVolume 时可以使用此项。
例如,此结构可以描述如下内容:
“standard” 的 StorageClass 容量为 “1234 GiB”,可用于 “topology.kubernetes.io/zone=us-east1”
“localssd” 的 StorageClass 容量为 “10 GiB”,可用于 “kubernetes.io/hostname=knode-abc123”
以下三种情况均暗示了某些组合没有可用的容量:
不存在拓扑和存储类名称合适的对象
这种对象存在,但容量未设置
这种对象存在,但容量为零
这些对象的制作方可以决定哪种方法更合适。
当 CSI 驱动选择使用 CSIDriverSpec.StorageCapacity 进行容量感知调度时,kube-scheduler 会使用这些对象。
该调度器将 MaximumVolumeSize 与 pending 卷的请求大小进行比较,以过滤掉不合适的节点。
如果未设置 MaximumVolumeSize,则回退为与不太精确的容量(Capacity)进行比较。
如果还是未设置,则该调度器假定容量不足并尝试某些其他节点。
storageClassName (string),必需
storageClassName 是已报告容量所对应的 StorageClass 的名称。
它必须满足与 StorageClass 对象名称相同的要求(非空,DNS 子域名)。
如果该对象不再存在,则 CSIStorageCapacity 对象将被废弃且应由创建者移除。
此字段不可变更。
capacity (Quantity )
capacity 是 CSI 驱动在其 GetCapacityResponse 中为 GetCapacityRequest 报告的值,其拓扑和参数与之前的字段匹配。
该语义目前(CSI 规范 1.2)定义为:可用于制备卷的可用存储容量(单位为字节)。
如果未设置,则该信息目前不可用。
maximumVolumeSize (Quantity )
maximumVolumeSize 是 CSI 驱动在其 GetCapacityResponse 中为 GetCapacityRequest 报告的值,其拓扑和参数与之前的字段匹配。
自从 CSI 规范 1.4.0 起,这定义为 CreateVolumeRequest.capacity_range.required_bytes
字段中可以使用的最大值,
以便用 GetCapacityRequest 中相同的参数创建一个卷。
Kubernetes API 中的相应值是卷声明中的 ResourceRequirements.Requests。
CSIStorageCapacityList
CSIStorageCapacityList 是 CSIStorageCapacity 对象的集合。
操作
get
读取指定的 CSIStorageCapacity
HTTP 请求
GET /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
参数
响应
200 (CSIStorageCapacity ): OK
401: Unauthorized
list
列出或观测类别为 CSIStorageCapacity 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities
参数
响应
200 (CSIStorageCapacityList ): OK
401: Unauthorized
list
列出或观测类别为 CSIStorageCapacity 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1/csistoragecapacities
参数
响应
200 (CSIStorageCapacityList ): OK
401: Unauthorized
create
创建 CSIStorageCapacity
HTTP 请求
POST /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities
参数
响应
200 (CSIStorageCapacity ): OK
201 (CSIStorageCapacity ): Created
202 (CSIStorageCapacity ): Accepted
401: Unauthorized
update
替换指定的 CSIStorageCapacity
HTTP 请求
PUT /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
参数
响应
200 (CSIStorageCapacity ): OK
201 (CSIStorageCapacity ): Created
401: Unauthorized
patch
部分更新指定的 CSIStorageCapacity
HTTP 请求
PATCH /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
参数
响应
200 (CSIStorageCapacity ): OK
201 (CSIStorageCapacity ): Created
401: Unauthorized
delete
删除 CSIStorageCapacity
HTTP 请求
DELETE /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 CSIStorageCapacity 的集合
HTTP 请求
DELETE /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.6 - PersistentVolumeClaim
PersistentVolumeClaim 是用户针对一个持久卷的请求和申领。
apiVersion: v1
import "k8s.io/api/core/v1"
PersistentVolumeClaim
PersistentVolumeClaim 是用户针对一个持久卷的请求和申领。
PersistentVolumeClaimSpec
PersistentVolumeClaimSpec 描述存储设备的常用参数,并支持通过 source 来设置特定于提供商的属性。
resources (VolumeResourceRequirements)
resources 表示卷应拥有的最小资源。
如果启用了 RecoverVolumeExpansionFailure 功能特性,则允许用户指定这些资源要求,
此值必须低于之前的值,但必须高于申领的状态字段中记录的容量。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes#resources
VolumeResourceRequirements 描述了卷的存储资源要求。
Beta 级别
dataSource (TypedLocalObjectReference )
dataSource 字段可用于二选一:
如果制备器或外部控制器可以支持指定的数据源,则它将根据指定数据源的内容创建新的卷。
当 AnyVolumeDataSource 特性门控被启用时,dataSource 内容将被复制到 dataSourceRef,
当 dataSourceRef.namespace 未被指定时,dataSourceRef 内容将被复制到 dataSource。
如果名字空间被指定,则 dataSourceRef 不会被复制到 dataSource。
dataSourceRef (TypedObjectReference)
dataSourceRef 指定一个对象,当需要非空卷时,可以使用它来为卷填充数据。
此字段值可以是来自非空 API 组(非核心对象)的任意对象,或一个 PersistentVolumeClaim 对象。
如果设置了此字段,则仅当所指定对象的类型与所安装的某些卷填充器或动态制备器匹配时,卷绑定才会成功。
此字段将替换 dataSource 字段的功能,因此如果两个字段非空,其取值必须相同。
为了向后兼容,当未在 dataSourceRef 中指定名字空间时,
如果(dataSource 和 dataSourceRef)其中一个字段为空且另一个字段非空,则两个字段将被自动设为相同的值。
在 dataSourceRef 中指定名字空间时,dataSource 未被设置为相同的值且必须为空。
dataSource 和 dataSourceRef 之间有三个重要的区别:
dataSource 仅允许两个特定类型的对象,而 dataSourceRef 允许任何非核心对象以及 PersistentVolumeClaim 对象。
dataSource 忽略不允许的值(这类值会被丢弃),而 dataSourceRef 保留所有值并在指定不允许的值时产生错误。
dataSource 仅允许本地对象,而 dataSourceRef 允许任意名字空间中的对象。
(Beta) 使用此字段需要启用 AnyVolumeDataSource 特性门控。
(Alpha) 使用 dataSourceRef 的名字空间字段需要启用 CrossNamespaceVolumeDataSource 特性门控。
dataSourceRef.kind (string),必需
kind 是正被引用的资源的类型。
dataSourceRef.apiGroup (string)
apiGroup 是正被引用的资源的组。如果 apiGroup 未被指定,则指定的 kind 必须在核心 API 组中。
对于任何第三方类型,apiGroup 是必需的。
dataSourceRef.namespace (string)
namespace 是正被引用的资源的名字空间。请注意,当指定一个名字空间时,
在引用的名字空间中 gateway.networking.k8s.io/ReferenceGrant 对象是必需的,
以允许该名字空间的所有者接受引用。有关详细信息,请参阅 ReferenceGrant 文档。
(Alpha) 此字段需要启用 CrossNamespaceVolumeDataSource 特性门控。
volumeAttributesClassName (string)
volumeAttributesClassName
可用于设置此申领所使用的 VolumeAttributesClass。
如果设置了此字段,CSI 驱动程序将使用相应 VolumeAttributesClass 中定义的属性创建或更新卷。
与 storageClassName
的用途不同,此属性可以在创建申领之后更改。空字符串值表示不会将 VolumeAttributesClass
应用于申领,但一旦设置,就不允许将此字段重置为空字符串。如果未指定且 PersistentVolumeClaim 未绑定,
则持久卷控制器将设置默认的 VolumeAttributesClass(如果存在)。
如果 VolumeAttributesClass 所引用的资源不存在,则此 PersistentVolumeClaim 将被设置为 Pending 状态,
如 modifyVolumeStatus
字段所示,直到存在此类资源。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/storage/volume-attributes-classes/
(Beta)使用此字段需要启用 VolumeAttributesClass 特性门控(默认情况下关闭)。
PersistentVolumeClaimStatus
PersistentVolumeClaimStatus 是持久卷申领的当前状态。
allocatedResourceStatuses (map[string]string)
allocatedResourceStatuses 存储为给定 PVC 而调整大小的资源的状态。键名遵循标准的 Kubernetes 标签语法。
有效值为:
未加前缀的键:
自定义资源必须使用实现定义的带前缀的名称,如 "example.com/my-custom-resource"。
除上述值之外,未加前缀或具有 kubernetes.io
前缀的键被视为保留键,因此不能使用。
ClaimResourceStatus 可以处于以下任一状态:
ControllerResizeInProgress:大小调整控制器开始在控制平面中调整卷大小时所设置的状态。
ControllerResizeFailed:大小调整控制器出现致命错误导致大小调整失败时所设置的状态。
NodeResizePending:大小调整控制器已完成对卷大小的调整但需要在节点上进一步调整卷大小时的状态。
NodeResizeInProgress:kubelet 开始调整卷大小时所设置的状态。
NodeResizeFailed:kubelet 在出现致命错误而导致大小调整失败时所设置的状态。
临时错误不会设置 NodeResizeFailed。
例如:如果扩展 PVC 以获取更多的容量,则此字段可以是以下状态之一:
pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress"
pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed"
pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending"
pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress"
pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed"
当未设置此字段时,表示没有针对给定 PVC 执行大小调整操作。
如果控制器收到具有先前未知的 resourceName 或 ClaimResourceStatus 的 PVC 更新,
则该控制器应忽略此项更新才能按预期工作。例如,仅负责调整卷容量大小的控制器应忽略更改与
PVC 关联的其他合法资源的 PVC 更新。
这是一个 Alpha 字段,需要启用 RecoverVolumeExpansionFailure 功能特性。
allocatedResources (map[string]Quantity )
allocatedResources 跟踪分配给 PVC 的资源,包括其容量。键名遵循标准的 Kubernetes 标签语法。
有效值为:
未加前缀的键:
自定义资源必须使用实现定义的带前缀的名称,如 "example.com/my-custom-resource"。
除上述值之外,未加前缀或具有 kubernetes.io
前缀的键被视为保留键,因此不能使用。
当出现卷扩充操作请求时,此字段可能大于实际的容量。
就存储配额而言,将使用 allocatedResources 和 PVC.spec.resources 二者中的更大值。
如果未设置 allocatedResources,则 PVC.spec.resources 单独用于配额计算。
如果减小一个卷扩充容量请求,则仅当没有正在进行的扩充操作且实际卷容量等于或小于请求的容量时,
才会减小 allocatedResources。
如果控制器收到具有先前未知的 resourceName 的 PVC 更新,则该控制器应忽略此项更新才能按预期工作。
例如,仅负责调整卷容量大小的控制器应忽略更改与 PVC 关联的其他合法资源的 PVC 更新。
这是一个 Alpha 字段,需要启用 RecoverVolumeExpansionFailure 功能特性。
conditions ([]PersistentVolumeClaimCondition)
补丁策略:按照键 type
合并
映射:基于 name
键的唯一值将在合并期间被保留
conditions 是持久卷声明的当前的状况。
如果正在调整底层持久卷的大小,则状况将被设为 “Resizing”。
PersistentVolumeClaimCondition 包含有关 PVC 状态的详细信息。
conditions.status (string),必需
conditions.type (string),必需
conditions.lastProbeTime (Time)
lastProbeTime 是我们探测 PVC 状况的时间。
Time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
为 time 包提供的许多工厂方法提供了包装类。
conditions.lastTransitionTime (Time)
lastTransitionTime 是状况从一个状态转换为另一个状态的时间。
Time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
为 time 包提供的许多工厂方法提供了包装类。
conditions.message (string)
message 是人类可读的消息,指示有关上一次转换的详细信息。
conditions.reason (string)
reason 是唯一的,它应该是一个机器可理解的简短字符串,指明上次状况转换的原因。
如果它报告 “Resizing”,则意味着正在调整底层持久卷的大小。
currentVolumeAttributesClassName (string)
currentVolumeAttributesClassName
是 PVC 所使用的 VolumeAttributesClass 的当前名称。
这是一个 Beta 级别字段,需要启用 VolumeAttributesClass 特性(默认情况下处于关闭状态)。
modifyVolumeStatus (ModifyVolumeStatus)
modifyVolumeStatus
表示 ControllerModifyVolume 操作的状态对象。
如果未设置,则表示没有尝试执行任何修改卷操作。这是一个测试字段,需要启用
VolumeAttributesClass 特性(默认关闭)。
ModifyVolumeStatus 表示 ControllerModifyVolume 操作的状态对象
modifyVolumeStatus.status (string),必需
status 是 ControllerModifyVolume 操作的状态。它可以是以下任一状态:
Pending
Pending 表示由于未满足要求(例如指定的 VolumeAttributesClass 不存在)而无法修改 PersistentVolumeClaim。
InProgress
InProgress 表示卷正在被修改。
Infeasible
Infeasible 表示请求已被 CSI 驱动程序拒绝,因为请求无效。要解决此错误,需要指定有效的 VolumeAttributesClass。
注意:将来可能会添加新状态。消费者应当检查未知状态,并适当地处理失败情况。
modifyVolumeStatus.targetVolumeAttributesClassName (string)
targetVolumeAttributesClassName
是当前正在协调的 PVC 的 VolumeAttributesClass 的名称
PersistentVolumeClaimList
PersistentVolumeClaimList 是 PersistentVolumeClaim 各项的列表。
操作
get
读取指定的 PersistentVolumeClaim
HTTP 请求
GET /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}
参数
响应
200 (PersistentVolumeClaim ): OK
401: Unauthorized
get
读取指定的 PersistentVolumeClaim 的状态
HTTP 请求
GET /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status
参数
响应
200 (PersistentVolumeClaim ): OK
401: Unauthorized
list
列出或观测类别为 PersistentVolumeClaim 的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/persistentvolumeclaims
参数
响应
200 (PersistentVolumeClaimList ): OK
401: Unauthorized
list
列出或观测类别为 PersistentVolumeClaim 的对象
HTTP 请求
GET /api/v1/persistentvolumeclaims
参数
响应
200 (PersistentVolumeClaimList ): OK
401: Unauthorized
create
创建 PersistentVolumeClaim
HTTP 请求
POST /api/v1/namespaces/{namespace}/persistentvolumeclaims
参数
响应
200 (PersistentVolumeClaim ): OK
201 (PersistentVolumeClaim ): Created
202 (PersistentVolumeClaim ): Accepted
401: Unauthorized
update
替换指定的 PersistentVolumeClaim
HTTP 请求
PUT /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}
参数
响应
200 (PersistentVolumeClaim ): OK
201 (PersistentVolumeClaim ): Created
401: Unauthorized
update
替换指定的 PersistentVolumeClaim 的状态
HTTP 请求
PUT /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status
参数
响应
200 (PersistentVolumeClaim ): OK
201 (PersistentVolumeClaim ): Created
401: Unauthorized
patch
部分更新指定的 PersistentVolumeClaim
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}
参数
响应
200 (PersistentVolumeClaim ): OK
201 (PersistentVolumeClaim ): Created
401: Unauthorized
patch
部分更新指定的 PersistentVolumeClaim 的状态
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status
参数
响应
200 (PersistentVolumeClaim ): OK
201 (PersistentVolumeClaim ): Created
401: Unauthorized
delete
删除 PersistentVolumeClaim
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}
参数
响应
200 (PersistentVolumeClaim ): OK
202 (PersistentVolumeClaim ): Accepted
401: Unauthorized
deletecollection
删除 PersistentVolumeClaim 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/persistentvolumeclaims
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.7 - PersistentVolume
PersistentVolume (PV) 是管理员制备的一个存储资源。
apiVersion: v1
import "k8s.io/api/core/v1"
PersistentVolume
PersistentVolume (PV) 是管理员制备的一个存储资源。它类似于一个节点。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes
apiVersion : v1
kind : PersistentVolume
PersistentVolumeSpec
PersistentVolumeSpec 是持久卷的规约。
nodeAffinity (VolumeNodeAffinity)
nodeAffinity 定义可以从哪些节点访问此卷的约束限制。此字段会影响调度使用此卷的 Pod。
VolumeNodeAffinity 定义可以从哪些节点访问此卷的约束限制。
storageClassName (string)
storageClassName 是这个持久卷所属于的 StorageClass 的名称。
空值意味着此卷不属于任何 StorageClass。
volumeAttributesClassName (string)
此持久卷所属的 VolumeAttributesClass 的名称。不能为空。
当此字段未设置时,表示此卷不属于任何 VolumeAttributesClass。
此字段是可变更的,在某个卷已被成功更新为新类后可以由 CSI 驱动更改此字段。对于未绑定的 PersistentVolume,
volumeAttributesClassName 将在绑定过程中与未绑定的 PersistentVolumeClaim 进行匹配。
这是一个 Beta 字段,需要启用 VolumeAttributesClass 特性(默认关闭)。
Local
持久卷
azureDisk (AzureDiskVolumeSource)
azureDisk 表示主机上挂载的 Azure Data Disk 并绑定挂载到 Pod 上。
azureDisk 表示主机上挂载的 Azure Data Disk 并绑定挂载到 Pod 上。
azureDisk.diskName (string),必需
diskName 是 Blob 存储中数据盘的名称。
azureDisk.diskURI (string),必需
diskURI 是 Blob 存储中数据盘的 URI。
azureDisk.cachingMode (string)
cachingMode 是主机缓存(Host Caching)模式:None、Read Only、Read Write。
azureDisk.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
azureDisk.kind (string)
kind 预期值包括:
Shared:每个存储帐户多个 Blob 磁盘;
Dedicated:每个存储帐户单个 Blob 磁盘;
Managed:azure 托管的数据盘(仅托管的可用性集合中)。
默认为 Shared。
azureDisk.readOnly (boolean)
readOnly 默认为 false(读/写)。此处 readOnly 将在 VolumeMounts 中强制设置 readOnly。
azureFile (AzureFilePersistentVolumeSource)
azureDisk 表示主机上挂载并绑定挂载到 Pod 上的 Azure File Service。
azureFile 表示主机上挂载的并绑定挂载到 Pod 上的 Azure File Service。
azureFile.secretName (string),必需
secretName 是包含 Azure 存储账号名称和主键的 Secret 的名称。
azureFile.shareName (string),必需
shareName 是 azure Share Name。
azureFile.readOnly (boolean)
readOnly 默认为 false(读/写)。此处 readOnly 将在 VolumeMounts 中强制设置 readOnly。
azureFile.secretNamespace (string)
secretNamespace 是包含 Azure 存储账号名称和主键的 Secret 的名字空间,默认与 Pod 相同。
cephfs (CephFSPersistentVolumeSource)
cephfs 表示在主机上挂载的 Ceph FS,该文件系统挂载与 Pod 的生命周期相同。
表示在 Pod 的生命周期内持续的 Ceph Filesystem 挂载。cephfs 卷不支持所有权管理或 SELinux 重新打标签。
cinder (CinderPersistentVolumeSource)
cinder 表示 kubelet 主机上挂接和挂载的 Cinder 卷。更多信息:
https://examples.k8s.io/mysql-cinder-pd/README.md
表示 OpenStack 中的一个 Cinder 卷资源。挂载到一个容器之前 Cinder 卷必须已经存在。
该卷还必须与 kubelet 位于相同的地区中。cinder 卷支持所有权管理和 SELinux 重新打标签。
cinder.secretRef (SecretReference)
secretRef 是可选的。指向 Secret 对象,内含的参数用于连接到 OpenStack。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
cinder.secretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
cinder.secretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
csi (CSIPersistentVolumeSource)
csi 表示由一个外部 CSI 驱动处理的存储(Beta 特性)。
表示由一个外部 CSI 卷驱动管理的存储(Beta 特性)。
csi.controllerExpandSecretRef (SecretReference)
controllerExpandSecretRef 是对包含敏感信息的 Secret 对象的引用,
该 Secret 会被传递到 CSI 驱动以完成 CSI ControllerExpandVolume 调用。
此字段是可选的,且如果不需要 Secret,则此字段可以为空。
如果 Secret 对象包含多个 Secret,则所有 Secret 被传递。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
csi.controllerExpandSecretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
csi.controllerExpandSecretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
csi.controllerPublishSecretRef (SecretReference)
controllerPublishSecretRef 是对包含敏感信息的 Secret 对象的引用,
该 Secret 会被传递到 CSI 驱动以完成 CSI ControllerPublishVolume 和 ControllerUnpublishVolume 调用。
此字段是可选的,且如果不需要 Secret,则此字段可以为空。
如果 Secret 对象包含多个 Secret,则所有 Secret 被传递。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
csi.controllerPublishSecretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
csi.controllerPublishSecretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
csi.fsType (string)
要挂载的 fsType。必须是主机操作系统所支持的文件系统类型之一。例如 “ext4”、“xfs”、“ntfs”。
csi.nodeExpandSecretRef (SecretReference)
nodeExpandSecretRef 是对包含敏感信息的 Secret 对象的引用,
从而传递到 CSI 驱动以完成 CSI NodeExpandVolume 调用。
此字段是可选的,且如果不需要 Secret,则此字段可以为空。
如果 Secret 对象包含多个 Secret,则所有 Secret 被传递。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
csi.nodeExpandSecretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
csi.nodeExpandSecretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
csi.nodePublishSecretRef (SecretReference)
nodePublishSecretRef 是对包含敏感信息的 Secret 对象的引用,
以传递到 CSI 驱动以完成 CSI NodePublishVolume 和 NodeUnpublishVolume 调用。
此字段是可选的,且如果不需要 Secret,则此字段可以为空。
如果 Secret 对象包含多个 Secret,则所有 Secret 被传递。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
csi.nodePublishSecretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
csi.nodePublishSecretRef.namespace (string)
namespace 定义了 Secret 名称必须唯一的空间。
csi.nodeStageSecretRef (SecretReference)
nodeStageSecretRef 是对包含敏感信息的 Secret 对象的引用,
从而传递到 CSI 驱动以完成 CSI NodeStageVolume、NodeStageVolume 和 NodeUnstageVolume 调用。
此字段是可选的,且如果不需要 Secret,则此字段可以为空。
如果 Secret 对象包含多个 Secret,则所有 Secret 被传递。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
csi.nodeStageSecretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
csi.nodeStageSecretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
flexVolume (FlexPersistentVolumeSource)
flexVolume 表示使用基于 exec 的插件制备/挂接的通用卷资源。
FlexPersistentVolumeSource 表示使用基于 exec 的插件制备/挂接的通用持久卷资源。
flexVolume.driver (string),必需
driver 是此卷所使用的驱动的名称。
flexVolume.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”、“ntfs”。默认的文件系统取决于 flexVolume 脚本。
flexVolume.options (map[string]string)
options 是可选的。此字段包含额外的命令选项(如果有)。
flexVolume.readOnly (boolean)
readOnly 是可选的。默认为 false(读/写)。
此处 readOnly 将在 VolumeMounts 中强制设置 readOnly。
flexVolume.secretRef (SecretReference)
secretRef 是可选的。secretRef 是对包含敏感信息的 Secret 对象的引用,从而传递到插件脚本。
如果未指定 Secret 对象,则此字段可以为空。如果 Secret 对象包含多个 Secret,则所有 Secret 被传递到插件脚本。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
flexVolume.secretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
flexVolume.secretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
flocker (FlockerVolumeSource)
flocker 表示挂接到 kubelet 的主机并暴露给 Pod 供其使用的 Flocker 卷。
这取决于所运行的 Flocker 控制服务。
表示 Flocker 代理挂载的 Flocker 卷。应设置且仅设置 datasetName 和 datasetUUID 中的一个。
Flocker 卷不支持所有权管理或 SELinux 重新打标签。
flocker.datasetName (string)
datasetName 是存储为元数据的数据集的名称。针对 Flocker 有关数据集的名称应视为已弃用。
flocker.datasetUUID (string)
datasetUUID 是数据集的 UUID。这是 Flocker 数据集的唯一标识符。
glusterfs (GlusterfsPersistentVolumeSource)
glusterfs 表示关联到主机并暴露给 Pod 的 Glusterfs 卷。由管理员配置。
更多信息:https://examples.k8s.io/volumes/glusterfs/README.md
表示在 Pod 生命周期内一直存在的 Glusterfs 挂载卷。Glusterfs 卷不支持属主管理或 SELinux 重标记。
iscsi (ISCSIPersistentVolumeSource)
iscsi 表示挂接到 kubelet 的主机随后暴露给 Pod 的一个 ISCSI Disk 资源。由管理员进行制备。
ISCSIPersistentVolumeSource 表示一个 ISCSI 磁盘。ISCSI 卷只能以读/写一次进行挂载。ISCSI 卷支持所有权管理和 SELinux 重新打标签。
iscsi.iqn (string),必需
iqn 是目标 iSCSI 限定名称(Target iSCSI Qualified Name)。
iscsi.lun (int32),必需
lun 是 iSCSI 目标逻辑单元号(iSCSI Target Lun)。
iscsi.targetPortal (string),必需
targetPortal 是 iSCSI 目标门户(iSCSI Target Portal)。
如果不是默认端口(通常是 TCP 端口 860 和 3260),则 Portal 为 IP 或 ip_addr:port。
iscsi.chapAuthDiscovery (boolean)
chapAuthDiscovery 定义是否支持 iSCSI Discovery CHAP 身份认证。
iscsi.chapAuthSession (boolean)
chapAuthSession 定义是否支持 iSCSI Session CHAP 身份认证。
iscsi.fsType (string)
fsType 是你要挂载的卷的文件系统类型。提示:确保主机操作系统支持此文件系统类型。
例如:“ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#iscsi
iscsi.initiatorName (string)
initiatorName 是自定义的 iSCSI 发起程序名称(iSCSI Initiator Name)。
如果同时用 iscsiInterface 指定 initiatorName,将为连接创建新的 iSCSI 接口 <目标门户>:<卷名称>。
iscsi.iscsiInterface (string)
iscsiInterface 是使用 iSCSI 传输的接口名称。默认为 “default”(tcp)。
iscsi.portals ([]string)
原子:将在合并期间被替换
portals 是 iSCSI 目标门户列表(iSCSI Target Portal List)。
如果不是默认端口(通常是 TCP 端口 860 和 3260),则 Portal 为 IP 或 ip_addr:port。
iscsi.readOnly (boolean)
此处 readOnly 将在 VolumeMounts 中强制设置 readOnly。默认为 false。
iscsi.secretRef (SecretReference)
secretRef 是 iSCSI 目标和发起程序身份认证所用的 CHAP Secret。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
iscsi.secretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
iscsi.secretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
photonPersistentDisk (PhotonPersistentDiskVolumeSource)
photonPersistentDisk 表示 kubelet 主机上挂接和挂载的 PhotonController 持久磁盘。
表示 Photon Controller 持久磁盘资源。
photonPersistentDisk.pdID (string),必需
pdID 是标识 Photon Controller 持久磁盘的 ID。
photonPersistentDisk.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
portworxVolume (PortworxVolumeSource)
portworxVolume 表示 kubelet 主机上挂接和挂载的 portworx 卷。
PortworxVolumeSource 表示 Portworx 卷资源。
portworxVolume.volumeID (string),必需
volumeID 唯一标识 Portworx 卷。
portworxVolume.fsType (string)
fSType 表示要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”。如果未指定,则隐式推断为 “ext4”。
portworxVolume.readOnly (boolean)
readOnly 默认为 false(读/写)。此处 readOnly 将在 VolumeMounts 中强制设置 readOnly。
quobyte (QuobyteVolumeSource)
quobyte 表示在共享 Pod 生命周期的主机上挂载的 Quobyte。
表示在 Pod 的生命周期内持续的 Quobyte 挂载。Quobyte 卷不支持所有权管理或 SELinux 重新打标签。
quobyte.registry (string),必需
registry 表示将一个或多个 Quobyte Registry 服务指定为 host:port
对的字符串形式(多个条目用英文逗号分隔),用作卷的中央注册表。
quobyte.volume (string),必需
volume 是一个字符串,通过名称引用已创建的 Quobyte 卷。
quobyte.group (string)
group 是将卷访问映射到的组。默认为无组。
quobyte.readOnly (boolean)
此处 readOnly 将强制使用只读权限挂载 Quobyte 卷。默认为 false。
quobyte.tenant (string)
后台中拥有给定 Quobyte 卷的租户。用于动态制备的 Quobyte 卷,其值由插件设置。
quobyte.user (string)
user 是将卷访问映射到的用户。默认为 serivceaccount 用户。
scaleIO (ScaleIOPersistentVolumeSource)
scaleIO 表示 Kubernetes 节点上挂接和挂载的 ScaleIO 持久卷。
ScaleIOPersistentVolumeSource 表示一个 ScaleIO 持久卷。
scaleIO.secretRef (SecretReference),必需
secretRef 引用包含 ScaleIO 用户和其他敏感信息的 Secret。如果未提供此项,则 Login 操作将失败。
SecretReference 表示对某 Secret 的引用,其中包含足够的信息来访问任何名字空间中的 Secret。
scaleIO.secretRef.name (string)
name 在名字空间内是唯一的,以引用一个 Secret 资源。
scaleIO.secretRef.namespace (string)
namespace 指定一个名字空间,Secret 名称在该名字空间中必须唯一。
scaleIO.system (string),必需
system 是 ScaleIO 中所配置的存储系统的名称。
scaleIO.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”、“ntfs”。默认为 “xfs”。
scaleIO.protectionDomain (string)
protectionDomain 是 ScaleIO 保护域(ScaleIO Protection Domain)的名称,用于已配置的存储。
scaleIO.readOnly (boolean)
readOnly 默认为 false(读/写)。此处 readOnly 将在 VolumeMounts 中强制设置 readOnly。
scaleIO.sslEnabled (boolean)
sslEnabled 是启用/禁用与网关(Gateway)进行 SSL 通信的标志,默认为 false。
scaleIO.storageMode (string)
storageMode 指示卷所用的存储应是 ThickProvisioned 或 ThinProvisioned。
默认为 ThinProvisioned。
scaleIO.storagePool (string)
storagePool 是与保护域关联的 ScaleIO Storage Pool。
scaleIO.volumeName (string)
volumeName 是在与此卷源关联的 ScaleIO 系统中已创建的卷的名称。
PersistentVolumeStatus
PersistentVolumeStatus 是持久卷的当前状态。
lastPhaseTransitionTime (Time)
lastPhaseTransitionTime 是从一个阶段转换到另一个阶段的时间,每次卷阶段转换时都会自动重置为当前时间。
Time 是 time.Time 的包装器,支持正确编组为 YAML 和 JSON,它为 time 包提供的许多工厂方法提供了包装器。
PersistentVolumeList
PersistentVolumeList 是 PersistentVolume 各项的列表。
操作
get
读取指定的 PersistentVolume
HTTP 请求
GET /api/v1/persistentvolumes/{name}
参数
name (路径参数 ): string,必需
PersistentVolume 的名称。
pretty (查询参数 ): string
pretty
响应
200 (PersistentVolume ): OK
401: Unauthorized
get
读取指定的 PersistentVolume 的状态
HTTP 请求
GET /api/v1/persistentvolumes/{name}/status
参数
name (路径参数 ): string,必需
PersistentVolume 的名称。
pretty (查询参数 ): string
pretty
响应
200 (PersistentVolume ): OK
401: Unauthorized
list
列出或观测类别为 PersistentVolume 的对象
HTTP 请求
GET /api/v1/persistentvolumes
参数
响应
200 (PersistentVolumeList ): OK
401: Unauthorized
create
创建 PersistentVolume
HTTP 请求
POST /api/v1/persistentvolumes
参数
响应
200 (PersistentVolume ): OK
201 (PersistentVolume ): Created
202 (PersistentVolume ): Accepted
401: Unauthorized
update
替换指定的 PersistentVolume
HTTP 请求
PUT /api/v1/persistentvolumes/{name}
参数
响应
200 (PersistentVolume ): OK
201 (PersistentVolume ): Created
401: Unauthorized
update
替换指定的 PersistentVolume 的状态
HTTP 请求
PUT /api/v1/persistentvolumes/{name}/status
参数
响应
200 (PersistentVolume ): OK
201 (PersistentVolume ): Created
401: Unauthorized
patch
部分更新指定的 PersistentVolume
HTTP 请求
PATCH /api/v1/persistentvolumes/{name}
参数
响应
200 (PersistentVolume ): OK
201 (PersistentVolume ): Created
401: Unauthorized
patch
部分更新指定的 PersistentVolume 的状态
HTTP 请求
PATCH /api/v1/persistentvolumes/{name}/status
参数
响应
200 (PersistentVolume ): OK
201 (PersistentVolume ): Created
401: Unauthorized
delete
删除 PersistentVolume
HTTP 请求
DELETE /api/v1/persistentvolumes/{name}
参数
响应
200 (PersistentVolume ): OK
202 (PersistentVolume ): Accepted
401: Unauthorized
deletecollection
删除 PersistentVolume 的集合
HTTP 请求
DELETE /api/v1/persistentvolumes
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.8 - StorageClass
StorageClass 为可以动态制备 PersistentVolume 的存储类描述参数。
apiVersion: storage.k8s.io/v1
import "k8s.io/api/storage/v1"
StorageClass
StorageClass 为可以动态制备 PersistentVolume 的存储类描述参数。
StorageClass 是不受名字空间作用域限制的;按照 etcd 设定的存储类的名称位于 ObjectMeta.Name 中。
allowedTopologies ([]TopologySelectorTerm)
原子性:将在合并期间被替换
allowedTopologies 限制可以动态制备卷的节点拓扑。每个卷插件定义其自己支持的拓扑规约。
空的 TopologySelectorTerm 列表意味着没有拓扑限制。
只有启用 VolumeScheduling 功能特性的服务器才能使用此字段。
拓扑选择器条件表示标签查询的结果。
一个 null 或空的拓扑选择器条件不会匹配任何对象。各个条件的要求按逻辑与的关系来计算。
此选择器作为 NodeSelectorTerm 所提供功能的子集。这是一个 Alpha 特性,将来可能会变更。
mountOptions ([]string)
原子性:将在合并期间被替换
mountOptions 控制此存储类动态制备的 PersistentVolume 的挂载配置,例如 ["ro", "soft"]。
针对此字段无合法性检查 —— 如果有一个选项无效,则这些 PV 的挂载将失败。
parameters (map[string]string)
parameters 包含应创建此存储类卷的制备器的参数。
reclaimPolicy (string)
reclaimPolicy 控制此存储类动态制备的 PersistentVolume 的 reclaimPolicy。默认为 Delete。
volumeBindingMode (string)
volumeBindingMode 指示应该如何制备和绑定 PersistentVolumeClaim。
未设置时,将使用 VolumeBindingImmediate。
只有启用 VolumeScheduling 功能特性的服务器才能使用此字段。
StorageClassList
StorageClassList 是存储类的集合。
操作
get
读取指定的 StorageClass
HTTP 请求
GET /apis/storage.k8s.io/v1/storageclasses/{name}
参数
name (路径参数 ): string,必需
StorageClass 的名称。
pretty (查询参数 ): string
pretty
响应
200 (StorageClass ): OK
401: Unauthorized
list
列出或观测类别为 StorageClass 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1/storageclasses
参数
响应
200 (StorageClassList ): OK
401: Unauthorized
create
创建 StorageClass
HTTP 请求
POST /apis/storage.k8s.io/v1/storageclasses
参数
响应
200 (StorageClass ): OK
201 (StorageClass ): Created
202 (StorageClass ): Accepted
401: Unauthorized
update
替换指定的 StorageClass
HTTP 请求
PUT /apis/storage.k8s.io/v1/storageclasses/{name}
参数
响应
200 (StorageClass ): OK
201 (StorageClass ): Created
401: Unauthorized
patch
部分更新指定的 StorageClass
HTTP 请求
PATCH /apis/storage.k8s.io/v1/storageclasses/{name}
参数
响应
200 (StorageClass ): OK
201 (StorageClass ): Created
401: Unauthorized
delete
删除 StorageClass
HTTP 请求
DELETE /apis/storage.k8s.io/v1/storageclasses/{name}
参数
响应
200 (StorageClass ): OK
202 (StorageClass ): Accepted
401: Unauthorized
deletecollection
删除 StorageClass 的集合
HTTP 请求
DELETE /apis/storage.k8s.io/v1/storageclasses
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.9 - StorageVersionMigration v1alpha1
StorageVersionMigration 表示存储的数据向最新存储版本的一次迁移。
apiVersion: storagemigration.k8s.io/v1alpha1
import "k8s.io/api/storagemigration/v1alpha1"
StorageVersionMigration
StorageVersionMigration 表示将表示存储的数据向最新存储版本的一次迁移。
StorageVersionMigrationSpec
存储版本迁移的规约。
continueToken (string)
在 list 操作中用来获取下一批要迁移的对象时要所用的令牌。
当 .status.conditions
指示迁移处于 “Running” 状态时,用户可以使用此令牌检查迁移的进度。
resource (GroupVersionResource),必需
正在被迁移的资源。迁移程序向提供资源的端点发送请求。不可变更。
组、版本和资源的名称。
StorageVersionMigrationStatus
存储版本迁移的状态。
StorageVersionMigrationList
StorageVersionMigrationList 是 StorageVersionMigration 对象的集合。
操作
get
读取指定的 StorageVersionMigration
HTTP 请求
GET /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}
参数
响应
200 (StorageVersionMigration ): OK
401: Unauthorized
get
读取指定 StorageVersionMigration 的状态
HTTP 请求
GET /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}/status
参数
响应
200 (StorageVersionMigration ): OK
401: Unauthorized
list
列举或监视类别为 StorageVersionMigration 的对象
HTTP 请求
GET /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations
参数
响应
200 (StorageVersionMigrationList ): OK
401: Unauthorized
create
创建 StorageVersionMigration
HTTP 请求
POST /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations
参数
响应
200 (StorageVersionMigration ): OK
201 (StorageVersionMigration ): Created
202 (StorageVersionMigration ): Accepted
401: Unauthorized
update
替换指定的 StorageVersionMigration
HTTP 请求
PUT /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}
参数
响应
200 (StorageVersionMigration ): OK
201 (StorageVersionMigration ): Created
401: Unauthorized
update
替换指定 StorageVersionMigration 的状态
HTTP 请求
PUT /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}/status
参数
响应
200 (StorageVersionMigration ): OK
201 (StorageVersionMigration ): Created
401: Unauthorized
patch
部分更新指定的 StorageVersionMigration
HTTP 请求
PATCH /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}
参数
响应
200 (StorageVersionMigration ): OK
201 (StorageVersionMigration ): Created
401: Unauthorized
patch
部分更新指定 StorageVersionMigration 的状态
HTTP 请求
PATCH /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}/status
参数
响应
200 (StorageVersionMigration ): OK
201 (StorageVersionMigration ): Created
401: Unauthorized
delete
删除 StorageVersionMigration
HTTP 请求
DELETE /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 StorageVersionMigration 的集合
HTTP 请求
DELETE /apis/storagemigration.k8s.io/v1alpha1/storageversionmigrations
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.10 - Volume
Volume 表示 Pod 中一个有名字的卷,可以由 Pod 中的任意容器进行访问。
import "k8s.io/api/core/v1"
Volume
Volume 表示 Pod 中一个有名字的卷,可以由 Pod 中的任意容器进行访问。
暴露的持久卷
投射
configMap (ConfigMapVolumeSource)
configMap 表示应填充此卷的 configMap。
将 ConfigMap 适配到一个卷中。目标 ConfigMap 的 data 字段的内容将以文件的形式呈现在一个卷中,
使用 data 字段中的键名作为文件名,除非 items 元素中已经填充了由键名到路径的特定映射。
ConfigMap 卷支持所有权管理和 SELinux 重新打标签。
被引用资源的名称。此字段实际上是必需的,但由于向后兼容性,可以允许为空。
此类型的实例如果将此字段的值设为空,几乎可以肯定是错误的。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names
configMap.defaultMode (int32)
defaultMode 是可选的:默认情况下,模式位用于为已创建的文件设置权限。
必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。此字段默认为 0644。
路径内的目录不受此设置的影响。这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
configMap.items ([]KeyToPath )
原子:将在合并期间被替换
如果未指定 items,则所引用的 ConfigMap 的 data 字段中的每个键值对将作为一个文件被投射到卷中,
这个文件的名称是键名,而文件的内容是键的取值。
如果指定 items,则所列出的键将被投射到指定的路径中,且不会显示未列出的键。
如果指定的键不在 ConfigMap 中,则卷设置将出错,除非对应的键被标记为可选。
路径必须是相对路径,不能包含 “..” 路径,也不能以 “..” 开头。
secret (SecretVolumeSource)
secret 表示用来填充此卷的 Secret。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#secret
将 Secret 适配到一个卷中。
目标 Secret 的 data 字段的内容将以文件的形式呈现在一个卷中,使用 data 字段中的键名作为文件名。
Secret 卷支持所有权管理和 SELinux 重新打标签。
secret.defaultMode (int32)
defaultMode 是可选的:默认情况下,模式位用于为已创建的文件设置权限。
必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。此字段默认为 0644。
路径内的目录不受此设置的影响。
这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
secret.items ([]KeyToPath )
原子:将在合并期间被替换
如果未指定 items,则所引用的 Secret 的 data 字段中的每个键值对将作为一个文件被投射到卷中,
这个文件的名称是键名,而文件的内容是键的取值。
如果指定 items,则所列出的键将被投射到指定的路径中,且不会显示未列出的键。
如果指定的键不在 Secret 中,则卷设置将出错,除非对应的键被标记为可选。
路径必须是相对路径,不能包含 “..” 路径,也不能以 “..” 开头。
downwardAPI (DownwardAPIVolumeSource)
downwardAPI 表示有关 Pod 的 Downward API,用来填充此卷。
DownwardAPIVolumeSource 表示包含 Downward API 信息的一个卷。Downward API 卷支持所有权管理和 SELinux 重新打标签。
downwardAPI.defaultMode (int32)
可选:默认情况下,模式位用于已创建的文件。
必须是可选的:默认情况下,模式位用于为已创建的文件设置权限。
必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。此字段默认为 0644。
路径内的目录不受此设置的影响。这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
downwardAPI.items ([]DownwardAPIVolumeFile )
原子:将在合并期间被替换
items 是 Downward API 卷文件的列表。
本地/临时目录
持久卷
azureDisk (AzureDiskVolumeSource)
azureDisk 表示挂载到主机上并绑定挂载到 Pod 上的 Azure 数据盘。
azureDisk 表示挂载到主机上并绑定挂载到 Pod 上的 Azure 数据盘。
azureDisk.diskName (string),必需
diskName 是 Blob 存储中数据盘的名称。
azureDisk.diskURI (string),必需
diskURI 是 Blob 存储中数据盘的 URI。
azureDisk.cachingMode (string)
cachingMode 是主机缓存(Host Caching)模式:None、Read Only、Read Write。
azureDisk.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
azureDisk.kind (string)
kind 预期值包括:
Shared:每个存储帐户多个 Blob 磁盘;
Dedicated:每个存储帐户单个 Blob 磁盘;
Managed:azure 托管的数据盘(仅托管的可用性集合中)。
默认为 Shared。
azureDisk.readOnly (boolean)
readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
azureFile (AzureFileVolumeSource)
azureDisk 表示挂载到主机上并绑定挂载到 Pod 上的 Azure File Service。
azureFile 表示挂载到主机上并绑定挂载到 Pod 上的 Azure File Service。
azureFile.secretName (string),必需
secretName 是包含 Azure 存储账号名称和主键的 Secret 的名称。
azureFile.shareName (string),必需
shareName 是 Azure 共享名称。
azureFile.readOnly (boolean)
readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
cephfs (CephFSVolumeSource)
cephfs 表示在主机上挂载的 Ceph FS,该文件系统挂载与 Pod 的生命周期相同。
表示在 Pod 的生命周期内持续的 Ceph Filesystem 挂载。cephfs 卷不支持所有权管理或 SELinux 重新打标签。
ephemeral (EphemeralVolumeSource)
ephemeral 表示由一个集群存储驱动处理的卷。此卷的生命周期与定义该卷的 Pod 相关联。
Pod 启动前创建此卷,Pod 移除时删除此卷。
使用此字段的情形包括:
a) 仅在 Pod 运行时才需要此卷,
b) 需要从快照恢复或容量跟踪等正常卷的功能特性,
c) 通过存储类指定存储驱动,以及
d) 存储驱动支持通过 PersistentVolumeClaim 进行动态卷制备
(有关此卷类型和 PersistentVolumeClaim 之间连接的更多信息,请参考 EphemeralVolumeSource)。
对于持续时间超过单个 Pod 生命周期的卷,使用 PersistentVolumeClaim 或某种特定于供应商的 API。
如果打算以这种方式使用 CSI 驱动,则将 CSI 用于轻量级本地临时卷。更多的相关信息,请参考驱动文档。
一个 Pod 可以同时使用临时卷和持久卷这两种类别的卷。
表示由一个正常存储驱动处理的临时卷。
ephemeral.volumeClaimTemplate (PersistentVolumeClaimTemplate)
将用于创建独立的 PVC 以制备卷。
嵌入了 EphemeralVolumeSource 的 Pod 将是 PVC 的所有者,即 PVC 将与 Pod 一起删除。
PVC 的名称将是 <pod 名称>-<卷名称>
,其中 <卷名称>
是来自 PodSpec.Volumes
数组条目的名称。
如果串联的名称对于 PVC 无效(例如太长),则 Pod 验证将拒绝该 Pod。
如果具有此名称的现有 PVC 不属于此 Pod,则这一 PVC 将 不会 被用于此 Pod,以避免错误地使用不相关的卷。
如果出现这种情况,Pod 的启动操作会被阻塞直到不相关的 PVC 被移除。
如果 Pod 准备使用这样一个预先创建的 PVC,那么一旦此 Pod 出现,就必须更新 PVC,
将其属主引用指向该 Pod。通常没有必要这样做,但这对手动重构损坏的集群时可能很有用。
此字段是只读的,PVC 被创建后 Kubernetes 不会对其进行任何更改。
必需,不能为 nil。
PersistentVolumeClaimTemplate 用于作为 EphemeralVolumeSource 的一部分生成 PersistentVolumeClaim 对象。
ephemeral.volumeClaimTemplate.spec (PersistentVolumeClaimSpec ),必需
PersistentVolumeClaim 的规约。整个规约的内容将被原封不动地复制到从此模板创建的 PVC 中。
与 PersistentVolumeClaim 相同的字段在此处也有效。
ephemeral.volumeClaimTemplate.metadata (ObjectMeta )
可能包含一些标签和注解,在创建 PVC 时,这些数据会被复制到 PVC 中。
在验证期间,其他字段都不允许设置,即便设置也会在验证阶段被拒绝。
flexVolume (FlexVolumeSource)
flexVolume 表示使用基于 exec 的插件制备/挂接的通用卷资源。
flexVolume 表示使用基于 exec 的插件制备/挂接的通用卷资源。
flexVolume.driver (string),必需
driver 是供此卷使用的驱动的名称。
flexVolume.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。例如 “ext4”、“xfs”、“ntfs”。
默认的文件系统取决于 flexVolume 脚本。
flexVolume.options (map[string]string)
options 是可选的。此字段包含额外的命令选项(如果有)。
flexVolume.readOnly (boolean)
readOnly 是可选的。默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
flexVolume.secretRef (LocalObjectReference )
secretRef 是可选的。secretRef 是对包含敏感信息的 Secret 对象的引用,该 Secret 会被传递到插件脚本。
如果未指定 Secret 对象,则此字段可以为空。如果 Secret 对象包含多个 Secret,则所有 Secret 被传递到插件脚本。
flocker (FlockerVolumeSource)
flocker 表示挂接到一个 kubelet 主机的 Flocker 卷。Flocker 卷依赖于正在运行的 Flocker 控制服务。
表示 Flocker 代理挂载的 Flocker 卷。应设置一个且仅设置 datasetName 和 datasetUUID 中的一个。
Flocker 卷不支持所有权管理或 SELinux 重新打标签。
flocker.datasetName (string)
datasetName 是存储为元数据的数据集的名称。Flocker 数据集的名称应视为已弃用。
flocker.datasetUUID (string)
datasetUUID 是数据集的 UUID。这是 Flocker 数据集的唯一标识符。
iscsi (ISCSIVolumeSource)
iscsi 表示挂接到 kubelet 的主机随后暴露给 Pod 的一个 ISCSI Disk 资源。更多信息:
https://examples.k8s.io/volumes/iscsi/README.md
表示一个 ISCSI 磁盘。ISCSI 卷只能以读/写一次进行挂载。ISCSI 卷支持所有权管理和 SELinux 重新打标签。
iscsi.chapAuthDiscovery (boolean)
chapAuthDiscovery 定义是否支持 iSCSI Discovery CHAP 身份认证。
iscsi.chapAuthSession (boolean)
chapAuthSession 定义是否支持 iSCSI Session CHAP 身份认证。
iscsi.fsType (string)
fsType 是你要挂载的卷的文件系统类型。提示:确保主机操作系统支持此文件系统类型。
例如:“ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。更多信息:
https://kubernetes.io/zh-cn/docs/concepts/storage/volumes#iscsi
iscsi.initiatorName (string)
initiatorName 是自定义的 iSCSI 发起程序名称(iSCSI Initiator Name)。
如果同时用 iscsiInterface 指定 initiatorName,将为连接创建新的 iSCSI 接口 <目标门户>:<卷名称>。
iscsi.iscsiInterface (string)
iscsiInterface 是使用 iSCSI 传输的接口名称。默认为 “default”(tcp)。
iscsi.portals ([]string)
原子:将在合并期间被替换
portals 是 iSCSI 目标门户列表(iSCSI Target Portal List)。
如果不是默认端口(通常是 TCP 端口 860 和 3260),则 Portal 为 IP 或 ip_addr:port。
iscsi.readOnly (boolean)
此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。默认为 false。
iscsi.secretRef (LocalObjectReference )
secretRef 是 iSCSI 目标和发起程序身份认证所用的 CHAP Secret。
image (ImageVolumeSource)
image 表示一个在 kubelet 的主机上拉取并挂载的 OCI 对象(容器镜像或工件)。
其卷在 Pod 启动时根据提供的 PullPolicy 值进行解析:
Always:kubelet 始终尝试拉取此引用。如果拉取失败,容器创建将失败。
Never:kubelet 从不拉取此引用,只使用本地镜像或工件。如果引用不存在,容器创建将失败。
IfNotPresent:如果磁盘上尚不存在此引用,kubelet 执行拉取操作。若此引用不存在且拉取失败,则容器创建将失败。
如果 Pod 被删除并重新创建,此卷会被重新解析,这意味着在 Pod 重新创建时将可以访问新的远程内容。
在 Pod 启动期间解析或拉取镜像失败将导致容器无法启动,并可能显著增加延迟。
如果失败,将使用正常的卷回退机制进行重试,并输出 Pod 失败的原因和相关消息。
此卷可以挂载的对象类型由主机上的容器运行时实现负责定义,至少必须包含容器镜像字段所支持的所有有效类型。
OCI 对象将以只读方式被挂载到单个目录(spec.containers[*].volumeMounts.mountPath
)中。
在 Linux 上,容器运行时通常还会挂载阻止文件执行(noexec
)的卷。
不支持容器使用子路径挂载(spec.containers[*].volumeMounts.subpath
)。
spec.securityContext.fsGroupChangePolicy
字段对这种卷没有效果。
ImageVolumeSource 表示一个镜像卷资源。
photonPersistentDisk (PhotonPersistentDiskVolumeSource)
photonPersistentDisk 表示 kubelet 主机上挂接和挂载的 PhotonController 持久磁盘。
表示 Photon Controller 持久磁盘资源。
photonPersistentDisk.pdID (string),必需
pdID 是标识 Photon Controller 持久磁盘的 ID。
photonPersistentDisk.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。
例如 “ext4”、“xfs”、“ntfs”。如果未指定,则隐式推断为 “ext4”。
portworxVolume (PortworxVolumeSource)
portworxVolume 表示 kubelet 主机上挂接和挂载的 portworx 卷。
PortworxVolumeSource 表示 Portworx 卷资源。
portworxVolume.fsType (string)
fSType 表示要挂载的文件系统类型。必须是主机操作系统支持的文件系统类型。例如 “ext4”、“xfs”。
如果未指定,则隐式推断为 “ext4”。
portworxVolume.readOnly (boolean)
readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
quobyte (QuobyteVolumeSource)
quobyte 表示在共享 Pod 生命周期的主机上挂载的 Quobyte。
表示在 Pod 的生命周期内持续的 Quobyte 挂载。Quobyte 卷不支持所有权管理或 SELinux 重新打标签。
quobyte.registry (string),必需
registry 表示将一个或多个 Quobyte Registry 服务指定为 host:port 对的字符串形式
(多个条目用英文逗号分隔),用作卷的中央注册表。
quobyte.volume (string),必需
volume 是按名称引用已创建的 Quobyte 卷的字符串。
quobyte.group (string)
group 是将卷访问映射到的组。默认为无组。
quobyte.readOnly (boolean)
此处 readOnly 将强制使用只读权限挂载 Quobyte 卷。默认为 false。
quobyte.tenant (string)
tenant 拥有 Backend Used 中给定的 Quobyte 卷,随动态制备的 Quobyte 卷一起使用,值由插件设置。
quobyte.user (string)
user 是将卷访问映射到的用户。默认为 serivceaccount 用户。
scaleIO (ScaleIOVolumeSource)
scaleIO 表示 Kubernetes 节点上挂接和挂载的 ScaleIO 持久卷。
ScaleIOVolumeSource 表示一个 ScaleIO 持久卷。
scaleIO.secretRef (LocalObjectReference ),必需
secretRef 引用到 ScaleIO 用户的 Secret 和其他敏感信息。如果未提供此项,则 Login 操作将失败。
scaleIO.system (string),必需
system 是存储系统的名称,与 ScaleIO 中的配置相同。
scaleIO.fsType (string)
fsType 是要挂载的文件系统类型。必须是主机操作系统所支持的文件系统类型之一。例如 “ext4”、“xfs”、“ntfs”。默认为 “xfs”。
scaleIO.protectionDomain (string)
protectionDomain 是 ScaleIO 保护域(ScaleIO Protection Domain)的名称,用于已配置的存储。
scaleIO.readOnly (boolean)
readOnly 默认为 false(读/写)。此处的 readOnly 将强制设置卷挂载中的 readOnly 属性。
scaleIO.sslEnabled (boolean)
sslEnabled 标志启用/禁用与网关的 SSL 通信,默认为 false。
scaleIO.storageMode (string)
storageMode 指示卷所用的存储应是 ThickProvisioned 或 ThinProvisioned。默认为 ThinProvisioned。
scaleIO.storagePool (string)
storagePool 是与保护域关联的 ScaleIO Storage Pool。
scaleIO.volumeName (string)
volumeName 是在与此卷源关联的 ScaleIO 系统中已创建的卷的名称。
已弃用
gitRepo (GitRepoVolumeSource)
gitRepo 表示特定修订版本的 git 仓库。(注意:GitRepo 已被弃用。)如果与为某容器提速 Git 仓库,
可以先将 emptyDir 挂载到 InitContainer 上,由后者使用 git 克隆仓库,然后将 emptyDir 挂载到 Pod 的容器中。
表示用 Git 仓库的内容进行填充的一个卷。Git 仓库卷不支持所有权管理。Git 仓库卷支持 SELinux 重新打标签。
(注意:GitRepo 已被弃用。)如果与为某容器提速 Git 仓库,
可以先将 emptyDir 挂载到 InitContainer 上,由后者使用 git 克隆仓库,然后将 emptyDir 挂载到 Pod 的容器中。
gitRepo.repository (string),必需
repository 是仓库的 URL。
gitRepo.directory (string)
directory 是目标目录的名称。不得包含 “..” 或以 “..” 开头。如果提供了 “.”,则卷目录将是 Git 仓库。
否则,如果指定,卷将用给定名称的子目录中存放 Git 仓库。
gitRepo.revision (string)
revision 是指定修订版本的提交哈希值。
DownwardAPIVolumeFile
DownwardAPIVolumeFile 表示创建包含 Pod 字段的文件的信息。
path (string),必需
必需。path 是要创建的文件的相对路径名称。不得使用绝对路径,也不得包含 “..” 路径。
必须用 UTF-8 进行编码。相对路径的第一项不得用 “..” 开头。
fieldRef (ObjectFieldSelector )
必需。选择 Pod 的字段:仅支持注解、标签、名称、名字空间和 uid。
mode (int32)
可选:模式位用于设置文件的权限,必须是 0000 到 0777 之间的八进制值或 0 到 511 之间的十进制值。
YAML 既接受八进制值也接受十进制值,JSON 针对模式位需要十进制值。
如果未指定,则将使用卷 defaultMode。
这可能与影响文件模式的其他选项(如 fsGroup)有冲突,且结果可以是其他模式位也被设置。
resourceFieldRef (ResourceFieldSelector )
选择容器的资源:目前仅支持资源限制与请求(limits.cpu、limits.memory、requests.cpu 和 requests.memory)。
KeyToPath
将一个字符串键映射到卷中的一个路径。
5.3.11 - VolumeAttachment
VolumeAttachment 抓取将指定卷挂接到指定节点或从指定节点解除挂接指定卷的意图。
apiVersion: storage.k8s.io/v1
import "k8s.io/api/storage/v1"
VolumeAttachment
VolumeAttachment 抓取将指定卷挂接到指定节点或从指定节点解除挂接指定卷的意图。
VolumeAttachment 对象未划分命名空间。
VolumeAttachmentSpec
VolumeAttachmentSpec 是 VolumeAttachment 请求的规约。
VolumeAttachmentStatus
VolumeAttachmentStatus 是 VolumeAttachment 请求的状态。
attachError (VolumeError)
attachError 表示挂接操作期间遇到的最后一个错误,如果有。
此字段只能由完成挂接操作的实体(例如外部挂接器)进行设置。
VolumeError 抓取卷操作期间遇到的一个错误。
attachError.message (string)
message 表示挂接或解除挂接操作期间遇到的错误。
此字符串可以放入日志,因此它不应包含敏感信息。
attachError.time (Time)
遇到错误的时间。
time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
为 time 包提供的许多工厂方法提供了包装类。
detachError (VolumeError)
detachError 表示解除挂接操作期间遇到的最后一个错误,如果有。
此字段只能由完成解除挂接操作的实体(例如外部挂接器)进行设置。
VolumeError 抓取卷操作期间遇到的一个错误。
detachError.message (string)
message 表示挂接或解除挂接操作期间遇到的错误。
此字符串可以放入日志,因此它不应包含敏感信息。
detachError.time (Time)
time 表示遇到错误的时间。
time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
为 time 包提供的许多工厂方法提供了包装类。
VolumeAttachmentList
VolumeAttachmentList 是 VolumeAttachment 对象的集合。
操作
get
读取指定的 VolumeAttachment
HTTP 请求
GET /apis/storage.k8s.io/v1/volumeattachments/{name}
参数
name (路径参数 ): string,必需
VolumeAttachment 的名称
pretty (查询参数 ): string
pretty
响应
200 (VolumeAttachment ): OK
401: Unauthorized
get
读取指定的 VolumeAttachment 的状态
HTTP 请求
GET /apis/storage.k8s.io/v1/volumeattachments/{name}/status
参数
name (路径参数 ): string,必需
VolumeAttachment 的名称
pretty (查询参数 ): string
pretty
响应
200 (VolumeAttachment ): OK
401: Unauthorized
list
列出或观测类别为 VolumeAttachment 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1/volumeattachments
参数
响应
200 (VolumeAttachmentList ): OK
401: Unauthorized
create
创建 VolumeAttachment
HTTP 请求
POST /apis/storage.k8s.io/v1/volumeattachments
参数
响应
200 (VolumeAttachment ): OK
201 (VolumeAttachment ): Created
202 (VolumeAttachment ): Accepted
401: Unauthorized
update
替换指定的 VolumeAttachment
HTTP 请求
PUT /apis/storage.k8s.io/v1/volumeattachments/{name}
参数
响应
200 (VolumeAttachment ): OK
201 (VolumeAttachment ): Created
401: Unauthorized
update
替换指定的 VolumeAttachment 的状态
HTTP 请求
PUT /apis/storage.k8s.io/v1/volumeattachments/{name}/status
参数
响应
200 (VolumeAttachment ): OK
201 (VolumeAttachment ): Created
401: Unauthorized
patch
部分更新指定的 VolumeAttachment
HTTP 请求
PATCH /apis/storage.k8s.io/v1/volumeattachments/{name}
参数
响应
200 (VolumeAttachment ): OK
201 (VolumeAttachment ): Created
401: Unauthorized
patch
部分更新指定的 VolumeAttachment 的状态
HTTP 请求
PATCH /apis/storage.k8s.io/v1/volumeattachments/{name}/status
参数
响应
200 (VolumeAttachment ): OK
201 (VolumeAttachment ): Created
401: Unauthorized
delete
删除 VolumeAttachment
HTTP 请求
DELETE /apis/storage.k8s.io/v1/volumeattachments/{name}
参数
响应
200 (VolumeAttachment ): OK
202 (VolumeAttachment ): Accepted
401: Unauthorized
deletecollection
删除 VolumeAttachment 的集合
HTTP 请求
DELETE /apis/storage.k8s.io/v1/volumeattachments
参数
响应
200 (Status ): OK
401: Unauthorized
5.3.12 - VolumeAttributesClass v1beta1
VolumeAttributesClass 表示由 CSI 驱动所定义的可变更卷属性的规约。
apiVersion: storage.k8s.io/v1beta1
import "k8s.io/api/storage/v1beta1"
VolumeAttributesClass
VolumeAttributesClass 表示由 CSI 驱动所定义的可变更卷属性的规约。
此类可以在动态制备 PersistentVolumeClaim 期间被指定,
并且可以在制备之后在 PersistentVolumeClaim 规约中更改。
parameters (map[string]string)
parameters 保存由 CSI 驱动所定义的卷属性。这些值对 Kubernetes 是不透明的,被直接传递给 CSI 驱动。
下层存储驱动支持更改现有卷的这些属性,但 parameters 字段本身是不可变更的。
要触发一次卷更新,应该使用新的参数创建新的 VolumeAttributesClass,
并且应更新 PersistentVolumeClaim,使之引用新的 VolumeAttributesClass。
此字段是必需的,必须至少包含一个键/值对。键不能为空,参数最多 512 个,累计最大尺寸为 256K。
如果 CSI 驱动拒绝无效参数,则目标 PersistentVolumeClaim
的状态中 modifyVolumeStatus 字段将被设置为 “Infeasible”。
VolumeAttributesClassList
VolumeAttributesClassList 是 VolumeAttributesClass 对象的集合。
操作
get
读取指定的 VolumeAttributesClass
HTTP 请求
GET /apis/storage.k8s.io/v1beta1/volumeattributesclasses/{name}
参数
响应
200 (VolumeAttributesClass ): OK
401: Unauthorized
list
列举或监视类别为 VolumeAttributesClass 的对象
HTTP 请求
GET /apis/storage.k8s.io/v1beta1/volumeattributesclasses
参数
响应
200 (VolumeAttributesClassList ): OK
401: Unauthorized
create
创建 VolumeAttributesClass
HTTP 请求
POST /apis/storage.k8s.io/v1beta1/volumeattributesclasses
参数
响应
200 (VolumeAttributesClass ): OK
201 (VolumeAttributesClass ): Created
202 (VolumeAttributesClass ): Accepted
401: Unauthorized
update
替换指定的 VolumeAttributesClass
HTTP 请求
PUT /apis/storage.k8s.io/v1beta1/volumeattributesclasses/{name}
参数
响应
200 (VolumeAttributesClass ): OK
201 (VolumeAttributesClass ): Created
401: Unauthorized
patch
部分更新指定的 VolumeAttributesClass
HTTP 请求
PATCH /apis/storage.k8s.io/v1beta1/volumeattributesclasses/{name}
参数
响应
200 (VolumeAttributesClass ): OK
201 (VolumeAttributesClass ): Created
401: Unauthorized
delete
删除 VolumeAttributesClass
HTTP 请求
DELETE /apis/storage.k8s.io/v1beta1/volumeattributesclasses/{name}
参数
响应
200 (VolumeAttributesClass ): OK
202 (VolumeAttributesClass ): Accepted
401: Unauthorized
deletecollection
删除 VolumeAttributesClass 的集合
HTTP 请求
DELETE /apis/storage.k8s.io/v1beta1/volumeattributesclasses
参数
响应
200 (Status ): OK
401: Unauthorized
5.4 - 身份认证资源
5.4.1 - ServiceAccount
ServiceAccount 将以下内容绑定在一起:1. 用户可以理解的名称,也可能是外围系统理解的身份标识 2. 可以验证和授权的主体 3. 一组 Secret。
apiVersion: v1
import "k8s.io/api/core/v1"
ServiceAccount
ServiceAccount 将以下内容绑定在一起:
用户可以理解的名称,也可能是外围系统理解的身份标识
可以验证和授权的主体
一组 Secret
ServiceAccountList
ServiceAccountList 是 ServiceAccount 对象的列表
操作
get
读取指定的 ServiceAccount
HTTP 请求
GET /api/v1/namespaces/{namespace}/serviceaccounts/{name}
参数
name (路径参数 ): string, 必需
ServiceAccount 的名称。
响应
200 (ServiceAccount ): OK
401: Unauthorized
list
列出或监控 ServiceAccount 类型的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/serviceaccounts
参数
limit (查询参数 ): integer
limit
sendInitialEvents (查询参数 ): boolean
sendInitialEvents
watch (查询参数 ): boolean
watch
响应
200 (ServiceAccountList ): OK
401: Unauthorized
list
列出或监控 ServiceAccount 类型的对象
HTTP 请求
GET /api/v1/serviceaccounts
参数
limit (查询参数 ): integer
limit
sendInitialEvents (查询参数 ): boolean
sendInitialEvents
watch (查询参数 ): boolean
watch
响应
200 (ServiceAccountList ): OK
401: Unauthorized
create
创建一个 ServiceAccount
HTTP 请求
POST /api/v1/namespaces/{namespace}/serviceaccounts
参数
响应
200 (ServiceAccount ): OK
201 (ServiceAccount ): Created
202 (ServiceAccount ): Accepted
401: Unauthorized
update
替换指定的 ServiceAccount
HTTP 请求
PUT /api/v1/namespaces/{namespace}/serviceaccounts/{name}
参数
name (路径参数 ): string,必需
ServiceAccount 的名称。
响应
200 (ServiceAccount ): OK
201 (ServiceAccount ): Created
401: Unauthorized
patch
部分更新指定的 ServiceAccount
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/serviceaccounts/{name}
参数
name (路径参数 ): string,必需
ServiceAccount 的名称。
force (查询参数 ): boolean
force
响应
200 (ServiceAccount ): OK
201 (ServiceAccount ): Created
401: Unauthorized
delete
删除一个 ServiceAccount
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/serviceaccounts/{name}
参数
name (路径参数 ): string,必需
ServiceAccount 的名称。
响应
200 (ServiceAccount ): OK
202 (ServiceAccount ): Accepted
401: Unauthorized
deletecollection
删除 ServiceAccount 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/serviceaccounts
参数
limit (查询参数 ): integer
limit
sendInitialEvents (查询参数 ): boolean
sendInitialEvents
响应
200 (Status ): OK
401: Unauthorized
5.4.2 - TokenRequest
TokenRequest 为给定的服务账号请求一个令牌。
apiVersion: authentication.k8s.io/v1
import "k8s.io/api/authentication/v1"
TokenRequest
TokenRequest 为给定的服务账号请求一个令牌。
TokenRequestSpec
TokenRequestSpec 包含客户端提供的令牌请求参数。
audiences ([]string),必需
原子:将在合并期间被替换
audiences 是令牌预期的受众。
令牌的接收方必须在令牌的受众列表中用一个标识符来标识自己,否则应拒绝该令牌。
为多个受众签发的令牌可用于认证所列举的任意受众的身份,但这意味着目标受众彼此之间的信任程度较高。
boundObjectRef (BoundObjectReference)
boundObjectRef 是对令牌所绑定的一个对象的引用。该令牌只有在绑定对象存在时才有效。
注:API 服务器的 TokenReview 端点将校验 boundObjectRef,但其他受众可能不用这样。
如果你想要快速撤销,请为 expirationSeconds 设一个较小的值。
BoundObjectReference 是对令牌所绑定的一个对象的引用。
boundObjectRef.apiVersion (string)
引用对象的 API 版本。
boundObjectRef.kind (string)
引用对象的类别。有效的类别为 “Pod” 和 “Secret”。
boundObjectRef.name (string)
引用对象的名称。
boundObjectRef.uid (string)
引用对象的 UID。
TokenRequestStatus
TokenRequestStatus 是一个令牌请求的结果。
expirationTimestamp (Time),必需
expirationTimestamp 是已返回令牌的到期时间。
Time 是 time.Time 的包装器,支持正确编组为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。
token (string),必需
token 是不透明的持有者令牌(Bearer Token)。
操作
create
创建 ServiceAccount 的令牌
HTTP 请求
POST /api/v1/namespaces/{namespace}/serviceaccounts/{name}/token
参数
响应
200 (TokenRequest ): OK
201 (TokenRequest ): Created
202 (TokenRequest ): Accepted
401: Unauthorized
5.4.3 - TokenReview
TokenReview 尝试通过验证令牌来确认已知用户。
apiVersion: authentication.k8s.io/v1
import "k8s.io/api/authentication/v1"
TokenReview
TokenReview 尝试通过验证令牌来确认已知用户。
注意:TokenReview 请求可能会被 kube-apiserver 中的 webhook 令牌验证器插件缓存。
TokenReviewSpec
TokenReviewPec 是对令牌身份验证请求的描述。
TokenReviewStatus
TokenReviewStatus 是令牌认证请求的结果。
audiences ([]string)
原子性:将在合并期间被替换
audiences 是身份验证者选择的与 TokenReview 和令牌兼容的受众标识符。标识符是
TokenReviewSpec 受众和令牌受众的交集中的任何标识符。设置 spec.audiences
字段的 TokenReview API 的客户端应验证在 status.audiences 字段中返回了兼容的受众标识符,
以确保 TokenReview 服务器能够识别受众。如果 TokenReview
返回一个空的 status.audience 字段,其中 status.authenticated 为 “true”,
则该令牌对 Kubernetes API 服务器的受众有效。
authenticated (boolean)
authenticated 表示令牌与已知用户相关联。
error (string)
error 表示无法检查令牌
user (UserInfo)
user 是与提供的令牌关联的 UserInfo。
UserInfo 保存实现 user.Info 接口所需的用户信息
操作
create
创建一个TokenReview
HTTP 请求
POST /apis/authentication.k8s.io/v1/tokenreviews
参数
响应
200 (TokenReview ): OK
201 (TokenReview ): Created
202 (TokenReview ): Accepted
401: Unauthorized
5.4.4 - CertificateSigningRequest
CertificateSigningRequest 对象提供了一种通过提交证书签名请求并异步批准和颁发 x509 证书的机制。
apiVersion: certificates.k8s.io/v1
import "k8s.io/api/certificates/v1"
证书签名请求 CertificateSigningRequest
CertificateSigningRequest 对象提供了一种通过提交证书签名请求并异步批准和颁发 x509 证书的机制。
Kubelets 使用 CertificateSigningRequest API 来获取:
向 kube-apiserver 进行身份认证的客户端证书(使用 “kubernetes.io/kube-apiserver-client-kubelet” signerName)。
kube-apiserver 可以安全连接到 TLS 端点的服务证书(使用 “kubernetes.io/kubelet-serving” signerName)。
此 API 可用于请求客户端证书以向 kube-apiserver 进行身份验证(使用 “kubernetes.io/kube-apiserver-client”
签名者名称),或从自定义非 Kubernetes 签名者那里获取证书。
CertificateSigningRequestSpec
CertificateSigningRequestSpec 包含证书请求。
signerName (string),必需
signerName 表示请求的签名者,是一个限定名。
CertificateSigningRequests 的 list/watch 请求可以使用 “spec.signerName=NAME” 字段选择器进行过滤。
众所周知的 Kubernetes 签名者有:
“kubernetes.io/kube-apiserver-client”:颁发客户端证书,用于向 kube-apiserver 进行身份验证。
对此签名者的请求永远不会被 kube-controller-manager 自动批准,
可以由 kube-controller-manager 中的 “csrsigning” 控制器颁发。
“kubernetes.io/kube-apiserver-client-kubelet”:颁发客户端证书,kubelet 用于向 kube-apiserver 进行身份验证。
对此签名者的请求可以由 kube-controller-manager 中的 “csrapproving” 控制器自动批准,
并且可以由 kube-controller-manager 中的 “csrsigning” 控制器颁发。
“kubernetes.io/kubelet-serving” 颁发服务证书,kubelet 用于服务 TLS 端点,kube-apiserver 可以安全的连接到这些端点。
对此签名者的请求永远不会被 kube-controller-manager 自动批准,
可以由 kube-controller-manager 中的 “csrsigning” 控制器颁发。
更多详细信息,请访问 https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers
也可以指定自定义 signerName。签名者定义如下:
信任分发:信任(CA 证书包)是如何分发的。
许可的主体:当请求不允许的主体时的行为。
请求中必需、许可或禁止的 x509 扩展(包括是否允许 subjectAltNames、哪些类型、对允许值的限制)
以及请求不允许的扩展时的行为。
必需、许可或禁止的密钥用途/扩展密钥用途。
过期/证书生命周期:是否由签名者确定,管理员可配置。
是否允许申请 CA 证书。
expirationSeconds (int32)
expirationSeconds 是所颁发证书的所请求的有效期。
证书签署者可以颁发具有不同有效期的证书,
因此客户端必须检查颁发证书中 notBefore 和 notAfter 字段之间的增量以确定实际持续时间。
众所周知的 Kubernetes 签名者在 v1.22+ 版本内实现将遵守此字段,
只要请求的持续时间不大于最大持续时间,它们将遵守 Kubernetes 控制管理器的
--cluster-signing-duration CLI 标志。
由于各种原因,证书签名者可能忽略此字段:
不认识此字段的旧签名者(如 v1.22 版本之前的实现)
配置的最大持续时间小于请求持续时间的签名者
配置的最小持续时间大于请求持续时间的签名者
expirationSeconds 的最小有效值为 600,即 10 分钟。
usages ([]string)
Atomic:将在合并期间被替换
usages 指定颁发证书中请求的一组密钥用途。
TLS 客户端证书的请求通常要求:"digital signature"、"key encipherment"、"client auth"。
TLS 服务证书的请求通常要求:"key encipherment"、"digital signature"、"server auth"。
有效值:
"signing"、"digital signature"、"content commitment"、
"key encipherment"、"key agreement"、"data encipherment"、
"cert sign"、"crl sign"、"encipher only"、"decipher only"、"any"、
"server auth"、"client auth"、
"code signing"、"email protection"、"s/mime"、
"ipsec end system"、"ipsec tunnel"、"ipsec user"、
"timestamping"、"ocsp signing"、"microsoft sgc"、"netscape sgc"。
CertificateSigningRequestStatus
CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败状态和颁发证书的状况。
certificate ([]byte)
Atomic:将在合并期间被替换
certificate 在出现 Approved 状况后,由签名者使用已颁发的证书填充。
这个字段通过 /status 子资源设置。填充后,该字段将不可变。
如果证书签名请求被拒绝,则添加类型为 “Denied” 的状况,并且保持该字段为空。
如果签名者不能颁发证书,则添加类型为 “Failed” 的状况,并且保持该字段为空。
验证要求:
证书必须包含一个或多个 PEM 块。
所有的 PEM 块必须有 “CERTIFICATE” 标签,不包含头和编码的数据,
必须是由 BER 编码的 ASN.1 证书结构,如 RFC5280 第 4 节所述。
非 PEM 内容可能出现在 “CERTIFICATE”PEM 块之前或之后,并且是未验证的,
允许如 RFC7468 5.2 节中描述的解释性文本。
如果存在多个 PEM 块,并且所请求的 spec.signerName 的定义没有另外说明,
那么第一个块是颁发的证书,后续的块应该被视为中间证书并在 TLS 握手中呈现。
证书编码为 PEM 格式。
当序列化为 JSON 或 YAML 时,数据额外采用 base64 编码,它包括:
base64(
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
)
conditions ([]CertificateSigningRequestCondition)
Map:键类型的唯一值将在合并期间保留
应用于请求的状况。已知的状况有 "Approved"、"Denied" 与 "Failed"。
CertificateSigningRequestCondition 描述 CertificateSigningRequest 对象的状况。
conditions.status (string),必需
状况的状态,True、False、Unknown 之一。Approved、Denied 与 Failed 的状况不可以是 "False" 或 "Unknown"。
conditions.type (string),必需
状况的类型。已知的状况是 "Approved"、"Denied" 与 "Failed"。
通过 /approval 子资源添加 “Approved” 状况,表示请求已被批准并且应由签名者颁发。
通过 /approval 子资源添加 “Denied” 状况,指示请求被拒绝并且不应由签名者颁发。
通过 /status 子资源添加 “Failed” 状况,表示签名者未能颁发证书。
Approved 和 Denied 状况是相互排斥的。Approved、Denied 和 Failed 状况一旦添加就无法删除。
给定类型只允许设置一种状况。
conditions.lastTransitionTime (Time)
lastTransitionTime 是状况上一次从一种状态转换到另一种状态的时间。
如果未设置,当添加新状况类型或更改现有状况的状态时,服务器默认为当前时间。
Time 是 time.Time 的包装器,支持正确编码为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。
conditions.lastUpdateTime (Time)
lastUpdateTime 是该状况最后一次更新的时间。
Time 是 time.Time 的包装器,支持正确编组为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。
conditions.message (string)
message 包含一个人类可读的消息,包含关于请求状态的详细信息。
conditions.reason (string)
reason 表示请求状态的简短原因。
CertificateSigningRequestList
CertificateSigningRequestList 是 CertificateSigningRequest 对象的集合。
apiVersion : certificates.k8s.io/v1
kind : CertificateSigningRequestList
metadata (ListMeta )
items ([]CertificateSigningRequest ),必需
items 是 CertificateSigningRequest 对象的集合。
操作
get
读取指定的 CertificateSigningRequest
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
响应
200 (CertificateSigningRequest ): OK
401: Unauthorized
get
读取指定 CertificateSigningRequest 的批准信息
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
参数
响应
200 (CertificateSigningRequest ): OK
401: Unauthorized
get
读取指定 CertificateSigningRequest 的状态
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
参数
响应
200 (CertificateSigningRequest ): OK
401: Unauthorized
list
list 或 watch CertificateSigningRequest 类型的对象
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests
参数
响应
200 (CertificateSigningRequestList ): OK
401: Unauthorized
create
创建一个 CertificateSigningRequest
HTTP 请求
POST /apis/certificates.k8s.io/v1/certificatesigningrequests
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
202 (CertificateSigningRequest ): Accepted
401: Unauthorized
update
替换指定的 CertificateSigningRequest
HTTP 请求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
401: Unauthorized
update
替换对指定 CertificateSigningRequest 的批准信息
HTTP 请求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
401: Unauthorized
update
替换指定 CertificateSigningRequest 的状态
HTTP 请求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
401: Unauthorized
patch
部分更新指定的 CertificateSigningRequest
HTTP 请求
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
401: Unauthorized
patch
部分更新指定 CertificateSigningRequest 的批准信息
HTTP 请求
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
401: Unauthorized
patch
部分更新指定 CertificateSigningRequest 的状态
HTTP 请求
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
参数
响应
200 (CertificateSigningRequest ): OK
201 (CertificateSigningRequest ): Created
401: Unauthorized
delete
删除一个 CertificateSigningRequest
HTTP 请求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 CertificateSigningRequest 集合
HTTP 请求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests
参数
响应
200 (Status ): OK
401: Unauthorized
5.4.5 - ClusterTrustBundle v1alpha1
ClusterTrustBundle 是一个集群范围的容器,用于存放 X.509 信任锚(根证书)。
apiVersion: certificates.k8s.io/v1alpha1
import "k8s.io/api/certificates/v1alpha1"
ClusterTrustBundle
ClusterTrustBundle 是一个集群范围的容器,用于存放 X.509 信任锚(根证书)。
ClusterTrustBundle 对象被视为可被集群中的任何已通过身份验证的用户读取,
因为此对象可以由使用 clusterTrustBundle
投射的 Pod 挂载。
所有服务账号默认都有对 ClusterTrustBundle 的读取权限。
对于仅对集群具有命名空间级访问权限的用户,可以通过伪装他们可以访问的服务账号来读取 ClusterTrustBundle。
ClusterTrustBundle 可以选择与特定的签名程序相关联,此时它包含该签名程序的一组有效信任锚。
签名程序可以有多个关联的 ClusterTrustBundle;
对于该签名程序而言每个 ClusterTrustBundle 都是独立的一组信任锚。
准入控制用于确保只有对签名程序有访问权限的用户才能创建或修改相应的捆绑包。
ClusterTrustBundleSpec
ClusterTrustBundleSpec 包含签名程序和信任锚。
trustBundle (string),必需
trustBundle 包含此捆绑包的各个 X.509 信任锚,这个 PEM 捆绑包是采用 PEM 包装的 DER 格式的若干 X.509 证书。
数据必须仅由可解析为有效 X.509 证书的 PEM 证书块组成。
每个证书必须包含设置了 CA 标志的基本约束扩展。
API 服务器将拒绝包含重复证书或使用 PEM 块头的对象。
ClusterTrustBundles 的使用者(包括 kubelet)可以根据自己的逻辑对此文件中的证书块进行重新排序和去重,
也可以删除 PEM 块头和块间数据。
signerName (string)
signerName 表示关联的签名程序(如果有)。
要创建或更新设置了 signerName 属性的 ClusterTrustBundle,你必须具备以下集群范围的权限:
group=certificates.k8s.io
resource=signers
resourceName=\<签名程序名称>
verb=attest
如果 signerName 不为空,则 ClusterTrustBundle 对象的名称必须以签名程序名称作为前缀(将斜杠转换为冒号)。
例如,对于签名程序名称 example.com/foo
,有效的 ClusterTrustBundle 对象名称包括
example.com:foo:abc
和 example.com:foo:v1
。
如果 signerName 为空,则 ClusterTrustBundle 对象的名称不能具有此类前缀。
针对 ClusterTrustBundles 的列举/监视请求可以使用 spec.signerName=NAME
字段选择算符针对此字段进行过滤。
ClusterTrustBundleList
ClusterTrustBundleList 是 ClusterTrustBundle 对象的集合。
操作
get
读取指定的 ClusterTrustBundle
HTTP 请求
GET /apis/certificates.k8s.io/v1alpha1/clustertrustbundles/{name}
参数
name (路径参数 ):string,必需
ClusterTrustBundle 的名称。
pretty (查询参数 ):string
pretty
响应
200 (ClusterTrustBundle ): OK
401: Unauthorized
list
列举或监视类别为 ClusterTrustBundle 的对象
HTTP 请求
GET /apis/certificates.k8s.io/v1alpha1/clustertrustbundles
参数
响应
200 (ClusterTrustBundleList ): OK
401: Unauthorized
create
创建 ClusterTrustBundle
HTTP 请求
POST /apis/certificates.k8s.io/v1alpha1/clustertrustbundles
参数
响应
200 (ClusterTrustBundle ): OK
201 (ClusterTrustBundle ): Created
202 (ClusterTrustBundle ): Accepted
401: Unauthorized
update
替换指定的 ClusterTrustBundle
HTTP 请求
PUT /apis/certificates.k8s.io/v1alpha1/clustertrustbundles/{name}
参数
响应
200 (ClusterTrustBundle ): OK
201 (ClusterTrustBundle ): Created
401: Unauthorized
patch
部分更新指定的 ClusterTrustBundle
HTTP 请求
PATCH /apis/certificates.k8s.io/v1alpha1/clustertrustbundles/{name}
参数
响应
200 (ClusterTrustBundle ): OK
201 (ClusterTrustBundle ): Created
401: Unauthorized
delete
删除 ClusterTrustBundle
HTTP 请求
DELETE /apis/certificates.k8s.io/v1alpha1/clustertrustbundles/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ClusterTrustBundle 的集合
HTTP 请求
DELETE /apis/certificates.k8s.io/v1alpha1/clustertrustbundles
参数
响应
200 (Status ): OK
401: Unauthorized
5.4.6 - SelfSubjectReview
SelfSubjectReview 包含 kube-apiserver 所拥有的与发出此请求的用户有关的用户信息。
apiVersion: authentication.k8s.io/v1
import "k8s.io/api/authentication/v1"
SelfSubjectReview
SelfSubjectReview 包含 kube-apiserver 所拥有的与发出此请求的用户有关的用户信息。
使用伪装时,用户将收到被伪装用户的用户信息。
如果使用伪装或请求头部进行身份验证,则所有额外的键都将被忽略大小写并以小写形式返回结果。
SelfSubjectReviewStatus
SelfSubjectReviewStatus 由 kube-apiserver 进行填充并发送回用户。
操作
create
创建 SelfSubjectReview
HTTP 请求
POST /apis/authentication.k8s.io/v1/selfsubjectreviews
参数
响应
200 (SelfSubjectReview ): OK
201 (SelfSubjectReview ): Created
202 (SelfSubjectReview ): Accepted
401: Unauthorized
5.5 - 鉴权资源
5.5.1 - LocalSubjectAccessReview
LocalSubjectAccessReview 检查用户或组是否可以在给定的命名空间内执行某操作。
apiVersion: authorization.k8s.io/v1
import "k8s.io/api/authorization/v1"
LocalSubjectAccessReview
LocalSubjectAccessReview 检查用户或组是否可以在给定的命名空间内执行某操作。
划分命名空间范围的资源简化了命名空间范围的策略设置,例如权限检查。
apiVersion : authorization.k8s.io/v1
kind : LocalSubjectAccessReview
metadata (ObjectMeta )
标准的列表元数据。
更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
操作
create
创建 LocalSubjectAccessReview
HTTP 请求
POST /apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews
参数
响应
200 (LocalSubjectAccessReview ): OK
201 (LocalSubjectAccessReview ): Created
202 (LocalSubjectAccessReview ): Accepted
401: Unauthorized
5.5.2 - SelfSubjectAccessReview
SelfSubjectAccessReview 检查当前用户是否可以执行某操作。
apiVersion: authorization.k8s.io/v1
import "k8s.io/api/authorization/v1"
SelfSubjectAccessReview
SelfSubjectAccessReview 检查当前用户是否可以执行某操作。
不填写 spec.namespace 表示 “在所有命名空间中”。
Self 是一个特殊情况,因为用户应始终能够检查自己是否可以执行某操作。
SelfSubjectAccessReviewSpec
SelfSubjectAccessReviewSpec 是访问请求的描述。
resourceAuthorizationAttributes 和 nonResourceAuthorizationAttributes 二者必须设置其一,并且只能设置其一。
nonResourceAttributes (NonResourceAttributes)
nonResourceAttributes 描述非资源访问请求的信息。
nonResourceAttributes 包括提供给 Authorizer 接口进行非资源请求鉴权时所用的属性。
resourceAttributes (ResourceAttributes)
resourceAuthorizationAttributes 描述资源访问请求的信息。
resourceAttributes 包括提供给 Authorizer 接口进行资源请求鉴权时所用的属性。
resourceAttributes.fieldSelector (FieldSelectorAttributes)
fieldSelector 描述基于字段的访问限制。此字段只能限制访问权限,而不能扩大访问权限。
此字段处于 Alpha 级别。要使用此字段,你必须启用 AuthorizeWithSelectors
特性门控(默认禁用)。
FieldSelectorAttributes 表示一个限制访问的字段。建议 Webhook 的开发者们:
确保 rawSelector 和 requirements 未被同时设置
如果设置了 fieldSelector,则考虑 requirements 字段
如果设置了 fieldSelector,不要尝试解析或考虑 rawSelector 字段。
这是为了避免出现另一个 CVE-2022-2880(即我们不希望不同系统以一致的方式解析某个查询),
有关细节参见 https://www.oxeye.io/resources/golang-parameter-smuggling-attack
对于 kube-apiserver 的 SubjectAccessReview 端点:
如果 rawSelector 为空且 requirements 为空,则请求未被限制。
如果 rawSelector 存在且 requirements 为空,则 rawSelector 将被解析,并在解析成功的情况下进行限制。
如果 rawSelector 为空且 requirements 存在,则应优先使用 requirements。
如果 rawSelector 存在,requirements 也存在,则请求无效。
resourceAttributes.fieldSelector.requirements ([]FieldSelectorRequirement)
原子:将在合并期间被替换
requirements 是字段选择算符已解析的解释。资源实例必须满足所有 requirements 才能匹配此选择算符。
Webhook 实现应处理 requirements,但如何处理由 Webhook 自行决定。
由于 requirements 只能限制请求,因此如果不理解 requirements,可以安全地将请求鉴权为无限制请求。
FieldSelectorRequirement 是一个选择算符,包含值、键以及与将键和值关联起来的运算符。
resourceAttributes.fieldSelector.requirements.key (string),必需
key 是 requirements 应用到的字段选择算符键。
resourceAttributes.fieldSelector.requirements.operator (string),必需
operator 表示键与一组值之间的关系。有效的运算符有 In、NotIn、Exists、DoesNotExist。
运算符列表可能会在未来增加。
resourceAttributes.fieldSelector.requirements.values ([]string)
原子:将在合并期间被替换
values 是一个字符串值的数组。如果运算符是 In 或 NotIn,则 values 数组必须非空。
如果运算符是 Exists 或 DoesNotExist,则 values 数组必须为空。
resourceAttributes.labelSelector (LabelSelectorAttributes)
labelSelector 描述基于标签的访问限制。此字段只能限制访问权限,而不能扩大访问权限。
此字段处于 Alpha 级别。要使用此字段,你必须启用 AuthorizeWithSelectors
特性门控(默认禁用)。
LabelSelectorAttributes 表示通过标签限制的访问。建议 Webhook 开发者们:
确保 rawSelector 和 requirements 未被同时设置
如果设置了 labelSelector,则考虑 requirements 字段
如果设置了 labelSelector,不要尝试解析或考虑 rawSelector 字段。
这是为了避免出现另一个 CVE-2022-2880(即让不同系统以一致的方式解析为何某个查询不是我们想要的),
有关细节参见 https://www.oxeye.io/resources/golang-parameter-smuggling-attack
对于 kube-apiserver 的 SubjectAccessReview 端点:
如果 rawSelector 为空且 requirements 为空,则请求未被限制。
如果 rawSelector 存在且 requirements 为空,则 rawSelector 将被解析,并在解析成功的情况下进行限制。
如果 rawSelector 为空且 requirements 存在,则应优先使用 requirements。
如果 rawSelector 存在,requirements 也存在,则请求无效。
resourceAttributes.labelSelector.requirements ([]LabelSelectorRequirement)
原子:将在合并期间被替换
requirements 是字段选择算符已解析的解释。资源实例必须满足所有 requirements,才能匹配此选择算符。
Webhook 实现应处理 requirements,但如何处理由 Webhook 自行决定。
由于 requirements 只能限制请求,因此如果不理解 requirements,可以安全地将请求鉴权为无限制请求。
FieldSelectorRequirement 是一个选择算符,包含值、键以及将键和值关联起来的运算符。
resourceAttributes.labelSelector.requirements.key (string),必需
key 是选择算符应用到的标签键。
resourceAttributes.labelSelector.requirements.operator (string),必需
operator 表示键与一组值之间的关系。有效的运算符有 In、NotIn、Exists、DoesNotExist。
resourceAttributes.labelSelector.requirements.values ([]string)
原子:将在合并期间被替换
values 是一个字符串值的数组。如果运算符是 In 或 NotIn,则 values 数组必须非空。
如果运算符是 Exists 或 DoesNotExist,则 values 数组必须为空。
此数组在策略性合并补丁(Strategic Merge Patch)期间被替换。
resourceAttributes.namespace (string)
namespace 是正在请求的操作的命名空间。
目前,无命名空间和所有命名空间之间没有区别。
对于 LocalSubjectAccessReviews,默认为 ""(空字符串)。
对于集群范围的资源,默认为 ""(空字符串)。
对于来自 SubjectAccessReview 或 SelfSubjectAccessReview 的命名空间范围的资源,
""(空字符串)表示 "all"(所有资源)。
resourceAttributes.resource (string)
resource 是现有的资源类别之一。
"*" 表示所有资源类别。
resourceAttributes.subresource (string)
subresource 是现有的资源类型之一。
"" 表示无。
resourceAttributes.verb (string)
verb 是 kubernetes 资源 API 动作,例如 get、list、watch、create、update、delete、proxy。
"*" 表示所有动作。
resourceAttributes.version (string)
version 是资源的 API 版本。
"*" 表示所有版本。
操作
create
创建 SelfSubjectAccessReview
HTTP 请求
POST /apis/authorization.k8s.io/v1/selfsubjectaccessreviews
参数
响应
200 (SelfSubjectAccessReview ): OK
201 (SelfSubjectAccessReview ): Created
202 (SelfSubjectAccessReview ): Accepted
401: Unauthorized
5.5.3 - SelfSubjectRulesReview
SelfSubjectRulesReview 枚举当前用户可以在某命名空间内执行的操作集合。
apiVersion: authorization.k8s.io/v1
import "k8s.io/api/authorization/v1"
SelfSubjectRulesReview
SelfSubjectRulesReview 枚举当前用户可以在某命名空间内执行的操作集合。
返回的操作列表可能不完整,具体取决于服务器的鉴权模式以及评估过程中遇到的任何错误。
SelfSubjectRulesReview 应由 UI 用于显示/隐藏操作,或让最终用户尽快理解自己的权限。
SelfSubjectRulesReview 不得被外部系统使用以驱动鉴权决策,
因为这会引起混淆代理人(Confused deputy)、缓存有效期/吊销(Cache lifetime/revocation)和正确性问题。
SubjectAccessReview 和 LocalAccessReview 是遵从 API 服务器所做鉴权决策的正确方式。
status (SubjectRulesReviewStatus)
status 由服务器填写,表示用户可以执行的操作的集合。
SubjectRulesReviewStatus 包含规则检查的结果。
此检查可能不完整,具体取决于服务器配置的 Authorizer 的集合以及评估期间遇到的任何错误。
由于鉴权规则是叠加的,所以如果某个规则出现在列表中,即使该列表不完整,也可以安全地假定该主体拥有该权限。
status.incomplete (boolean),必需
当此调用返回的规则不完整时,incomplete 结果为 true。
这种情况常见于 Authorizer(例如外部 Authorizer)不支持规则评估时。
status.nonResourceRules ([]NonResourceRule),必需
原子性:合并期间将被替换
nonResourceRules 是允许主体对非资源执行路径执行的操作列表。
该列表顺序不重要,可以包含重复项,还可能不完整。
nonResourceRule 包含描述非资源路径的规则的信息。
status.nonResourceRules.verbs ([]string),必需
原子性:合并期间将被替换
verb 是 kubernetes 非资源 API 动作的列表,例如 get、post、put、delete、patch、head、options。
*
表示所有动作。
status.nonResourceRules.nonResourceURLs ([]string)
nonResourceURLs 是用户应有权访问的一组部分 URL。
允许使用 *
,但仅能作为路径中最后一段且必须用于完整的一段。
*
表示全部。
status.resourceRules ([]ResourceRule),必需
原子性:合并期间将被替换
resourceRules 是允许主体对资源执行的操作的列表。
该列表顺序不重要,可以包含重复项,还可能不完整。
resourceRule 是允许主体对资源执行的操作的列表。该列表顺序不重要,可以包含重复项,还可能不完整。
status.resourceRules.apiGroups ([]string)
原子性:合并期间将被替换
apiGroups 是包含资源的 APIGroup 的名称。
如果指定了多个 API 组,则允许对任何 API 组中枚举的资源之一请求任何操作。
*
表示所有 APIGroup。
status.resourceRules.resourceNames ([]string)
原子性:合并期间将被替换
resourceNames 是此规则所适用的资源名称白名单,可选。
空集合意味着允许所有资源。
*
表示所有资源。
status.resourceRules.resources ([]string)
原子性:合并期间将被替换
resources 是此规则所适用的资源的列表。
*
表示指定 APIGroup 中的所有资源。
*/foo
表示指定 APIGroup 中所有资源的子资源 "foo"。
SelfSubjectRulesReviewSpec
SelfSubjectRulesReviewSpec 定义 SelfSubjectRulesReview 的规范。
操作
create
创建 SelfSubjectRulesReview
HTTP 请求
POST /apis/authorization.k8s.io/v1/selfsubjectrulesreviews
参数
响应
200 (SelfSubjectRulesReview ): OK
201 (SelfSubjectRulesReview ): Created
202 (SelfSubjectRulesReview ): Accepted
401: Unauthorized
5.5.4 - SubjectAccessReview
SubjectAccessReview 检查用户或组是否可以执行某操作。
apiVersion: authorization.k8s.io/v1
import "k8s.io/api/authorization/v1"
SubjectAccessReview
SubjectAccessReview 检查用户或组是否可以执行某操作。
SubjectAccessReviewSpec
SubjectAccessReviewSpec 是访问请求的描述。
resourceAuthorizationAttributes 和 nonResourceAuthorizationAttributes 二者必须设置其一,并且只能设置其一。
nonResourceAttributes (NonResourceAttributes)
nonResourceAttributes 描述非资源访问请求的信息。
nonResourceAttributes 包括提供给 Authorizer 接口进行非资源请求鉴权时所用的属性。
resourceAttributes (ResourceAttributes)
resourceAuthorizationAttributes 描述资源访问请求的信息。
resourceAttributes 包括提供给 Authorizer 接口进行资源请求鉴权时所用的属性。
resourceAttributes.fieldSelector (FieldSelectorAttributes)
fieldSelector 描述基于字段的访问限制。此字段只能限制访问权限,而不能扩大访问权限。
此字段处于 Alpha 级别。要使用此字段,你必须启用 AuthorizeWithSelectors
特性门控(默认禁用)。
FieldSelectorAttributes 表示一个限制访问的字段。建议 Webhook 的开发者们:
确保 rawSelector 和 requirements 未被同时设置
如果设置,则考虑 requirements 字段
如果设置,不要尝试解析或考虑 rawSelector 字段。
这是为了避免出现另一个 CVE-2022-2880(即我们不希望不同系统以一致的方式解析某个查询),
有关细节参见 https://www.oxeye.io/resources/golang-parameter-smuggling-attack
对于 kube-apiserver 的 SubjectAccessReview 端点:
如果 rawSelector 为空且 requirements 为空,则请求未被限制。
如果 rawSelector 存在且 requirements 为空,则 rawSelector 将被解析,并在解析成功的情况下进行限制。
如果 rawSelector 为空且 requirements 存在,则应优先使用 requirements。
如果 rawSelector 存在,requirements 也存在,则请求无效。
resourceAttributes.fieldSelector.requirements ([]FieldSelectorRequirement)
原子:将在合并期间被替换
requirements 是字段选择算符已解析的解释。资源实例必须满足所有 requirements 才能匹配此选择算符。
Webhook 实现应处理 requirements,但如何处理由 Webhook 自行决定。
由于 requirements 只能限制请求,因此如果不理解 requirements,可以安全地将请求鉴权为无限制请求。
FieldSelectorRequirement 是一个选择算符,包含值、键以及与将键和值关联起来的运算符。
resourceAttributes.fieldSelector.requirements.key (string),必需
key 是 requirements 应用到的字段选择算符键。
resourceAttributes.fieldSelector.requirements.operator (string),必需
operator 表示键与一组值之间的关系。有效的运算符有 In、NotIn、Exists、DoesNotExist。
运算符列表可能会在未来增加。
resourceAttributes.fieldSelector.requirements.values ([]string)
原子:将在合并期间被替换
values 是一个字符串值的数组。如果运算符是 In 或 NotIn,则 values 数组必须非空。
如果运算符是 Exists 或 DoesNotExist,则 values 数组必须为空。
resourceAttributes.labelSelector (LabelSelectorAttributes)
labelSelector 描述基于标签的访问限制。此字段只能限制访问权限,而不能扩大访问权限。
此字段处于 Alpha 级别。要使用此字段,你必须启用 AuthorizeWithSelectors
特性门控(默认禁用)。
LabelSelectorAttributes 表示通过标签限制的访问。建议 Webhook 开发者们:
确保 rawSelector 和 requirements 未被同时设置
如果设置,则考虑 requirements 字段
如果设置,不要尝试解析或考虑 rawSelector 字段。
这是为了避免出现另一个 CVE-2022-2880(即让不同系统以一致的方式解析为何某个查询不是我们想要的),
有关细节参见 https://www.oxeye.io/resources/golang-parameter-smuggling-attack
对于 kube-apiserver 的 SubjectAccessReview 端点:
如果 rawSelector 为空且 requirements 为空,则请求未被限制。
如果 rawSelector 存在且 requirements 为空,则 rawSelector 将被解析,并在解析成功的情况下进行限制。
如果 rawSelector 为空且 requirements 存在,则应优先使用 requirements。
如果 rawSelector 存在,requirements 也存在,则请求无效。
resourceAttributes.labelSelector.requirements ([]LabelSelectorRequirement)
原子:将在合并期间被替换
requirements 是字段选择算符已解析的解释。资源实例必须满足所有 requirements,才能匹配此选择算符。
Webhook 实现应处理 requirements,但如何处理由 Webhook 自行决定。
由于 requirements 只能限制请求,因此如果不理解 requirements,可以安全地将请求鉴权为无限制请求。
FieldSelectorRequirement 是一个选择算符,包含值、键以及将键和值关联起来的运算符。
resourceAttributes.labelSelector.requirements.key (string),必需
key 是选择算符应用到的标签键。
resourceAttributes.labelSelector.requirements.operator (string),必需
operator 表示键与一组值之间的关系。有效的运算符有 In、NotIn、Exists、DoesNotExist。
resourceAttributes.labelSelector.requirements.values ([]string)
原子:将在合并期间被替换
values 是一个字符串值的数组。如果运算符是 In 或 NotIn,则 values 数组必须非空。
如果运算符是 Exists 或 DoesNotExist,则 values 数组必须为空。
此数组在策略性合并补丁(Strategic Merge Patch)期间被替换。
resourceAttributes.namespace (string)
namespace 是正在请求的操作的命名空间。
目前,无命名空间和所有命名空间之间没有区别。
对于 LocalSubjectAccessReviews,默认为 ""(空字符串)。
对于集群范围的资源,默认为 ""(空字符串)。
对于来自 SubjectAccessReview 或 SelfSubjectAccessReview 的命名空间范围的资源,
""(空字符串)表示 "all"(所有资源)。
resourceAttributes.resource (string)
resource 是现有的资源类别之一。
"*" 表示所有资源类别。
resourceAttributes.subresource (string)
subresource 是现有的资源类别之一。
"" 表示无子资源。
resourceAttributes.verb (string)
verb 是 kubernetes 资源的 API 动作,例如 get、list、watch、create、update、delete、proxy。
"*" 表示所有动作。
resourceAttributes.version (string)
version 是资源的 API 版本。
"*" 表示所有版本。
SubjectAccessReviewStatus
SubjectAccessReviewStatus
操作
create
创建 SubjectAccessReview
HTTP 请求
POST /apis/authorization.k8s.io/v1/subjectaccessreviews
参数
响应
200 (SubjectAccessReview ): OK
201 (SubjectAccessReview ): Created
202 (SubjectAccessReview ): Accepted
401: Unauthorized
5.5.5 - ClusterRole
ClusterRole 是一个集群级别的 PolicyRule 逻辑分组,可以被 RoleBinding 或 ClusterRoleBinding 作为一个单元引用。
apiVersion: rbac.authorization.k8s.io/v1
import "k8s.io/api/rbac/v1"
ClusterRole
ClusterRole 是一个集群级别的 PolicyRule 逻辑分组,
可以被 RoleBinding 或 ClusterRoleBinding 作为一个单元引用。
metadata (ObjectMeta )
标准的对象元数据。
aggregationRule (AggregationRule)
aggregationRule 是一个可选字段,用于描述如何构建这个 ClusterRole 的 rules。
如果设置了 aggregationRule,则 rules 将由控制器管理,对 rules 的直接变更会被该控制器阻止。
aggregationRule 描述如何定位并聚合其它 ClusterRole 到此 ClusterRole。
ClusterRoleList
ClusterRoleList 是 ClusterRole 的集合。
操作
get
读取指定的 ClusterRole
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
参数
name (路径参数 ):string,必需
ClusterRole 的名称
pretty (查询参数 ):string
pretty
响应
200 (ClusterRole ): OK
401: Unauthorized
list
列出或观测类别为 ClusterRole 的对象
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/clusterroles
参数
响应
200 (ClusterRoleList ): OK
401: Unauthorized
create
创建一个 ClusterRole
HTTP 请求
POST /apis/rbac.authorization.k8s.io/v1/clusterroles
参数
响应
200 (ClusterRole ): OK
201 (ClusterRole ): Created
202 (ClusterRole ): Accepted
401: Unauthorized
update
替换指定的 ClusterRole
HTTP 请求
PUT /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
参数
响应
200 (ClusterRole ): OK
201 (ClusterRole ): Created
401: Unauthorized
patch
部分更新指定的 ClusterRole
HTTP 请求
PATCH /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
参数
响应
200 (ClusterRole ): OK
201 (ClusterRole ): Created
401: Unauthorized
delete
删除一个 ClusterRole
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ClusterRole 的集合
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/clusterroles
参数
响应
200 (Status ): OK
401: Unauthorized
5.5.6 - ClusterRoleBinding
ClusterRoleBinding 引用 ClusterRole,但不包含它。
apiVersion: rbac.authorization.k8s.io/v1
import "k8s.io/api/rbac/v1"
ClusterRoleBinding
ClusterRoleBinding 引用 ClusterRole,但不包含它。
它可以引用全局命名空间中的 ClusterRole,并通过 Subject 添加主体信息。
subjects ([]Subject)
原子性:将在合并期间被替换
Subjects 包含角色所适用的对象的引用。
Subject 包含对角色绑定所适用的对象或用户标识的引用。其中可以包含直接 API 对象的引用或非对象(如用户名和组名)的值。
subjects.kind (string),必需
被引用的对象的类别。这个 API 组定义的值是 User
、Group
和 ServiceAccount
。
如果 Authorizer 无法识别类别值,则 Authorizer 应报告一个错误。
subjects.apiGroup (string)
apiGroup 包含被引用主体的 API 组。对于 ServiceAccount 主体默认为 ""。
对于 User 和 Group 主体,默认为 "rbac.authorization.k8s.io"。
ClusterRoleBindingList
ClusterRoleBindingList 是 ClusterRoleBinding 的集合。
操作
get
读取指定的 ClusterRoleBinding
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
参数
name (路径参数 ): string,必需
ClusterRoleBinding 的名称
pretty (查询参数 ): string
pretty
响应
200 (ClusterRoleBinding ): OK
401: Unauthorized
list
列出或观测类别为 ClusterRoleBinding 的对象
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/clusterrolebindings
参数
响应
200 (ClusterRoleBindingList ): OK
401: Unauthorized
create
创建 ClusterRoleBinding
HTTP 请求
POST /apis/rbac.authorization.k8s.io/v1/clusterrolebindings
参数
响应
200 (ClusterRoleBinding ): OK
201 (ClusterRoleBinding ): Created
202 (ClusterRoleBinding ): Accepted
401: Unauthorized
update
替换指定的 ClusterRoleBinding
HTTP 请求
PUT /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
参数
响应
200 (ClusterRoleBinding ): OK
201 (ClusterRoleBinding ): Created
401: Unauthorized
patch
部分更新指定的 ClusterRoleBinding
HTTP 请求
PATCH /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
参数
name (路径参数 ): string,必需
ClusterRoleBinding 的名称
body : Patch ,必需
响应
200 (ClusterRoleBinding ): OK
201 (ClusterRoleBinding ): Created
401: Unauthorized
delete
删除 ClusterRoleBinding
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
参数
name (路径参数 ): string,必需
ClusterRoleBinding 的名称
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ClusterRoleBinding 的集合
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/clusterrolebindings
参数
响应
200 (Status ): OK
401: Unauthorized
5.5.7 - Role
Role 是一个按命名空间划分的 PolicyRule 逻辑分组,可以被 RoleBinding 作为一个单元引用。
apiVersion: rbac.authorization.k8s.io/v1
import "k8s.io/api/rbac/v1"
Role
Role 是一个按命名空间划分的 PolicyRule 逻辑分组,可以被 RoleBinding 作为一个单元引用。
RoleList
RoleList 是 Role 的集合。
metadata (ListMeta )
标准的对象元数据。
items ([]Role ),必需
items 是 Role 的列表。
操作
get
读取指定的 Role
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
参数
响应
200 (Role ): OK
401: Unauthorized
list
列出或观测类别为 Role 的对象
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles
参数
响应
200 (RoleList ): OK
401: Unauthorized
list
列出或观测类别为 Role 的对象
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/roles
参数
响应
200 (RoleList ): OK
401: Unauthorized
create
创建 Role
HTTP 请求
POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles
参数
响应
200 (Role ): OK
201 (Role ): Created
202 (Role ): Accepted
401: Unauthorized
update
替换指定的 Role
HTTP 请求
PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
参数
响应
200 (Role ): OK
201 (Role ): Created
401: Unauthorized
patch
部分更新指定的 Role
HTTP 请求
PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
参数
响应
200 (Role ): OK
201 (Role ): Created
401: Unauthorized
delete
删除 Role
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Role 的集合
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles
参数
响应
200 (Status ): OK
401: Unauthorized
5.5.8 - RoleBinding
RoleBinding 引用一个角色,但不包含它。
apiVersion: rbac.authorization.k8s.io/v1
import "k8s.io/api/rbac/v1"
RoleBinding
RoleBinding 引用一个角色,但不包含它。
RoleBinding 可以引用相同命名空间中的 Role 或全局命名空间中的 ClusterRole。
RoleBinding 通过 Subjects 和所在的命名空间信息添加主体信息。
处于给定命名空间中的 RoleBinding 仅在该命名空间中有效。
标准的对象元数据。
subjects.name (string),必需
被引用的对象的名称。
subjects.apiGroup (string)
apiGroup 包含被引用主体的 API 组。
对于 ServiceAccount 主体默认为 ""。
对于 User 和 Group 主体,默认为 "rbac.authorization.k8s.io"。
subjects.namespace (string)
被引用的对象的命名空间。
如果对象类别是 “User” 或 “Group” 等非命名空间作用域的对象且该值不为空,
则 Authorizer 应报告一个错误。
RoleBindingList
RoleBindingList 是 RoleBinding 的集合。
标准的对象元数据。
操作
get
读取指定的 RoleBinding
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
参数
响应
200 (RoleBinding ): OK
401: Unauthorized
list
列出或观测类别为 RoleBinding 的对象
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings
参数
响应
200 (RoleBindingList ): OK
401: Unauthorized
list
列出或观测类别为 RoleBinding 的对象
HTTP 请求
GET /apis/rbac.authorization.k8s.io/v1/rolebindings
参数
响应
200 (RoleBindingList ): OK
401: Unauthorized
create
创建 RoleBinding
HTTP 请求
POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings
参数
响应
200 (RoleBinding ): OK
201 (RoleBinding ): Created
202 (RoleBinding ): Accepted
401: Unauthorized
update
替换指定的 RoleBinding
HTTP 请求
PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
参数
响应
200 (RoleBinding ): OK
201 (RoleBinding ): Created
401: Unauthorized
patch
部分更新指定的 RoleBinding
HTTP 请求
PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
参数
响应
200 (RoleBinding ): OK
201 (RoleBinding ): Created
401: Unauthorized
delete
删除 RoleBinding
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 RoleBinding 的集合
HTTP 请求
DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings
参数
响应
200 (Status ): OK
401: Unauthorized
5.6 - 策略资源
5.6.1 - FlowSchema
FlowSchema 定义一组流的模式。
apiVersion: flowcontrol.apiserver.k8s.io/v1
import "k8s.io/api/flowcontrol/v1"
FlowSchema
FlowSchema 定义一组流的模式。请注意,一个流由属性类似的一组入站 API 请求组成,
用一对字符串进行标识:FlowSchema 的名称和一个 “流区分项”。
FlowSchemaSpec
FlowSchemaSpec 描述 FlowSchema 的规约看起来是怎样的。
distinguisherMethod (FlowDistinguisherMethod)
distinguisherMethod
定义如何为匹配此模式的请求来计算流区分项。
nil
表示该区分项被禁用,且因此将始终为空字符串。
FlowDistinguisherMethod 指定流区分项的方法。
matchingPrecedence (int32)
matchingPrecedence
用于选择与给定请求匹配的一个 FlowSchema。
选中的 FlowSchema 是某个 MatchingPrecedence 数值最小(我们视其为逻辑上最大)的 FlowSchema。
每个 MatchingPrecedence 值必须在 [1,10000] 的范围内。
请注意,如果未指定优先顺序,则其默认设为 1000。
priorityLevelConfiguration (PriorityLevelConfigurationReference),必需
priorityLevelConfiguration
应引用集群中的 PriorityLevelConfiguration。
如果引用无法被解析,则忽略此 FlowSchema,并在其状态中将其标记为无效。必需。
PriorityLevelConfigurationReference 包含指向正被使用的 “request-priority” 的信息。
rules ([]PolicyRulesWithSubjects)
原子性:将在合并期间被替换
rules
描述哪些请求将与这个流模式匹配。只有当至少一条规则与请求匹配时,
才视为此 FlowSchema 与该请求匹配。如果字段值为空表,则 FlowSchema 不会与任何请求匹配。
PolicyRulesWithSubjects 给出针对 API 服务器请求的一个测试。
该测试将检查发出请求的主体、所请求的动作和要操作的资源。
只有同时满足以下两个条件时,才表示此 PolicyRulesWithSubjects 与请求匹配:
(a) 至少一个主体成员与请求匹配且
(b) 至少 resourceRules 或 nonResourceRules 的一个成员与请求匹配。
rules.subjects ([]Subject),必需
原子性:将在合并期间被替换
subjects 是此规则相关的普通用户、服务账号或组的列表。在这个列表中必须至少有一个成员。
同时包含 system:authenticated 和 system:unauthenticated 用户组的列表会与每个请求匹配。
此字段为必需。
Subject 用来与匹配请求的发起方,请求的发起方由请求身份认证系统识别出来。
有三种方式来匹配一个发起方:按用户、按组或按服务账号。
rules.subjects.kind (string),必需
kind
标示其他字段中的哪个字段必须非空。必需。
rules.subjects.group (GroupSubject)
group
根据用户组名称进行匹配。
GroupSubject 保存组类别主体的详细信息。
rules.subjects.serviceAccount (ServiceAccountSubject)
serviceAccount
与 ServiceAccount 对象进行匹配。
ServiceAccountSubject 保存服务账号类别主体的详细信息。
rules.subjects.serviceAccount.name (string),必需
name
是要匹配的 ServiceAccount 对象的名称,可使用 *
匹配所有名称。必需。
rules.subjects.serviceAccount.namespace (string),必需
namespace
是要匹配的 ServiceAccount 对象的名字空间。必需。
rules.nonResourceRules ([]NonResourcePolicyRule)
原子性:将在合并期间被替换
nonResourceRules
是由 NonResourcePolicyRule 对象构成的列表,
根据请求的动作和目标非资源 URL 来识别匹配的请求。
NonResourcePolicyRule 是根据请求的动作和目标非资源 URL 来匹配非资源请求的一种规则。
只有满足以下两个条件时,NonResourcePolicyRule 才会匹配一个请求:
(a) 至少 verbs 的一个成员与请求匹配且 (b) 至少 nonResourceURLs 的一个成员与请求匹配。
rules.resourceRules ([]ResourcePolicyRule)
原子性:将在合并期间被替换
resourceRules
是 ResourcePolicyRule 对象的列表,根据请求的动作和目标资源识别匹配的请求。
resourceRules
和 nonResourceRules
两者必须至少有一个非空。
ResourcePolicyRule 是用来匹配资源请求的规则,对请求的动作和目标资源进行测试。
只有满足以下条件时,ResourcePolicyRule 才会与某个资源请求匹配:
(a) 至少 verbs 的一个成员与请求的动作匹配,
(b) 至少 apiGroups 的一个成员与请求的 API 组匹配,
(c) 至少 resources 的一个成员与请求的资源匹配,
(d) 要么 (d1) 请求未指定一个名字空间(即,namespace==""
)且 clusterScope 为 true,
要么 (d2) 请求指定了一个名字空间,且至少 namespaces 的一个成员与请求的名字空间匹配。
rules.resourceRules.apiGroups ([]string),必需
集合:合并期间保留唯一值
apiGroups
是与 API 组匹配的列表,不可以为空。*
表示与所有 API 组匹配。
如果存在此字符,则其必须是唯一的条目。必需。
rules.resourceRules.resources ([]string),必需
集合:合并期间保留唯一值
resources
是匹配的资源(即小写和复数)的列表,如果需要的话,还可以包括子资源。
例如 [ "services", "nodes/status" ]。此列表不可以为空。
*
表示与所有资源匹配。如果存在此字符,则必须是唯一的条目。必需。
rules.resourceRules.verbs ([]string),必需
集合:合并期间保留唯一值
verbs
是匹配的动作的列表,不可以为空。*
表示与所有动作匹配。
如果存在此字符,则必须是唯一的条目。必需。
rules.resourceRules.clusterScope (boolean)
clusterScope
表示是否与未指定名字空间
(出现这种情况的原因是该资源没有名字空间或请求目标面向所有名字空间)的请求匹配。
如果此字段被省略或为 false,则 namespaces
字段必须包含一个非空的列表。
rules.resourceRules.namespaces ([]string)
集合:合并期间保留唯一值
namespaces
是限制匹配的目标的名字空间的列表。
指定一个目标名字空间的请求只会在以下某一个情况满足时进行匹配:
(a) 此列表包含该目标名字空间或 (b) 此列表包含 *
。
请注意,*
与所指定的任何名字空间匹配,但不会与未指定 名字空间的请求匹配
(请参阅 clusterScope
字段)。此列表可以为空,但前提是 clusterScope
为 true。
FlowSchemaStatus
FlowSchemaStatus 表示 FlowSchema 的当前状态。
conditions ([]FlowSchemaCondition)
补丁策略:根据键 type 合并
Map:合并期间保留根据键 type 保留其唯一值
conditions
是 FlowSchema 当前状况的列表。
FlowSchemaCondition 描述 FlowSchema 的状况。
conditions.lastTransitionTime (Time)
lastTransitionTime
是状况上一次从一个状态转换为另一个状态的时间。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。
为 time 包的许多函数方法提供了封装器。
conditions.message (string)
message
是一条人类可读的消息,表示上一次转换有关的详细信息。
conditions.reason (string)
reason
是状况上次转换原因的、驼峰格式命名的、唯一的一个词。
FlowSchemaList
FlowSchemaList 是 FlowSchema 对象的列表。
操作
get
读取指定的 FlowSchema
HTTP 请求
GET /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}
参数
name (路径参数 ): string,必需
FlowSchema 的名称。
pretty (查询参数 ): string
pretty
响应
200 (FlowSchema ): OK
401: Unauthorized
get
读取指定 FlowSchema 的状态
HTTP 请求
GET /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}/status
参数
name (路径参数 ): string,必需
FlowSchema 的名称。
pretty (查询参数 ): string
pretty
响应
200 (FlowSchema ): OK
401: Unauthorized
list
列出或监视 FlowSchema 类别的对象
HTTP 请求
GET /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas
参数
响应
200 (FlowSchemaList ): OK
401: Unauthorized
create
创建 FlowSchema
HTTP 请求
POST /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas
参数
响应
200 (FlowSchema ): OK
201 (FlowSchema ): Created
202 (FlowSchema ): Accepted
401: Unauthorized
update
替换指定的 FlowSchema
HTTP 请求
PUT /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}
参数
响应
200 (FlowSchema ): OK
201 (FlowSchema ): Created
401: Unauthorized
update
替换指定的 FlowSchema 的状态
HTTP 请求
PUT /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}/status
参数
响应
200 (FlowSchema ): OK
201 (FlowSchema ): Created
401: Unauthorized
patch
部分更新指定的 FlowSchema
HTTP 请求
PATCH /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}
参数
响应
200 (FlowSchema ): OK
201 (FlowSchema ): Created
401: Unauthorized
patch
部分更新指定的 FlowSchema 的状态
HTTP 请求
PATCH /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}/status
参数
响应
200 (FlowSchema ): OK
201 (FlowSchema ): Created
401: Unauthorized
delete
删除 FlowSchema
HTTP 请求
DELETE /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 FlowSchema 的集合
HTTP 请求
DELETE /apis/flowcontrol.apiserver.k8s.io/v1/flowschemas
参数
响应
200 (Status ): OK
401: Unauthorized
5.6.2 - LimitRange
LimitRange 设置名字空间中每个资源类别的资源用量限制。
apiVersion: v1
import "k8s.io/api/core/v1"
LimitRange
LimitRange 设置名字空间中每个资源类别的资源用量限制。
apiVersion : v1
kind : LimitRange
LimitRangeSpec
LimitRangeSpec 定义与类别匹配的资源的最小/最大使用限制。
limits ([]LimitRangeItem),必需
原子:将在合并期间被替换
limits 是强制执行的 LimitRangeItem 对象的列表。
LimitRangeItem 定义与类别匹配的任意资源的最小/最大使用限制。
limits.type (string),必需
此限制应用到的资源的类型。
limits.default (map[string]Quantity )
资源限制被省略时按资源名称设定的默认资源要求限制值。
limits.defaultRequest (map[string]Quantity )
defaultRequest 是资源请求被省略时按资源名称设定的默认资源要求请求值。
limits.max (map[string]Quantity )
按资源名称针对这种类别的最大使用约束。
limits.maxLimitRequestRatio (map[string]Quantity )
如果指定 maxLimitRequestRatio,则所指定的资源必须设置非零的请求和限制值,
且限制除以请求小于或等于这里列举的值;此属性用来表示所指定资源的最大突发用量。
limits.min (map[string]Quantity )
按资源名称区分的,针对这种类别对象的最小用量约束。
LimitRangeList
LimitRangeList 是 LimitRange 项的列表。
apiVersion : v1
kind : LimitRangeList
操作
get
读取指定的 LimitRange
HTTP 请求
GET /api/v1/namespaces/{namespace}/limitranges/{name}
参数
响应
200 (LimitRange ): OK
401: Unauthorized
list
列出或监视 LimitRange 类别的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/limitranges
参数
响应
200 (LimitRangeList ): OK
401: Unauthorized
list
列出或监视 LimitRange 类别的对象
HTTP 请求
GET /api/v1/limitranges
参数
响应
200 (LimitRangeList ): OK
401: Unauthorized
create
创建 LimitRange
HTTP 请求
POST /api/v1/namespaces/{namespace}/limitranges
参数
响应
200 (LimitRange ): OK
201 (LimitRange ): Created
202 (LimitRange ): Accepted
401: Unauthorized
update
替换指定的 LimitRange
HTTP 请求
PUT /api/v1/namespaces/{namespace}/limitranges/{name}
参数
响应
200 (LimitRange ): OK
201 (LimitRange ): Created
401: Unauthorized
patch
部分更新指定的 LimitRange
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/limitranges/{name}
参数
响应
200 (LimitRange ): OK
201 (LimitRange ): Created
401: Unauthorized
delete
删除 LimitRange
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/limitranges/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 LimitRange 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/limitranges
参数
响应
200 (Status ): OK
401: Unauthorized
5.6.3 - ResourceQuota
ResourceQuota 设置每个命名空间强制执行的聚合配额限制。
apiVersion: v1
import "k8s.io/api/core/v1"
ResourceQuota
ResourceQuota 设置每个命名空间强制执行的聚合配额限制。
ResourceQuotaSpec
ResourceQuotaSpec 定义为 Quota 强制执行所需的硬限制。
hard (map[string]Quantity )
hard 是每种指定资源所需的硬性限制集合。
更多信息: https://kubernetes.io/docs/concepts/policy/resource-quotas/
scopeSelector (ScopeSelector)
scopeSelector 也是一组过滤器的集合,和 scopes 类似,
必须匹配配额所跟踪的每个对象,但使用 ScopeSelectorOperator 结合可能的值来表示。
对于要匹配的资源,必须同时匹配 scopes 和 scopeSelector(如果在 spec 中设置了的话)。
scope 选择算符表示的是由限定范围的资源选择算符进行逻辑与 运算得出的结果。
scopes ([]string)
原子:将在合并期间被替换
一个匹配被配额跟踪的所有对象的过滤器集合。
如果没有指定,则默认匹配所有对象。
ResourceQuotaStatus
ResourceQuotaStatus 定义硬性限制和观测到的用量。
ResourceQuotaList
ResourceQuotaList 是 ResourceQuota 列表。
操作
get
读取指定的 ResourceQuota
HTTP 请求
GET /api/v1/namespaces/{namespace}/resourcequotas/{name}
参数
响应
200 (ResourceQuota ): OK
401: Unauthorized
get
读取指定的 ResourceQuota 的状态
HTTP 请求
GET /api/v1/namespaces/{namespace}/resourcequotas/{name}/status
参数
响应
200 (ResourceQuota ): OK
401: Unauthorized
list
列出或监视 ResourceQuota 类别的对象
HTTP 请求
GET /api/v1/namespaces/{namespace}/resourcequotas
参数
响应
200 (ResourceQuotaList ): OK
401: Unauthorized
list
列出或监视 ResourceQuota 类别的对象
HTTP 请求
GET /api/v1/resourcequotas
参数
响应
200 (ResourceQuotaList ): OK
401: Unauthorized
create
创建一个 ResourceQuota
HTTP 请求
POST /api/v1/namespaces/{namespace}/resourcequotas
参数
响应
200 (ResourceQuota ): OK
201 (ResourceQuota ): Created
202 (ResourceQuota ): Accepted
401: Unauthorized
update
更新指定的 ResourceQuota
HTTP 请求
PUT /api/v1/namespaces/{namespace}/resourcequotas/{name}
参数
响应
200 (ResourceQuota ): OK
201 (ResourceQuota ): Created
401: Unauthorized
update
更新指定 ResourceQuota 的状态
HTTP 请求
PUT /api/v1/namespaces/{namespace}/resourcequotas/{name}/status
参数
响应
200 (ResourceQuota ): OK
201 (ResourceQuota ): Created
401: Unauthorized
patch
部分更新指定的 ResourceQuota
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/resourcequotas/{name}
参数
响应
200 (ResourceQuota ): OK
201 (ResourceQuota ): Created
401: Unauthorized
patch
部分更新指定 ResourceQuota 的状态
HTTP 请求
PATCH /api/v1/namespaces/{namespace}/resourcequotas/{name}/status
参数
响应
200 (ResourceQuota ): OK
201 (ResourceQuota ): Created
401: Unauthorized
delete
删除 ResourceQuota
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/resourcequotas/{name}
参数
响应
200 (ResourceQuota ): OK
202 (ResourceQuota ): Accepted
401: Unauthorized
deletecollection
删除 ResourceQuota 的集合
HTTP 请求
DELETE /api/v1/namespaces/{namespace}/resourcequotas
参数
响应
200 (Status ): OK
401: Unauthorized
5.6.4 - NetworkPolicy
NetworkPolicy 描述针对一组 Pod 所允许的网络流量。
apiVersion: networking.k8s.io/v1
import "k8s.io/api/networking/v1"
NetworkPolicy
NetworkPolicy 描述针对一组 Pod 所允许的网络流量。
NetworkPolicySpec
NetworkPolicySpec 定义特定 NetworkPolicy 所需的所有信息.
podSelector (LabelSelector ),必需
podSelector 选择此网络策略所适用的一组 Pod。一组 Ingress 入口策略将应用于此字段选择的所有 Pod。
多个网络策略可以选择同一组 Pod。
在这种情况下,这些列表条目的 Ingress 规则效果会被叠加。此字段不是可选的,并且遵循标准标签选择算符语义。
空值的 podSelector 匹配此命名空间中的所有 Pod。
ingress ([]NetworkPolicyIngressRule)
原子:将在合并期间被替换
ingress 是应用到所选 Pod 的入站规则列表。在没有被任何 NetworkPolicy 选择到 Pod 的情况下(同时假定集群策略允许对应流量),
或者如果流量源是 Pod 的本地节点,或者流量与所有 NetworkPolicy 中的至少一个入站规则(Ingress) 匹配,
则进入 Pod 的流量是被允许的。如果此字段为空,则此 NetworkPolicy 不允许任何入站流量
(这种设置用来确保它所选择的 Pod 在默认情况下是被隔离的)。
NetworkPolicyIngressRule 定义 NetworkPolicySpec 的 podSelector 所选 Pod 的入站规则的白名单列表,
流量必须同时匹配 ports 和 from。
ingress.from ([]NetworkPolicyPeer)
原子:将在合并期间被替换
from 是流量来源列表,列表中的来源可以访问被此规则选中的 Pod。此列表中的流量来源使用逻辑或操作进行组合。
如果此字段为空值或缺失(未设置),
则此规则匹配所有流量来源(也即允许所有入站流量)。如果此字段存在并且至少包含一项来源,则仅当流量与来自列表中的至少一项匹配时,
此规则才允许流量访问被选中的 Pod 集合。
NetworkPolicyPeer 描述了允许进出流量的对等点。这个参数只允许某些字段组合。
ingress.from.ipBlock (IPBlock)
ipBlock 针对特定 IPBlock 定义策略。如果设置了此字段,则不可以设置其他字段。
IPBlock 定义一个特定的 CIDR 范围(例如 192.168.1.0/24
、2001:db8::/64
),
来自这个 IP 范围的流量来源将会被允许访问与 NetworkPolicySpec 的 podSelector 匹配的 Pod 集合。
except 字段则设置应排除在此规则之外的 CIDR 范围。
ingress.from.ipBlock.cidr (string),必需
cidr 是表示 IP 组块的字符串,例如 "192.168.1.0/24"
或 "2001:db8::/64"
。
ingress.from.ipBlock.except ([]string)
原子:将在合并期间被替换
except 是一个由 CIDR 范围组成的列表,其中指定的 CIDR 都应排除在此 IP 区块范围之外。
例如 "192.168.1.0/24"
或 "2001:db8::/64"
。
如果 except 字段的值超出 ipBlock.cidr 的范围则被视为无效策略。
ingress.from.namespaceSelector (LabelSelector )
namespaceSelector 使用集群范围标签来选择特定的 Namespace。此字段遵循标准标签选择算符语义;
如果此字段存在但为空值,则会选择所有名字空间。
如果 podSelector 也被定义了, 那么 NetworkPolicyPeer 将选择那些同时满足 namespaceSelector
所选名字空间下和 podSelector 规则匹配的 Pod。
反之选择 namespaceSelector 所选名字空间下所有的 Pod。
ingress.from.podSelector (LabelSelector )
podSelector 是负责选择 Pod 的标签选择算符。该字段遵循标准标签选择算符语义;如果字段存在但为空值,则选择所有 Pod。
如果 namespaceSelector 也被定义,那么 NetworkPolicyPeer 将选择那些同时满足 namespaceSelector
定义的名字空间下和 podSelector 规则匹配的 Pod。
反之会在策略所在的名字空间中选择与 podSelector 匹配的 Pod。
ingress.ports ([]NetworkPolicyPort)
原子:将在合并期间被替换
ports 是在此规则选中的 Pod 上应可访问的端口列表。此列表中的个项目使用逻辑或操作组合。如果此字段为空或缺失,
则此规则匹配所有端口(进入流量可访问任何端口)。
如果此字段存在并且包含至少一个有效值,则此规则仅在流量至少匹配列表中的一个端口时才允许访问。
NetworkPolicyPort 定义可以连接的端口
ingress.ports.port (IntOrString)
port 表示符合给定协议的端口。字段值可以是 Pod 上的数字或命名端口。如果未提供此字段,则匹配所有端口名和端口号。
如果定义了,则仅允许对给定的协议和端口的入口流量。
IntOrString 是一种可以包含 int32 或字符串值的类型。在 JSON 或 YAML 编组和解组中使用时,它会生成或使用内部类型。
例如,这允许你拥有一个可以接受名称或数字的 JSON 字段。
ingress.ports.endPort (int32)
endPort 表示如果设置了此字段,则策略应该允许 port 与 endPort 之间(包含二者)的所有端口。
如果未定义 port 或将 port 字段值为命名端口(字符串),则不可以使用 endPort。
endPort 必须等于或大于 port 值。
ingress.ports.protocol (string)
protocol 表示流量必须匹配的网络协议(TCP、UDP 或 SCTP)。如果未指定,此字段默认为 TCP。
egress ([]NetworkPolicyEgressRule)
原子:将在合并期间被替换
egress 是应用到所选 Pod 的出站规则的列表。如果没有 NetworkPolicy 选中指定 Pod(并且其他集群策略也允许出口流量),
或者在所有通过 podSelector 选中了某 Pod 的 NetworkPolicy 中,至少有一条出站规则与出站流量匹配,
则该 Pod 的出站流量是被允许的。
如果此字段为空,则此 NetworkPolicy 拒绝所有出站流量(这策略可以确保它所选中的 Pod 在默认情况下是被隔离的)。
egress 字段在 1.8 中为 Beta 级别。
NetworkPolicyEgressRule 针对被 NetworkPolicySpec 的 podSelector 所选中 Pod,描述其被允许的出站流量。
流量必须同时匹配 ports 和 to 设置。此类型在 1.8 中为 Beta 级别。
egress.to ([]NetworkPolicyPeer)
原子:将在合并期间被替换
to 是针对此规则所选择的 Pod 的出口流量的目的地列表。此列表中的目的地使用逻辑或操作进行组合。如果此字段为空或缺失,
则此规则匹配所有目的地(流量不受目的地限制)。如果此字段存在且至少包含一项目的地,则仅当流量与目标列表中的至少一个匹配时,
此规则才允许出口流量。
NetworkPolicyPeer 描述允许进出流量的对等点。这个对象只允许某些字段组合。
egress.to.ipBlock (IPBlock)
ipBlock 针对特定的 IP 区块定义策略。如果设置了此字段,则其他不可以设置其他字段。
IPBlock 描述一个特定的 CIDR 范围(例如 192.168.1.0/24
、2001:db8::/64
),
与 NetworkPolicySpec 的 podSelector 匹配的 Pod 将被允许连接到这个 IP 范围,作为其出口流量目的地。
except 字段则设置了不被此规则影响的 CIDR 范围。
egress.to.ipBlock.cidr (string),必需
cidr 是用来表达 IP 组块的字符串,例如 "192.168.1.0/24"
或 "2001:db8::/64"
。
egress.to.ipBlock.except ([]string)
原子:将在合并期间被替换
except 定义不应包含在 ipBlock 内的 CIDR 范围列表。例如 "192.168.1.0/24"
或 "2001:db8::/64"
。
如果 except 的值超出 ipBlock.cidr 的范围则被拒绝。
egress.to.namespaceSelector (LabelSelector )
namespaceSelector 使用集群范围标签来选择特定的名字空间。该字段遵循标准标签选择算符语义;
如果字段存在但为空值,那会选择所有名字空间。
如果 podSelector 也被定义了, 那么 NetworkPolicyPeer 将选择那些同时满足 namespaceSelector
指定的名字空间下和 podSelector 规则匹配的 Pod。
反之选择 namespaceSelector 指定的名字空间下所有的 Pod。
egress.to.podSelector (LabelSelector )
podSelector 是负责选择一组 Pod 的标签选择算符。该字段遵循标准标签选择算符语义;
如果字段存在但为空值,则选择所有 Pod。
如果 egress.to.namespaceSelector 也被定义,则 NetworkPolicyPeer 将选择 namespaceSelector
所指定的名字空间下和 podSelector 规则匹配的 Pod。
反之会在策略所属的名字空间中选择与 podSelector 匹配的 Pod。
egress.ports ([]NetworkPolicyPort)
原子:将在合并期间被替换
ports 是出站流量目的地的端口列表。此列表中的各个项目使用逻辑或操作进行组合。如果此字段为空或缺失,
则此规则匹配所有端口(可访问出口流量目的地的任何端口)。如果此字段存在并且包含至少一个有效值,
则此规则仅在流量与列表中的至少一个端口匹配时才允许访问。
NetworkPolicyPort 定义出口流量目的地的端口。
egress.ports.port (IntOrString)
port 表示符合给定协议的端口。字段值可以是 Pod 上的数字或命名端口。如果未提供此字段,则匹配所有端口名和端口号。
如果定义此字段,则仅允许针对给定的协议和端口的出站流量。
IntOrString 是一种可以包含 int32 或字符串值的类型。在 JSON 或 YAML 编组和解组中使用时,它会生成或使用内部类型。
例如,这允许你拥有一个可以接受名称或数字的 JSON 字段。
- **egress.ports.endPort** (int32)
如果设置了 endPort,则用来指定策略所允许的从 port 到 endPort 的端口范围(包含边界值)。
如果未设置 port 或 port 字段值为端口名称(字符串),则不可以指定 endPort。
endPort 必须等于或大于 port 值。
NetworkPolicyList
NetworkPolicyList 是 NetworkPolicy 的集合。
操作
get
读取指定的 NetworkPolicy
HTTP 请求
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
参数
name (路径参数 ): string,必需
NetworkPolicy 的名称。
响应
200 (NetworkPolicy ): OK
401: Unauthorized
list
列出或监视 NetworkPolicy 类型的对象
HTTP 请求
GET /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (NetworkPolicyList ): OK
401: Unauthorized
list
列出或监视 NetworkPolicy 类
HTTP Request
GET /apis/networking.k8s.io/v1/networkpolicies
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (NetworkPolicyList ): OK
401: Unauthorized
create
创建 NetworkPolicy
HTTP 请求
POST /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies
参数
响应
200 (NetworkPolicy ): OK
201 (NetworkPolicy ): Created
202 (NetworkPolicy ): Accepted
401: Unauthorized
update
替换指定的 NetworkPolicy
HTTP 请求
PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
参数
name (路径参数 ): string,必需
NetworkPolicy 的名称。
响应
200 (NetworkPolicy ): OK
201 (NetworkPolicy ): Created
401: Unauthorized
patch
部分更新指定的 NetworkPolicy
HTTP 请求
PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
参数
name (路径参数 ): string,必需
NetworkPolicy 的名称。
响应
200 (NetworkPolicy ): OK
201 (NetworkPolicy ): Created
401: Unauthorized
delete
删除 NetworkPolicy
HTTP 请求
DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 NetworkPolicy 的集合
HTTP 请求
DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies
参数
响应
200 (Status ): OK
401: Unauthorized
5.6.5 - PodDisruptionBudget
PodDisruptionBudget 是一个对象,用于定义可能对一组 Pod 造成的最大干扰。
apiVersion: policy/v1
import "k8s.io/api/policy/v1"
PodDisruptionBudget
PodDisruptionBudget 是一个对象,用于定义可能对一组 Pod 造成的最大干扰。
PodDisruptionBudgetSpec
PodDisruptionBudgetSpec 是对 PodDisruptionBudget 的描述。
maxUnavailable (IntOrString)
如果 “selector” 所选中的 Pod 中最多有 “maxUnavailable” Pod 在驱逐后不可用(即去掉被驱逐的 Pod 之后),则允许驱逐。
例如,可以通过将此字段设置为 0 来阻止所有自愿驱逐。此字段是与 “minAvailable” 互斥的设置。
IntOrString 是一种可以包含 int32 或字符串数值的类型。在 JSON 或 YAML 编组和解组时,
会生成或使用内部类型。例如,此类型允许你定义一个可以接受名称或数字的 JSON 字段。
minAvailable (IntOrString)
如果 “selector” 所选中的 Pod 中,至少 “minAvailable” 个 Pod 在驱逐后仍然可用(即去掉被驱逐的 Pod 之后),则允许驱逐。
因此,你可以通过将此字段设置为 “100%” 来禁止所有自愿驱逐。
IntOrString 是一种可以包含 int32 或字符串数值的类型。在 JSON 或 YAML 编组和解组时,
会生成或使用内部类型。例如,此类型允许你定义一个可以接受名称或数字的 JSON 字段。
selector (LabelSelector )
标签查询,用来选择其驱逐由干扰预算来管理的 Pod 集合。
选择算符为 null 时将不会匹配任何 Pod,而空 ({}) 选择算符将选中名字空间内的所有 Pod。
unhealthyPodEvictionPolicy (string)
unhealthyPodEvictionPolicy 定义不健康的 Pod 应被考虑驱逐时的标准。
当前的实现将健康的 Pod 视为具有 status.conditions 项且 type="Ready"、status="True" 的 Pod。
有效的策略是 IfHealthyBudget 和 AlwaysAllow。
如果没有策略被指定,则使用与 IfHealthyBudget 策略对应的默认行为。
IfHealthyBudget 策略意味着正在运行(status.phase="Running")但还不健康的 Pod
只有在被守护的应用未受干扰(status.currentHealthy 至少等于 status.desiredHealthy)
时才能被驱逐。健康的 Pod 将受到 PDB 的驱逐。
AlwaysAllow 策略意味着无论是否满足 PDB 中的条件,所有正在运行(status.phase="Running")但还不健康的
Pod 都被视为受干扰且可以被驱逐。这意味着受干扰应用的透视运行 Pod 可能没有机会变得健康。
健康的 Pod 将受到 PDB 的驱逐。
将来可能会添加其他策略。如果客户端在该字段遇到未识别的策略,则做出驱逐决定的客户端应禁止驱逐不健康的 Pod。
该字段是 Alpha 级别的。当特性门控 PDBUnhealthyPodEvictionPolicy 被启用(默认禁用)时,驱逐 API 使用此字段。
PodDisruptionBudgetStatus
PodDisruptionBudgetStatus 表示有关此 PodDisruptionBudget 状态的信息。状态可能会反映系统的实际状态。
disruptedPods (map[string]Time)
disruptedPods 包含有关 Pod 的一些信息,这些 Pod 的驱逐操作已由 API 服务器上的 eviction 子资源处理程序处理,
但尚未被 PodDisruptionBudget 控制器观察到。
从 API 服务器处理驱逐请求到 PDB 控制器看到该 Pod 已标记为删除(或超时后),Pod 将记录在此映射中。
映射中的键名是 Pod 的名称,键值是 API 服务器处理驱逐请求的时间。
如果删除没有发生并且 Pod 仍然存在,PodDisruptionBudget 控制器将在一段时间后自动将 Pod 从列表中删除。
如果一切顺利,此映射大部分时间应该是空的。映射中的存在大量条目可能表明 Pod 删除存在问题。
Time 是 time.Time 的包装器,它支持对 YAML 和 JSON 的正确编组。
time 包的许多工厂方法提供了包装器。
PodDisruptionBudgetList
PodDisruptionBudgetList 是 PodDisruptionBudget 的集合。
操作
get
读取指定的 PodDisruptionBudget
HTTP 请求
GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称。
响应
200 (PodDisruptionBudget ): OK
401: Unauthorized
get
读取指定 PodDisruptionBudget 的状态
HTTP 请求
GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称。
响应
200 (PodDisruptionBudget ): OK
401: Unauthorized
list
列出或监视 PodDisruptionBudget 类型的对象
HTTP 请求
GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (PodDisruptionBudgetList ): OK
401: Unauthorized
list
列出或监视 PodDisruptionBudget 类型的对象
HTTP 请求
GET /apis/policy/v1/poddisruptionbudgets
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (PodDisruptionBudgetList ): OK
401: Unauthorized
create
创建一个 PodDisruptionBudget
HTTP 请求
POST /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets
参数
响应
200 (PodDisruptionBudget ): OK
201 (PodDisruptionBudget ): Created
202 (PodDisruptionBudget ): Accepted
401: Unauthorized
update
替换指定的 PodDisruptionBudget
HTTP 请求
PUT /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称。
响应
200 (PodDisruptionBudget ): OK
201 (PodDisruptionBudget ): Created
401: Unauthorized
update
替换指定 PodDisruptionBudget 的状态
HTTP 请求
PUT /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称。
响应
200 (PodDisruptionBudget ): OK
201 (PodDisruptionBudget ): Created
401: Unauthorized
patch
部分更新指定的 PodDisruptionBudget
HTTP 请求
PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称
force (查询参数 ): boolean
force
响应
200 (PodDisruptionBudget ): OK
201 (PodDisruptionBudget ): Created
401: Unauthorized
patch
部分更新指定 PodDisruptionBudget 的状态
HTTP 请求
PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称。
force (查询参数 ): boolean
force
响应
200 (PodDisruptionBudget ): OK
201 (PodDisruptionBudget ): Created
401: Unauthorized
delete
删除 PodDisruptionBudget
HTTP 请求
DELETE /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
参数
name (路径参数 ): string,必需
PodDisruptionBudget 的名称。
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 PodDisruptionBudget 的集合
HTTP Request
DELETE /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.6.6 - PriorityLevelConfiguration v1
PriorityLevelConfiguration 表示一个优先级的配置。
apiVersion: flowcontrol.apiserver.k8s.io/v1
import "k8s.io/api/flowcontrol/v1"
PriorityLevelConfiguration
PriorityLevelConfiguration 表示一个优先级的配置。
PriorityLevelConfigurationSpec
PriorityLevelConfigurationSpec 指定一个优先级的配置。
exempt (ExemptPriorityLevelConfiguration)
exempt
指定了对于豁免优先级的请求如何处理。
如果 type
取值为 "Limited"
,则此字段必须为空。
如果 type
取值为 "Exempt"
,则此字段可以非空。
如果为空且 type
取值为 "Exempt"
,则应用 ExemptPriorityLevelConfiguration
的默认值。
ExemptPriorityLevelConfiguration 描述豁免请求处理的可配置方面。
在强制豁免配置对象中,与 spec
中的其余部分不同,此处字段的取值可以被授权用户修改。
exempt.lendablePercent (int32)
lendablePercent
规定该级别的 NominalCL 可被其他优先级租借的百分比。
此字段的值必须在 0 到 100 之间,包括 0 和 100,默认为 0。
其他级别可以从该级别借用的席位数被称为此级别的 LendableConcurrencyLimit(LendableCL),定义如下。
LendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )
exempt.nominalConcurrencyShares (int32)
nominalConcurrencyShares
(NCS)也被用来计算该级别的 NominalConcurrencyLimit(NominalCL)。
字段值是为该优先级保留的执行席位的数量。这一设置不限制此优先级别的调度行为,
但会通过借用机制影响其他优先级。服务器的并发限制(ServerCL)会按照各个优先级的 NCS 值按比例分配:
NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[priority level k] NCS(k)
较大的数字意味着更大的标称并发限制,且将影响其他优先级。此字段的默认值为零。
limited (LimitedPriorityLevelConfiguration)
limited
指定如何为某个受限的优先级处理请求。
当且仅当 type
是 "Limited"
时,此字段必须为非空。
LimitedPriorityLevelConfiguration 指定如何处理需要被限制的请求。它解决两个问题:
如何限制此优先级的请求?
应如何处理超出此限制的请求?
limited.borrowingLimitPercent (int32)
borrowingLimitPercent
配置如果存在,则可用来限制此优先级可以从其他优先级中租借多少资源。
该限制被称为该级别的 BorrowingConcurrencyLimit(BorrowingCL),它限制了该级别可以同时租借的资源总数。
该字段保存了该限制与该级别标称并发限制之比。当此字段非空时,必须为正整数,并按以下方式计算限制值:
BorrowingCL(i) = round(NominalCL(i) * borrowingLimitPercent(i) / 100.0)
该字段值可以大于100,表示该优先级可以大于自己标称并发限制(NominalCL)。当此字段为 nil
时,表示无限制。
limited.lendablePercent (int32)
lendablePercent
规定了 NominalCL 可被其他优先级租借资源数百分比。
此字段的值必须在 0 到 100 之间,包括 0 和 100,默认为 0。
其他级别可以从该级别借用的资源数被称为此级别的 LendableConcurrencyLimit(LendableCL),定义如下。
LendableCL(i) = round( NominalCL(i) * lendablePercent(i)/100.0 )
limited.limitResponse (LimitResponse)
limitResponse
指示如何处理当前无法立即执行的请求。
LimitResponse 定义如何处理当前无法立即执行的请求。
limited.limitResponse.queuing (QueuingConfiguration)
queuing
包含排队所用的配置参数。只有 type
是 "Queue"
时,此字段才可以为非空。
QueuingConfiguration 保存排队所用的配置参数。
limited.limitResponse.queuing.handSize (int32)
handSize
是一个小的正数,用于配置如何将请求随机分片到队列中。
当以该优先级将请求排队时,将对请求的流标识符(字符串对)进行哈希计算,
该哈希值用于打乱队列队列的列表,并处理此处指定的一批请求。
请求被放入这一批次中最短的队列中。
handSize
不得大于 queues
,并且应该明显更小(以便几个大的流量不会使大多数队列饱和)。
有关设置此字段的更多详细指导,请参阅面向用户的文档。此字段的默认值为 8。
limited.limitResponse.queuing.queueLengthLimit (int32)
queueLengthLimit
是任意时刻允许在此优先级的给定队列中等待的请求数上限;
额外的请求将被拒绝。
此值必须是正数。如果未指定,则默认为 50。
limited.limitResponse.queuing.queues (int32)
queues
是这个优先级的队列数。此队列在每个 API 服务器上独立存在。此值必须是正数。
将其设置为 1 相当于禁止了混洗分片操作,进而使得对相关流模式的区分方法不再有意义。
此字段的默认值为 64。
limited.nominalConcurrencyShares (int32)
nominalConcurrencyShares
(NCS)用于计算该优先级的标称并发限制(NominalCL)。
NCS 表示可以在此优先级同时运行的席位数量上限,包括来自本优先级的请求,
以及从此优先级租借席位的其他级别的请求。
服务器的并发度限制(ServerCL)根据 NCS 值按比例分别给各 Limited 优先级:
NominalCL(i) = ceil( ServerCL * NCS(i) / sum_ncs ) sum_ncs = sum[priority level k] NCS(k)
较大的数字意味着更大的标称并发限制,但是这将牺牲其他优先级的资源。
PriorityLevelConfigurationStatus
PriorityLevelConfigurationStatus 表示 “请求优先级” 的当前状况。
conditions ([]PriorityLevelConfigurationCondition)
补丁策略:基于键 type
合并
Map:合并期间保留根据键 type 保留其唯一值
conditions
是 “请求优先级” 的当前状况。
PriorityLevelConfigurationCondition 定义优先级的状况。
conditions.lastTransitionTime (Time)
lastTransitionTime
是状况上次从一个状态转换为另一个状态的时间。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。
为 time 包的许多函数方法提供了封装器。
conditions.message (string)
message
是人类可读的消息,指示有关上次转换的详细信息。
conditions.reason (string)
reason
是状况上次转换原因的、驼峰格式命名的、唯一的一个词。
PriorityLevelConfigurationList
PriorityLevelConfigurationList 是 PriorityLevelConfiguration 对象的列表。
操作
get
读取指定的 PriorityLevelConfiguration
HTTP 请求
GET /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}
参数
响应
200 (PriorityLevelConfiguration ): OK
401: Unauthorized
get
读取指定的 PriorityLevelConfiguration 的状态
HTTP 请求
GET /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}/status
参数
响应
200 (PriorityLevelConfiguration ): OK
401: Unauthorized
list
列出或监视 PriorityLevelConfiguration 类别的对象
HTTP 请求
GET /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations
参数
响应
200 (PriorityLevelConfigurationList ): OK
401: Unauthorized
create
创建 PriorityLevelConfiguration
HTTP 请求
POST /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations
参数
响应
200 (PriorityLevelConfiguration ): OK
201 (PriorityLevelConfiguration ): Created
202 (PriorityLevelConfiguration ): Accepted
401: Unauthorized
update
替换指定的 PriorityLevelConfiguration
HTTP 请求
PUT /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}
参数
响应
200 (PriorityLevelConfiguration ): OK
201 (PriorityLevelConfiguration ): Created
401: Unauthorized
update
替换指定的 PriorityLevelConfiguration 的状态
HTTP 请求
PUT /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}/status
参数
响应
200 (PriorityLevelConfiguration ): OK
201 (PriorityLevelConfiguration ): Created
401: Unauthorized
patch
部分更新指定的 PriorityLevelConfiguration
HTTP 请求
PATCH /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}
参数
响应
200 (PriorityLevelConfiguration ): OK
201 (PriorityLevelConfiguration ): Created
401: Unauthorized
patch
部分更新指定的 PriorityLevelConfiguration 的状态
HTTP 请求
PATCH /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}/status
参数
响应
200 (PriorityLevelConfiguration ): OK
201 (PriorityLevelConfiguration ): Created
401: Unauthorized
delete
删除 PriorityLevelConfiguration
HTTP 请求
DELETE /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 PriorityLevelConfiguration 的集合
HTTP 请求
DELETE /apis/flowcontrol.apiserver.k8s.io/v1/prioritylevelconfigurations
参数
响应
200 (Status ): OK
401: Unauthorized
5.7 - 扩展资源
5.7.1 - CustomResourceDefinition
CustomResourceDefinition 表示应在 API 服务器上公开的资源。
apiVersion: apiextensions.k8s.io/v1
import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
CustomResourceDefinition
CustomResourceDefinition 表示应在 API 服务器上公开的资源。其名称必须采用 <.spec.name>.<.spec.group>
格式。
CustomResourceDefinitionSpec
CustomResourceDefinitionSpec 描述了用户希望资源的呈现方式。
versions ([]CustomResourceDefinitionVersion),必需
原子:将在合并期间被替换
versions 是自定义资源的所有 API 版本的列表。版本名称用于计算服务版本在 API 发现中列出的顺序。
如果版本字符串与 Kubernetes 的版本号形式类似,则它将被排序在非 Kubernetes 形式版本字符串之前。
Kubernetes 的版本号字符串按字典顺序排列。Kubernetes 版本号以 “v” 字符开头,
后面是一个数字(主版本),然后是可选字符串 “alpha” 或 “beta” 和另一个数字(次要版本)。
它们首先按 GA > beta > alpha 排序(其中 GA 是没有 beta 或 alpha 等后缀的版本),然后比较主要版本,
最后是比较次要版本。版本排序列表示例:v10、v2、v1、v11beta2、v10beta3、v3beta1、v12alpha1、v11alpha2、foo1、foo10。
CustomResourceDefinitionVersion 描述 CRD 的一个版本。
versions.storage (boolean),必需
storage 表示在将自定义资源持久保存到存储时,应使用此版本。有且仅有一个版本的 storage=true。
versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)
原子:将在合并期间被替换
additionalPrinterColumns 表示在表输出中返回的附加列。
有关详细信息,请参阅 https://kubernetes.io/zh-cn/docs/reference/using-api/api-concepts/#receiving-resources-as-tables 。
如果没有指定列,则显示自定义资源存活时间(AGE)列。
CustomResourceColumnDefinition 指定用于服务器端打印的列。
versions.deprecated (boolean)
deprecated 表示此版本的自定义资源 API 已弃用。设置为 true 时,对此版本的 API
请求会在服务器响应头信息中带有警告(warning)信息。此值默认为 false。
versions.deprecationWarning (string)
deprecationWarning 会覆盖返回给 API 客户端的默认警告。只能在 deprecated
为 true 时设置。
默认警告表示此版本已弃用,建议使用最新的同等或更高稳定性版本(如果存在)。
versions.schema (CustomResourceValidation)
schema 描述了用于验证、精简和默认此版本的自定义资源的模式。
CustomResourceValidation 是 CustomResources 的验证方法列表。
versions.selectableFields ([]SelectableField)
原子:将在合并期间被替换
selectableFields 指定可用作字段选择器的字段路径,最多允许 8 个可选字段。
请参阅:https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/field-selectors
SelectableField 指定可与字段选择器一起使用的字段的 JSON 路径。
versions.selectableFields.jsonPath (string), required
jsonPath 是一个简单的 JSON 路径,它会根据每个自定义资源进行求值以生成字段选择器值。
只允许使用不带数组符号的 JSON 路径。必须指向字符串、布尔值或整数类型的字段。
允许使用枚举值类型和带格式的字符串。如果 jsonPath 引用资源中不存在的字段,则 jsonPath
的求值结果为空字符串。不得指向元数据字段。必需。
versions.subresources (CustomResourceSubresources)
subresources 指定此版本已定义的自定义资源具有哪些子资源。
CustomResourceSubresources 定义了 CustomResources 子资源的状态和规模。
versions.subresources.scale (CustomResourceSubresourceScale)
scale 表示自定义资源应该提供一个 /scale
子资源,该子资源返回一个 autoscaling/v1
Scale 对象。
CustomResourceSubresourceScale 定义了如何为 CustomResources 的 scale 子资源提供服务。
versions.subresources.scale.specReplicasPath (string),必需
specReplicasPath 定义对应于 Scale 的自定义资源内的 JSON 路径 spec.replicas
。
只允许没有数组表示法的 JSON 路径。必须是 .spec
下的 JSON 路径。
如果自定义资源中的给定路径下没有值,那么 GET /scale
子资源将返回错误。
versions.subresources.scale.statusReplicasPath (string),必需
statusReplicasPath 定义对应于 Scale 的自定义资源内的 JSON 路径 status.replicas
。
只允许不带数组表示法的 JSON 路径。必须是 .status
下的 JSON 路径。
如果自定义资源中给定路径下没有值,则 /scale
子资源中的 status.replicas
值将默认为 0。
versions.subresources.scale.labelSelectorPath (string)
labelSelectorPath 定义对应于 Scale 的自定义资源内的 JSON 路径 status.selector
。
只允许不带数组表示法的 JSON 路径。必须是 .status
或 .spec
下的路径。
必须设置为与 HorizontalPodAutoscaler 一起使用。
此 JSON 路径指向的字段必须是字符串字段(不是复杂的选择器结构),其中包含字符串形式的序列化标签选择器。
更多信息: https://kubernetes.io/zh-cn/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource 。
如果自定义资源中给定路径下没有值,则 /scale
子资源中的 status.selector
默认值为空字符串。
versions.subresources.status (CustomResourceSubresourceStatus)
status 表示自定义资源应该为 /status
子资源服务。当启用时:
对自定义资源主端点的请求会忽略对对象 status
节的改变;
对自定义资源 /status
子资源的请求忽略对对象 status
节以外的任何变化。
CustomResourceSubresourceStatus 定义了如何为自定义资源提供 status 子资源。
状态由 CustomResource 中的 .status
JSON 路径表示。设置后,
为自定义资源提供一个 /status
子资源。
向 /status
子资源发出的 PUT 请求时,需要提供自定义资源对象,服务器端会忽略对 status 节以外的任何内容更改。
对自定义资源的 PUT/POST/PATCH 请求会忽略对 status 节的更改。
conversion (CustomResourceConversion)
conversion 定义了 CRD 的转换设置。
CustomResourceConversion 描述了如何转换不同版本的自定义资源。
conversion.strategy (string),必需
strategy 指定如何在版本之间转换自定义资源。允许的值为:
"None"
:转换器仅更改 apiVersion 并且不会触及自定义资源中的任何其他字段。
"Webhook"
:API 服务器将调用外部 Webhook 进行转换。此选项需要其他信息。这要求
spec.preserveUnknownFields 为 false,并且设置 spec.conversion.webhook。
conversion.webhook (WebhookConversion)
webhook 描述了如何调用转换 Webhook。当 strategy
设置为 "Webhook"
时有效。
WebhookConversion 描述了如何调用转换 Webhook
原子:将在合并期间被替换
conversion.webhook.conversionReviewVersions ([]string),必需
conversionReviewVersions 是 Webhook 期望的 ConversionReview
版本的有序列表。
API 服务器将使用它支持的列表中的第一个版本。如果 API 服务器不支持此列表中指定的版本,则自定义资源的转换将失败。
如果持久化的 Webhook 配置指定了允许的版本但其中不包括 API 服务器所了解的任何版本,则对 Webhook 的调用将失败。
conversion.webhook.clientConfig (WebhookClientConfig)
如果 strategy 是 Webhook
,那么 clientConfig 是关于如何调用 Webhook 的说明。
WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息。
conversion.webhook.clientConfig.caBundle ([]byte)
caBundle 是一个 PEM 编码的 CA 包,用于验证 Webhook 服务器的服务证书。
如果未指定,则使用 API 服务器上的系统根证书。
conversion.webhook.clientConfig.service (ServiceReference)
service 是对此 Webhook 服务的引用。必须指定 service 或 url 字段之一。
如果在集群中运行 Webhook,那么你应该使用 service
。
ServiceReference 保存对 Service.legacy.k8s.io 的一个引用。
conversion.webhook.clientConfig.service.namespace (string),必需
namespace 是服务的命名空间。必需。
conversion.webhook.clientConfig.service.path (string)
path 是一个可选的 URL 路径,Webhook 将通过该路径联系服务。
conversion.webhook.clientConfig.service.port (int32)
port 是 Webhook 联系的可选服务端口。port
应该是一个有效的端口号(1-65535,包含)。
为实现向后兼容,默认端口号为 443。
conversion.webhook.clientConfig.url (string)
url 以标准 URL 的形式(scheme://host:port/path
)给出 Webhook 的位置。url
或 service
必须指定一个且只能指定一个。
host
不应引用集群中运行的服务;若使用集群内服务应改为使用 service
字段。
host 值可能会通过外部 DNS 解析(例如,kube-apiserver
无法解析集群内 DNS,因为这将违反分层规则)。
host
也可能是 IP 地址。
请注意,使用 localhost
或 127.0.0.1
作为 host
是有风险的,
除非你非常小心地在所有运行 API 服务器的主机上运行这个 Webhook,因为这些 API 服务器可能需要调用这个 Webhook。
这样的安装可能是不可移植的,也就是说,不容易在一个新的集群中复现。
scheme 必须是 "https";URL 必须以 "https://" 开头。
路径(path)是可选的,如果存在,则可以是 URL 中允许的任何字符串。
你可以使用路径传递一个任意字符串给 Webhook,例如,一个集群标识符。
不允许使用用户或基本认证,例如 "user:password@",是不允许的。片段("#...")和查询参数("?...")也是不允许的。
preserveUnknownFields (boolean)
preserveUnknownFields 表示将对象写入持久性存储时应保留 OpenAPI 模式中未规定的对象字段。
apiVersion、kind、元数据(metadata)和元数据中的已知字段始终保留。不推荐使用此字段,而建议在
spec.versions[*].schema.openAPIV3Schema
中设置 x-preserve-unknown-fields
为 true。
更多详细信息参见:
https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#field-pruning
JSONSchemaProps
JSONSchemaProps 是JSON 模式(JSON-Schema),遵循其规范草案第 4 版(http://json-schema.org/)。
$ref (string)
$schema (string)
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool 表示 JSONSchemaProps 或布尔值。布尔属性默认为 true。
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool 表示 JSONSchemaProps 或布尔值。布尔属性默认为 true。
allOf ([]JSONSchemaProps )
原子:将在合并期间被替换
anyOf ([]JSONSchemaProps )
原子:将在合并期间被替换
default (JSON)
default 是未定义对象字段的默认值。设置默认值操作是 CustomResourceDefaulting 特性门控所控制的一个 Beta 特性。
应用默认值设置时要求 spec.preserveUnknownFields 为 false。
JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。
definitions (map[string]JSONSchemaProps )
dependencies (map[string]JSONSchemaPropsOrStringArray)
JSONSchemaPropsOrStringArray 表示 JSONSchemaProps 或字符串数组。
description (string)
enum ([]JSON)
原子:将在合并期间被替换
JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。
example (JSON)
JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。
exclusiveMaximum (boolean)
exclusiveMinimum (boolean)
externalDocs (ExternalDocumentation)
ExternalDocumentation 允许引用外部资源作为扩展文档。
format (string)
format 是 OpenAPI v3 格式字符串。未知格式将被忽略。以下格式会被验证合法性:
bsonobjectid:一个 bson 对象的 ID,即一个 24 个字符的十六进制字符串
uri:由 Go 语言 net/url.ParseRequestURI 解析得到的 URI
email:由 Go 语言 net/mail.ParseAddress 解析得到的电子邮件地址
hostname:互联网主机名的有效表示,由 RFC 1034 第 3.1 节 [RFC1034] 定义
ipv4:由 Go 语言 net.ParseIP 解析得到的 IPv4 协议的 IP
ipv6:由 Go 语言 net.ParseIP 解析得到的 IPv6 协议的 IP
cidr:由 Go 语言 net.ParseCIDR 解析得到的 CIDR
mac:由 Go 语言 net.ParseMAC 解析得到的一个 MAC 地址
uuid:UUID,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
uuid3:UUID3,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
uuid4:UUID4,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
uuid5:UUID5,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
isbn:一个 ISBN10 或 ISBN13 数字字符串,如 "0321751043" 或 "978-0321751041"
isbn10:一个 ISBN10 数字字符串,如 "0321751043"
isbn13:一个 ISBN13 号码字符串,如 "978-0321751041"
creditcard:信用卡号码,满足正则表达式
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$,
其中混合任意非数字字符
ssn:美国社会安全号码,满足正则表达式 ^\d{3}[- ]?\d{2}[- ]?\d{4}$
hexcolor:一个十六进制的颜色编码,如 "#FFFFFF",满足正则表达式 ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
rgbcolor:一个 RGB 颜色编码 例如 "rgb(255,255,255)"
byte:base64 编码的二进制数据
password:任何类型的字符串
date:类似 "2006-01-02" 的日期字符串,由 RFC3339 中的完整日期定义
duration:由 Go 语言 time.ParseDuration 解析的持续时长字符串,如 "22 ns",或与 Scala 持续时间格式兼容。
datetime:一个日期时间字符串,如 "2014-12-15T19:30:20.000Z",由 RFC3339 中的 date-time 定义。
id (string)
items (JSONSchemaPropsOrArray)
JSONSchemaPropsOrArray 表示可以是 JSONSchemaProps 或 JSONSchemaProps 数组的值。这里目的主要用于序列化。
maxItems (int64)
maxLength (int64)
maxProperties (int64)
maximum (double)
minItems (int64)
minLength (int64)
minProperties (int64)
minimum (double)
multipleOf (double)
not (JSONSchemaProps )
nullable (boolean)
oneOf ([]JSONSchemaProps )
原子:将在合并期间被替换
pattern (string)
patternProperties (map[string]JSONSchemaProps )
properties (map[string]JSONSchemaProps )
required ([]string)
原子:将在合并期间被替换
title (string)
type (string)
uniqueItems (boolean)
x-kubernetes-embedded-resource (boolean)
x-kubernetes-embedded-resource 定义该值是一个嵌入式 Kubernetes runtime.Object,具有 TypeMeta 和 ObjectMeta。
类型必须是对象。允许进一步限制嵌入对象。会自动验证 kind、apiVersion 和 metadata 等字段值。
x-kubernetes-preserve-unknown-fields 允许为 true,但如果对象已完全指定
(除 kind、apiVersion、metadata 之外),则不必为 true。
x-kubernetes-int-or-string (boolean)
x-kubernetes-int-or-string 指定此值是整数或字符串。如果为 true,则允许使用空类型,
并且如果遵循以下模式之一,则允许作为 anyOf 的子类型:
anyOf:
type: integer
type: string
allOf:
anyOf:
type: integer
type: string
x-kubernetes-list-map-keys ([]string)
原子:将在合并期间被替换
X-kubernetes-list-map-keys 通过指定用作 map 索引的键来使用 x-kubernetes-list-type map
注解数组。
这个标签必须只用于 "x-kubernetes-list-type" 扩展设置为 "map" 的列表。
而且,为这个属性指定的值必须是子结构的标量类型的字段(不支持嵌套)。
指定的属性必须是必需的或具有默认值,以确保所有列表项都存在这些属性。
x-kubernetes-list-type (string)
x-kubernetes-list-type 注解一个数组以进一步描述其拓扑。此扩展名只能用于列表,并且可能有 3 个可能的值:
atomic
:
列表被视为单个实体,就像标量一样。原子列表在更新时将被完全替换。这个扩展可以用于任何类型的列表(结构,标量,…)。
set
:
set 是不能有多个具有相同值的列表。每个值必须是标量、具有 x-kubernetes-map-type
atomic
的对象或具有 x-kubernetes-list-type atomic
的数组。
map
:
这些列表类似于映射表,因为它们的元素具有用于标识它们的非索引键。合并时保留顺序。
map 标记只能用于元数类型为 object 的列表。
数组默认为原子数组。
x-kubernetes-map-type (string)
x-kubernetes-map-type 注解一个对象以进一步描述其拓扑。此扩展只能在 type 为 object 时使用,并且可能有 2 个可能的值:
granular
:
这些 map 是真实的映射(键值对),每个字段都是相互独立的(它们都可以由不同的角色来操作)。
这是所有 map 的默认行为。
atomic
:map 被视为单个实体,就像标量一样。原子 map 更新后将被完全替换。
x-kubernetes-preserve-unknown-fields (boolean)
x-kubernetes-preserve-unknown-fields 针对未在验证模式中指定的字段,禁止 API 服务器的解码步骤剪除这些字段。
这一设置对字段的影响是递归的,但在模式中指定了嵌套 properties 或 additionalProperties 时,会切换回正常的字段剪除行为。
该值可为 true 或 undefined,不能为 false。
x-kubernetes-validations ([]ValidationRule)
补丁策略:基于键 rule
合并
Map:合并时将保留 rule 键的唯一值
x-kubernetes-validations 描述了用 CEL 表达式语言编写的验证规则列表。此字段是 Alpha 级别。
ValidationRule 描述用 CEL 表达式语言编写的验证规则。
x-kubernetes-validations.rule (string),必需
rule 表示将由 CEL 评估的表达式。参考: https://github.com/google/cel-spec 。
rule 的作用域为模式中的 x-kubernetes-validation 扩展所在的位置。CEL 表达式中的 self
与作用域值绑定。
例子:rule 的作用域是一个具有状态子资源的资源根:{"rule": "self.status.actual <= self.spec.maxDesired"}。
如果 rule 的作用域是一个带有属性的对象,那么该对象的可访问属性是通过 self
进行字段选择的,
并且可以通过 has(self.field)
来检查字段是否存在。在 CEL 表达式中,Null 字段被视为不存在的字段。
如果该 rule 的作用域是一个带有附加属性的对象(例如一个 map),那么该 map 的值可以通过
self[mapKey]
来访问,map 是否包含某主键可以通过 mapKey in self
来检查。
map 中的所有条目都可以通过 CEL 宏和函数(如 self.all(...)
)访问。
如果 rule 的作用域是一个数组,数组的元素可以通过 self[i]
访问,也可以通过宏和函数访问。
如果 rule 的作用域为标量,self
绑定到标量值。举例:
rule 作用域为对象映射:{"rule": "self.components['Widget'].priority < 10"}
rule 作用域为整数列表:{"rule": "self.values.all(value, value >= 0 && value < 100)"}
rule 作用域为字符串值:{"rule": "self.startsWith('kube')"}
apiVersion
、kind
、metadata.name
和 metadata.generateName
总是可以从对象的根和任何带
x-kubernetes-embedded-resource 注解的对象访问。其他元数据属性都无法访问。
在 CEL 表达式中无法访问通过 x-kubernetes-preserve-unknown-fields 保存在自定义资源中的未知数据。
这包括:
只有名称符合正则表达式 [a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的属性才可被访问。
在表达式中访问属性时,可访问的属性名称根据以下规则进行转义:
对 x-kubernetes-list-type 为 'set' 或 'map' 的数组进行比较时忽略元素顺序,如:[1, 2] == [2, 1]。
使用 x-kubernetes-list-type 对数组进行串接使用下列类型的语义:
'set':X + Y
执行合并,其中 X
保留所有元素的数组位置,并附加不相交的元素 Y
,保留其局部顺序。
'map':X + Y
执行合并,保留 X
中所有键的数组位置,但当 X
和 Y
的键集相交时,会被 Y
中的值覆盖。
添加 Y
中具有不相交键的元素,保持其局顺序。
如果 rule
使用 oldSelf
变量,则隐式地将其视为一个 转换规则(transition rule)
。
默认情况下,oldSelf
变量与 self
类型相同。当 optionalOldSelf
为 true
时,oldSelf
变量是 CEL 可选变量,其 value()
与 self
类型相同。
有关详细信息,请参阅 optionalOldSelf
字段的文档。
默认情况下,转换规则仅适用于 UPDATE 请求,如果找不到旧值,则会跳过转换规则。
你可以通过将 optionalOldSelf
设置为 true
来使转换规则进行无条件求值。
x-kubernetes-validations.fieldPath (string)
fieldPath 表示验证失败时返回的字段路径。
它必须是相对 JSON 路径(即,支持数组表示法),范围仅限于此 x-kubernetes-validations
扩展在模式的位置,并引用现有字段。
例如,当验证检查 testMap
映射下是否有 foo
属性时,可以将 fieldPath 设置为 .testMap.foo
。
如果验证需要确保两个列表具有各不相同的属性,则可以将 fieldPath 设置到其中任一列表,例如 .testList
。
它支持使用子操作引用现有字段,而不支持列表的数字索引。
有关更多信息,请参阅 Kubernetes 中的 JSONPath 支持 。
因为其不支持数组的数字索引,所以对于包含特殊字符的字段名称,请使用 ['specialName']
来引用字段名称。
例如,对于出现在列表 testList
中的属性 foo.34$
,fieldPath 可以设置为 .testList['foo.34$']
。
x-kubernetes-validations.message (string)
message 表示验证失败时显示的消息。如果规则包含换行符,则需要该消息。消息不能包含换行符。
如果未设置,则消息为 "failed rule: {Rule}",如:"must be a URL with the host matching spec.host"
x-kubernetes-validations.messageExpression (string)
messageExpression 声明一个 CEL 表达式,其计算结果是此规则失败时返回的验证失败消息。
由于 messageExpression 用作失败消息,因此它的值必须是一个字符串。
如果在规则中同时存在 message 和 messageExpression,则在验证失败时使用 messageExpression。
如果是 messageExpression 出现运行时错误,则会记录运行时错误,并生成验证失败消息,
就好像未设置 messageExpression 字段一样。如果 messageExpression 求值为空字符串、
只包含空格的字符串或包含换行符的字符串,则验证失败消息也将像未设置 messageExpression 字段一样生成,
并记录 messageExpression 生成空字符串/只包含空格的字符串/包含换行符的字符串的事实。
messageExpression 可以访问的变量与规则相同;唯一的区别是返回类型。
例如:"x must be less than max ("+string(self.max)+")"。
x-kubernetes-validations.optionalOldSelf (boolean)
即使在对象首次创建时,或者旧对象无值时,也可以使用 optionalOldSelf
来使用转换规则求值。
当启用了 optionalOldSelf
时,oldSelf
将是 CEL 可选项,如果没有旧值或最初创建对象时,其值将为 None
。
你可以使用 oldSelf.hasValue()
检查 oldSelf 是否存在,并在检查后使用 oldSelf.value()
将其解包。
更多的信息可查看 CEL 文档中的 Optional 类型:https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypes
除非在 rule
中使用了 oldSelf
,否则不可以设置。
x-kubernetes-validations.reason (string)
reason 提供机器可读的验证失败原因,当请求未通过此验证规则时,该原因会返回给调用者。
返回给调用者的 HTTP 状态代码将与第一个失败的验证规则的原因相匹配。
目前支持的原因有:FieldValueInvalid
、FieldValueForbidden
、FieldValueRequired
、FieldValueDuplicate
。
如果未设置,则默认使用 FieldValueInvalid
。
所有未来添加的原因在读取该值时必须被客户端接受,未知原因应被视为 FieldValueInvalid
。
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus 表示 CustomResourceDefinition 的状态。
acceptedNames (CustomResourceDefinitionNames)
acceptedNames 是实际用于服务发现的名称。它们可能与规约(spec)中的名称不同。
CustomResourceDefinitionNames 表示提供此 CustomResourceDefinition 资源的名称。
acceptedNames.plural (string),必需
plural 是所提供的资源的复数名称,自定义资源在 /apis/<group>/<version>/.../<plural>
下提供。
必须与 CustomResourceDefinition 的名称匹配(格式为 <names.plural>.<group>
)。必须全部小写。
acceptedNames.categories ([]string)
原子:将在合并期间被替换
categories 是此自定义资源所属的分组资源列表(例如 'all')。
它在 API 发现文档中发布,并被客户端用于支持像 kubectl get all
这样的调用。
acceptedNames.listKind (string)
listKind 是此资源列表的序列化类型。默认为 "<kind>List
"。
acceptedNames.shortNames ([]string)
原子:将在合并期间被替换
shortNames 是资源的短名称,在 API 发现文档中公开,并支持客户端调用,如 kubectl get <shortname>
。必须全部小写。
acceptedNames.singular (string)
singular 是资源的单数名称。必须全部小写。默认为小写形式的 kind
。
conditions ([]CustomResourceDefinitionCondition)
Map:合并时将保留 type 键的唯一值
conditions 表示 CustomResourceDefinition 特定方面的状态
CustomResourceDefinitionCondition 包含此 Pod 当前状况的详细信息。
conditions.type (string),必需
type 是条件的类型。类型包括:Established、NamesAccepted 和 Terminating。
conditions.lastTransitionTime (Time)
lastTransitionTime 是上一次发生状况状态转换的时间。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。
conditions.message (string)
message 是有关上次转换的详细可读信息。
conditions.reason (string)
reason 表述状况上次转换原因的、驼峰格式命名的、唯一的一个词。
storedVersions ([]string)
原子:将在合并期间被替换
storedVersions 列出了曾经被持久化的所有 CustomResources 版本。跟踪这些版本可以为 etcd 中的存储版本提供迁移路径。
该字段是可变的,因此迁移控制器可以完成到另一个版本的迁移(确保存储中没有遗留旧对象),然后从该列表中删除其余版本。
当版本在此列表中时,则不能从 spec.versions
中删除。
CustomResourceDefinitionList
CustomResourceDefinitionList 是 CustomResourceDefinition 对象的列表。
Operations
get
读取指定的 CustomResourceDefinition
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
响应
200 (CustomResourceDefinition ): OK
401: Unauthorized
get
读取指定 CustomResourceDefinition 的状态
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
响应
200 (CustomResourceDefinition ): OK
401: Unauthorized
list
列出或观察 CustomResourceDefinition 类型的对象
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
响应
200 (CustomResourceDefinitionList ): OK
401: Unauthorized
create
创建一个 CustomResourceDefinition
HTTP 请求
POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
响应
200 (CustomResourceDefinition ): OK
201 (CustomResourceDefinition ): Created
202 (CustomResourceDefinition ): Accepted
401: Unauthorized
update
替换指定的 CustomResourceDefinition
HTTP 请求
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
响应
200 (CustomResourceDefinition ): OK
201 (CustomResourceDefinition ): Created
401: Unauthorized
update
替换指定 CustomResourceDefinition 的状态
HTTP 请求
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
响应
200 (CustomResourceDefinition ): OK
201 (CustomResourceDefinition ): Created
401: Unauthorized
patch
部分更新指定的 CustomResourceDefinition
HTTP 请求
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
响应
200 (CustomResourceDefinition ): OK
201 (CustomResourceDefinition ): Created
401: Unauthorized
patch
部分更新指定 CustomResourceDefinition 的状态
HTTP 请求
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
响应
200 (CustomResourceDefinition ): OK
201 (CustomResourceDefinition ): Created
401: Unauthorized
delete
删除一个 CustomResourceDefinition
HTTP 请求
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 CustomResourceDefinition 的集合
HTTP 请求
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
响应
200 (Status ): OK
401: Unauthorized
5.7.2 - DeviceClass v1alpha3
DeviceClass 是由供应商或管理员提供的资源,包含设备配置和选择算符。
apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
DeviceClass
DeviceClass 是由供应商或管理员提供的资源,包含设备配置和选择算符。
它可以在申领的设备请求中被引用,以应用预设值。作用域为集群范围。
这是一个 Alpha 阶段的资源类别,需要启用 DynamicResourceAllocation 特性门控。
spec (DeviceClassSpec ),必需
spec 定义什么可以被分配以及如何进行配置。
此字段是可变更的。消费者必须准备好应对随时会变更的类,变更的原因可能是被更新或被替换。
申领分配是基于分配之时类中所设置的内容而确定的。
变更 spec 会让 metadata.generation 编号自动递增。
DeviceClassSpec
DeviceClassSpec 在 DeviceClass 中用于定义可以分配的资源及其配置方式。
config ([]DeviceClassConfiguration)
原子:将在合并期间被替换
config 定义通过此类申领的、适用于每台设备的配置参数。
某些类可能会由多个驱动所满足,因此每个供应商配置的实例仅适用于一个驱动。
这些配置参数被传递给驱动,但在分配申领时不考虑这些配置参数。
DeviceClassConfiguration 在 DeviceClass 中使用。
suitableNodes (NodeSelector)
当 Pod 使用还未分配的申领且 该申领通过控制平面控制器分配时,如果调度器在尝试查找适合 Pod 的节点,
将仅考虑与选择算符匹配的节点。当申领不使用控制平面控制器进行分配时,此字段将被忽略。
设置此字段是可选的,如果不设置,则所有节点都是候选者。
这是一个 Alpha 字段,需要启用 DRAControlPlaneController 特性门控。
节点选择算符表示针对一组节点执行一个或多个标签查询的结果的并集;
也就是说,它表示由节点选择算符条件表示的选择算符的逻辑或计算结果。
suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm),必需
原子:将在合并期间被替换
必需。节点选择算符条件的列表。这些条件会按逻辑或的关系来计算。
Null 或空的节点选择算符条件不会与任何对象匹配。这些条件会按逻辑与的关系来计算。
TopologySelectorTerm 类别实现了 NodeSelectorTerm 的子集。
DeviceClassList
DeviceClassList 是类的集合。
操作
get
读取指定的 DeviceClass
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
name (路径参数 ):string,必需
DeviceClass 的名称。
pretty (查询参数 ):string
pretty
响应
200 (DeviceClass ): OK
401: Unauthorized
list
列举或监视 DeviceClass 类别的对象
HTTP 请求
GET /apis/resource.k8s.io/v1alpha3/deviceclasses
参数
响应
200 (DeviceClassList ): OK
401: Unauthorized
create
创建 DeviceClass
HTTP 请求
POST /apis/resource.k8s.io/v1alpha3/deviceclasses
参数
响应
200 (DeviceClass ): OK
201 (DeviceClass ): Created
202 (DeviceClass ): Accepted
401: Unauthorized
update
替换指定的 DeviceClass
HTTP 请求
PUT /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
响应
200 (DeviceClass ): OK
201 (DeviceClass ): Created
401: Unauthorized
patch
部分更新指定的 DeviceClass
HTTP 请求
PATCH /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
响应
200 (DeviceClass ): OK
201 (DeviceClass ): Created
401: Unauthorized
delete
删除 DeviceClass
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
参数
响应
200 (DeviceClass ): OK
202 (DeviceClass ): Accepted
401: Unauthorized
deletecollection
删除 DeviceClass 的集合
HTTP 请求
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses
参数
响应
200 (Status ): OK
401: Unauthorized
5.7.3 - MutatingWebhookConfiguration
MutatingWebhookConfiguration 描述准入 Webhook 的配置,该 Webhook 可在更改对象的情况下接受或拒绝对象请求
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration
MutatingWebhookConfiguration 描述准入 Webhook 的配置,该 Webhook 可接受或拒绝对象请求,并且可能变更对象。
webhooks ([]MutatingWebhook)
补丁策略:根据 name
键执行合并操作
映射:基于 name
键的唯一值将在合并期间被保留
webhooks 是 Webhook 及其所影响的资源和操作的列表。
MutatingWebhook 描述了一个准入 Webhook 及其适用的资源和操作。
webhooks.admissionReviewVersions ([]string), 必需
原子性:将在合并期间被替换
admissionReviewVersions 是 Webhook 期望的 AdmissionReview
版本的优选顺序列表。
API 服务器将尝试使用它所支持的版本列表中的第一个版本。如果 API 服务器不支持此列表中设置的任何版本,则此对象将验证失败。
如果持久化的 Webhook 配置指定了所允许的版本,但其中不包括 API 服务器所知道的任何版本,
则对 Webhook 的调用将失败并根据失败策略进行处理。
webhooks.clientConfig (WebhookClientConfig), 必需
clientConfig 定义了如何与 Webhook 通信。必需。
WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息
webhooks.clientConfig.service (ServiceReference)
service
是对此 Webhook 的服务的引用。必须指定 service
或 url
之一。
如果 Webhook 在集群中运行,那么你应该使用 service
。
ServiceReference 包含对 Service.legacy.k8s.io 的引用
webhooks.clientConfig.url (string)
url
以标准 URL 形式(scheme://host:port/path
)给出了 Webhook 的位置。必须指定 url
或 service
中的一个。
host
不能用来引用集群中运行的服务;这种情况应改用 service
字段。在某些 API 服务器上,可能会通过外部 DNS 解析 host
值。
(例如,kube-apiserver
无法解析集群内 DNS,因为这会违反分层原理)。host
也可以是 IP 地址。
请注意,使用 localhost
或 127.0.0.1
作为 host
是有风险的,除非你非常小心地在运行 apiserver 的所有主机上运行此 Webhook,
而这些 API 服务器可能需要调用此 Webhook。此类部署可能是不可移植的,即不容易在新集群中重复安装。
该方案必须是 “https”;URL 必须以 “https://” 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。你可以使用路径将任意字符串传递给 Webhook,例如集群标识符。
不允许使用用户或基本身份验证,例如不允许使用 “user:password@”。
不允许使用片段(“#...”)和查询参数(“?...”)。
webhooks.name (string), 必需
准入 Webhook 的名称。应该是完全限定的名称,例如 imagepolicy.kubernetes.io,其中 “imagepolicy” 是 Webhook 的名称,
kubernetes.io 是组织的名称。必需。
webhooks.sideEffects (string), 必需
sideEffects 说明此 Webhook 是否有副作用。可接受的值为:None、NoneOnDryRun
(通过 v1beta1 创建的 Webhook 也可以指定 Some 或 Unknown)。
具有副作用的 Webhook 必须实现协调系统,因为请求可能会被准入链中的未来步骤拒绝,因此需要能够撤消副作用。
如果请求与带有 sideEffects == Unknown 或 Some 的 Webhook 匹配,则带有 dryRun 属性的请求将被自动拒绝。
webhooks.matchConditions ([]MatchCondition)
补丁策略:根据 name
键执行合并操作
映射:键 name
的唯一值将在合并过程中保留
matchConditions 是将请求发送到此 webhook 之前必须满足的条件列表。
匹配条件过滤已经被 rules、namespaceSelector、objectSelector 匹配的请求。
matchConditions 取值为空列表时匹配所有请求。最多允许 64 个匹配条件。
精确匹配逻辑是(按顺序):
如果任一 matchCondition 的计算结果为 FALSE,则跳过该 webhook。
如果所有 matchConditions 的计算结果为 TRUE,则调用该 webhook。
如果任一 matchCondition 的计算结果为错误(但都不是 FALSE):
如果 failurePolicy=Fail,拒绝该请求;
如果 failurePolicy=Ignore,忽略错误并跳过该 webhook。
MatchCondition 表示将请求发送到 Webhook 之前必须满足的条件。
webhooks.matchConditions.expression (string), 必需
expression 表示将由 CEL 求值的表达式。求值结果必须是 bool 值。CEL 表达式可以访问
以 CEL 变量的形式给出的 AdmissionRequest 和 Authorizer 的内容:
'authorizer.requestResource' - CEL ResourceCheck 从"授权方"构建并配置请求资源。
CEL 文档: https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
此字段为必需字段。
webhooks.matchConditions.name (string), 必需
name 是此匹配条件的标识符,用于 MatchConditions 的策略性合并,
以及提供用于日志目的的标识符。一个好的 name 应该是对相关表达式的描述。
name 必须是由字母数字字符 -
、_
或 .
组成的限定名称,
并且必须以字母、数字字符开头和结尾(例如 MyName
、my.name
或 123-abc
,
用于验证 name 的正则表达式是 ([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]
)。
带有可选的 DNS 子域前缀和 /
(例如 example.com/MyName
)
此字段为必需字段。
webhooks.matchPolicy (string)
matchPolicy 定义了如何使用 “rules” 列表来匹配传入的请求。允许的值为 “Exact” 或 “Equivalent”。
Exact: 仅当请求与指定规则完全匹配时才匹配请求。
例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源,
但 “rules” 仅包含 apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments"]
,
对 apps/v1beta1 或 extensions/v1beta1 的请求不会被发送到 Webhook。
Equivalent: 如果针对的资源包含在 “rules” 中,即使请求是通过另一个 API 组或版本提交,也会匹配。
例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源,
并且 “rules” 仅包含 apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments "]
,
对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 Webhook。
默认为 “Equivalent”。
webhooks.namespaceSelector (LabelSelector )
namespaceSelector 根据对象的命名空间是否与 selector 匹配来决定是否在该对象上运行 Webhook。
如果对象本身是 Namespace,则针对 object.metadata.labels 执行匹配。
如果对象是其他集群作用域资源,则永远不会跳过 Webhook 的匹配动作。
例如,为了针对 “runlevel” 不为 “0” 或 “1” 的名字空间中的所有对象运行 Webhook;
你可以按如下方式设置 selector:
"namespaceSelector": {
"matchExpressions": [
{
"key": "runlevel",
"operator": "NotIn",
"values": [
"0",
"1"
]
}
]
}
相反,如果你只想针对 “environment” 为 “prod” 或 “staging” 的名字空间中的对象运行 Webhook;
你可以按如下方式设置 selector:
"namespaceSelector": {
"matchExpressions": [
{
"key": "environment",
"operator": "In",
"values": [
"prod",
"staging"
]
}
]
}
有关标签选择算符的更多示例,请参阅
https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/labels 。
默认为空的 LabelSelector,匹配所有对象。
webhooks.objectSelector (LabelSelector )
objectSelector 根据对象是否具有匹配的标签来决定是否运行 Webhook。
objectSelector 针对将被发送到 Webhook 的 oldObject 和 newObject 进行评估,如果任一对象与选择器匹配,则视为匹配。
空对象(create 时为 oldObject,delete 时为 newObject)或不能有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)
认为是不匹配的。
仅当 Webhook 支持时才能使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。
默认为空的 LabelSelector,匹配所有内容。
webhooks.reinvocationPolicy (string)
reinvocationPolicy 表示这个 Webhook 是否可以被多次调用,作为一次准入评估的一部分。可取值有 “Never” 和 “IfNeeded”。
Never: 在一次录取评估中,Webhook 被调用的次数不会超过一次。
IfNeeded:如果被录取的对象在被最初的 Webhook 调用后又被其他录取插件修改,
那么该 Webhook 将至少被额外调用一次作为录取评估的一部分。
指定此选项的 Webhook 必须 是幂等的,能够处理它们之前承认的对象。
注意:不保证额外调用的次数正好为1。
如果额外的调用导致对对象的进一步修改,Webhook 不保证会再次被调用。
使用该选项的 Webhook 可能会被重新排序,以最小化额外调用的数量。
在保证所有的变更都完成后验证一个对象,使用验证性质的准入 Webhook 代替。
默认值为 “Never”。
webhooks.rules ([]RuleWithOperations)
原子性:将在合并期间被替换
rules 描述了 Webhook 关心的资源/子资源上有哪些操作。Webhook 关心操作是否匹配任何 rules。
但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于只能完全禁用插件才能恢复的状态,
ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在处理 ValidatingWebhookConfiguration
和 MutatingWebhookConfiguration 对象的准入请求时被调用。
RuleWithOperations 是操作和资源的元组。建议确保所有元组组合都是有效的。
webhooks.rules.scope (string)
scope 指定此规则的范围。有效值为 “Cluster”, “Namespaced” 和 “”。
“Cluster” 表示只有集群范围的资源才会匹配此规则。
Namespace API 对象是集群范围的。
“Namespaced” 意味着只有命名空间作用域的资源会匹配此规则。
“ ” 表示没有范围限制。
子资源与其父资源的作用域相同。默认为 “*”。
MutatingWebhookConfigurationList
MutatingWebhookConfigurationList 是 MutatingWebhookConfiguration 的列表。
操作
get
读取指定的 MutatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
响应
200 (MutatingWebhookConfiguration ): OK
401: Unauthorized
list
列出或观察 MutatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (MutatingWebhookConfigurationList ): OK
401: Unauthorized
create
创建一个 MutatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
响应
200 (MutatingWebhookConfiguration ): OK
201 (MutatingWebhookConfiguration ): Created
202 (MutatingWebhookConfiguration ): Accepted
401: Unauthorized
update
替换指定的 MutatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
响应
200 (MutatingWebhookConfiguration ): OK
201 (MutatingWebhookConfiguration ): Created
401: Unauthorized
patch
部分更新指定的 MutatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
force (查询参数 ):boolean
force
响应
200 (MutatingWebhookConfiguration ): OK
201 (MutatingWebhookConfiguration ): Created
401: Unauthorized
delete
删除 MutatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 MutatingWebhookConfiguration 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
limit (查询参数 ):integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.7.4 - ValidatingWebhookConfiguration
ValidatingWebhookConfiguration 描述准入 Webhook 的配置,该 Webhook 可在不更改对象的情况下接受或拒绝对象请求
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingWebhookConfiguration
ValidatingWebhookConfiguration 描述准入 Webhook 的配置,该 Webhook 可在不更改对象的情况下接受或拒绝对象请求。
webhooks ([]ValidatingWebhook)
补丁策略:根据 name
键执行合并操作
Map:name 键的唯一值将在合并期间保留
webhooks 是 Webhook 以及受影响的资源和操作的列表。
ValidatingWebhook 描述了一个准入 Webhook 及其适用的资源和操作。
webhooks.admissionReviewVersions ([]string), 必需
Atomic:将在合并期间被替换
admissionReviewVersions 是 Webhook 期望的首选 AdmissionReview
版本的有序列表。
API 服务器将尝试使用它支持的列表中的第一个版本。如果 API 服务器不支持此列表中指定的版本,则此对象将验证失败。
如果持久化的 Webhook 配置指定了允许的版本,并且不包括 API 服务器已知的任何版本,则对 Webhook 的调用将失败并受失败策略的约束。
webhooks.clientConfig (WebhookClientConfig), 必需
clientConfig 定义了如何与 Webhook 通信。必需。
WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息
webhooks.clientConfig.service (ServiceReference)
service
是对此 Webhook 服务的引用。必须指定 service
或 url
。
如果 Webhook 在集群中运行,那么你应该使用 service
。
ServiceReference 持有对 Service.legacy.k8s.io 的引用
webhooks.clientConfig.url (string)
url
以标准 URL 形式(scheme://host:port/path
)给出了 Webhook 的位置。必须指定 url
或 service
中的一个。
host
不应指代在集群中运行的服务;请改用 service
字段。在某些 apiserver 中,可能会通过外部 DNS 解析 host
。
(例如,kube-apiserver
无法解析集群内 DNS,因为这会违反分层原理)。host
也可以是 IP 地址。
请注意,使用 localhost
或 127.0.0.1
作为 host
是有风险的,除非你非常小心地在运行 apiserver 的所有主机上运行此 Webhook,
而这些 API 服务器可能需要调用此 Webhook。此类部署可能是不可移植的,即不容易在新集群中重复安装。
该方案必须是 “https”;URL 必须以 “https://” 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。你可以使用路径将任意字符串传递给 Webhook,例如集群标识符。
不允许使用用户或基本身份验证,例如不允许使用 “user:password@”。
不允许使用片段(“#...”)和查询参数(“?...”)。
webhooks.name (string), 必需
准入 Webhook 的名称。应该是完全限定的名称,例如 imagepolicy.kubernetes.io,其中 “imagepolicy” 是 Webhook 的名称,
kubernetes.io 是组织的名称。必需。
webhooks.sideEffects (string), 必需
sideEffects 说明此 Webhook 是否有副作用。可接受的值为:None、NoneOnDryRun(通过 v1beta1 创建的 Webhook 也可以指定 Some 或 Unknown)。
具有副作用的 Webhook 必须实现协调系统,因为请求可能会被准入链中的未来步骤拒绝,因此需要能够撤消副作用。
如果请求与带有 sideEffects == Unknown 或 Some 的 Webhook 匹配,则带有 dryRun 属性的请求将被自动拒绝。
webhooks.failurePolicy (string)
failurePolicy 定义了如何处理来自准入端点的无法识别的错误 - 允许的值是 Ignore 或 Fail。默认为 Fail。
webhooks.matchConditions ([]MatchCondition)
补丁策略:根据 name
键的取值合并
Map:name 键的唯一值将在合并期间保留
matchConditions 是将请求发送到此 webhook 之前必须满足的条件列表。
匹配条件过滤已经被 rules、namespaceSelector、objectSelector 匹配的请求。
matchConditions 取值为空列表时匹配所有请求。最多允许 64 个匹配条件。
精确匹配逻辑是(按顺序):
如果任一 matchCondition 的计算结果为 FALSE,则跳过该 webhook。
如果所有 matchConditions 的计算结果为 TRUE,则调用该 webhook。
如果任一 matchCondition 的计算结果为错误(但都不是 FALSE):
如果 failurePolicy=Fail,拒绝该请求;
如果 failurePolicy=Ignore,忽略错误并跳过该 webhook。
MatchCondition 表示将请求发送到 Webhook 之前必须满足的条件。
webhooks.matchConditions.expression (string), 必需
expression 表示将由 CEL 求值的表达式。求值结果必须是 bool 值。CEL 表达式可以访问
以 CEL 变量的形式给出的 AdmissionRequest 和 Authorizer 的内容:
'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。
'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。
'request' - 准入请求的属性(/pkg/apis/admission/types.go#AdmissionRequest)。
'authorizer' - CEL 授权者。可用于对请求的主体(用户或服务帐户)执行授权检查。
参阅:https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
'authorizer.requestResource' - CEL ResourceCheck 从"授权方"构建并配置请求资源。
CEL 文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
此字段为必需字段。
webhooks.matchConditions.name (string), 必需
name 是此匹配条件的标识符,用于 MatchConditions 的策略性合并,
以及提供用于日志目的的标识符。一个好的 name 应该是对相关表达式的描述。
name 必须是由字母数字字符 -
、_
或 .
组成的限定名称,
并且必须以字母、数字字符开头和结尾(例如 MyName
、my.name
或 123-abc
,
用于验证 name 的正则表达式是 ([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]
)。
带有可选的 DNS 子域前缀和 /
(例如 example.com/MyName
)
此字段为必需字段。
webhooks.matchPolicy (string)
matchPolicy 定义了如何使用 "rules" 列表来匹配传入的请求。允许的值为 "Exact" 或 "Equivalent"。
Exact: 仅当请求与指定规则完全匹配时才匹配请求。
例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源,
但 “rules” 仅包含 apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments "]
,
对 apps/v1beta1 或 extensions/v1beta1 的请求不会被发送到 Webhook。
Equivalent: 如果针对的资源包含在 “rules” 中,即使是通过另一个 API 组或版本,也视作匹配请求。
例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源,
并且 “rules” 仅包含 apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments "]
,
对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 Webhook。
默认为 “Equivalent”。
webhooks.namespaceSelector (LabelSelector )
namespaceSelector 根据对象的命名空间是否与 selector 匹配来决定是否在该对象上运行 Webhook。
如果对象本身是命名空间,则在 object.metadata.labels 上执行匹配。
如果对象是另一个集群范围的资源,则永远不会跳过 Webhook 执行匹配。
例如,在命名空间与 “0” 或 “1” 的 “runlevel” 不关联的任何对象上运行 Webhook;
你可以按如下方式设置 selector :
"namespaceSelector": {
"matchExpressions": [
{
"key": "runlevel",
"operator": "NotIn",
"values": [
"0",
"1"
]
}
]
}
相反,如果你只想在命名空间与 “prod” 或 “staging” 的 “environment” 相关联的对象上运行 Webhook;
你可以按如下方式设置 selector:
"namespaceSelector": {
"matchExpressions": [
{
"key": "environment",
"operator": "In",
"values": [
"prod",
"staging"
]
}
]
}
有关标签选择算符的更多示例,请参阅
https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/labels 。
默认为空的 LabelSelector,匹配所有对象。
webhooks.objectSelector (LabelSelector )
objectSelector 根据对象是否具有匹配的标签来决定是否运行 Webhook。
objectSelector 针对将被发送到 Webhook 的 oldObject 和 newObject 进行评估,如果任一对象与选择器匹配,则视为匹配。
空对象(create 时为 oldObject,delete 时为 newObject)或不能有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)
认为是不匹配的。
仅当 Webhook 支持时才能使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。
默认为空的 LabelSelector,匹配所有内容。
webhooks.rules ([]RuleWithOperations)
Atomic:将在合并期间被替换
rules 描述了 Webhook 关心的资源/子资源上有哪些操作。Webhook 关心操作是否匹配任何 rules。
但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于只能完全禁用插件才能恢复的状态,
ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在处理 ValidatingWebhookConfiguration
和 MutatingWebhookConfiguration 对象的准入请求被调用。
RuleWithOperations 是操作和资源的元组。建议确保所有元组组合都是有效的。
webhooks.rules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster", "Namespaced" 和 ""。
"Cluster" 表示只有集群范围的资源才会匹配此规则。
Namespace API 对象是集群范围的。
"Namespaced" 意味着只有命名空间作用域的资源会匹配此规则。
" " 表示没有范围限制。
子资源与其父资源的作用域相同。默认为 "*"。
ValidatingWebhookConfigurationList
ValidatingWebhookConfigurationList 是 ValidatingWebhookConfiguration 的列表。
apiVersion 定义对象表示的版本化模式。服务器应将已识别的模式转换为最新的内部值,并可能拒绝未识别的值。
更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
操作
get
读取指定的 ValidatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
响应
200 (ValidatingWebhookConfiguration ): OK
401: Unauthorized
list
列出或观察 ValidatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
limit (查询参数 ): integer
limit
watch (查询参数 ): boolean
watch
响应
200 (ValidatingWebhookConfigurationList ): OK
401: Unauthorized
create
创建一个 ValidatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
响应
200 (ValidatingWebhookConfiguration ): OK
201 (ValidatingWebhookConfiguration ): Created
202 (ValidatingWebhookConfiguration ): Accepted
401: Unauthorized
update
替换指定的 ValidatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
响应
200 (ValidatingWebhookConfiguration ): OK
201 (ValidatingWebhookConfiguration ): Created
401: Unauthorized
patch
部分更新指定的 ValidatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
force (查询参数 ): boolean
force
响应
200 (ValidatingWebhookConfiguration ): OK
201 (ValidatingWebhookConfiguration ): Created
401: Unauthorized
delete
删除 ValidatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ValidatingWebhookConfiguration 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
limit (查询参数 ): integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.8 - 集群资源
5.8.1 - APIService
APIService 是用来表示一个特定的 GroupVersion 的服务器
apiVersion: apiregistration.k8s.io/v1
import "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
APIService
APIService 是用来表示一个特定的 GroupVersion 的服务器。名称必须为 "version.group"。
APIServiceSpec
APIServiceSpec 包含用于定位和与服务器通信的信息。仅支持 HTTPS 协议,但是你可以禁用证书验证。
groupPriorityMinimum (int32), 必需
groupPriorityMinimum 是这个组至少应该具有的优先级。优先级高表示客户端优先选择该组。
请注意,该组的其他版本可能会指定更高的 groupPriorityMinimum 值,使得整个组获得更高的优先级。
主排序基于 groupPriorityMinimum 值,从高到低排序(20 在 10 之前)。
次要排序基于对象名称的字母顺序(v1.bar 在 v1.foo 之前)。
我们建议这样配置:*.k8s.io
(扩展除外)值设置为 18000,PaaS(OpenShift、Deis)建议值为 2000 左右。
versionPriority (int32), 必需
versionPriority 控制该 API 版本在其组中的排序,必须大于零。主排序基于 versionPriority,
从高到低排序(20 在 10 之前)。因为在同一个组里,这个数字可以很小,可能是几十。
在版本优先级相等的情况下,版本字符串将被用来计算组内的顺序。如果版本字符串是与 Kubernetes 的版本号形式类似,
则它将排序在 Kubernetes 形式版本字符串之前。Kubernetes 的版本号字符串按字典顺序排列。
Kubernetes 版本号以 “v” 字符开头,后面是一个数字(主版本),然后是可选字符串 “alpha” 或 “beta” 和另一个数字(次要版本)。
它们首先按 GA > beta > alpha 排序(其中 GA 是没有 beta 或 alpha 等后缀的版本),然后比较主要版本,
最后是比较次要版本。版本排序列表示例:v10、v2、v1、v11beta2、v10beta3、v3beta1、v12alpha1、v11alpha2、foo1、foo10。
caBundle ([]byte)
原子性:将在合并期间被替换
caBundle 是一个 PEM 编码的 CA 包,用于验证 API 服务器的服务证书。如果未指定,
则使用 API 服务器上的系统根证书。
group (string)
group 是此服务器主机的 API 组名称。
insecureSkipTLSVerify (boolean)
insecureSkipTLSVerify 代表在与此服务器通信时禁用 TLS 证书验证。强烈建议不要这样做。你应该使用 caBundle。
service (ServiceReference)
service 是对该 API 服务器的服务的引用。它只能在端口 443 上通信。如果 service 是 nil,
则意味着 API groupversion 的处理是在当前服务器上本地处理的。服务调用被直接委托给正常的处理程序链来完成。
ServiceReference 保存对 Service.legacy.k8s.io 的一个引用。
service.name (string)
name 是服务的名称
service.namespace (string)
namespace 是服务的命名空间
service.port (int32)
如果指定,则为托管 Webhook 的服务上的端口。为实现向后兼容,默认端口号为 443。
port
应该是一个有效的端口号(1-65535,包含)。
version (string)
version 是此服务器的 API 版本。例如:“v1”。
APIServiceStatus
APIServiceStatus 包含有关 API 服务器的派生信息
APIServiceList
APIServiceList 是 APIService 对象的列表。
Operations
get
读取指定的 APIService
HTTP 请求
GET /apis/apiregistration.k8s.io/v1/apiservices/{name}
参数
name (路径参数 ):string,必需
APIService 名称
pretty (查询参数 ):string
pretty
响应
200 (APIService ): OK
401: Unauthorized
get
读取指定 APIService 的状态
HTTP 请求
GET /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
参数
name (路径参数 ):string,必需
APIService 名称
pretty (查询参数 ):string
pretty
响应
200 (APIService ): OK
401: Unauthorized
list
列出或观察 APIService 类的对象
HTTP 请求
GET /apis/apiregistration.k8s.io/v1/apiservices
参数
响应
200 (APIServiceList ): OK
401: Unauthorized
create
创建一个 APIService
HTTP 请求
POST /apis/apiregistration.k8s.io/v1/apiservices
参数
响应
200 (APIService ): OK
201 (APIService ): Created
202 (APIService ): Accepted
401: Unauthorized
update
替换指定的 APIService
HTTP 请求
PUT /apis/apiregistration.k8s.io/v1/apiservices/{name}
参数
响应
200 (APIService ): OK
201 (APIService ): Created
401: Unauthorized
update
替换指定 APIService 的 status
HTTP 请求
PUT /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
参数
响应
200 (APIService ): OK
201 (APIService ): Created
401: Unauthorized
patch
部分更新指定的 APIService
HTTP 请求
PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}
参数
响应
200 (APIService ): OK
201 (APIService ): Created
401: Unauthorized
patch
部分更新指定 APIService 的 status
HTTP 请求
PATCH /apis/apiregistration.k8s.io/v1/apiservices/{name}/status
参数
响应
200 (APIService ): OK
201 (APIService ): Created
401: Unauthorized
delete
删除一个 APIService
HTTP 请求
DELETE /apis/apiregistration.k8s.io/v1/apiservices/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 APIService 集合
HTTP 请求
DELETE /apis/apiregistration.k8s.io/v1/apiservices
参数
响应
200 (Status ): OK
401: Unauthorized
5.8.2 - ComponentStatus
ComponentStatus(和 ComponentStatusList)保存集群检验信息。
apiVersion: v1
import "k8s.io/api/core/v1"
ComponentStatus
ComponentStatus(和 ComponentStatusList)保存集群检验信息。
已废弃:该 API 在 v1.19 及更高版本中废弃。
ComponentStatusList
作为 ComponentStatus 对象列表,所有组件状况的状态。
已废弃:该 API 在 v1.19 及更高版本中废弃。
操作
get
读取指定的 ComponentStatus
HTTP 请求
GET /api/v1/componentstatuses/{name}
参数
name (路径参数 ):string,必需
ComponentStatus 的名称。
pretty (查询参数 ):string
pretty
响应
200 (ComponentStatus ): OK
401: Unauthorized
list
列出 ComponentStatus 类别的对象
HTTP 请求
GET /api/v1/componentstatuses
参数
响应
200 (ComponentStatusList ): OK
401: Unauthorized
5.8.3 - Event
Event 是集群中某个事件的报告。
apiVersion: events.k8s.io/v1
import "k8s.io/api/events/v1"
Event
Event 是集群中某个事件的报告。它一般表示系统的某些状态变化。
Event 的保留时间有限,触发器和消息可能会随着时间的推移而演变。
事件消费者不应假定给定原因的事件的时间所反映的是一致的下层触发因素,或具有该原因的事件的持续存在。
Events 应被视为通知性质的、尽最大努力而提供的补充数据。
eventTime (MicroTime),必需
evenTime 是该事件首次被观察到的时间。它是必需的。
MicroTime 是微秒级精度的 Time 版本
action (string)
action 是针对相关对象所采取的或已失败的动作。字段值是机器可读的。对于新的 Event,此字段不能为空,
且最多为 128 个字符。
deprecatedCount (int32)
deprecatedCount 是确保与 core.v1 Event 类型向后兼容的已弃用字段。
deprecatedFirstTimestamp (Time)
deprecatedFirstTimestamp 是确保与 core.v1 Event 类型向后兼容的已弃用字段。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。
deprecatedLastTimestamp (Time)
deprecatedLastTimestamp 是确保与 core.v1 Event 类型向后兼容的已弃用字段。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。
deprecatedSource (EventSource)
deprecatedSource 是确保与 core.v1 Event 类型向后兼容的已弃用字段。
EventSource 包含事件信息。
note (string)
note 是对该操作状态的可读描述。注释的最大长度是 1kB,但是库应该准备好处理最多 64kB 的值。
reason (string)
reason 是采取行动的原因。它是人类可读的。对于新的 Event,此字段不能为空,且最多为128个字符。
regarding (ObjectReference )
关于包含此 Event 所涉及的对象。在大多数情况下,所指的是报告事件的控制器所实现的一个 Object。
例如 ReplicaSetController 实现了 ReplicaSet,这个事件被触发是因为控制器对 ReplicaSet 对象做了一些变化。
related (ObjectReference )
related 是用于更复杂操作的、可选的、从属性的对象。例如,当 regarding 对象触发 related 对象的创建或删除时。
reportingController (string)
reportingController 是触发该事件的控制器的名称,例如 kubernetes.io/kubelet
。对于新的 Event,此字段不能为空。
reportingInstance (string)
reportingInstance 为控制器实例的 ID,例如 kubelet-xyzf
。对于新的 Event,此字段不能为空,且最多为 128 个字符。
series (EventSeries)
series 是该事件代表的事件系列的数据,如果是单事件,则为 nil。
EventSeries 包含一系列事件的信息,即一段时间内持续发生的事情。
EventSeries 的更新频率由事件报告者决定。
默认事件报告程序在 "k8s.io/client-go/tools/events/event_broadcaster.go"
展示在发生心跳时该结构如何被更新,可以指导定制的报告者实现。
series.lastObservedTime (MicroTime),必需
lastObservedTime 是在最后一次心跳时间之前看到最后一个 Event 的时间。
MicroTime 是微秒级精度的 Time 版本。
type (string)
type 是该事件的类型(Normal、Warning),未来可能会添加新的类型。字段值是机器可读的。
对于新的 Event,此字段不能为空。
EventList
EventList 是一个 Event 对象列表。
items ([]Event ),必需
items 是模式(Schema)对象的列表。
操作
get
读取特定 Event
HTTP 请求
GET /apis/events.k8s.io/v1/namespaces/{namespace}/events/{name}
参数
name (路径参数 ):string,必需
Event 名称
响应
200 (Event ): OK
401: Unauthorized
list
列出或观察事件类型对象
HTTP 请求
GET /apis/events.k8s.io/v1/namespaces/{namespace}/events
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (EventList ): OK
401: Unauthorized
list
列出或观察事件类型对象
HTTP 请求
GET /apis/events.k8s.io/v1/events
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (EventList ): OK
401: Unauthorized
create
创建一个 Event
HTTP 请求
POST /apis/events.k8s.io/v1/namespaces/{namespace}/events
参数
响应
200 (Event ): OK
201 (Event ): Created
202 (Event ): Accepted
401: Unauthorized
update
替换指定 Event
HTTP 请求
PUT /apis/events.k8s.io/v1/namespaces/{namespace}/events/{name}
参数
name (路径参数 ):string,必需
Event 名称
响应
200 (Event ): OK
201 (Event ): Created
401: Unauthorized
patch
部分更新指定的 Event
HTTP 请求
PATCH /apis/events.k8s.io/v1/namespaces/{namespace}/events/{name}
参数
name (路径参数 ):string,必需
Event 名称
force (查询参数 ):boolean
force
响应
200 (Event ): OK
201 (Event ): Created
401: Unauthorized
delete
删除 Event
HTTP 请求
DELETE /apis/events.k8s.io/v1/namespaces/{namespace}/events/{name}
参数
name (路径参数 ):string,必需
Event 名称
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Event 集合
HTTP 请求
DELETE /apis/events.k8s.io/v1/namespaces/{namespace}/events
参数
limit (查询参数 ):integer
limit
响应
200 (Status ): OK
401: Unauthorized
5.8.4 - IPAddress v1beta1
IPAddress 表示单个 IP 族的单个 IP。
apiVersion: networking.k8s.io/v1beta1
import "k8s.io/api/networking/v1beta1"
IPAddress
IPAddress 表示单个 IP 族的单个 IP。此对象旨在供操作 IP 地址的 API 使用。
此对象由 Service 核心 API 用于分配 IP 地址。
IP 地址可以用不同的格式表示,为了保证 IP 地址的唯一性,此对象的名称是格式规范的 IP 地址。
IPv4 地址由点分隔的四个十进制数字组成,前导零可省略;IPv6 地址按照 RFC 5952 的定义来表示。
有效值:192.168.1.5、2001:db8::1 或 2001:db8:aaaa:bbbb:cccc:dddd:eeee:1。
无效值:10.01.2.3 或 2001:db8:0:0:0::1。
IPAddressSpec
IPAddressSpec 描述 IP 地址中的属性。
parentRef (ParentReference),必需
parentRef 引用挂接 IPAddress 的资源。IPAddress 必须引用一个父对象。
ParentReference 描述指向父对象的引用。
IPAddressList
IPAddressList 包含 IPAddress 的列表。
操作
get
读取指定的 IPAddress
HTTP 请求
GET /apis/networking.k8s.io/v1beta1/ipaddresses/{name}
参数
name (路径参数 ):string,必需
IPAddress 的名称。
pretty (查询参数 ):string
pretty
响应
200 (IPAddress ): OK
401: Unauthorized
list
列举或监视类别为 IPAddress 的对象
HTTP 请求
GET /apis/networking.k8s.io/v1beta1/ipaddresses
参数
响应
200 (IPAddressList ): OK
401: Unauthorized
create
创建 IPAddress
HTTP 请求
POST /apis/networking.k8s.io/v1beta1/ipaddresses
参数
响应
200 (IPAddress ): OK
201 (IPAddress ): Created
202 (IPAddress ): Accepted
401: Unauthorized
update
替换指定的 IPAddress
HTTP 请求
PUT /apis/networking.k8s.io/v1beta1/ipaddresses/{name}
参数
响应
200 (IPAddress ): OK
201 (IPAddress ): Created
401: Unauthorized
patch
部分更新指定的 IPAddress
HTTP 请求
PATCH /apis/networking.k8s.io/v1beta1/ipaddresses/{name}
参数
响应
200 (IPAddress ): OK
201 (IPAddress ): Created
401: Unauthorized
delete
删除 IPAddress
HTTP 请求
DELETE /apis/networking.k8s.io/v1beta1/ipaddresses/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 IPAddress 的集合
HTTP 请求
DELETE /apis/networking.k8s.io/v1beta1/ipaddresses
参数
响应
200 (Status ): OK
401: Unauthorized
5.8.5 - Lease
Lease 定义了租约的概念。
apiVersion: coordination.k8s.io/v1
import "k8s.io/api/coordination/v1"
Lease
Lease 定义了租约的概念。
LeaseSpec
LeaseSpec 是 Lease 的规约。
leaseDurationSeconds (int32)
leaseDurationSeconds 是租约候选人需要等待强制获取租约的持续时间。
这是相对于上次观察到的 renewTime 的度量。
leaseTransitions (int32)
leaseTransitions 是租约持有人之间的转换次数。
preferredHolder (string)
preferredHolder 向租约持有人发出信号,提示此租约出现一个更优的持有人且应该被放弃。
此字段仅在设置了 strategy
时才能被设置。
LeaseList
LeaseList 是 Lease 对象的列表。
items ([]Lease ),必需
items 是架构对象的列表。
操作
get
读取指定的 Lease
HTTP 请求
GET /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
参数
响应
200 (Lease ): OK
401: Unauthorized
list
列出或监视类别为 Lease 的对象
HTTP 请求
GET /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases
参数
响应
200 (LeaseList ): OK
401: Unauthorized
list
列出或监视类别为 Lease 的对象
HTTP 请求
GET /apis/coordination.k8s.io/v1/leases
参数
响应
200 (LeaseList ): OK
401: Unauthorized
create
创建 Lease
HTTP 请求
POST /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases
参数
响应
200 (Lease ): OK
201 (Lease ): Created
202 (Lease ): Accepted
401: Unauthorized
update
替换指定的 Lease
HTTP 请求
PUT /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
参数
响应
200 (Lease ): OK
201 (Lease ): Created
401: Unauthorized
patch
部分更新指定的 Lease
HTTP 请求
PATCH /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
参数
响应
200 (Lease ): OK
201 (Lease ): Created
401: Unauthorized
delete
删除 Lease
HTTP 请求
DELETE /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 Lease 收款
HTTP 请求
DELETE /apis/coordination.k8s.io/v1/namespaces/{namespace}/leases
参数
响应
200 (Status ): OK
401: Unauthorized
5.8.6 - LeaseCandidate v1alpha1
LeaseCandidate 定义 Lease 对象的候选者。
apiVersion: coordination.k8s.io/v1alpha1
import "k8s.io/api/coordination/v1alpha1"
LeaseCandidate
LeaseCandidate 定义一个 Lease 对象的候选者。
通过创建候选者,协同式领导者选举能够从候选者列表中选出最佳的领导者。
LeaseCandidateSpec
LeaseCandidateSpec 是 Lease 的规约。
preferredStrategies ([]string),必需
原子:将在合并期间被替换
preferredStrategies 表示协同式领导者选举在选择领导者时所用的策略的列表。
此列表是有序的,第一个策略优先于所有其他策略。此列表将由协同式领导者选举用于决定最终的选举策略。
具体规则为:
如果所有客户端的策略列表的第一个元素为 X,则策略 X 将被使用。
如果一个候选者的策略为 [X],而另一个候选者的策略为 [Y, X],则 Y 优先于 X,策略 Y 将被使用。
如果一个候选者的策略为 [X, Y],而另一个候选者的策略为 [Y, X],则这是一个用户错误,
并且在解决此错误之前领导者选举将不会操作 Lease。
(Alpha)使用此字段需要启用 CoordinatedLeaderElection 特性门控。
binaryVersion (string)
binaryVersion 是可执行文件的版本。它必须采用不带前缀 v
的语义版本格式。
当策略为 "OldestEmulationVersion" 时,此字段是必需的。
emulationVersion (string)
emulationVersion 是仿真版本。它必须采用不带前缀 v
的语义版本格式。
emulationVersion 必须小于或等于 binaryVersion。当策略为 "OldestEmulationVersion" 时,此字段是必需的。
renewTime (MicroTime)
renewTime 是 LeaseCandidate 被最近一次更新的时间。每当 Lease 需要进行领导者选举时,
pingTime 字段会被更新,以向 LeaseCandidate 发出应更新 renewTime 的信号。
如果自上次续订以来已经过去几个小时,旧的 LeaseCandidate 对象也会被垃圾收集。
pingTime 字段会被定期更新,以防止对仍处于活动状态的 LeaseCandidates 进行垃圾收集。
MicroTime 是微秒级精度的 Time 版本
LeaseCandidateList
LeaseCandidateList 是 Lease 对象的列表。
操作
get
读取指定的 LeaseCandidate
HTTP 请求
GET /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates/{name}
参数
响应
200 (LeaseCandidate ): OK
401: Unauthorized
list
列举或监视类别为 LeaseCandidate 的对象
HTTP 请求
GET /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates
参数
响应
200 (LeaseCandidateList ): OK
401: Unauthorized
list
列举或监视类别为 LeaseCandidate 的对象
HTTP 请求
GET /apis/coordination.k8s.io/v1alpha1/leasecandidates
参数
响应
200 (LeaseCandidateList ): OK
401: Unauthorized
create
创建 LeaseCandidate
HTTP 请求
POST /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates
参数
响应
200 (LeaseCandidate ): OK
201 (LeaseCandidate ): Created
202 (LeaseCandidate ): Accepted
401: Unauthorized
update
替换指定的 LeaseCandidate
HTTP 请求
PUT /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates/{name}
参数
响应
200 (LeaseCandidate ): OK
201 (LeaseCandidate ): Created
401: Unauthorized
patch
部分更新指定的 LeaseCandidate
HTTP 请求
PATCH /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates/{name}
参数
响应
200 (LeaseCandidate ): OK
201 (LeaseCandidate ): Created
401: Unauthorized
delete
删除 LeaseCandidate
HTTP 请求
DELETE /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 LeaseCandidate 的集合
HTTP 请求
DELETE /apis/coordination.k8s.io/v1alpha1/namespaces/{namespace}/leasecandidates
参数
响应
200 (Status ): OK
401: Unauthorized
5.8.7 - Namespace
Namespace 为名字提供作用域。
apiVersion: v1
import "k8s.io/api/core/v1"
Namespace
Namespace 为名字提供作用域。使用多个命名空间是可选的。
NamespaceSpec
NamespaceSpec 用于描述 Namespace 的属性。
NamespaceStatus
NamespaceStatus 表示 Namespace 的当前状态信息。
conditions ([]NamespaceCondition)
补丁策略:基于 type
健合并
Map:键 type
的唯一值将在合并期间保留
表示命名空间当前状态的最新可用状况。
NamespaceCondition 包含命名空间状态的详细信息。
conditions.type (string), 必需
命名空间控制器状况的类型。
conditions.lastTransitionTime (Time)
**Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。**
conditions.message (string)
conditions.reason (string)
phase (string)
phase 是命名空间的当前生命周期阶段。更多信息: https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/namespaces/
NamespaceList
NamespaceList 是一个命名空间列表。
操作
get
读取指定的 Namespace
HTTP 请求
GET /api/v1/namespaces/{name}
参数
name (路径参数 ):string,必需
Namespace 的名称
pretty (查询参数 ):string
pretty
响应
200 (Namespace ):OK
401:Unauthorized
get
读取指定 Namespace 的状态
HTTP 请求
GET /api/v1/namespaces/{name}/status
参数
name (路径参数 ):string,必需
Namespace 的名称
响应
200 (Namespace ):OK
401:Unauthorized
list
列出或者检查类别为 Namespace 的对象
HTTP 请求
GET /api/v1/namespaces
参数
limit (查询参数 ):integer
limit
watch (查询参数 ):boolean
watch
响应
200 (NamespaceList ):OK
401:Unauthorized
create
创建一个 Namespace
HTTP 请求
POST /api/v1/namespaces
参数
响应
200 (Namespace ):OK
201 (Namespace ):Created
202 (Namespace ):Accepted
401:Unauthorized
update
替换指定的 Namespace
HTTP 请求
PUT /api/v1/namespaces/{name}
参数
name (路径参数 ):string,必需
Namespace 的名称
body : Namespace , 必需
响应
200 (Namespace ):OK
201 (Namespace ):Created
401:Unauthorized
update
替换指定 Namespace 的终结器
HTTP 请求
PUT /api/v1/namespaces/{name}/finalize
参数
name (路径参数 ):string,必需
Namespace 的名称
body : Namespace ,必需
响应
200 (Namespace ):OK
201 (Namespace ):Created
401:Unauthorized
update
替换指定 Namespace 的状态
HTTP 请求
PUT /api/v1/namespaces/{name}/status
参数
name (路径阐述 ):string,必需
Namespace 的名称
body : Namespace ,必需
响应
200 (Namespace ):OK
201 (Namespace ):Created
401: Unauthorized
patch
部分更新指定的 Namespace
HTTP 请求
PATCH /api/v1/namespaces/{name}
参数
name (路径参数 ):string,必需
Namespace 的名称
force (查询参数 ):boolean
force
响应
200 (Namespace ):OK
201 (Namespace ):Created
401: Unauthorized
patch
部分更新指定 Namespace 的状态
HTTP 请求
PATCH /api/v1/namespaces/{name}/status
参数
name (路径参数 ):string,必需
Namespace 的名称
force (查询参数 ): boolean
force
响应
200 (Namespace ):OK
201 (Namespace ):Created
401:Unauthorized
delete
删除一个 Namespace
HTTP 请求
DELETE /api/v1/namespaces/{name}
参数
响应
200 (Status ):OK
202 (Status ):Accepted
401:Unauthorized
5.8.8 - Node
Node 是 Kubernetes 中的工作节点。
apiVersion: v1
import "k8s.io/api/core/v1"
Node
Node 是 Kubernetes 中的工作节点。
每个节点在缓存中(即在 etcd 中)都有一个唯一的标识符。
apiVersion : v1
kind : Node
NodeSpec
NodeSpec 描述了创建节点时使用的属性。
configSource (NodeConfigSource)
已弃用:以前用于为 DynamicKubeletConfig 功能指定节点配置的来源。此功能已删除。
NodeConfigSource 指定节点配置的来源。指定一个子字段(不包括元数据)必须为非空。此 API 自 1.22的版本起已被弃用
configSource.configMap (ConfigMapNodeConfigSource)
configMap 是对 Node 的 ConfigMap 的引用。
ConfigMapNodeConfigSource 包含引用某 ConfigMap 作为节点配置源的信息。
此 API 自 1.22 版本起已被弃用: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration
configSource.configMap.kubeletConfigKey (string), 必需
kubeletConfigKey 声明所引用的 ConfigMap 的哪个键对应于 KubeletConfiguration 结构体,
该字段在所有情况下都是必需的。
configSource.configMap.namespace (string), 必需
namespace 是所引用的 ConfigMap 的 metadata.namespace。
此字段在所有情况下都是必需的。
configSource.configMap.resourceVersion (string)
resourceVersion 是所引用的 ConfigMap 的 metadata.resourceVersion。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
configSource.configMap.uid (string)
uid 是所引用的 ConfigMap 的 metadata.uid。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
externalID (string)
已弃用。并非所有 kubelet 都会设置此字段。
1.13 的版本之后会删除该字段。参见: https://issues.k8s.io/61966
podCIDR (string)
podCIDR 表示分配给节点的 Pod IP 范围。
podCIDRs ([]string)
集合:唯一值将在合并期间被保留
podCIDRs 表示分配给节点以供该节点上的 Pod 使用的 IP 范围。
如果指定了该字段,则第 0 个条目必须与 podCIDR 字段匹配。
对于 IPv4 和 IPv6,它最多可以包含 1 个值。
providerID (string)
云提供商分配的节点ID,格式为:<ProviderName>://<ProviderSpecificNodeID>
taints ([]Taint)
原子:将在合并期间被替换
如果设置了,则为节点的污点。
此污点附加到的节点对任何不容忍污点的 Pod 都有 “影响”。
taints.effect (string), 必需
必需的。污点对不容忍污点的 Pod 的影响。合法的 effect 值有 NoSchedule、PreferNoSchedule 和 NoExecute。
unschedulable (boolean)
unschedulable 控制新 Pod 的节点可调度性。
默认情况下,节点是可调度的。
更多信息: https://kubernetes.io/zh-cn/docs/concepts/architecture/nodes/#manual-node-administration
NodeStatus
NodeStatus 是有关节点当前状态的信息。
addresses ([]NodeAddress)
补丁策略:根据 type
键执行合并操作
Map:键 type
的唯一值将在合并期间保留
节点可到达的地址列表。从云提供商处查询(如果有)。
更多信息: https://kubernetes.io/zh-cn/docs/concepts/architecture/nodes/#addresses
注意:该字段声明为可合并,但合并键不够唯一,合并时可能导致数据损坏。
调用者应改为使用完全替换性质的补丁操作。
有关示例,请参见 https://pr.k8s.io/79391 。
消费者应假设地址可以在节点的生命期内发生变化。
然而在一些例外情况下这是不可能的,例如在自身状态中继承 Node 地址的 Pod
或 downward API (status.hostIP) 的消费者。
NodeAddress 包含节点地址的信息。
allocatable (map[string]Quantity )
allocatable 表示节点的可用于调度的资源。默认为容量。
capacity (map[string]Quantity )
capacity 代表一个节点的总资源。更多信息:
https://kubernetes.io/zh-cn/docs/reference/node/node-status/#capacity
conditions ([]NodeCondition)
补丁策略:根据 type
键执行合并操作
Map:键 type
的唯一值将在合并期间保留
conditions 是当前观测到的节点状况的数组。
更多信息: https://kubernetes.io/zh-cn/docs/concepts/architecture/nodes/#condition
NodeCondition 包含节点状况的信息。
conditions.type (string), 必需
节点状况的类型。
conditions.lastHeartbeatTime (Time)
给定状况最近一次更新的时间。
Time 是 time.Time 的包装器,它支持对 YAML 和 JSON 的正确编组。
time 包的许多工厂方法提供了包装器。
conditions.lastTransitionTime (Time)
状况最近一次从一种状态转换到另一种状态的时间。
Time 是 time.Time 的包装器,它支持对 YAML 和 JSON 的正确编组。
time 包的许多工厂方法提供了包装器。
conditions.message (string)
指示有关上次转换详细信息的人类可读消息。
conditions.reason (string)
(简要)状况最后一次转换的原因。
config (NodeConfigStatus)
通过动态 Kubelet 配置功能分配给节点的配置状态。
NodeConfigStatus 描述了由 Node.spec.configSource 分配的配置的状态。
config.active (NodeConfigSource)
active 报告节点正在使用的检查点配置。
active 将代表已分配配置的当前版本或当前 LastKnownGood 配置,具体取决于尝试使用已分配配置是否会导致错误。
NodeConfigSource 指定节点配置的来源。指定一个子字段(不包括元数据)必须为非空。此 API 自 1.22 版本起已弃用
config.active.configMap (ConfigMapNodeConfigSource)
configMap 是对 Node 的 ConfigMap 的引用。
ConfigMapNodeConfigSource 包含引用某 ConfigMap 作为节点配置源的信息。
此 API 自 1.22 版本起已被弃用: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration
config.active.configMap.kubeletConfigKey (string), 必需
kubeletConfigKey 声明所引用的 ConfigMap 的哪个键对应于 KubeletConfiguration 结构体,
该字段在所有情况下都是必需的。
config.active.configMap.namespace (string), 必需
namespace 是所引用的 ConfigMap 的 metadata.namespace。
此字段在所有情况下都是必需的。
config.active.configMap.resourceVersion (string)
resourceVersion 是所引用的 ConfigMap 的 metadata.resourceVersion。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
config.active.configMap.uid (string)
uid 是所引用的 ConfigMap 的 metadata.uid。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
config.assigned (NodeConfigSource)
assigned 字段报告节点将尝试使用的检查点配置。
当 Node.spec.configSource 被更新时,节点将所关联的配置负载及指示预期配置的记录通过检查点操作加载到本地磁盘。
节点参考这条记录来选择它的配置检查点,并在 assigned 中报告这条记录。
仅在记录被保存到磁盘后才会更新 status 中的 assigned。
当 kubelet 重新启动时,它会尝试通过加载和验证由 assigned 标识的检查点有效负载来使 assigned 配置成为 active 配置。
NodeConfigSource 指定节点配置的来源。指定一个子字段(不包括元数据)必须为非空。此 API 自 1.22 版本起已弃用
config.assigned.configMap (ConfigMapNodeConfigSource)
configMap 是对 Node 的 ConfigMap 的引用。
ConfigMapNodeConfigSource 包含引用某 ConfigMap 为节点配置源的信息。
此 API 自 1.22 版本起已被弃用: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration
config.assigned.configMap.kubeletConfigKey (string), 必需
kubeletConfigKey 声明所引用的 ConfigMap 的哪个键对应于 KubeletConfiguration 结构体,
该字段在所有情况下都是必需的。
config.assigned.configMap.namespace (string), 必需
namespace 是所引用的 ConfigMap 的 metadata.namespace。
此字段在所有情况下都是必需的。
config.assigned.configMap.resourceVersion (string)
resourceVersion 是所引用的 ConfigMap 的 metadata.resourceVersion。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
config.assigned.configMap.uid (string)
uid 是所引用的 ConfigMap 的 metadata.uid。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
config.error (string)
error 描述了在 spec.configSource 与活动配置间协调时发生的所有问题。
可能会发生的情况,例如,尝试将 spec.configSource 通过检查点操作复制到到本地 assigned 记录时,
尝试对与 spec.configSource 关联的有效负载执行检查点操作,尝试加载或验证 assigned 的配置时。
同步配置时可能会在不同位置发生错误,较早的错误(例如下载或检查点错误)不会导致回滚到 LastKnownGood,
并且可能会在 Kubelet 重试后解决。
后期发生的错误(例如加载或验证检查点配置)将导致回滚到 LastKnownGood。
在后一种情况下,通常可以通过修复 spec.sonfigSource 中 assigned 配置来解决错误。
你可以通过在 Kubelet 日志中搜索错误消息来找到更多的调试信息。
error 是错误状态的人类可读描述;机器可以检查 error 是否为空,但不应依赖跨 kubelet 版本的 error 文本的稳定性。
config.lastKnownGood (NodeConfigSource)
lastKnownGood 报告节点在尝试使用 assigned 配置时遇到错误时将回退到的检查点配置。
当节点确定 assigned 配置稳定且正确时,assigned 配置会成为 lastKnownGood 配置。
这当前实施为从更新分配配置的本地记录开始的 10 分钟浸泡期。
如果在此期间结束时分配的配置依旧处于活动状态,则它将成为 lastKnownGood。
请注意,如果 spec.configSource 重置为 nil(使用本地默认值),
LastKnownGood 也会立即重置为 nil,因为始终假定本地默认配置是好的。
你不应该对节点确定配置稳定性和正确性的方法做出假设,因为这可能会在将来发生变化或变得可配置。
NodeConfigSource 指定节点配置的来源。指定一个子字段(不包括元数据)必须为非空。此 API 自 1.22 版本起已弃用
config.lastKnownGood.configMap (ConfigMapNodeConfigSource)
configMap 是对 Node 的 ConfigMap 的引用。
ConfigMapNodeConfigSource 包含引用某 ConfigMap 作为节点配置源的信息。
此 API 自 1.22 版本起已被弃用: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration
config.lastKnownGood.configMap.kubeletConfigKey (string), 必需
kubeletConfigKey 声明所引用的 ConfigMap 的哪个键对应于 KubeletConfiguration 结构体,
该字段在所有情况下都是必需的。
config.lastKnownGood.configMap.name (string), 必需
name 是所引用的 ConfigMap 的 metadata.name。
此字段在所有情况下都是必需的。
config.lastKnownGood.configMap.namespace (string), 必需
namespace 是所引用的 ConfigMap 的 metadata.namespace。
此字段在所有情况下都是必需的。
config.lastKnownGood.configMap.resourceVersion (string)
resourceVersion 是所引用的 ConfigMap 的 metadata.resourceVersion。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
config.lastKnownGood.configMap.uid (string)
uid 是所引用的 ConfigMap 的 metadata.uid。
该字段在 Node.spec 中是禁止的,在 Node.status 中是必需的。
daemonEndpoints (NodeDaemonEndpoints)
在节点上运行的守护进程的端点。
NodeDaemonEndpoints 列出了节点上运行的守护进程打开的端口。
runtimeHandlers ([]NodeRuntimeHandler)
原子:将在合并期间被替换
可用的运行时处理程序。
NodeRuntimeHandler 是一组运行时处理程序信息。
volumesAttached ([]AttachedVolume)
原子:将在合并期间被替换
附加到节点的卷的列表。
AttachedVolume 描述附加到节点的卷
volumesInUse ([]string)
节点正在使用(安装)的可附加卷的列表。
NodeList
NodeList 是已注册到 master 的所有节点的完整列表。
items ([]Node ), 必需
节点的列表。
操作
get
读取指定节点
HTTP 请求
GET /api/v1/nodes/{name}
参数
name (路径参数 ): string, 必需
节点的名称。
pretty (路径参数 ): string
pretty
响应
200 (Node ): OK
401: Unauthorized
get
读取指定节点的状态
HTTP 请求
GET /api/v1/nodes/{name}/status
参数
name (路径参数 ): string, 必需
节点的名称。
pretty (查询参数 ): string
pretty
响应
200 (Node ): OK
401: Unauthorized
list
列出或监视节点类型的对象
HTTP 请求
GET /api/v1/nodes
参数
响应
200 (NodeList ): OK
401: Unauthorized
create
创建一个节点
HTTP 请求
POST /api/v1/nodes
参数
响应
200 (Node ): OK
201 (Node ): Created
202 (Node ): Accepted
401: Unauthorized
update
替换指定节点
HTTP 请求
PUT /api/v1/nodes/{name}
参数
响应
200 (Node ): OK
201 (Node ): Created
401: Unauthorized
update
替换指定节点的状态
HTTP 请求
PUT /api/v1/nodes/{name}/status
参数
响应
200 (Node ): OK
201 (Node ): Created
401: Unauthorized
patch
部分更新指定节点
HTTP 请求
PATCH /api/v1/nodes/{name}
参数
响应
200 (Node ): OK
201 (Node ): Created
401: Unauthorized
patch
部分更新指定节点的状态
HTTP 请求
PATCH /api/v1/nodes/{name}/status
参数
响应
200 (Node ): OK
201 (Node ): Created
401: Unauthorized
delete
删除一个节点
HTTP 请求
DELETE /api/v1/nodes/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除节点的集合
HTTP 请求
DELETE /api/v1/nodes
响应
200 (Status ): OK
401: Unauthorized
5.8.9 - RuntimeClass
RuntimeClass 定义集群中支持的容器运行时类。
apiVersion: node.k8s.io/v1
import "k8s.io/api/node/v1"
RuntimeClass
RuntimeClass 定义集群中支持的容器运行时类。
RuntimeClass 用于确定哪个容器运行时用于运行某 Pod 中的所有容器。
RuntimeClass 由用户或集群制备程序手动定义,并在 PodSpec 中引用。
Kubelet 负责在运行 Pod 之前解析 RuntimeClassName 引用。
有关更多详细信息,请参阅
https://kubernetes.io/zh-cn/docs/concepts/containers/runtime-class/
RuntimeClassList
RuntimeClassList 是 RuntimeClass 对象的列表。
操作
get
读取指定的 RuntimeClass
HTTP 请求
GET /apis/node.k8s.io/v1/runtimeclasses/{name}
参数
name (路径参数 ): string,必需
RuntimeClass 的名称
pretty (查询参数 ): string
pretty
响应
200 (RuntimeClass ): OK
401: Unauthorized
list
列出或监视 RuntimeClass 类别的对象
HTTP 请求
GET /apis/node.k8s.io/v1/runtimeclasses
参数
响应
200 (RuntimeClassList ): OK
401: Unauthorized
create
创建 RuntimeClass
HTTP 请求
POST /apis/node.k8s.io/v1/runtimeclasses
参数
响应
200 (RuntimeClass ): OK
201 (RuntimeClass ): Created
202 (RuntimeClass ): Accepted
401: Unauthorized
update
替换指定的 RuntimeClass
HTTP 请求
PUT /apis/node.k8s.io/v1/runtimeclasses/{name}
参数
响应
200 (RuntimeClass ): OK
201 (RuntimeClass ): Created
401: Unauthorized
patch
部分更新指定的 RuntimeClass
HTTP 请求
PATCH /apis/node.k8s.io/v1/runtimeclasses/{name}
参数
响应
200 (RuntimeClass ): OK
201 (RuntimeClass ): Created
401: Unauthorized
delete
删除 RuntimeClass
HTTP 请求
DELETE /apis/node.k8s.io/v1/runtimeclasses/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 RuntimeClass 的集合
HTTP 请求
DELETE /apis/node.k8s.io/v1/runtimeclasses
参数
响应
200 (Status ): OK
401: Unauthorized
5.8.10 - ServiceCIDR v1beta1
ServiceCIDR 使用 CIDR 格式定义 IP 地址的范围
apiVersion: networking.k8s.io/v1beta1
import "k8s.io/api/networking/v1beta1"
ServiceCIDR
ServiceCIDR 使用 CIDR 格式定义 IP 地址的范围(例如 192.168.0.0/24 或 2001:db2::/64)。
此范围用于向 Service 对象分配 ClusterIP。
ServiceCIDRSpec
ServiceCIDRSpec 定义用户想要为 Service 分配 ClusterIP 所用的 CIDR。
ServiceCIDRStatus
ServiceCIDRStatus 描述 ServiceCIDR 的当前状态。
ServiceCIDRList
ServiceCIDRList 包含 ServiceCIDR 对象的列表。
操作
get
读取指定的 ServiceCIDR
HTTP
GET /apis/networking.k8s.io/v1beta1/servicecidrs/{name}
参数
name (路径参数 ): string,必需
ServiceCIDR 的名称。
pretty (查询参数 ): string
pretty
响应
200 (ServiceCIDR ): OK
401: Unauthorized
get
读取指定的 ServiceCIDR 的状态
HTTP 请求
GET /apis/networking.k8s.io/v1beta1/servicecidrs/{name}/status
参数
name (路径参数 ): string,必需
ServiceCIDR 的名称。
pretty (查询参数 ): string
pretty
响应
200 (ServiceCIDR ): OK
401: Unauthorized
list
列举或监视 ServiceCIDR 类别的对象
HTTP 请求
GET /apis/networking.k8s.io/v1beta1/servicecidrs
参数
响应
200 (ServiceCIDRList ): OK
401: Unauthorized
create
创建 ServiceCIDR
HTTP 请求
POST /apis/networking.k8s.io/v1beta1/servicecidrs
参数
响应
200 (ServiceCIDR ): OK
201 (ServiceCIDR ): Created
202 (ServiceCIDR ): Accepted
401: Unauthorized
update
替换指定的 ServiceCIDR
HTTP 请求
PUT /apis/networking.k8s.io/v1beta1/servicecidrs/{name}
参数
响应
200 (ServiceCIDR ): OK
201 (ServiceCIDR ): Created
401: Unauthorized
update
替换指定的 ServiceCIDR 的状态
HTTP 请求
PUT /apis/networking.k8s.io/v1beta1/servicecidrs/{name}/status
参数
响应
200 (ServiceCIDR ): OK
201 (ServiceCIDR ): Created
401: Unauthorized
patch
部分更新指定的 ServiceCIDR
HTTP 请求
PATCH /apis/networking.k8s.io/v1beta1/servicecidrs/{name}
参数
响应
200 (ServiceCIDR ): OK
201 (ServiceCIDR ): Created
401: Unauthorized
patch
部分更新指定的 ServiceCIDR 的状态
HTTP 请求
PATCH /apis/networking.k8s.io/v1beta1/servicecidrs/{name}/status
参数
响应
200 (ServiceCIDR ): OK
201 (ServiceCIDR ): Created
401: Unauthorized
delete
删除 ServiceCIDR
HTTP 请求
DELETE /apis/networking.k8s.io/v1beta1/servicecidrs/{name}
参数
响应
200 (Status ): OK
202 (Status ): Accepted
401: Unauthorized
deletecollection
删除 ServiceCIDR 的集合
HTTP 请求
DELETE /apis/networking.k8s.io/v1beta1/servicecidrs
参数
响应
200 (Status ): OK
401: Unauthorized
5.9 - 公共定义
5.9.1 - DeleteOptions
删除 API 对象时可以提供 DeleteOptions。
import "k8s.io/apimachinery/pkg/apis/meta/v1"
删除 API 对象时可以提供 DeleteOptions。
orphanDependents (boolean)
已弃用:该字段将在 1.7 中弃用,请使用 propagationPolicy
字段。
该字段表示依赖对象是否应该是孤儿。如果为 true/false,对象的 finalizers 列表中会被添加上或者移除掉 “orphan” 终结器(Finalizer)。
可以设置此字段或者设置 propagationPolicy
字段,但不能同时设置以上两个字段。
5.9.2 - LabelSelector
标签选择算符是对一组资源的标签查询。
import "k8s.io/apimachinery/pkg/apis/meta/v1"
标签选择算符是对一组资源的标签查询。
matchLabels
和 matchExpressions
的结果按逻辑与的关系组合。
一个 empty
标签选择算符匹配所有对象。一个 null
标签选择算符不匹配任何对象。
matchExpressions ([]LabelSelectorRequirement)
原子性:将在合并期间被替换
matchExpressions
是标签选择算符要求的列表,这些要求的结果按逻辑与的关系来计算。
标签选择算符要求是包含值、键和关联键和值的运算符的选择算符。
matchLabels (map[string]string)
matchLabels
是 {key
,value
} 键值对的映射。
matchLabels
映射中的单个 {key
,value
} 键值对相当于 matchExpressions
的一个元素,
其键字段为 key
,运算符为 In
,values
数组仅包含 value
。
所表达的需求最终要按逻辑与的关系组合。
5.9.3 - ListMeta
ListMeta 描述了合成资源必须具有的元数据,包括列表和各种状态对象。
import "k8s.io/apimachinery/pkg/apis/meta/v1"
ListMeta
描述了合成资源必须具有的元数据,包括列表和各种状态对象。
一个资源仅能有 {ObjectMeta, ListMeta}
中的一个。
remainingItemCount (int64)
remainingItemCount
是列表中未包含在此列表响应中的后续项目的数量。
如果列表请求包含标签或字段选择器,则剩余项目的数量是未知的,并且在序列化期间该字段将保持未设置和省略。
如果列表是完整的(因为它没有分块或者这是最后一个块),那么就没有剩余的项目,并且在序列化过程中该字段将保持未设置和省略。
早于 v1.15 的服务器不设置此字段。remainingItemCount
的预期用途是估计 集合的大小。
客户端不应依赖于设置准确的 remainingItemCount
。
5.9.4 - LocalObjectReference
LocalObjectReference 包含足够的信息,可以让你在同一命名空间内找到引用的对象。
import "k8s.io/api/core/v1"
LocalObjectReference 包含足够的信息,可以让你在同一命名空间(namespace)内找到引用的对象。
5.9.5 - NodeSelectorRequirement
节点选择算符需求是一个选择算符,其中包含值集、主键以及一个将键和值集关联起来的操作符。
import "k8s.io/api/core/v1"
节点选择算符需求是一个选择算符,其中包含值集、主键以及一个将键和值集关联起来的操作符。
5.9.6 - ObjectFieldSelector
ObjectFieldSelector 选择对象的 APIVersioned 字段。
import "k8s.io/api/core/v1"
ObjectFieldSelector 选择对象的 APIVersioned 字段。
5.9.7 - ObjectMeta
ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户必须创建的所有对象。
import "k8s.io/apimachinery/pkg/apis/meta/v1"
ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户必须创建的所有对象。
系统字段
finalizers ([]string)
集合:唯一值将在合并期间被保留
在从注册表中删除对象之前该字段必须为空。
每个条目都是负责的组件的标识符,各组件将从列表中删除自己对应的条目。
如果对象的 deletionTimestamp 非空,则只能删除此列表中的条目。
终结器可以按任何顺序处理和删除。没有 按照顺序执行,
因为它引入了终结器卡住的重大风险。finalizers 是一个共享字段,
任何有权限的参与者都可以对其进行重新排序。如果按顺序处理终结器列表,
那么这可能导致列表中第一个负责终结器的组件正在等待列表中靠后负责终结器的组件产生的信号(字段值、外部系统或其他),
从而导致死锁。在没有强制排序的情况下,终结者可以在它们之间自由排序,
并且不容易受到列表中排序更改的影响。
managedFields ([]ManagedFieldsEntry)
原子性:将在合并期间被替换
managedFields 将 workflow-id 和版本映射到由该工作流管理的字段集。
这主要用于内部管理,用户通常不需要设置或理解该字段。
工作流可以是用户名、控制器名或特定应用路径的名称,如 “ci-cd”。
字段集始终存在于修改对象时工作流使用的版本。
ManagedFieldsEntry 是一个 workflow-id,一个 FieldSet,也是该字段集适用的资源的组版本。
managedFields.apiVersion (string)
apiVersion 定义此字段集适用的资源的版本。
格式是 “group/version”,就像顶级 apiVersion 字段一样。
必须跟踪字段集的版本,因为它不能自动转换。
managedFields.fieldsType (string)
FieldsType 是不同字段格式和版本的鉴别器。
目前只有一个可能的值:“FieldsV1”
managedFields.fieldsV1 (FieldsV1)
FieldsV1 包含类型 “FieldsV1” 中描述的第一个 JSON 版本格式。
FieldsV1 以 JSON 格式将一组字段存储在像 Trie 这样的数据结构中。
每个键或是 .
表示字段本身,并且始终映射到一个空集,
或是一个表示子字段或元素的字符串。该字符串将遵循以下四种格式之一:
f:<name>
,其中 <name>
是结构中字段的名称,或映射中的键
v:<value>
,其中 <value>
是列表项的精确 json 格式值
i:<index>
,其中 <index>
是列表中项目的位置
k:<keys>
,其中 <keys>
是列表项的关键字段到其唯一值的映射。
如果一个键映射到一个空的 Fields 值,则该键表示的字段是集合的一部分。
确切的格式在 sigs.k8s.io/structured-merge-diff 中定义。
managedFields.manager (string)
manager 是管理这些字段的工作流的标识符。
managedFields.operation (string)
operation 是导致创建此 managedFields 表项的操作类型。
此字段的仅有合法值是 “Apply” 和 “Update”。
managedFields.subresource (string)
subresource 是用于更新该对象的子资源的名称,如果对象是通过主资源更新的,则为空字符串。
该字段的值用于区分管理者,即使他们共享相同的名称。例如,状态更新将不同于使用相同管理者名称的常规更新。
请注意,apiVersion 字段与 subresource 字段无关,它始终对应于主资源的版本。
managedFields.time (Time)
time 是添加 managedFields 条目时的时间戳。
如果一个字段被添加、管理器更新任一所属字段值或移除一个字段,该时间戳也会更新。
从此条目中移除一个字段时该时间戳不会更新,因为另一个管理器将它接管了。
time 是 time.Time 的包装类,支持正确地序列化为 YAML 和 JSON。
为 time 包提供的许多工厂方法提供了包装类。
ownerReferences ([]OwnerReference)
补丁策略:根据 uid
键执行合并操作
映射:在合并期间将根据键 uid 保留唯一值
此对象所依赖的对象列表。如果列表中的所有对象都已被删除,则该对象将被垃圾回收。
如果此对象由控制器管理,则此列表中的条目将指向此控制器,controller 字段设置为 true。
管理控制器不能超过一个。
OwnerReference 包含足够可以让你识别属主对象的信息。
属主对象必须与依赖对象位于同一命名空间中,或者是集群作用域的,因此没有命名空间字段。
只读字段
5.9.8 - ObjectReference
ObjectReference 包含足够的信息,可以让你检查或修改引用的对象。
import "k8s.io/api/core/v1"
ObjectReference 包含足够的信息,允许你检查或修改引用的对象。
5.9.9 - Patch
提供 Patch 是为了给 Kubernetes PATCH 请求正文提供一个具体的名称和类型。
import "k8s.io/apimachinery/pkg/apis/meta/v1"
提供 Patch 是为了给 Kubernetes PATCH 请求正文提供一个具体的名称和类型。
5.9.10 - Quantity
数量(Quantity)是数字的定点表示。
import "k8s.io/apimachinery/pkg/api/resource"
数量(Quantity)是数字的定点表示。
除了 String() 和 AsInt64() 的访问接口之外,
它以 JSON 和 YAML 形式提供方便的打包和解包方法。
序列化格式如下:
<quantity> ::= <signedNumber><suffix>
(注意 <suffix> 可能为空,例如 <decimalSI> 的 "" 情形。) </br>
<digit> ::= 0 | 1 | ... | 9 </br>
<digits> ::= <digit> | <digit><digits> </br>
<number> ::= <digits> | <digits>.<digits> | <digits>. | .<digits> </br>
<sign> ::= "+" | "-" </br>
<signedNumber> ::= <number> | <sign><number> </br>
<suffix> ::= <binarySI> | <decimalExponent> | <decimalSI> </br>
<binarySI> ::= Ki | Mi | Gi | Ti | Pi | Ei
(国际单位制度;查阅: http://physics.nist.gov/cuu/Units/binary.html)</br>
<decimalSI> ::= m | "" | k | M | G | T | P | E
(注意,1024 = 1ki 但 1000 = 1k;我没有选择大写。) </br>
<decimalExponent> ::= "e" <signedNumber> | "E" <signedNumber> </br>
无论使用三种指数形式中哪一种,没有数量可以表示大于 263 -1 的数,也不可能超过 3 个小数位。
更大或更精确的数字将被截断或向上取整(例如:0.1m 将向上取整为 1m)。
如果将来我们需要更大或更小的数量,可能会扩展。
当从字符串解析数量时,它将记住它具有的后缀类型,并且在序列化时将再次使用相同类型。
在序列化之前,数量将以“规范形式”放置。这意味着指数或者后缀将被向上或向下调整(尾数相应增加或减少),并确保:
没有精度丢失
不会输出小数数字
指数(或后缀)尽可能大。
除非数量是负数,否则将省略正负号。
例如:
1.5 将会被序列化成 “1500m”
1.5Gi 将会被序列化成 “1536Mi”
请注意,数量永远不会 在内部以浮点数表示。这是本设计的重中之重。
只要它们格式正确,非规范值仍将解析,但将以其规范形式重新输出(所以应该总是使用规范形式,否则不要执行 diff 比较)。
这种格式旨在使得很难在不撰写某种特殊处理代码的情况下使用这些数字,进而希望实现者也使用定点实现。
5.9.11 - ResourceFieldSelector
ResourceFieldSelector 表示容器资源(CPU,内存)及其输出格式。
import "k8s.io/api/core/v1"
ResourceFieldSelector 表示容器资源(CPU,内存)及其输出格式。
resource (string),必需
必需:选择的资源。
containerName (string)
容器名称:对卷必需,对环境变量可选。
divisor (Quantity )
指定所公开的资源的输出格式,默认值为 “1”。
5.9.12 - Status
状态(Status)是不返回其他对象的调用的返回值。
import "k8s.io/apimachinery/pkg/apis/meta/v1"
状态(Status)是不返回其他对象的调用的返回值。
5.9.13 - TypedLocalObjectReference
TypedLocalObjectReference 包含足够的信息,可以让你在同一个名称空间中定位指定类型的引用对象。
import "k8s.io/api/core/v1"
TypedLocalObjectReference 包含足够的信息,可以让你在同一个名称空间中定位特定类型的引用对象。
5.10 - 常用参数
allowWatchBookmarks
allowWatchBookmarks 字段请求类型为 BOOKMARK 的监视事件。
没有实现书签的服务器可能会忽略这个标志,并根据服务器的判断发送书签。
客户端不应该假设书签会在任何特定的时间间隔返回,也不应该假设服务器会在会话期间发送任何书签事件。
如果当前请求不是 watch 请求,则忽略该字段。
continue
当需要从服务器检索更多结果时,应该设置 continue 选项。由于这个值是服务器定义的,
客户端只能使用先前查询结果中具有相同查询参数的 continue 值(continue 值除外),
服务器可能拒绝它识别不到的 continue 值。
如果指定的 continue 值不再有效,无论是由于过期(通常是 5 到 15 分钟)
还是服务器上的配置更改,服务器将响应 "410 ResourceExpired" 错误和一个 continue 令牌。
如果客户端需要一个一致的列表,它必须在没有 continue 字段的情况下重新发起 list 请求。
否则,客户端可能会发送另一个带有 410 错误令牌的 list 请求,服务器将响应从下一个键开始的列表,
但列表数据来自最新的快照,这与之前的列表结果不一致。
第一个列表请求之后被创建、修改或删除的对象将被包含在响应中,只要它们的键是在“下一个键”之后。
当 watch 字段为 true 时,不支持此字段。客户端可以从服务器返回的最后一个 resourceVersion
值开始监视,就不会错过任何修改。
dryRun
表示不应该持久化所请求的修改。无效或无法识别的 dryRun 指令将导致错误响应,
并且服务器不再对请求进行进一步处理。有效值为:
fieldManager
fieldManager 是与进行这些更改的参与者或实体相关联的名称。
长度小于或128个字符且仅包含可打印字符,如 https://golang.org/pkg/unicode/#IsPrint 所定义。
fieldSelector
限制所返回对象的字段的选择器。默认为返回所有字段。
fieldValidation
fieldValidation 指示服务器如何处理请求(POST/PUT/PATCH)中包含未知或重复字段的对象。
有效值为:
Ignore:这将忽略从对象中默默删除的所有未知字段,并将忽略除解码器遇到的最后一个重复字段之外的所有字段。
这是在 v1.23 之前的默认行为。
Warn:这将针对从对象中删除的各个未知字段以及所遇到的各个重复字段,分别通过标准警告响应头发出警告。
如果没有其他错误,请求仍然会成功,并且只会保留所有重复字段中的最后一个。
这是 v1.23+ 版本中的默认设置。
Strict:如果从对象中删除任何未知字段,或者存在任何重复字段,将使请求失败并返回 BadRequest 错误。
从服务器返回的错误将包含所有遇到的未知和重复的字段。
force
Force 将“强制”应用请求。这意味着用户将重新获得他人拥有的冲突领域。
对于非应用补丁请求,Force 标志必须不设置。
gracePeriodSeconds
删除对象前的持续时间(秒数)。值必须为非负整数。取值为 0 表示立即删除。
如果该值为 nil,将使用指定类型的默认宽限期。如果没有指定,默认为每个对象的设置值。
0 表示立即删除。
labelSelector
通过标签限制返回对象列表的选择器。默认为返回所有对象。
limit
limit 是一个列表调用返回的最大响应数。如果有更多的条目,服务器会将列表元数据上的
'continue' 字段设置为一个值,该值可以用于相同的初始查询来检索下一组结果。
设置 limit 可能会在所有请求的对象被过滤掉的情况下返回少于请求的条目数量(下限为零),
并且客户端应该只根据 continue 字段是否存在来确定是否有更多的结果可用。
服务器可能选择不支持 limit 参数,并将返回所有可用的结果。
如果指定了 limit 并且 continue 字段为空,客户端可能会认为没有更多的结果可用。
如果 watch 为 true,则不支持此字段。
服务器保证在使用 continue 时返回的对象将与不带 limit 的列表调用相同,
也就是说,在发出第一个请求后所创建、修改或删除的对象将不包含在任何后续的继续请求中。
这有时被称为一致性快照,确保使用 limit 的客户端在分块接收非常大的结果的客户端能够看到所有可能的对象。
如果对象在分块列表期间被更新,则返回计算第一个列表结果时存在的对象版本。
namespace
对象名称和身份验证范围,例如用于团队和项目。
pretty
如果设置为 'true',那么输出是规范的打印。
默认情况下为 false,除非用户代理声明是浏览器或命令行 HTTP 工具(如 curl 和 wget)。
propagationPolicy
该字段决定是否以及如何执行垃圾收集。可以设置此字段或 OrphanDependents,但不能同时设置。
默认策略由 metadata.finalizers 和特定资源的默认策略设置决定。可接受的值是:
'Orphan':孤立依赖项;
'Background':允许垃圾回收器后台删除依赖;
'Foreground':一个级联策略,前台删除所有依赖项。
resourceVersion
resourceVersion 对请求所针对的资源版本设置约束。
详情请参见 https://kubernetes.io/zh-cn/docs/reference/using-api/api-concepts/#resource-versions
默认不设置。
resourceVersionMatch
resourceVersionMatch 字段决定如何将 resourceVersion 应用于列表调用。
强烈建议对设置了 resourceVersion 的列表调用设置 resourceVersion 匹配,
具体请参见 https://kubernetes.io/zh-cn/docs/reference/using-api/api-concepts/#resource-versions
默认不设置。
sendInitialEvents
sendInitialEvents=true
可以和 watch=true
一起设置。
在这种情况下,监视通知流将从合成事件开始,以生成集合中对象的当前状态。
一旦发送了所有此类事件,将发送合成的 "Bookmark" 事件。"bookmark" 将报告对象集合对应的
ResourceVersion(RV),并标有 "k8s.io/initial-events-end": "true"
注解。
之后,监视通知流将照常进行,发送与所监视的对象的变更(在 RV 之后)对应的监视事件。
当设置了 sendInitialEvents 选项时,我们还需要设置 resourceVersionMatch
选项。watch 请求的语义如下:
resourceVersionMatch
= NotOlderThan
被解释为"数据至少与提供的 resourceVersion
一样新",
最迟当状态同步到与 ListOptions 提供的版本一样新的 resourceVersion
时,
发送 bookmark 事件。如果 resourceVersion
未设置,这将被解释为"一致读取",
最迟当状态同步到开始处理请求的那一刻时,发送 bookmark 事件。
resourceVersionMatch
设置为任何其他值或返回 unsetInvalid 错误。
如果 resourceVersion=""
或 resourceVersion="0"
(出于向后兼容性原因),默认为
true,否则默认为 false。
timeoutSeconds
list/watch 调用的超时秒数。这选项限制调用的持续时间,无论是否有活动。
watch
监视对所述资源的更改,并将其这类变更以添加、更新和删除通知流的形式返回。指定 resourceVersion。
6 - 插桩
6.1 - Kubernetes 组件 SLI 指标
特性状态:
Kubernetes v1.29 [stable]
默认情况下,Kubernetes 1.31 会为每个 Kubernetes 组件的二进制文件发布服务等级指标(SLI)。
此指标端点被暴露在每个组件提供 HTTPS 服务的端口上,路径为 /metrics/slis
。
从 v1.27 版本开始,对每个 Kubernetes 组件而言,
ComponentSLIs
特性门控 都是默认启用的。
SLI 指标
启用 SLI 指标时,每个 Kubernetes 组件暴露两个指标,按照健康检查添加标签:
计量值(表示健康检查的当前状态)
计数值(记录观察到的每个健康检查状态的累计次数)
你可以使用此指标信息计算每个组件的可用性统计信息。例如,API 服务器检查 etcd 的健康。
你可以计算并报告 etcd 的可用或不可用情况,具体由其客户端(即 API 服务器)进行报告。
Prometheus 计量表数据看起来类似于:
# HELP kubernetes_healthcheck [ALPHA] This metric records the result of a single healthcheck.
# TYPE kubernetes_healthcheck gauge
kubernetes_healthcheck{name="autoregister-completion",type="healthz"} 1
kubernetes_healthcheck{name="autoregister-completion",type="readyz"} 1
kubernetes_healthcheck{name="etcd",type="healthz"} 1
kubernetes_healthcheck{name="etcd",type="readyz"} 1
kubernetes_healthcheck{name="etcd-readiness",type="readyz"} 1
kubernetes_healthcheck{name="informer-sync",type="readyz"} 1
kubernetes_healthcheck{name="log",type="healthz"} 1
kubernetes_healthcheck{name="log",type="readyz"} 1
kubernetes_healthcheck{name="ping",type="healthz"} 1
kubernetes_healthcheck{name="ping",type="readyz"} 1
而计数器数据看起来类似于:
# HELP kubernetes_healthchecks_total [ALPHA] This metric records the results of all healthcheck.
# TYPE kubernetes_healthchecks_total counter
kubernetes_healthchecks_total{name="autoregister-completion",status="error",type="readyz"} 1
kubernetes_healthchecks_total{name="autoregister-completion",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="autoregister-completion",status="success",type="readyz"} 14
kubernetes_healthchecks_total{name="etcd",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="etcd",status="success",type="readyz"} 15
kubernetes_healthchecks_total{name="etcd-readiness",status="success",type="readyz"} 15
kubernetes_healthchecks_total{name="informer-sync",status="error",type="readyz"} 1
kubernetes_healthchecks_total{name="informer-sync",status="success",type="readyz"} 14
kubernetes_healthchecks_total{name="log",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="log",status="success",type="readyz"} 15
kubernetes_healthchecks_total{name="ping",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="ping",status="success",type="readyz"} 15
使用此类数据
组件 SLI 指标端点旨在以高频率被抓取。
高频率抓取意味着你最终会获得更细粒度的计量信号,然后可以将其用于计算 SLO。
/metrics/slis
端点为各个 Kubernetes 组件提供了计算可用性 SLO 所需的原始数据。
6.2 - CRI Pod 和容器指标
通过 CRI 收集 Pod 和容器指标
特性状态:
Kubernetes v1.23 [alpha]
kubelet 通过
cAdvisor 收集 Pod 和容器指标。作为一个 Alpha 特性,
Kubernetes 允许你通过容器运行时接口 (CRI)
配置收集 Pod 和容器指标。要使用基于 CRI 的收集机制,你必须启用 PodAndContainerStatsFromCRI
特性门控
并使用兼容的 CRI 实现(containerd >= 1.6.0, CRI-O >= 1.23.0)。
CRI Pod 和容器指标
当启用 PodAndContainerStatsFromCRI
时,Kubelet 轮询底层容器运行时以获取
Pod 和容器统计信息,而不是直接使用 cAdvisor 检查主机系统。同直接使用 cAdvisor
收集信息相比,依靠容器运行时获取这些信息的好处包括:
潜在的性能改善,如果容器运行时在正常操作中已经收集了这些信息。
在这种情况下,这些数据可以被重用,而不是由 Kubelet 再次进行聚合。
这种做法进一步解耦了 Kubelet 和容器运行时。
对于使用 Kubelet 来在主机上运行进程的容器运行时,其行为可用 cAdvisor 观测;
对于其他运行时(例如,使用虚拟化的容器运行时)而言,
这种做法提供了允许收集容器运行时指标的可能性。
6.3 - 节点指标数据
访问 kubelet 所观测到的节点、卷、Pod 和容器级别指标的机制。
kubelet
在节点、卷、Pod 和容器级别收集统计信息,并在
概要 API
中输出这些信息。
你可以通过 Kubernetes API 服务器将代理的请求发送到 stats 概要 API。
下面是一个名为 minikube
的节点的概要 API 请求示例:
kubectl get --raw "/api/v1/nodes/minikube/proxy/stats/summary"
下面是使用 curl
所执行的相同 API 调用:
# 你需要先运行 "kubectl proxy"
# 更改 8080 为 "kubectl proxy" 指派的端口
curl http://localhost:8080/api/v1/nodes/minikube/proxy/stats/summary
说明:
从 metrics-server
0.6.x 开始,metrics-server
查询 /metrics/resource
kubelet 端点,
不查询 /stats/summary
。
概要指标 API 源
默认情况下,Kubernetes 使用 kubelet 内运行的嵌入式 cAdvisor
获取节点概要指标数据。如果你在自己的集群中启用 PodAndContainerStatsFromCRI
特性门控 ,
且你通过容器运行时接口 (CRI)使用支持统计访问的容器运行时,
则 kubelet 将使用 CRI 来获取 Pod 和容器级别的指标数据 ,
而不是 cAdvisor 来获取。
接下来
集群故障排查 任务页面讨论了如何使用依赖这些数据的指标管道。
7 - Kubernetes 问题和安全
7.1 - Kubernetes 问题追踪
要报告安全问题,请遵循
Kubernetes 安全问题公开流程 。
使用 GitHub Issues
跟踪 Kubernetes 编码工作和公开问题。
与安全性相关的公告将发送到
kubernetes-security-announce@googlegroups.com
邮件列表。
7.2 - Kubernetes 安全和信息披露
本页面介绍 Kubernetes 安全和信息披露相关的内容。
安全公告
加入 kubernetes-security-announce
组,以获取关于安全性和主要 API 公告的电子邮件。
报告一个漏洞
我们非常感谢向 Kubernetes 开源社区报告漏洞的安全研究人员和用户。
所有的报告都由社区志愿者进行彻底调查。
如需报告,请将你的漏洞提交给 Kubernetes 漏洞赏金计划 。
这样做可以使得社区能够在标准化的响应时间内对漏洞进行分类和处理。
你还可以通过电子邮件向私有 security@kubernetes.io
列表发送电子邮件,邮件中应该包含
所有 Kubernetes 错误报告
所需的详细信息。
你可以使用安全响应委员会成员 的
GPG 密钥加密你的发往邮件列表的邮件。揭示问题时不需要使用 GPG 来加密。
我应该在什么时候报告漏洞?
你认为在 Kubernetes 中发现了一个潜在的安全漏洞
你不确定漏洞如何影响 Kubernetes
你认为你在 Kubernetes 依赖的另一个项目中发现了一个漏洞
对于具有漏洞报告和披露流程的项目,请直接在该项目处报告
我什么时候不应该报告漏洞?
你需要调整 Kubernetes 组件安全性的帮助
你需要应用与安全相关更新的帮助
你的问题与安全无关
安全漏洞响应
每个报告在 3 个工作日内由安全响应委员会成员确认和分析,
这将启动安全发布过程 。
与安全响应委员会共享的任何漏洞信息都保留在 Kubernetes 项目中,除非有必要修复该问题,否则不会传播到其他项目。
随着安全问题从分类、识别修复、发布计划等方面的进展,我们将不断更新报告。
公开披露时间
公开披露日期由 Kubernetes 安全响应委员会和 bug 提交者协商。
我们倾向于在能够为用户提供缓解措施之后尽快完全披露该 bug。
当 bug 或其修复还没有被完全理解,解决方案没有经过良好的测试,或者为了处理供应商协调问题时,延迟披露是合理的。
信息披露的时间范围从即时(尤其是已经公开的)到几周不等。
对于具有直接缓解措施的漏洞,我们希望报告日期到披露日期的间隔是 7 天。
在设置披露日期方面,Kubernetes 安全响应委员会拥有最终决定权。
7.3 - 官方 CVE 订阅源
特性状态:
Kubernetes v1.27 [beta]
这是由 Kubernetes 安全响应委员会(Security Response Committee, SRC)公布的经社区维护的官方 CVE 列表。
更多细节请参阅 Kubernetes 安全和信息披露 。
Kubernetes 项目以 JSON Feed
和 RSS feed
格式就已发布的安全问题提供了可通过程序访问的提要。
你可以通过执行以下命令来查阅这些安全问题:
链接到 JSON 格式
curl -Lv https://k8s.io/docs/reference/issues-security/official-cve-feed/index.json
链接到 RSS 格式
curl -Lv https://k8s.io/docs/reference/issues-security/official-cve-feed/feed.xml
此订阅源会自动刷新,但从宣布 CVE 到可在此订阅源中找到对应的 CVE 会有一个明显却很小的延迟(几分钟到几小时)。
此订阅源的真实来源是一组 GitHub Issue,通过受控和受限的标签 official-cve-feed
进行过滤。
原始数据存放在 Google Cloud Bucket 中,只有社区少数受信任的成员可以写入。
8 - 节点参考信息
本部分包含以下有关节点的参考主题:
你还可以从 Kubernetes 文档的其他地方阅读节点的详细参考信息,包括:
8.1 - Kubelet Checkpoint API
特性状态:
Kubernetes v1.30 [beta]
(enabled by default: true)
为容器生成检查点这个功能可以为一个正在运行的容器创建有状态的拷贝。
一旦容器有一个有状态的拷贝,你就可以将其移动到其他计算机进行调试或类似用途。
如果你将通过检查点操作生成的容器数据移动到能够恢复该容器的一台计算机,
所恢复的容器将从之前检查点操作执行的时间点继续运行。
你也可以检视所保存的数据,前提是你拥有这类操作的合适工具。
创建容器的检查点可能会产生安全隐患。
通常,一个检查点包含执行检查点操作时容器中所有进程的所有内存页。
这意味着以前存在于内存中的一切内容现在都在本地磁盘上获得。
这里的内容包括一切私密数据和可能用于加密的密钥。
底层 CRI 实现(该节点上的容器运行时)应创建只有 root
用户可以访问的检查点存档。
另外重要的是记住:如果检查点存档被转移到另一个系统,该检查点存档的所有者将可以读取所有内存页。
操作
post
对指定的容器执行检查点操作
告知 kubelet 对指定 Pod 中的特定容器执行检查点操作。
查阅 Kubelet 身份验证/鉴权参考 了解如何控制对
kubelet 检查点接口的访问。
Kubelet 将对底层 CRI 实现请求执行检查点操作。
在该检查点请求中,Kubelet 将检查点存档的名称设置为 checkpoint-<pod 全称>-<容器名称>-<时间戳>.tar
,
还会请求将该检查点存档存储到其根目录(由 --root-dir
定义)下的 checkpoints
子目录中。
这个目录默认为 /var/lib/kubelet/checkpoints
。
检查点存档的格式为 tar ,可以使用 tar
的一种实现来读取。存档文件的内容取决于底层 CRI 实现(该节点的容器运行时)。
HTTP 请求
POST /checkpoint/{namespace}/{pod}/{container}
参数
namespace (路径参数 ):string,必需
名字空间(Namespace)
pod (路径参数 ):string,必需
Pod
container (路径参数 ):string,必需
容器(Container)
timeout (查询参数 ):integer
等待检查点创建完成的超时时间(单位为秒)。
如果超时值为零或未设定,将使用默认的 CRI 超时时间值。
生成检查点所需的时长直接取决于容器所用的内存。容器使用的内存越多,创建相应检查点所需的时间越长。
响应
200: OK
401: Unauthorized
404: Not Found(如果 ContainerCheckpoint
特性门控被禁用)
404: Not Found(如果指定的 namespace
、pod
或 container
无法被找到)
500: Internal Server Error(如果执行检查点操作期间 CRI 实现遇到一个错误(参阅错误消息了解更多细节))
500: Internal Server Error(如果 CRI 实现未实现检查点 CRI API(参阅错误消息了解更多细节))
8.2 - Linux 内核版本要求
说明:  本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循
CNCF 网站指南 ,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读
内容指南 。
许多特性依赖于特定的内核功能,并且有最低的内核版本要求。
然而,单纯依赖内核版本号可能不足以满足某些操作系统发行版,
因为像 RHEL、Ubuntu 和 SUSE 等发行版的维护者们通常会将选定的特性反向移植到较旧的内核版本(保留较旧的内核版本)。
Pod sysctls
在 Linux 中,sysctl()
系统调用在运行时配置内核参数。
你可以使用名为 sysctl
的命令行工具来配置这些参数,许多参数通过 proc
文件系统暴露。
某些 sysctl 仅可用于足够新的内核上。
以下 sysctl 具有最低的内核版本要求,
并在安全集 中得到了支持:
net.ipv4.ip_local_reserved_ports
(自 Kubernetes 1.27 起,需要内核 3.16+);
net.ipv4.tcp_keepalive_time
(自 Kubernetes 1.29 起,需要内核 4.5+);
net.ipv4.tcp_fin_timeout
(自 Kubernetes 1.29 起,需要内核 4.6+);
net.ipv4.tcp_keepalive_intvl
(自 Kubernetes 1.29 起,需要内核 4.5+);
net.ipv4.tcp_keepalive_probes
(自 Kubernetes 1.29 起,需要内核 4.5+);
net.ipv4.tcp_syncookies
(自内核 4.6+ 添加了命名空间作用域)。
net.ipv4.vs.conn_reuse_mode
(用于 ipvs
代理模式,需要内核 4.1+);
kube proxy nftables
代理模式
对于 Kubernetes 1.31,kube-proxy 的
nftables
模式 要求
nft 命令行工具为 v1.0.1 或更高版本,要求内核为 v5.13 或更高版本。
出于测试/开发目的,你可以使用较旧的内核,如果你在 kube-proxy 配置中设置 nftables.skipKernelVersionCheck
选项,
最老可以回溯到 v5.4。但在生产环境中不推荐这样做,因为这可能会导致系统上其他 nftables 用户出现问题。
v2 控制组
Kubernetes 对 cgroup v1 的支持从 v1.31 开始处于维护模式;推荐使用 cgroup v2。
在 Linux 5.8
中,为了方便使用,系统层面的 cpu.stat
文件被添加到根 cgroup。
在 runc 文档中,不推荐使用低于 5.2 的内核,因为其缺少冻结特性。
其他内核要求
某些特性可能依赖于新的内核功能并具有特定的内核要求:
递归只读挂载 :
这是通过应用 MOUNT_ATTR_RDONLY
属性和 AT_RECURSIVE
标志来实现的,使用的是在 Linux
内核 v5.12 中添加的 mount_setattr
(2)。
Pod 用户命名空间支持需要最低内核版本 6.5+,参阅
KEP-127 。
对于节点系统交换 ,
直到内核 6.3 才支持将 tmpfs 设置为 noswap
。
Linux 内核长期维护
你可以在 kernel.org 找到活动的内核版本。
通常会提供多个 长期维护 内核版本,用于将 Bug 修复反向移植到较旧的内核树。
特别是对于较旧的树,只有重要的 Bug 修复才会被应用到此类内核,这些内核通常不会频繁发布新版本。
请参阅 Linux 内核网站,了解 Longterm 类别中的发布列表 。
接下来
8.3 - 关于 dockershim 移除和使用兼容 CRI 运行时的文章
这是关于 Kubernetes 弃用和移除 dockershim
或使用兼容 CRI 的容器运行时相关的文章和其他页面的列表。
Kubernetes 项目
你可以通过 GitHub 问题
Dockershim 移除反馈和问题 提供反馈。 (k/kubernetes/#106917 )
外部来源
8.4 - 由 kubelet 填充的节点标签
Kubernetes 节点 预先填充了一组标准
标签 。
你还可以通过 kubelet 配置或使用 Kubernetes API 在节点上设置自己的标签。
预设标签
Kubernetes 在节点上设置的预设标签有:
说明:
这些标签的值是特定于云提供商的,并且不保证其可靠性。
例如,kubernetes.io/hostname
的值在某些环境中可能与节点名称相同,
而在其他环境中可能与节点名称不同。
接下来
8.5 - kubelet 所使用的本地文件和路径
kubelet 是一个运行在 Kubernetes
节点 上的无状态进程。本文简要介绍了 kubelet 读写的文件。
说明:
本文仅供参考,而非描述保证会发生的行为或 API。
本文档列举 kubelet 所使用的资源。所给的信息属于实现细节,可能会在后续版本中发生变更。
kubelet 通常使用控制面 作为需要在 Node
上运行的事物的真实来源,并使用容器运行时 获取容器的当前状态。
只要你向 kubelet 提供 kubeconfig (API 客户端配置),kubelet 就会连接到你的控制面;
否则,节点将以**独立(Standalone)**模式运行。
在 Linux 节点上,kubelet 还需要读取 cgroups 和各种系统文件来收集指标。
在 Windows 节点上,kubelet 不依赖于路径,而是通过其他机制来收集指标。
kubelet 所使用的还有其他文件,包括其使用本地 Unix 域套接字进行通信的文件。
有些文件是 kubelet 要监听的套接字,而其他套接字则是 kubelet 先发现后作为客户端连接的。
说明:
本页列举的路径为 Linux 路径,若要映射到 Windows,你可以添加根磁盘 C:\
替换 /
(除非另行指定)。
例如,/var/lib/kubelet/device-plugins
映射到 C:\var\lib\kubelet\device-plugins
。
配置
kubelet 配置文件
你可以使用命令行参数 --config
指定 kubelet 配置文件的路径。kubelet
还支持插件(Drop-in)配置文件 来增强配置。
证书
证书和私钥通常位于 /var/lib/kubelet/pki
,但你可以使用 --cert-dir
kubelet 命令行参数进行配置。
证书文件的名称也是可以配置的。
清单
静态 Pod 的清单通常位于 /etc/kubernetes/manifests
。
你可以使用 staticPodPath
kubelet 配置选项进行配置。
Systemd 单元设置
当 kubelet 作为 systemd 单元运行时,一些 kubelet 配置可以在 systemd 单元设置文件中声明。
这些配置通常包括:
状态
资源管理器的检查点文件
所有资源管理器将 Pod 与已分配资源之间的映射保存在状态文件中。
状态文件位于 kubelet 的基础目录,也称为根目录 (但与节点根目录 /
不同)之下。
你可以使用 kubelet 命令行参数 --root-dir
来配置 kubelet 的基础目录。
文件名称:
memory_manager_state
对应内存管理器
cpu_manager_state
对应 CPU 管理器
dra_manager_state
对应 DRA
设备管理器的检查点文件
设备管理器在与套接字文件相同的目录(/var/lib/kubelet/device-plugins/
)中创建检查点。
对于设备管理器 ,
检查点文件的名称为 kubelet_internal_checkpoint
。
Pod 状态检查点存储
特性状态:
Kubernetes v1.27 [alpha]
(enabled by default: false)
如果你的集群启用了就地 Pod 垂直扩缩容
(特性门控 名称为 InPlacePodVerticalScaling
),
则 kubelet 会在本地存储 Pod 状态。
文件名为 pod_status_manager_state
,位于 kubelet 基础目录内
(在 Linux 上默认为 /var/lib/kubelet
;你可以使用 --root-dir
进行配置)。
容器运行时
kubelet 使用通过配置参数所配置的套接字与容器运行时进行通信:
containerRuntimeEndpoint
用于运行时操作
imageServiceEndpoint
用于镜像管理操作
这些端点的实际值取决于所使用的容器运行时。
设备插件
kubelet 在路径 /var/lib/kubelet/device-plugins/kubelet.sock
为各个要注册的设备插件 公开一个套接字。
当设备插件注册自己时,它会为提供其套接字路径供 kubelet 连接使用。
设备插件套接字应位于 kubelet 基础目录中的 device-plugins
目录内。
在典型的 Linux 节点上,这意味着 /var/lib/kubelet/device-plugins
。
Pod Resources API
Pod Resources API
将在路径 /var/lib/kubelet/pod-resources
上被公开。
DRA、CSI 和设备插件
kubelet 会查找通过 DRA
设备管理器或存储插件所管理的设备插件所创建的套接字文件,然后尝试连接到这些套接字。
kubelet 查找的目录是 kubelet 基础目录下的 plugins_registry
,
因此在典型的 Linux 节点上这意味着 /var/lib/kubelet/plugins_registry
。
请注意,对于设备插件,有两种备选的注册机制。每个给定的插件只能使用其中一种注册机制。
可以将套接字文件放入该目录的插件类型包括:
(通常是 /var/lib/kubelet/plugins_registry
)。
安全配置文件和配置
Seccomp
被 Pod 引用的 Seccomp 配置文件应放置在 /var/lib/kubelet/seccomp
。
有关细节请参见 Seccomp 参考 。
AppArmor
kubelet 不会通过特定于 Kubernetes 的路径加载或引用 AppArmor 配置文件。
AppArmor 配置文件通过节点操作系统被加载,而不是通过其路径被引用。
加锁
特性状态:
Kubernetes v1.2 [alpha]
kubelet 的锁文件;通常为 /var/run/kubelet.lock
。
kubelet 使用此文件确保尝试运行两个不同的、彼此冲突的 kubelet。
你可以使用 --lock-file
kubelet 命令行参数来配置这个锁文件的路径。
如果同一节点上的两个 kubelet 使用不同的锁文件路径值,则这两个 kubelet 在同时运行时将不会检测到冲突。
接下来
8.6 - kubelet 配置目录合并
当使用 kubelet 的 --config-dir
标志来指定存放配置的目录时,不同类型的配置会有一些特定的行为。
以下是在配置合并过程中不同数据类型的一些行为示例:
结构字段
在 YAML 结构中有两种结构字段:独立(标量类型)和嵌入式(此结构包含标量类型)。
配置合并过程将处理独立构造字段和嵌入式构造字段的重载,以创建最终的 kubelet 配置。
例如,你可能想要为所有节点设置一个基准 kubelet 配置,但希望自定义 address
和 authorization
字段。
这种情况下,你可以按以下方式完成:
kubelet 主配置文件内容:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
port : 20250
authorization :
mode : Webhook
webhook :
cacheAuthorizedTTL : "5m"
cacheUnauthorizedTTL : "30s"
serializeImagePulls : false
address : "192.168.0.1"
--config-dir
目录中文件的内容:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
authorization :
mode : AlwaysAllow
webhook :
cacheAuthorizedTTL : "8m"
cacheUnauthorizedTTL : "45s"
address : "192.168.0.8"
生成的配置如下所示:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
port : 20250
serializeImagePulls : false
authorization :
mode : AlwaysAllow
webhook :
cacheAuthorizedTTL : "8m"
cacheUnauthorizedTTL : "45s"
address : "192.168.0.8"
列表
你可以重载 kubelet 配置的切片/列表值。
但在合并过程中整个列表将被重载。
例如,你可以按以下方式重载 clusterDNS
列表:
kubelet 主配置文件的内容:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
port : 20250
serializeImagePulls : false
clusterDNS :
- "192.168.0.9"
- "192.168.0.8"
--config-dir
目录中文件的内容:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
clusterDNS :
- "192.168.0.2"
- "192.168.0.3"
- "192.168.0.5"
生成的配置如下所示:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
port : 20250
serializeImagePulls : false
clusterDNS :
- "192.168.0.2"
- "192.168.0.3"
- "192.168.0.5"
含嵌套结构的映射
映射中的各个字段(无论其值类型是布尔值、字符串等)都可以被选择性地重载。
但对于 map[string][]string
类型来说,与特定字段关联的整个列表都将被重载。
让我们通过一个例子更好地理解这一点,特别是 featureGates
和 staticPodURLHeader
这类字段:
kubelet 主配置文件的内容:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
port : 20250
serializeImagePulls : false
featureGates :
AllAlpha : false
MemoryQoS : true
staticPodURLHeader :
kubelet-api-support :
- "Authorization: 234APSDFA"
- "X-Custom-Header: 123"
custom-static-pod :
- "Authorization: 223EWRWER"
- "X-Custom-Header: 456"
--config-dir
目录中文件的内容:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
featureGates :
MemoryQoS : false
KubeletTracing : true
DynamicResourceAllocation : true
staticPodURLHeader :
custom-static-pod :
- "Authorization: 223EWRWER"
- "X-Custom-Header: 345"
生成的配置如下所示:
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
port : 20250
serializeImagePulls : false
featureGates :
AllAlpha : false
MemoryQoS : false
KubeletTracing : true
DynamicResourceAllocation : true
staticPodURLHeader :
kubelet-api-support :
- "Authorization: 234APSDFA"
- "X-Custom-Header: 123"
custom-static-pod :
- "Authorization: 223EWRWER"
- "X-Custom-Header: 345"
8.7 - Kubelet 设备管理器 API 版本
本页详述了 Kubernetes
设备插件 API
与不同版本的 Kubernetes 本身之间的版本兼容性。
兼容性矩阵
v1alpha1
v1beta1
Kubernetes 1.21
-
✓
Kubernetes 1.22
-
✓
Kubernetes 1.23
-
✓
Kubernetes 1.24
-
✓
Kubernetes 1.25
-
✓
Kubernetes 1.26
-
✓
简要说明:
✓
设备插件 API 和 Kubernetes 版本中的特性或 API 对象完全相同。
+
设备插件 API 具有 Kubernetes 集群中可能不存在的特性或 API 对象,
不是因为设备插件 API 添加了额外的新 API 调用,就是因为服务器移除了旧的 API 调用。
但它们的共同点是(大多数其他 API)都能工作。
请注意,Alpha API 可能会在次要版本的迭代过程中消失或出现重大变更。
-
Kubernetes 集群具有设备插件 API 无法使用的特性,不是因为服务器添加了额外的 API 调用,
就是因为设备插件 API 移除了旧的 API 调用。但它们的共同点是(大多数 API)都能工作。
8.8 - Seccomp 和 Kubernetes
Seccomp 表示安全计算(Secure Computing)模式,自 2.6.12 版本以来,一直是 Linux 内核的一个特性。
它可以用来沙箱化进程的权限,限制进程从用户态到内核态的调用。
Kubernetes 能使你自动将加载到节点 上的
seccomp 配置文件应用到你的 Pod 和容器。
Seccomp 字段
特性状态:
Kubernetes v1.19 [stable]
有四种方式可以为 Pod 指定 seccomp 配置文件:
apiVersion : v1
kind : Pod
metadata :
name : pod
spec :
securityContext :
seccompProfile :
type : Unconfined
ephemeralContainers :
- name : ephemeral-container
image : debian
securityContext :
seccompProfile :
type : RuntimeDefault
initContainers :
- name : init-container
image : debian
securityContext :
seccompProfile :
type : RuntimeDefault
containers :
- name : container
image : docker.io/library/debian:stable
securityContext :
seccompProfile :
type : Localhost
localhostProfile : my-profile.json
上面的示例中的 Pod 以 Unconfined
运行,而 ephemeral-container
和
init-container
独立设置了 RuntimeDefault
。
如果临时容器或 Init 容器没有明确设置 securityContext.seccompProfile
字段,
则此值将从 Pod 继承。同样的机制也适用于运行 Localhost
配置文件 my-profile.json
的容器。
一般来说,(临时)容器的字段优先级高于 Pod 层级的值,而未设置 seccomp 字段的容器则从 Pod 继承配置。
说明:
你不可以将 seccomp 配置文件应用到在容器的 securityContext
中设置了 privileged: true
的
Pod 或容器。特权容器始终以 Unconfined
运行。
对于 seccompProfile.type
,可以使用以下值:
Unconfined
工作负载在没有任何 seccomp 限制的情况下运行。
RuntimeDefault
由容器运行时 定义的默认
seccomp 配置文件被应用。这个默认的配置文件旨在提供一套强大的安全默认值,同时保持工作负载的功能不受影响。
不同的容器运行时及其版本之间的默认配置文件可能会有所不同,
例如在比较 CRI-O 和
containerd 的默认配置文件时就会发现不同。
Localhost
localhostProfile
将被应用,这一配置必须位于节点磁盘上(在 Linux 上是 /var/lib/kubelet/seccomp
)。
在创建容器时,容器运行时 会验证 seccomp
配置文件的可用性。如果此配置文件不存在,则容器创建将失败,并报错 CreateContainerError
。
Localhost
配置文件
Seccomp 配置文件是遵循
OCI 运行时规范 定义的
JSON 文件。配置文件主要根据所匹配的系统调用来定义操作,但也允许将特定值作为参数传递给系统调用。例如:
{
"defaultAction" : "SCMP_ACT_ERRNO" ,
"defaultErrnoRet" : 38 ,
"syscalls" : [
{
"names" : [
"adjtimex" ,
"alarm" ,
"bind" ,
"waitid" ,
"waitpid" ,
"write" ,
"writev"
],
"action" : "SCMP_ACT_ALLOW"
}
]
}
上述配置文件中的 defaultAction
被定义为 SCMP_ACT_ERRNO
,并可回退至 syscalls
中所定义的操作。
此错误通过 defaultErrnoRet
字段被定义为代码 38
。
通常可以使用以下操作:
SCMP_ACT_ERRNO
返回指定的错误码。
SCMP_ACT_ALLOW
允许执行系统调用。
SCMP_ACT_KILL_PROCESS
杀死进程。
SCMP_ACT_KILL_THREAD
和 SCMP_ACT_KILL
仅杀死线程。
SCMP_ACT_TRAP
发送 SIGSYS
信号。
SCMP_ACT_NOTIFY
和 SECCOMP_RET_USER_NOTIF
通知用户空间。
SCMP_ACT_TRACE
使用指定的值通知跟踪进程。
SCMP_ACT_LOG
在将操作记录到 syslog 或 auditd 之后,允许执行系统调用。
SCMP_ACT_NOTIFY
或 SECCOMP_RET_USER_NOTIF
这类操作可能不被支持,
具体取决于所使用的容器运行时、OCI 运行时或 Linux 内核版本。也可能存在其他限制,
例如 SCMP_ACT_NOTIFY
不能用作 defaultAction
或用于某些系统调用(如 write
)。
所有这些限制由 OCI 运行时
(runc 、crun )
或 libseccomp 所定义。
syscalls
JSON 数组包含对象列表,每个对象通过系统调用的 names
引用系统调用。
例如,SCMP_ACT_ALLOW
操作可用于创建包含如上例所示的系统调用的白名单。
也可以使用 SCMP_ACT_ERRNO
操作定义另一个列表,但会有不同的返回值(errnoRet
)。
你还可以指定传递给某些系统调用的参数(args
)。有关这些高级用例的细节,请参见
OCI 运行时规范
和 Seccomp Linux 内核文档 。
进一步阅读
8.9 - 节点状态
在 Kubernetes 中,节点 的状态是管理 Kubernetes
集群的一个关键方面。在本文中,我们将简要介绍如何监控和维护节点状态以确保集群的健康和稳定。
节点状态字段
一个节点的状态包含以下信息:
你可以使用 kubectl
来查看节点状态和其他细节信息:
kubectl describe node <节点名称>
下面对输出的每个部分进行详细描述。
地址
这些字段的用法取决于你的云服务商或者物理机配置。
HostName:由节点的内核报告。可以通过 kubelet 的 --hostname-override
参数覆盖。
ExternalIP:通常是节点的可外部路由(从集群外可访问)的 IP 地址。
InternalIP:通常是节点的仅可在集群内部路由的 IP 地址。
状况
conditions
字段描述了所有 Running
节点的状况。状况的示例包括:
节点状况及每种状况适用场景的描述
节点状况
描述
Ready
如节点是健康的并已经准备好接收 Pod 则为 True
;False
表示节点不健康而且不能接收 Pod;Unknown
表示节点控制器在最近 node-monitor-grace-period
期间(默认 40 秒)没有收到节点的消息
DiskPressure
True
表示节点存在磁盘空间压力,即磁盘可用量低,否则为 False
MemoryPressure
True
表示节点存在内存压力,即节点内存可用量低,否则为 False
PIDPressure
True
表示节点存在进程压力,即节点上进程过多;否则为 False
NetworkUnavailable
True
表示节点网络配置不正确;否则为 False
说明:
如果使用命令行工具来打印已保护(Cordoned)节点的细节,其中的 Condition 字段可能包括
SchedulingDisabled
。SchedulingDisabled
不是 Kubernetes API 中定义的
Condition,被保护起来的节点在其规约中被标记为不可调度(Unschedulable)。
在 Kubernetes API 中,节点的状况表示节点资源中 .status
的一部分。
例如,以下 JSON 结构描述了一个健康节点:
"conditions" : [
{
"type" : "Ready" ,
"status" : "True" ,
"reason" : "KubeletReady" ,
"message" : "kubelet is posting ready status" ,
"lastHeartbeatTime" : "2019-06-05T18:38:35Z" ,
"lastTransitionTime" : "2019-06-05T11:41:27Z"
}
]
当节点上出现问题时,Kubernetes 控制面会自动创建与影响节点的状况对应的
污点 。
例如当 Ready 状况的 status
保持 Unknown
或 False
的时间长于
kube-controller-manager 的 NodeMonitorGracePeriod
(默认为 40 秒)时,
会造成 Unknown
状态下为节点添加 node.kubernetes.io/unreachable
污点或在
False
状态下为节点添加 node.kubernetes.io/not-ready
污点。
这些污点会影响悬决的 Pod,因为调度器在将 Pod 分配到节点时会考虑节点的污点。
已调度到节点的当前 Pod 可能会由于施加的 NoExecute
污点被驱逐。
Pod 还可以设置容忍度 ,
使得这些 Pod 仍然能够调度到且继续运行在设置了特定污点的节点上。
进一步的细节可参阅基于污点的驱逐
和根据状况为节点设置污点 。
容量(Capacity)与可分配(Allocatable)
这两个值描述节点上的可用资源:CPU、内存和可以调度到节点上的 Pod 的个数上限。
capacity
块中的字段标示节点拥有的资源总量。
allocatable
块指示节点上可供普通 Pod 使用的资源量。
你可以通过学习如何在节点上预留计算资源
来进一步了解有关容量和可分配资源的信息。
信息(Info)
Info 指的是节点的一般信息,如内核版本、Kubernetes 版本(kubelet
和 kube-proxy
版本)、
容器运行时详细信息,以及节点使用的操作系统。
kubelet
从节点收集这些信息并将其发布到 Kubernetes API。
心跳
Kubernetes 节点发送的心跳帮助你的集群确定每个节点的可用性,并在检测到故障时采取行动。
对于节点,有两种形式的心跳:
更新节点的 .status
kube-node-lease
名字空间 中的
Lease(租约) 对象。
每个节点都有一个关联的 Lease 对象。
与节点的 .status
更新相比,Lease 是一种轻量级资源。
使用 Lease 来表达心跳在大型集群中可以减少这些更新对性能的影响。
kubelet 负责创建和更新节点的 .status
,以及更新它们对应的 Lease。
当节点状态发生变化时,或者在配置的时间间隔内没有更新事件时,kubelet 会更新 .status
。
.status
更新的默认间隔为 5 分钟(比节点不可达事件的 40 秒默认超时时间长很多)。
kubelet
会创建并每 10 秒(默认更新间隔时间)更新 Lease 对象。
Lease 的更新独立于节点的 .status
更新而发生。
如果 Lease 的更新操作失败,kubelet 会采用指数回退机制,从 200 毫秒开始重试,
最长重试间隔为 7 秒钟。
9 - 网络参考
Kubernetes 文档的这一部分提供了 Kubernetes 网络的参考详细信息。
9.1 - Service 所用的协议
如果你配置 Service ,
你可以从 Kubernetes 支持的任何网络协议中选择一个协议。
Kubernetes 支持以下协议用于 Service:
当你定义 Service 时,
你还可以指定其使用的应用协议 。
本文详细说明了一些特殊场景,这些场景通常均使用 TCP 作为传输协议:
支持的协议
Service 端口的 protocol
有 3 个有效值:
SCTP
特性状态:
Kubernetes v1.20 [stable]
当使用支持 SCTP 流量的网络插件时,你可以为大多数 Service 使用 SCTP。
对于 type: LoadBalancer
Service,对 SCTP 的支持情况取决于提供此项设施的云供应商(大部分不支持)。
运行 Windows 的节点不支持 SCTP。
支持多宿主 SCTP 关联
对多宿主 SCTP 关联的支持要求 CNI 插件可以支持为 Pod 分配多个接口和 IP 地址。
针对多宿主 SCTP 关联的 NAT 需要在对应的内核模块具有特殊的逻辑。
TCP
你可以将 TCP 用于任何类别的 Service,这是默认的网络协议。
UDP
你可以将 UDP 用于大多数 Service。对于 type: LoadBalancer
Service,
UDP 的支持与否取决于提供此项设施的云供应商。
特殊场景
HTTP
如果你的云供应商支持负载均衡,而且尤其是该云供应商的负载均衡器实现了 HTTP/HTTPS 反向代理,
可将流量转发到该 Service 的后端端点,那么你就可以使用 LoadBalancer 模式的 Service 以便在
Kubernetes 集群外部配置负载均衡器。
通常,你将 Service 协议设置为 TCP
,
并添加一个注解
(一般取决于你的云供应商)配置负载均衡器,以便在 HTTP 级别处理流量。
此配置也可能包括为你的工作负载提供 HTTPS(基于 TLS 的 HTTP)并反向代理纯 HTTP。
说明:
你也可以使用 Ingress 来暴露 HTTP/HTTPS Service。
你可能还想指定连接的应用协议 是
http
还是 https
。如果从负载均衡器到工作负载的会话是不带 TLS 的 HTTP,请使用 http
;
如果从负载均衡器到工作负载的会话使用 TLS 加密,请使用 https
。
PROXY 协议
如果你的云供应商支持此协议,你可以使用设置为 type: LoadBalancer
的 Service,
在 Kubernetes 本身的外部配置负载均衡器,以转发用
PROXY 协议 封装的连接。
负载均衡器然后发送一个初始的八位元组系列来描述传入的连接,这类似于以下示例(PROXY 协议 v1):
PROXY TCP4 192.0.2.202 10.0.42.7 12345 7\r\n
代理协议前导码之后的数据是来自客户端的原始数据。
当任何一侧关闭连接时,负载均衡器也会触发连接关闭并在可行的情况下发送所有残留数据。
通常,你会将 Service 协议定义为 TCP
。
你还会设置一个特定于云供应商的注解,将负载均衡器配置为以 PROXY 协议封装所有传入的连接。
TLS
如果你的云供应商支持 TLS,你可以使用设置为 type: LoadBalancer
的 Service
作为设置外部反向代理的一种方式,其中从客户端到负载均衡器的连接是 TLS 加密的且该负载均衡器是
TLS 对等服务器。从负载均衡器到工作负载的连接可以是 TLS,或可能是纯文本。
你可以使用的确切选项取决于你的云供应商或自定义 Service 实现。
通常,你会将协议设置为 TCP
并设置一个注解(通常特定于你的云供应商),
将负载均衡器配置为充当一个 TLS 服务器。你将使用特定于云供应商的机制来配置 TLS 身份
(作为服务器,也可能作为连接到工作负载的客户端)。
9.2 - 端口和协议
当你在一个有严格网络边界的环境里运行 Kubernetes,例如拥有物理网络防火墙或者拥有公有云中虚拟网络的自有数据中心,
了解 Kubernetes 组件使用了哪些端口和协议是非常有用的。
控制面
协议
方向
端口范围
目的
使用者
TCP
入站
6443
Kubernetes API 服务器
所有
TCP
入站
2379-2380
etcd 服务器客户端 API
kube-apiserver、etcd
TCP
入站
10250
kubelet API
自身、控制面
TCP
入站
10259
kube-scheduler
自身
TCP
入站
10257
kube-controller-manager
自身
尽管 etcd 的端口也列举在控制面的部分,但你也可以在外部自己托管 etcd 集群或者自定义端口。
工作节点
协议
方向
端口范围
目的
使用者
TCP
入站
10250
kubelet API
自身、控制面
TCP
入站
10256
kube-proxy
自身、负载均衡器
TCP
入站
30000-32767
NodePort Services†
所有
† NodePort Service 的默认端口范围。
所有默认端口都可以重新配置。当使用自定义的端口时,你需要打开这些端口来代替这里提到的默认端口。
一个常见的例子是 API 服务器的端口有时会配置为 443。或者你也可以使用默认端口,
把 API 服务器放到一个监听 443 端口的负载均衡器后面,并且路由所有请求到 API 服务器的默认端口。
9.3 - 虚拟 IP 和服务代理
Kubernetes 集群 中的每个
节点 会运行一个
kube-proxy
(除非你已经部署了自己的替换组件来替代 kube-proxy
)。
kube-proxy
组件负责除 type
为
ExternalName
以外的服务 ,实现虚拟 IP 机制。
kube-proxy 的每个实例都会监视 Kubernetes 控制平面 中
Service 和 EndpointSlice 对象 的添加和删除。对于每个
Service,kube-proxy 调用适当的 API(取决于 kube-proxy 模式)来配置节点,以捕获流向 Service 的 clusterIP
和 port
的流量,并将这些流量重定向到 Service 的某个端点(通常是 Pod,但也可能是用户提供的任意 IP 地址)。一个控制回路确保每个节点上的规则与
API 服务器指示的 Service 和 EndpointSlice 状态可靠同步。
iptables 模式下 Service 的虚拟 IP 机制
一个时不时出现的问题是,为什么 Kubernetes 依赖代理将入站流量转发到后端。
其他方案呢?例如,是否可以配置具有多个 A 值(或 IPv6 的 AAAA)的 DNS 记录,
使用轮询域名解析?
使用代理转发方式实现 Service 的原因有以下几个:
DNS 的实现不遵守记录的 TTL 约定的历史由来已久,在记录过期后可能仍有结果缓存。
有些应用只做一次 DNS 查询,然后永久缓存结果。
即使应用程序和库进行了适当的重新解析,TTL 取值较低或为零的 DNS 记录可能会给 DNS 带来很大的压力,
从而变得难以管理。
在下文中,你可以了解到 kube-proxy 各种实现方式的工作原理。
总的来说,你应该注意到,在运行 kube-proxy
时,
可能会修改内核级别的规则(例如,可能会创建 iptables 规则),
在某些情况下,这些规则直到重启才会被清理。
因此,运行 kube-proxy 这件事应该只由了解在计算机上使用低级别、特权网络代理服务会带来的后果的管理员执行。
尽管 kube-proxy
可执行文件支持 cleanup
功能,但这个功能并不是官方特性,因此只能根据具体情况使用。
本文中的一些细节会引用这样一个例子:
运行了 3 个 Pod
副本的无状态图像处理后端工作负载。
这些副本是可互换的;前端不需要关心它们调用了哪个后端副本。
即使组成这一组后端程序的 Pod 实际上可能会发生变化,
前端客户端不应该也没必要知道,而且也不需要跟踪这一组后端的状态。
代理模式
kube-proxy 会根据不同配置以不同的模式启动。
在 Linux 节点上,kube-proxy 的可用模式是:
iptables
kube-proxy 使用 iptables 配置数据包转发规则的一种模式。
ipvs
kube-proxy 使用 ipvs 配置数据包转发规则的一种模式。
nftables
kube-proxy 使用 nftables 配置数据包转发规则的一种模式。
Windows 上的 kube-proxy 只有一种模式可用:
kernelspace
kube-proxy 在 Windows 内核中配置数据包转发规则的一种模式。
iptables
代理模式
此代理模式仅适用于 Linux 节点。
在这种模式下,kube-proxy 使用内核 netfilter 子系统的 iptables API
配置数据包转发规则。对于每个端点,kube-proxy 会添加 iptables
规则,这些规则默认情况下会随机选择一个后端 Pod。
示例
例如,考虑本页中前面 描述的图像处理应用程序。
当创建后端 Service 时,Kubernetes 控制平面会分配一个虚拟 IP 地址,例如 10.0.0.1。
对于这个例子而言,假设 Service 端口是 1234。
集群中的所有 kube-proxy 实例都会观察到新 Service 的创建。
当节点上的 kube-proxy 观察到新 Service 时,它会添加一系列 iptables 规则,
这些规则从虚拟 IP 地址重定向到更多 iptables 规则,每个 Service 都定义了这些规则。
每个 Service 规则链接到每个后端端点的更多规则,
并且每个端点规则将流量重定向(使用目标 NAT)到后端。
当客户端连接到 Service 的虚拟 IP 地址时,iptables 规则会生效。
会选择一个后端(基于会话亲和性或随机选择),并将数据包重定向到后端,无需重写客户端 IP 地址。
当流量通过节点端口或负载均衡器进入时,也会执行相同的基本流程,
只是在这些情况下,客户端 IP 地址会被更改。
在 iptables 模式下,kube-proxy 为每个 Service 创建一些 iptables 规则,并为每个端点
IP 地址创建一些 iptables 规则。在拥有数万个 Pod 和 Service 的集群中,这意味着数万个
iptables 规则,当 Service(或其 EndpointSlice)发生变化时,kube-proxy
在更新内核中的规则时可能要用很长时间。你可以通过(kube-proxy --config <path>
指定的)
kube-proxy 配置文件 的
iptables
章节 中的选项来调整 kube-proxy 的同步行为:
...
iptables :
minSyncPeriod : 1s
syncPeriod : 30s
...
minSyncPeriod
minSyncPeriod
参数设置尝试同步 iptables 规则与内核之间的最短时长。
如果是 0s
,那么每次有任一 Service 或 Endpoint 发生变更时,kube-proxy 都会立即同步这些规则。
这种方式在较小的集群中可以工作得很好,但如果在很短的时间内很多东西发生变更时,它会导致大量冗余工作。
例如,如果你有一个由 Deployment
支持的 Service,共有 100 个 Pod,你删除了这个 Deployment,
且设置了 minSyncPeriod: 0s
,kube-proxy 最终会从 iptables 规则中逐个删除 Service 的 Endpoint,
总共更新 100 次。使用较大的 minSyncPeriod
值时,多个 Pod 删除事件将被聚合在一起,
因此 kube-proxy 最终可能会进行例如 5 次更新,每次移除 20 个端点,
这样在 CPU 利用率方面更有效率,能够更快地同步所有变更。
minSyncPeriod
的值越大,可以聚合的工作越多,
但缺点是每个独立的变更可能最终要等待整个 minSyncPeriod
周期后才能被处理,
这意味着 iptables 规则要用更多时间才能与当前的 API 服务器状态同步。
默认值 1s
适用于大多数集群,在大型集群中,可能需要将其设置为更大的值。
(特别是,如果 kube-proxy 的 sync_proxy_rules_duration_seconds
指标表明平均时间远大于 1 秒,
那么提高 minSyncPeriod
可能会使更新更有效率。)
更新原有的 minSyncPeriod
配置
旧版本的 kube-proxy 在每次同步时为所有 Service 更新规则;
这在大型集群中会造成性能问题(更新延迟),建议的解决方案是设置较大的 minSyncPeriod
。
自 Kubernetes v1.28 开始,kube-proxy 的 iptables 模式采用了更精简的方法,
只有在 Service 或 EndpointSlice 实际发生变化时才会进行更新。
如果你之前覆盖了 minSyncPeriod
,你应该尝试删除该覆盖并让 kube-proxy
使用默认值(1s
)或至少比升级前使用的值小。
如果你运行的不是 Kubernetes 1.31 版本的 kube-proxy,
请检查你实际运行的版本的行为和相关建议。
syncPeriod
syncPeriod
参数控制与单次 Service 和 EndpointSlice 的变更没有直接关系的少数同步操作。
特别是,它控制 kube-proxy 在外部组件已干涉 kube-proxy 的 iptables 规则时通知的速度。
在大型集群中,kube-proxy 也仅在每隔 syncPeriod
时长执行某些清理操作,以避免不必要的工作。
在大多数情况下,提高 syncPeriod
预计不会对性能产生太大影响,
但在过去,有时将其设置为非常大的值(例如 1h
)很有用。
现在不再推荐这种做法,因为它对功能的破坏可能会超过对性能的改进。
IPVS 代理模式
此代理模式仅适用于 Linux 节点。
在 ipvs
模式下,kube-proxy 使用内核 IPVS 和 iptables API
创建规则,将流量从 Service IP 重定向到端点 IP。
IPVS 代理模式基于 netfilter 回调函数,类似于 iptables 模式,
但它使用哈希表作为底层数据结构,在内核空间中生效。
这意味着 IPVS 模式下的 kube-proxy 比 iptables 模式下的 kube-proxy
重定向流量的延迟更低,同步代理规则时性能也更好。
与 iptables 代理模式相比,IPVS 模式还支持更高的网络流量吞吐量。
IPVS 为将流量均衡到后端 Pod 提供了更多选择:
lblcr
(带副本的基于地域的最少连接):针对相同 IP 地址的流量被发送到连接数最少的服务器。
如果所有后端服务器都超载,则选择连接较少的服务器并将其添加到目标集中。
如果目标集在指定时间内未发生变化,则从此集合中移除负载最高的服务器,以避免副本的负载过高。
mh
(Maglev Hashing):基于 Google 的 Maglev 哈希算法
来分配接收的任务。此调度器有两个标志:
mh-fallback
允许在选定的服务器不可用时回退到另一台服务器;
mh-port
将源端口号添加到哈希计算中。
在使用 mh
时,kube-proxy
始终会设置 mh-port
标志,但不会启用 mh-fallback
标志。
在代理模式为 ipvs 时,mh
的工作方式与源哈希(sh
)类似,但会包含端口信息。
这些调度算法是通过 kube-proxy 配置中的
ipvs.scheduler
字段进行配置的。
说明:
要在 IPVS 模式下运行 kube-proxy,必须在启动 kube-proxy 之前确保节点上的 IPVS 可用。
当 kube-proxy 以 IPVS 代理模式启动时,它会验证 IPVS 内核模块是否可用。
如果未检测到 IPVS 内核模块,则 kube-proxy 会退出并报错。
IPVS 模式下 Service 的虚拟 IP 地址机制
nftables
代理模式
特性状态:
Kubernetes v1.31 [beta]
(enabled by default: true)
此代理模式仅适用于 Linux 节点,并且需要 5.13 或更高的内核版本。
在这种模式下,kube-proxy 使用内核 netfilter 子系统的 nftables API
配置数据包转发规则。对于每个端点,它会添加 nftables
规则,这些规则默认情况下会随机选择一个后端 Pod。
nftables API 是 iptables API 的后继,旨在提供比 iptables 更好的性能和可扩展性。
nftables
代理模式能够比 iptables
模式更快、更高效地处理服务端点的变化,
并且在内核中处理数据包的效率也更高(尽管这只有在拥有数万个服务的集群中才会比较明显)。
在 Kubernetes 1.31 中,nftables
模式仍然相对较新,可能还不兼容所有的网络插件;请查阅你的网络插件文档。
从 iptables
模式到 nftables
模式的迁移
想要从默认的 iptables
模式切换到 nftables
模式的用户应注意,在
nftables
模式下,一些特性的工作方式略有不同:
NodePort 接口 :在 iptables
模式下,默认情况下,
NodePort 服务 可以在所有本地
IP 地址上访问。这通常不是用户想要的,因此 nftables
模式默认使用 --nodeport-addresses primary
,这意味着
NodePort 服务只能在节点的主 IPv4 和/或 IPv6 地址上访问。你可以通过为该选项指定一个明确的值来覆盖此设置:例如,使用
--nodeport-addresses 0.0.0.0/0
以监听所有(本地)IPv4 IP。
127.0.0.1
上的 NodePort 服务 :在 iptables
模式下,如果
--nodeport-addresses
范围包括 127.0.0.1
(且未传递 --iptables-localhost-nodeports false
选项),
则 NodePort 服务甚至可以在 "localhost" (127.0.0.1
) 上访问。
在 nftables
模式(和 ipvs
模式)下,这将不起作用。如果你不确定是否依赖此功能,
可以检查 kube-proxy 的 iptables_localhost_nodeports_accepted_packets_total
指标;
如果该值非 0,则表示某些客户端已通过 127.0.0.1
连接到 NodePort 服务。
NodePort 与防火墙的交互 :kube-proxy 的 iptables
模式尝试与过于激进的防火墙兼容;
对于每个 NodePort 服务,它会添加规则以接受该端口的入站流量,以防该流量被防火墙阻止。
这种方法不适用于基于 nftables 的防火墙,因此 kube-proxy 的 nftables
模式在这里不会做任何事情;
如果你有本地防火墙,必须确保其配置正确以允许 Kubernetes 流量通过(例如,允许整个 NodePort 范围的入站流量)。
Conntrack 错误规避 :6.1 之前的 Linux 内核存在一个错误,可能导致与服务 IP 的长时间
TCP 连接被关闭,并出现“Connection reset by peer(对方重置连接)”的错误。kube-proxy 的 iptables
模式为此错误配备了一个修复程序,但后来发现该修复程序在某些集群中会导致其他问题。
nftables
模式默认不安装任何修复程序,但你可以检查 kube-proxy 的
iptables_ct_state_invalid_dropped_packets_total
指标,看看你的集群是否依赖于该修复程序,如果是,你可以使用 --conntrack-tcp-be-liberal
选项运行 kube-proxy,以在 nftables
模式下解决该问题。
kernelspace
代理模式
此代理模式仅适用于 Windows 节点。
kube-proxy 在 Windows 虚拟过滤平台 (VFP)(Windows vSwitch 的扩展)中配置数据包过滤规则。
这些规则处理节点级虚拟网络中的封装数据包,并重写数据包,使目标 IP 地址(和第 2 层信息)正确,
以便将数据包路由到正确的目的地。Windows VFP 类似于 Linux nftables
或 iptables
等工具。
Windows VFP 是最初为支持虚拟机网络而实现的 Hyper-V Switch 的扩展。
当节点上的 Pod 将流量发送到某虚拟 IP 地址,且 kube-proxy 选择不同节点上的 Pod
作为负载均衡目标时,kernelspace
代理模式会重写该数据包以将其发送到对应目标后端 Pod。
Windows 主机网络服务(HSN)会配置数据包重写规则,确保返回流量看起来来自虚拟 IP 地址,
而不是特定的后端 Pod。
kernelspace
模式的 Direct Server Return(DSR)
特性状态:
Kubernetes v1.14 [alpha]
作为基本操作的替代方案,托管服务后端 Pod 的节点可以直接应用数据包重写,
而不用将此工作交给运行客户端 Pod 的节点来执行。这称为 Direct Server Return(DSR) 。
要使用这种技术,你必须使用 --enable-dsr
命令行参数运行 kube-proxy 并 启用
WinDSR
特性门控 。
即使两个 Pod 在同一节点上运行,DSR 也可优化 Pod 的返回流量。
会话亲和性
在这些代理模型中,绑定到 Service IP:Port 的流量被代理到合适的后端,
客户端不需要知道任何关于 Kubernetes、Service 或 Pod 的信息。
如果要确保来自特定客户端的连接每次都传递给同一个 Pod,
你可以通过设置 Service 的 .spec.sessionAffinity
为 ClientIP
来设置基于客户端 IP 地址的会话亲和性(默认为 None
)。
会话粘性超时
你还可以通过设置 Service 的 .spec.sessionAffinityConfig.clientIP.timeoutSeconds
来设置最大会话粘性时间(默认值为 10800,即 3 小时)。
说明:
在 Windows 上不支持为 Service 设置最大会话粘性时间。
将 IP 地址分配给 Service
与实际路由到固定目标的 Pod IP 地址不同,Service IP 实际上不是由单个主机回答的。
相反,kube-proxy 使用数据包处理逻辑(例如 Linux 的 iptables)
来定义虚拟 IP 地址,这些地址会按需被透明重定向。
当客户端连接到 VIP 时,其流量会自动传输到适当的端点。
实际上,Service 的环境变量和 DNS 是根据 Service 的虚拟 IP 地址(和端口)填充的。
避免冲突
Kubernetes 的主要哲学之一是,
你不应需要在完全不是你的问题的情况下面对可能导致你的操作失败的情形。
对于 Service 资源的设计,也就是如果你选择的端口号可能与其他人的选择冲突,
就不应该让你自己选择 IP 地址。这是一种失败隔离。
为了允许你为 Service 选择 IP 地址,我们必须确保没有任何两个 Service 会发生冲突。
Kubernetes 通过从为 API 服务器 配置的
service-cluster-ip-range
CIDR 范围内为每个 Service 分配自己的 IP 地址来实现这一点。
IP 地址分配追踪
为了确保每个 Service 都获得唯一的 IP 地址,内部分配器在创建每个 Service
之前更新 etcd 中的全局分配映射,这种更新操作具有原子性。
映射对象必须存在于数据库中,这样 Service 才能获得 IP 地址分配,
否则创建将失败,并显示无法分配 IP 地址。
在控制平面中,后台控制器负责创建该映射(从使用内存锁定的旧版本的 Kubernetes 迁移时需要这一映射)。
Kubernetes 还使用控制器来检查无效的分配(例如,因管理员干预而导致无效分配)
以及清理已分配但没有 Service 使用的 IP 地址。
使用 Kubernetes API 跟踪IP 地址分配
特性状态:
Kubernetes v1.31 [beta]
(enabled by default: false)
如果你启用 MultiCIDRServiceAllocator
特性门控 和
networking.k8s.io/v1alpha1
API 组 ,
控制平面用一个改进后的实现替换现有的 etcd 分配器,使用 IPAddress 和 ServiceCIDR
对象而不是内部的全局分配映射。与某 Service 关联的每个 ClusterIP 地址将有一个对应的
IPAddress 对象。
启用该特性门控还会用替代实现将后台控制器替换,来处理 IPAddress 对象并支持从旧的分配器模型迁移。
Kubernetes 1.31 不支持从 IPAddress 对象迁移到内部分配映射。
改进后的分配器的主要优点之一是它取消了对可用于 Service 的集群 IP 地址的范围大小限制。
启用 MultiCIDRServiceAllocator
后,对 IPv4 没有大小限制,而对于
IPv6,你可以使用等于或小于 /64 的 IP 地址子网掩码(与旧实现中的 /108 相比)。
通过 API 提供 IP 地址分配,意味着作为集群管理员,你可以允许用户检查分配给他们的 Service 的 IP 地址。
Kubernetes 扩展(例如 Gateway API )
可以使用 IPAddress API 来扩展 Kubernetes 的固有网络功能。
以下是用户查询 IP 地址的简短示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 2001:db8:1:2::1 <none> 443/TCP 3d1h
NAME PARENTREF
2001:db8:1:2::1 services/default/kubernetes
2001:db8:1:2::a services/kube-system/kube-dns
Kubernetes 还允许用户使用 ServiceCIDR 对象动态定义 Service 的可用 IP 范围。在引导过程中,集群会根据
kube-apiserver 的 --service-cluster-ip-range
命令行参数的值创建一个名为
kubernetes
的默认 ServiceCIDR 对象:
NAME CIDRS AGE
kubernetes 10.96.0.0/28 17m
用户可以创建或删除新的 ServiceCIDR 对象来管理 Service 的可用 IP 范围:
cat <<'EOF' | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: ServiceCIDR
metadata:
name: newservicecidr
spec:
cidrs:
- 10.96.0.0/24
EOF
servicecidr.networking.k8s.io/newcidr1 created
NAME CIDRS AGE
kubernetes 10.96.0.0/28 17m
newservicecidr 10.96.0.0/24 7m
Service 虚拟 IP 地址的地址段
特性状态:
Kubernetes v1.26 [stable]
Kubernetes 根据配置的 service-cluster-ip-range
的大小使用公式
min(max(16, cidrSize / 16), 256)
将 ClusterIP
范围分为两段。
该公式可以解释为:介于 16 和 256 之间,并在上下界之间存在渐进阶梯函数的分配。
Kubernetes 优先通过从高段中选择来为 Service 分配动态 IP 地址,
这意味着如果要将特定 IP 地址分配给 type: ClusterIP
Service,
则应手动从低 段中分配 IP 地址。该方法降低了分配导致冲突的风险。
流量策略
你可以设置 .spec.internalTrafficPolicy
和 .spec.externalTrafficPolicy
字段来控制 Kubernetes 如何将流量路由到健康(“就绪”)的后端。
内部流量策略
特性状态:
Kubernetes v1.26 [stable]
你可以设置 .spec.internalTrafficPolicy
字段来控制来自内部源的流量如何被路由。
有效值为 Cluster
和 Local
。
将字段设置为 Cluster
会将内部流量路由到所有准备就绪的端点,
将字段设置为 Local
仅会将流量路由到本地节点准备就绪的端点。
如果流量策略为 Local
但没有本地节点端点,那么 kube-proxy 会丢弃该流量。
外部流量策略
你可以设置 .spec.externalTrafficPolicy
字段来控制从外部源路由的流量。
有效值为 Cluster
和 Local
。
将字段设置为 Cluster
会将外部流量路由到所有准备就绪的端点,
将字段设置为 Local
仅会将流量路由到本地节点上准备就绪的端点。
如果流量策略为 Local
并且没有本地节点端点,
那么 kube-proxy 不会转发与相关 Service 相关的任何流量。
如果指定了 Cluster
,则所有节点都可以作为负载均衡目标,只要 节点没有被删除且
kube-proxy 是健康的。在这种模式下:负载均衡器健康检查被配置为针对服务代理的就绪端口和路径。对于
kube-proxy,这个健康检查端点为:${NODE_IP}:10256/healthz
。kube-proxy 将返回 HTTP
状态码 200 或 503。如果满足以下条件,kube-proxy 的负载均衡器健康检查端点将返回 200:
kube-proxy 是健康的,意味着:
它能够继续进行网络编程,并且在此过程中不会超时(超时时间定义为:2 × iptables.syncPeriod
);并且
节点没有被删除(Node 对象上没有设置删除时间戳)。
kube-proxy 在节点被删除时返回 503 并将节点标记为不符合条件的原因在于
kube-proxy 对处于终止过程中的节点支持连接腾空。从 Kubernetes 管理的负载均衡器的角度来看,
当节点正在 / 已 被删除时,会发生一些重要的事情。
当节点被删除时:
kube-proxy 的就绪探针将开始失败,并将该节点标记为不胜任接收负载均衡器流量。
负载均衡器健康检查失败会导致支持连接排空的负载均衡器允许现有连接终止,并阻止新连接建立。
当节点被删除后:
Kubernetes 云控制器管理器中的服务控制器会将节点从所引用的候选目标集中移除。
从负载均衡器的后端目标集中移除任何实例会立即终止所有连接。
这也是 kube-proxy 在节点删除过程中首先使健康检查失败的原因。
需要注意的是,对于 Kubernetes 供应商,如果任何供应商将
kube-proxy 的就绪探针配置为存活探针:当节点正在删除直到完全删除时,kube-proxy
将开始不断重启。kube-proxy 公开了一个 /livez
路径,与 /healthz
路径不同,
/livez
路径不 考虑节点的删除状态,仅考虑其网络编程进度。因此,对于任何希望为
kube-proxy 定义存活探针的人来说,推荐使用 /livez
路径。
部署 kube-proxy 的用户可以通过评估指标 proxy_livez_total
/ proxy_healthz_total
来检查就绪/存活状态。这两个指标都发布了两个序列,一个带有 200 标签,另一个带有 503 标签。
对于 Local
Service:如果满足以下条件,kube-proxy 将返回 200:
kube-proxy 是健康/就绪的,并且
在相关节点上有一个本地端点。
对于负载均衡器健康检查而言,节点删除不会 对 kube-proxy
的返回代码产生影响。原因是:如果所有端点同时在上述节点上运行,则删除节点最终可能会导致入站流量中断。
Kubernetes 项目建议云提供商集成代码配置负载均衡器健康检查,以针对服务代理的 healthz 端口。
如果你正在使用或实现自己的虚拟 IP 实现,供人们使用它替代 kube-proxy,你应该设置一个类似的健康检查端口,
其逻辑应与 kube-proxy 实现相匹配。
流向正终止的端点的流量
特性状态:
Kubernetes v1.28 [stable]
如果为 kube-proxy 启用了 ProxyTerminatingEndpoints
特性门控 且流量策略为 Local
,
则节点的 kube-proxy 将使用更复杂的算法为 Service 选择端点。
启用此特性时,kube-proxy 会检查节点是否具有本地端点以及是否所有本地端点都标记为正在终止过程中。
如果有本地端点并且所有 本地端点都被标记为处于终止过程中,
则 kube-proxy 会将转发流量到这些正在终止过程中的端点。
否则,kube-proxy 会始终选择将流量转发到并未处于终止过程中的端点。
这种对处于终止过程中的端点的转发行为使得 NodePort
和 LoadBalancer
Service
能有条不紊地腾空设置了 externalTrafficPolicy: Local
时的连接。
当一个 Deployment 被滚动更新时,处于负载均衡器后端的节点可能会将该 Deployment 的 N 个副本缩减到
0 个副本。在某些情况下,外部负载均衡器可能在两次执行健康检查探针之间将流量发送到具有 0 个副本的节点。
将流量路由到处于终止过程中的端点可确保正在缩减 Pod 的节点能够正常接收流量,
并逐渐降低指向那些处于终止过程中的 Pod 的流量。
到 Pod 完成终止时,外部负载均衡器应该已经发现节点的健康检查失败并从后端池中完全移除该节点。
流量分发
特性状态:
Kubernetes v1.31 [beta]
(enabled by default: true)
Kubernetes Service 中的 spec.trafficDistribution
字段允许你定义流量应如何路由到
Service 端点的偏好。像 kube-proxy 这样的实现会将 spec.trafficDistribution
字段作为指导。不同实现之间,与给定偏好相关的行为可能会略有不同。
PreferClose
与 kube-proxy 结合
对于 kube-proxy,这意味着优先将流量发送到与客户端位于同一区域的端点。
EndpointSlice 控制器使用 hints
来更新 EndpointSlices 以传达此偏好,
之后,kube-proxy 会使用这些提示进行路由决策。如果客户端的区域没有可用的端点,
则流量将在整个集群范围内路由。
如果 trafficDistribution
没有任何值,kube-proxy 的默认路由策略是将流量分配到集群中的任一端点。
与 service.kubernetes.io/topology-mode: Auto
的比较
trafficDistribution
字段中的 PreferClose
和
service.kubernetes.io/topology-mode: Auto
注解都旨在优先处理同一区域的流量。
然而,它们的方法存在一些关键差异:
service.kubernetes.io/topology-mode: Auto
:尝试根据可分配的 CPU
资源在各区域之间按比例分配流量。此启发式方法包括一些保障措施
(例如针对少量端点的回退行为 ),
并在某些场景下可能因负载均衡原因导致该特性被禁用。这种方法在一定程度上牺牲了可预测性,
以换取潜在的负载均衡。
trafficDistribution: PreferClose
:这种方法偏重更简单和更可预测:
“如果区域内有端点,它们将接收该区域的所有流量;如果区域内没有端点,流量将分配到其他区域”。
虽然这种方法可能提供更多的可预测性,但这意味着你需要管理潜在的过载 。
如果 service.kubernetes.io/topology-mode
注解设置为 Auto
,它将优先于
trafficDistribution
。(该注解将来可能会被弃用,取而代之的是 trafficDistribution
字段)。
与流量策略的交互
与 trafficDistribution
字段相比,流量策略字段
(externalTrafficPolicy
和 internalTrafficPolicy
)旨在提供更严格的流量局域化要求。
以下是 trafficDistribution
与它们的交互方式:
流量策略的优先序:对于给定的 Service,如果流量策略
(externalTrafficPolicy
或 internalTrafficPolicy
)设置为 Local
,
则它优先于相应流量类型(分别为外部或内部)的 trafficDistribution: PreferClose
。
trafficDistribution
的影响:对于给定的 Service,如果流量策略
(externalTrafficPolicy
或 internalTrafficPolicy
)设置为 Cluster
(默认值),
或者这些字段未设置,那么 trafficDistribution: PreferClose
将指导相应流量类型
(分别为外部或内部)的路由行为。这意味着 kube-proxy 将尝试将流量路由到与客户端位于同一区域的端点。
使用流量分配控制的注意事项
特定于具体实现的行为: 各个数据平面实现处理此字段的方式可能会稍有不同。
如果你使用的是 kube-proxy 以外的实现,请参阅该实现的特定文档以了解该实现是如何处理此字段的。
接下来
要了解有关 Service 的更多信息,
请阅读使用 Service 连接应用 。
也可以:
10 - 安装工具
10.1 - Kubeadm
Kubeadm 是一个提供了 kubeadm init
和 kubeadm join
的工具,
作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。
kubeadm 通过执行必要的操作来启动和运行最小可用集群。
按照设计,它只关注启动引导,而非配置机器。同样的,
安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、
监控方案、以及特定云平台的扩展,都不在讨论范围内。
相反,我们希望在 kubeadm 之上构建更高级别以及更加合规的工具,
理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。
如何安装
要安装 kubeadm, 请查阅
安装指南 .
接下来
10.1.1 - 创建 Kubeadm
10.1.1.1 -
kubeadm:轻松创建一个安全的 Kubernetes 集群
摘要
┌──────────────────────────────────────────────────────────┐
│ KUBEADM │
│ 轻松创建一个安全的 Kubernetes 集群 │
│ │
│ 给我们反馈意见的地址: │
│ https://github.com/kubernetes/kubeadm/issues │
└──────────────────────────────────────────────────────────┘
用途示例:
创建一个有两台机器的集群,包含一个控制平面节点(用来控制集群)
和一个工作节点(运行你的 Pod 和 Deployment 等工作负载)。
┌──────────────────────────────────────────────────────────┐
│ 在第一台机器上: │
├──────────────────────────────────────────────────────────┤
│ control-plane# kubeadm init │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ 在第二台机器上: │
├──────────────────────────────────────────────────────────┤
│ worker# kubeadm join <arguments-returned-from-init>│
└──────────────────────────────────────────────────────────┘
你可以重复第二步,向集群添加更多机器。
选项
-h, --help
kubeadm 操作的帮助信息。
--rootfs string
到“真实”主机根文件系统的路径。设置此参数将导致 kubeadm 切换到所提供的路径。
10.1.1.2 -
处理 Kubernetes 证书的相关命令。
概要
处理 Kubernetes 证书相关的命令。
kubeadm certs [flags]
选项
-h, --help
certs 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.2.1 -
生成证书密钥。
概要
该命令将打印出可以与 "init" 命令一起使用的安全的随机生成的证书密钥。
你也可以使用 kubeadm init --upload-certs
而无需指定证书密钥;
此命令将为你生成并打印一个证书密钥。
kubeadm certs certificate-key [flags]
选项
-h, --help
certificate-key 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.2 -
为一个 Kubernetes 集群检查证书的到期时间。
概要
检查 kubeadm 管理的本地 PKI 中证书的到期时间。
kubeadm certs check-expiration [flags]
选项
--allow-missing-template-keys 默认值:true
如果为 true,忽略模板中缺少某字段或映射键的错误。仅适用于 golang 和 jsonpath 输出格式。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
到 kubeadm 配置文件的路径。
-o, --experimental-output string 默认值:"text"
输出格式。可选值为:
text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file。
-h, --help
check-expiration 操作的帮助命令。
--kubeconfig string 默认为:"/etc/kubernetes/admin.conf"
在和集群连接时使用该 kubeconfig 文件。
如果此标志未被设置,那么将会在一些标准的位置去搜索存在的 kubeconfig 文件。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.2.3 -
生成密钥和证书签名请求。
概要
为运行控制平面所需的所有证书生成密钥和证书签名请求(CSR)。该命令会生成部分 kubeconfig 文件,
其中 "users > user > client-key-data" 字段包含私钥数据,并为每个 kubeconfig
文件创建一个随附的 ".csr" 文件。
此命令设计用于 Kubeadm 外部 CA 模式 。
它生成你可以提交给外部证书颁发机构进行签名的 CSR。
你需要使用 ".crt" 作为文件扩展名将 PEM 编码的签名证书与密钥文件一起保存。
或者,对于 kubeconfig 文件,PEM 编码的签名证书应使用 base64 编码,
并添加到 "users > user > client-certificate-data" 字段。
kubeadm certs generate-csr [flags]
示例
# 以下命令将为所有控制平面证书和 kubeconfig 文件生成密钥和 CSR:
kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki
选项
--cert-dir string
保存证书的路径。
--config string
到 kubeadm 配置文件的路径。
-h, --help
generate-csr 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
保存 kubeconfig 文件的路径。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.2.4 -
为 Kubernetes 集群更新证书
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm certs renew [flags]
选项
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.5 -
续订 kubeconfig 文件中嵌入的证书,供管理员和 kubeadm 自身使用。
概要
续订 kubeconfig 文件中嵌入的证书,供管理员和 kubeadm 自身使用。
无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案,
也可以使用 K8s 证书 API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。
kubeadm certs renew admin.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
到 kubeadm 配置文件的路径。
-h, --help
admin.conf 操作的帮助命令。
--kubeconfig string Default: "/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.6 -
续订所有可用证书。
概要
续订运行控制平面所需的所有已知证书。续订是无条件进行的,与到期日期无关。续订也可以单独运行以进行更多控制。
kubeadm certs renew all [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
all 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.7 -
续订 apiserver 用于访问 etcd 的证书。
概要
续订 apiserver 用于访问 etcd 的证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew apiserver-etcd-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver-etcd-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.8 -
续订 apiserver 用于连接 kubelet 的证书。
概要
续订 apiserver 用于连接 kubelet 的证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
也可能调用 K8s 证书 API 进行证书更新;亦或者,作为最后一个选择,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew apiserver-kubelet-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver-kubelet-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.9 -
续订用于提供 Kubernetes API 的证书。
概要
续订用于提供 Kubernetes API 的证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew apiserver [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver 子操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.10 -
续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。
概要
续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。
续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用 kubeadm 管理的本地 PKI 中的证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew controller-manager.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
controller-manager.conf 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.11 -
续订存活态探针的证书,用于对 etcd 执行健康检查。
概要
续订存活态探针的证书,用于对 etcd 执行健康检查。
无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案,
也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。
kubeadm certs renew etcd-healthcheck-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-healthcheck-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.12 -
续订 etcd 节点间用来相互通信的证书。
概要
续订 etcd 节点间用来相互通信的证书。
无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;
作为替代方案,也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发续订的证书,以防证书文件在其他地方使用。
kubeadm certs renew etcd-peer [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-peer 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.13 -
续订用于提供 etcd 服务的证书。
概要
续订用于提供 etcd 服务的证书。
续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书续订,或者作为最后一种选择来生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发续订的证书,以防文件在其他地方使用。
kubeadm certs renew etcd-server [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-server 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.14 -
为前端代理客户端续订证书。
概要
为前端代理客户端续订证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
也可以使用 K8s certificate API 进行证书续订;亦或者,作为最后一种方案,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew front-proxy-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
front-proxy-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes certificate API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.15 -
续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用。
概要
续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用。
续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
也可以使用 K8s certificate API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew scheduler.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
scheduler.conf 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.2.16 -
为 super-admin 对嵌入于 kubeconfig 文件中的证书续期。
概要
为 super-admin 对嵌入于 kubeconfig 文件中的证书续期。
续期操作将无条件进行,不论证书的到期日期是何时;诸如 SAN 之类的额外属性将基于现有文件/证书,无需重新提供。
默认情况下,续期会尝试使用由 kubeadm 管理的本地 PKI 中的证书颁发机构;
作为替代方案,可以使用 K8s 证书 API 进行证书续期,或者作为最后的选项,生成一个 CSR 请求。
续期后,为了使更改生效,需要重启控制平面组件,并且如果该文件在其他地方使用,最终需要重新分发续期后的证书。
kubeadm certs renew super-admin.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
super-admin.conf 的帮助信息。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验性功能] 指向‘真实’宿主根文件系统的路径。
10.1.1.3 -
为指定的 Shell(Bash 或 Zsh)输出 Shell 补全代码。
概要
为指定的 Shell(Bash 或 Zsh)输出 Shell 补全代码。
必须激活 Shell 代码以提供交互式 kubeadm 命令补全。
这可以通过加载 .bash_profile 文件完成。
注意:此功能依赖于 bash-completion
框架。
在 Mac 上使用 Homebrew 安装:
brew install bash-completion
安装后,必须激活 bash_completion。
这可以通过在 .bash_profile 文件中添加下面的命令行来完成:
source $( brew --prefix) /etc/bash_completion
如果在 Linux 上没有安装 bash-completion
,请通过你的发行版的包管理器安装 bash-completion
软件包。
Zsh 用户注意事项:[1] Zsh 自动补全仅在 v5.2 及以上版本中支持。
kubeadm completion SHELL [flags]
示例
# 在 Mac 上使用 Homebrew 安装 bash completion
brew install bash-completion
printf "\n# Bash completion support\nsource $( brew --prefix) /etc/bash_completion\n" >> $HOME /.bash_profile
source $HOME /.bash_profile
# 将 bash 版本的 kubeadm 自动补全代码加载到当前 Shell 中
source <( kubeadm completion bash)
# 将 Bash 自动补全完成代码写入文件并且从 .bash_profile 文件加载它
printf "\n# Kubeadm shell completion\nsource ' $HOME /.kube/kubeadm_completion.bash.inc'\n" >> $HOME /.bash_profile
source $HOME /.bash_profile
# 将 Zsh 版本的 kubeadm 自动补全代码加载到当前 Shell 中
source <( kubeadm completion zsh)
选项
-h, --help
completion 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
10.1.1.4 -
管理持久化在 ConfigMap 中的 kubeadm 集群的配置。
概要
kube-system 命名空间里有一个名为 "kubeadm-config" 的 ConfigMap,kubeadm 用它来存储有关集群的内部配置。
kubeadm CLI v1.8.0+ 通过一个配置自动创建该 ConfigMap,这个配置是和 'kubeadm init' 共用的。
但是你如果使用 kubeadm v1.7.x 或更低的版本初始化集群,那么必须使用 'config upload' 命令创建此 ConfigMap。
这是必要的操作,目的是使 'kubeadm upgrade' 能够正确地配置升级后的集群。
kubeadm config [flags]
选项
-h, --help
config 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.1 -
与 kubeadm 使用的容器镜像交互
概要
与 kubeadm 使用的容器镜像交互。
kubeadm config images [flags]
选项
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.2 -
打印 kubeadm 要使用的镜像列表。配置文件用于自定义镜像或镜像存储库。
概要
打印 kubeadm 要使用的镜像列表。配置文件用于自定义镜像或镜像存储库。
kubeadm config images list [flags]
选项
--allow-missing-template-keys 默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
--config string
kubeadm 配置文件的路径。
-o, --experimental-output string 默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一。
--feature-gates string
一组键值对(key=value),用于描述各种特性。这些选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
list 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
--show-managed-fields
如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到“真实”主机根文件系统的路径。
10.1.1.4.3 -
拉取 kubeadm 使用的镜像。
概要
拉取 kubeadm 使用的镜像。
kubeadm config images pull [flags]
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--feature-gates string
一系列键值对(key=value),用于描述各种特性。可选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
pull 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.4 -
从文件中读取旧版本的 kubeadm 配置的 API 类型,并为新版本输出类似的配置对象
概要
此命令允许你在 CLI 工具中将本地旧版本的配置对象转换为最新支持的版本,而无需变更集群中的任何内容。
在此版本的 kubeadm 中,支持以下 API 版本:
因此,无论你在此处传递 --old-config 参数的版本是什么,当写入到 stdout 或 --new-config (如果已指定)时,
都会读取、反序列化、默认、转换、验证和重新序列化 API 对象。
换句话说,如果你将此文件传递给 "kubeadm init",则该命令的输出就是 kubeadm 实际上在内部读取的内容。
kubeadm config migrate [flags]
选项
-h, --help
migrate 操作的帮助信息。
--new-config string
使用新的 API 版本生成的 kubeadm 配置文件的路径。这个路径是可选的。如果没有指定,输出将被写到 stdout。
--old-config string
使用旧 API 版本且应转换的 kubeadm 配置文件的路径。此参数是必需的。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.5 -
打印配置
概要
此命令打印子命令所提供的配置信息。相关细节可参阅:
https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories
kubeadm config print [flags]
选项
-h, --help
print 命令的帮助信息。
从父命令继承而来的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如此标志未设置,将在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.6 -
打印用于 'kubeadm init' 的默认 init 配置。
概要
此命令打印对象,例如用于 'kubeadm init' 的默认 init 配置对象。
请注意,Bootstrap Token 字段之类的敏感值已替换为 "abcdef.0123456789abcdef"
之类的占位符值以通过验证,但不执行创建令牌的实际计算。
kubeadm config print init-defaults [flags]
选项
--component-configs strings
以逗号分隔的组件配置 API 对象的列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。
如果未设置此参数,则不会打印任何组件配置。
-h, --help
init-defaults 操作的帮助命令。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.7 -
打印默认的节点添加配置,该配置可用于 'kubeadm join' 命令。
概要
此命令打印对象,例如用于 'kubeadm join' 的默认 join 配置对象。
请注意,诸如启动引导令牌字段之类的敏感值已替换为 "abcdef.0123456789abcdef" 之类的占位符值以通过验证,
但不执行创建令牌的实际计算。
kubeadm config print join-defaults [flags]
选项
-h, --help
join-defaults 操作的帮助命令。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.4.8 -
打印默认的 reset 配置,该配置可用于 'kubeadm reset' 命令。
概要
此命令打印 'kubeadm reset' 所用的默认 reset 配置等这类对象。
请注意,诸如启动引导令牌(Bootstrap Token)字段这类敏感值已替换为 "abcdef.0123456789abcdef"
这类占位符值用来通过合法性检查,但不执行创建令牌的实际计算。
kubeadm config print reset-defaults [flags]
选项
-h, --help
reset-defaults 操作的帮助命令。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时所使用的 kubeconfig 文件。
如果该参数未被设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[试验性] 指向“真实”主机根文件系统的路径。
10.1.1.4.9 -
打印可用于 kubeadm upgrade
的默认升级配置。
概要
此命令打印 kubeadm upgrade
所用的默认升级配置等这类对象。
请注意,诸如启动引导令牌(Bootstrap Token)字段这类敏感值已替换为 "abcdef.0123456789abcdef"
这类占位符值用来通过合法性检查,但不执行创建令牌的实际计算。
kubeadm config print upgrade-defaults [flags]
选项
-h, --help
upgrade-defaults 操作的帮助命令。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时所使用的 kubeconfig 文件。
如果该参数未被设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.4.10 -
读取包含 kubeadm 配置 API 的文件,并报告所有验证问题。
概要
这个命令允许你验证 kubeadm 配置 API 文件并报告所有警告和错误。
如果没有错误,退出状态将为零;否则,将为非零。
诸如未知 API 字段等任何解包问题都会触发错误。
未知的 API 版本和具有无效值的字段也会触发错误。
根据输入文件的内容,可能会报告任何其他错误或警告。
在这个版本的 kubeadm 中,支持以下 API 版本:
kubeadm config validate [flags]
选项
--allow-experimental-api
允许验证试验性的、未发布的 API。
--config string
指向 kubeadm 配置文件的路径。
-h, --help
validate 的帮助命令。
从父命令继承而来的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
在与集群通信时要使用的 kubeconfig 文件。
如果此标志未被设置,则会在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[试验性] 指向“真实”主机根文件系统的路径。
10.1.1.5 -
运行此命令以安装 Kubernetes 控制平面。
概要
运行此命令来搭建 Kubernetes 控制平面节点。
"init" 命令执行以下阶段:
preflight 预检
certs 生成证书
/ca 生成自签名根 CA 用于配置其他 kubernetes 组件
/apiserver 生成 apiserver 的证书
/apiserver-kubelet-client 生成 apiserver 连接到 kubelet 的证书
/front-proxy-ca 生成前端代理自签名CA(扩展apiserver)
/front-proxy-client 生成前端代理客户端的证书(扩展 apiserver)
/etcd-ca 生成 etcd 自签名 CA
/etcd-server 生成 etcd 服务器证书
/etcd-peer 生成 etcd 节点相互通信的证书
/etcd-healthcheck-client 生成 etcd 健康检查的证书
/apiserver-etcd-client 生成 apiserver 访问 etcd 的证书
/sa 生成用于签署服务帐户令牌的私钥和公钥
kubeconfig 生成建立控制平面和管理所需的所有 kubeconfig 文件
/admin 生成一个 kubeconfig 文件供管理员使用以及供 kubeadm 本身使用
/super-admin 为超级管理员生成 kubeconfig 文件
/kubelet 为 kubelet 生成一个 kubeconfig 文件,*仅*用于集群引导
/controller-manager 生成 kubeconfig 文件供控制器管理器使用
/scheduler 生成 kubeconfig 文件供调度程序使用
etcd 为本地 etcd 生成静态 Pod 清单文件
/local 为本地单节点本地 etcd 实例生成静态 Pod 清单文件
control-plane 生成建立控制平面所需的所有静态 Pod 清单文件
/apiserver 生成 kube-apiserver 静态 Pod 清单
/controller-manager 生成 kube-controller-manager 静态 Pod 清单
/scheduler 生成 kube-scheduler 静态 Pod 清单
kubelet-start 写入 kubelet 设置并启动(或重启) kubelet
upload-config 将 kubeadm 和 kubelet 配置上传到 ConfigMap
/kubeadm 将 kubeadm 集群配置上传到 ConfigMap
/kubelet 将 kubelet 组件配置上传到 ConfigMap
upload-certs 将证书上传到 kubeadm-certs
mark-control-plane 将节点标记为控制面
bootstrap-token 生成用于将节点加入集群的引导令牌
kubelet-finalize 在 TLS 引导后更新与 kubelet 相关的设置
/experimental-cert-rotation 启用 kubelet 客户端证书轮换
addon 安装用于通过一致性测试所需的插件
/coredns 将 CoreDNS 插件安装到 Kubernetes 集群
/kube-proxy 将 kube-proxy 插件安装到 Kubernetes 集群
show-join-command 显示控制平面和工作节点的加入命令
kubeadm init [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器绑定的端口。
--apiserver-cert-extra-sans strings
用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
证书密钥为十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组用来描述各种功能特性的键值(key=value)对。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
init 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
--node-name string
指定节点的名称。
--patches string
它包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是"json" 或"yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--pod-network-cidr string
指明 Pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDR。
--service-cidr string 默认值:"10.96.0.0/12"
为服务的虚拟 IP 地址另外指定 IP 地址段。
--service-dns-domain string 默认值:"cluster.local"
为服务另外指定域名,例如:"myorg.internal"。
--skip-certificate-key-print
不要打印用于加密控制平面证书的密钥。
--skip-phases strings
要跳过的阶段列表。
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。
--token string
这个令牌用于建立控制平面节点与工作节点间的双向通信。
格式为 [a-z0-9]{6}.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
--token-ttl duration 默认值:24h0m0s
令牌被自动删除之前的持续时间(例如 1s,2m,3h)。如果设置为 '0',则令牌将永不过期。
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.1 -
使用此命令可以调用 init 工作流程的单个阶段。
概要
使用此命令可以调用 init 工作流程的单个阶段。
选项
-h, --help
phase 操作的帮助命令。
继承于父命令的选择项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.2 -
安装必要的插件以通过一致性测试。
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm init phase addon [flags]
选项
-h, --help
addon 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.3 -
安装所有插件。
概要
安装所有插件(addon)。
kubeadm init phase addon all [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组键值对(key=value),描述了各种特征。选项包括:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
all 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
--service-cidr string 默认值:"10.96.0.0/12"
为服务 VIP 使用 IP 地址的其他范围。
--service-dns-domain string 默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.4 -
将 CoreDNS 插件安装到 Kubernetes 集群。
概要
通过 API 服务器安装 CoreDNS 附加组件。请注意,即使 DNS 服务器已部署,在安装 CNI
之前 DNS 服务器不会被调度执行。
kubeadm init phase addon coredns [flags]
选项
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组用来描述各种特性门控的键值对(key=value)。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
coredns 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的
kubeconfig 文件。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--print-manifest
向 STDOUT 输出插件清单,而不是安装这些插件。
--service-cidr string 默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。
--service-dns-domain string 默认值:"cluster.local"
为服务使用其它域名,例如:"myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.5 -
将 kube-proxy 插件安装到 Kubernetes 集群
概要
通过 API 服务器安装 kube-proxy 附加组件。
kubeadm init phase addon kube-proxy [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32 默认值: 6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kube-proxy 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
--print-manifest
向 STDOUT 打印插件清单,而非安装这些插件。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.6 -
生成用于将节点加入集群的引导令牌
概要
启动引导令牌(bootstrap token)用于在即将加入集群的节点和控制平面节点之间建立双向信任。
该命令使启动引导令牌(bootstrap token)所需的所有配置生效,然后创建初始令牌。
kubeadm init phase bootstrap-token [flags]
示例
# 进行所有引导令牌配置,并创建一个初始令牌,功能上与 kubeadm init 生成的令牌等效。
kubeadm init phase bootstrap-token
选项
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
bootstrap-token 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.7 -
证书生成。
概要
此命令不应单独运行。请参阅可用子命令列表。
kubeadm init phase certs [flags]
选项
-h, --help
certs 操作的帮助命令。
从父指令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.8 -
生成所有证书。
概要
生成所有证书。
kubeadm init phase certs all [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-cert-extra-sans strings
用于 API 服务器服务证书的可选额外替代名称(SAN)。可以同时使用 IP 地址和 DNS 名称。
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--service-cidr string 默认值:"10.96.0.0/12"
VIP 服务使用其它的 IP 地址范围。
--service-dns-domain string 默认值:"cluster.local"
服务使用其它的域名,例如:"myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.9 -
生成 apiserver 用来访问 etcd 的证书。
概要
生成 apiserver 用于访问 etcd 的证书,并将其保存到 apiserver-etcd-client.crt 和 apiserver-etcd-client.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs apiserver-etcd-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
apiserver-etcd-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.10 -
生成供 API 服务器连接 kubelet 的证书。
概要
生成供 API 服务器连接 kubelet 的证书,并将其保存到 apiserver-kubelet-client.crt 和 apiserver-kubelet-client.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs apiserver-kubelet-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
apiserver-kubelet-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 指向宿主机上的 '实际' 根文件系统的路径。
10.1.1.5.11 -
生成用于服务 Kubernetes API 的证书。
概要
生成用于服务 Kubernetes API 的证书,并将其保存到 apiserver.crt 和 apiserver.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs apiserver [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-cert-extra-sans strings
用于 API Server 服务证书的可选附加主体备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
apiserver 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--service-cidr string 默认值:"10.96.0.0/12"
指定服务 VIP 可使用的其他 IP 地址段。
--service-dns-domain string 默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.12 -
生成自签名的 Kubernetes CA 以便为其他 Kubernetes 组件提供身份标识。
概要
生成自签名的 Kubernetes CA 以便为其他 Kubernetes 组件提供身份标识,并将其保存到 ca.crt 和 ca.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs ca [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
ca 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.13 -
生成用于为 etcd 设置身份的自签名 CA。
概要
生成用于为 etcd 设置身份的自签名 CA,并将其保存到 etcd/ca.crt 和 etcd/ca.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-ca [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-ca 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.14 -
生成用于 etcd 健康检查的活跃性探针的证书。
概要
生成用于 etcd 健康检查的活跃性探针的证书,并将其保存到 etcd/healthcheck-client.crt 和 etcd/healthcheck-client.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-healthcheck-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书存储的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-healthcheck-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.15 -
生成 etcd 节点相互通信的证书。
概要
生成 etcd 节点相互通信的证书,并将其保存到 etcd/peer.crt 和 etcd/peer.key 文件中。
默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-peer [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-peer 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.16 -
生成用于提供 etcd 服务的证书。
概要
生成用于提供 etcd 服务的证书,并将其保存到 etcd/server.crt 和 etcd/server.key 文件中。
默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-server [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-server 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.17 -
生成自签名 CA 来提供前端代理的身份。
概要
生成自签名 CA 来提供前端代理的身份,并将其保存到 front-proxy-ca.cert 和 front-proxy-ca.key 文件中。
如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。
kubeadm init phase certs front-proxy-ca [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
front-proxy-ca 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.18 -
为前端代理客户端生成证书。
概要
为前端代理客户端生成证书,并将其保存到 front-proxy-client.crt 和 front-proxy-client.key 文件中。
如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。
kubeadm init phase certs front-proxy-client [flags]
选项
--cert-dir string 默认:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
front-proxy-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.19 -
生成用来签署服务账号令牌的私钥及其公钥。
概要
生成用来签署服务账号令牌的私钥及其公钥,并将其保存到 sa.key 和 sa.pub 文件中。
如果两个文件都已存在,则 kubeadm 会跳过生成步骤,而将使用现有文件。
kubeadm init phase certs sa [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
-h, --help
sa 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.20 -
生成建立控制平面所需的静态 Pod 清单文件。
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm init phase control-plane [flags]
选项
-h, --help
control-plane 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.21 -
生成所有静态 Pod 清单文件。
概要
生成所有的静态 Pod 清单文件。
kubeadm init phase control-plane all [flags]
示例
# 为控制平面组件生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase control-plane all
# 使用从某配置文件中读取的选项为生成静态 Pod 清单文件。
kubeadm init phase control-plane all --config config.yaml
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器要绑定的端口。
--apiserver-extra-args <逗号分割的 'key=value' 对>
形式为 <flagname>=<value> 的一组额外参数,用来传递给 API 服务器,
或者覆盖其默认配置值。
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面选择一个稳定的 IP 地址或者 DNS 名称。
--controller-manager-extra-args <逗号分割的 'key=value' 对>
一组形式为 <flagname>=<value> 的额外参数,用来传递给控制管理器(Controller Manager)
或覆盖其默认设置值。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组用来描述各种特性门控的键值(key=value)对。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
all 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择指定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或是简单的 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相匹配。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置了此标志,控制平面将自动地为每个节点分配 CIDR。
--scheduler-extra-args <逗号分割的 'key=value' 对>
一组形式为 <flagname>=<value> 的额外参数,用来传递给调度器(Scheduler)
或覆盖其默认设置值。
--service-cidr string 默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。
从父指令继承的选项
--rootfs string
[实验] 指向'真实'宿主机的根文件系统的路径。
10.1.1.5.22 -
生成 kube-apiserver 静态 Pod 清单。
概要
生成 kube-apiserver 静态 Pod 清单。
kubeadm init phase control-plane apiserver [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-bind-port int32 默认值: 6443
要绑定到 API 服务器的端口。
--apiserver-extra-args <逗号分隔的 'key=value' 对>
一组 <flagname>=<value> 形式的额外参数,用来传递给 API
服务器或者覆盖其默认参数配置。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组键值对,用于描述各种功能特性的特性门控。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
apiserver 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是"json" 或"yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--service-cidr string 默认值:"10.96.0.0/12"
指定服务 VIP 使用 IP 地址的其他范围。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统路径。
10.1.1.5.23 -
生成 kube-controller-manager 静态 Pod 清单。
概要
生成 kube-controller-manager 静态 Pod 清单。
kubeadm init phase control-plane controller-manager [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--controller-manager-extra-args <comma-separated 'key=value' pairs>
一组 <flagname>=< 形式的额外参数,传递给控制器管理器(Controller Manager)
或者覆盖其默认配置值
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
controller-manager 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.ioo"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.24 -
生成 kube-scheduler 静态 Pod 清单。
概要
生成 kube-scheduler 静态 Pod 清单。
kubeadm init phase control-plane scheduler [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
scheduler 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge"、"json" 之一,分别与 kubectl
所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--scheduler-extra-args <逗号分隔的 'key=value' 键值对>
一组 <flagname>=<value> 形式的额外参数,用来传递给调度器或者覆盖其默认参数配置。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.25 -
为本地 etcd 生成静态 Pod 的清单文件。
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm init phase etcd [flags]
选项
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.26 -
为本地单节点 etcd 实例生成静态 Pod 清单文件。
概要
为本地单节点 etcd 实例生成静态 Pod 清单文件。
kubeadm init phase etcd local [flags]
示例
# 为 etcd 生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase etcd local
# 使用从配置文件读取的选项为 etcd 生成静态 Pod 清单文件。
kubeadm init phase etcd local --config config.yaml
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
local 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml" 或是简单的 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相匹配。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.27 -
生成所有建立控制平面和管理员(admin)所需的 kubeconfig 文件。
概要
此命令并非设计用来单独运行。请阅读可用子命令列表。
kubeadm init phase kubeconfig [flags]
选项
-h, --help
kubeconfig 操作的帮助命令
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.28 -
为管理员(admin)和 kubeadm 本身生成 kubeconfig 文件。
概要
为管理员和 kubeadm 本身生成 kubeconfig 文件,并将其保存到 admin.conf 文件中。
kubeadm init phase kubeconfig admin [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
admin 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.29 -
生成所有 kubeconfig 文件。
概要
生成所有 kubeconfig 文件。
kubeadm init phase kubeconfig all [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果没有设置,将使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--node-name string
指定节点名称。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.30 -
生成控制器管理器要使用的 kubeconfig 文件。
概要
生成控制器管理器要使用的 kubeconfig 文件,并保存到 controller-manager.conf 文件中。
kubeadm init phase kubeconfig controller-manager [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
controller-manager 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.31 -
为 kubelet 生成一个 kubeconfig 文件,仅仅 用于集群引导目的。
概要
生成 kubelet 要使用的 kubeconfig 文件,并将其保存到 kubelet.conf 文件。
请注意,该操作目的是仅 用于引导集群。在控制平面启动之后,应该从 CSR API 请求所有 kubelet 凭据。
kubeadm init phase kubeconfig kubelet [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--node-name string
指定节点的名称。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.32 -
生成调度器使用的 kubeconfig 文件。
概要
生成调度器(scheduler)要使用的 kubeconfig 文件,并保存到 scheduler.conf 文件中。
kubeadm init phase kubeconfig scheduler [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
scheduler 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.33 -
为 super-admin 生成一个 kubeconfig 文件。
概要
为 super-admin 生成一个 kubeconfig 文件,并将其保存到 super-admin.conf 文件中。
kubeadm init phase kubeconfig super-admin [flags]
选项
--apiserver-advertise-address string
API 服务器所公布其监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器绑定的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
super-admin 的帮助信息。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
保存 kubeconfig 文件的路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定一个特定的 Kubernetes 版本。
从父命令继承的选项
--rootfs string
[实验性功能] 指向‘真实’宿主根文件系统的路径。
10.1.1.5.34 -
TLS 引导后更新与 kubelet 相关的设置
概要
TLS 引导后更新与 kubelet 相关的设置
kubeadm init phase kubelet-finalize [flags]
示例
# 在 TLS 引导后更新与 kubelet 相关的设置
kubeadm init phase kubelet-finalize all --config
选项
-h, --help
kubelet-finalize 操作的帮助命令
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.5.35 -
运行 kubelet-finalize 的所有阶段
概要
运行 kubelet-finalize 的所有阶段
kubeadm init phase kubelet-finalize all [flags]
示例
# 在 TLS 引导后更新与 kubelet 相关的设置
kubeadm init phase kubelet-finalize all --config
选项
--cert-dir string 默认值: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.5.36 -
启用 kubelet 客户端证书轮换
概要
启用 kubelet 客户端证书轮换
kubeadm init phase kubelet-finalize enable-client-cert-rotation [ flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
enable-client-cert-rotation 操作的帮助命令
继承于父命令的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.5.37 -
启用 kubelet 客户端证书轮换
概要
启用 kubelet 客户端证书轮换
kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]
选项
--cert-dir string Default: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
experimental-cert-rotation 操作的帮助命令
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.5.38 -
编写 kubelet 配置并(重新)启动 kubelet
概要
使用 kubelet 配置文件编写一个文件,并使用特定节点的 kubelet 设置编写一个环境文件,然后(重新)启动 kubelet。
kubeadm init phase kubelet-start [flags]
示例
# 将来自 InitConfiguration 文件中的 kubelet 参数写入一个动态环境文件。
kubeadm init phase kubelet-start --config config.yaml
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
连接到 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet-start 操作的帮助命令
--image-repository string 默认值:"registry.k8s.io"
选择一个容器镜像仓库来从中拉取控制平面组件的镜像
--node-name string
指定节点名称。
--patches string
目录路径,指向包含名为 “target[suffix][+patchtype].extension” 的文件的目录。
例如,"kube-apiserver0+merge.yaml" 或 "etcd.json" 这种简单形式。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定按字母顺序首先应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.39 -
标记节点为控制平面节点。
概要
标记节点为控制平面节点。
kubeadm init phase mark-control-plane [flags]
示例
# 将控制平面标签和污点应用于当前节点,其功能等效于 kubeadm init 执行的操作
kubeadm init phase mark-control-plane --config config.yaml
# 将控制平面标签和污点应用于特定节点
kubeadm init phase mark-control-plane --node-name myNode
选项
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
mark-control-plane 操作的帮助命令。
--node-name string
指定节点名称。
从父命令继承的选项
--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.40 -
运行预检。
概要
运行 kubeadm init 前的预检。
kubeadm init phase preflight [flags]
示例
# 使用配置文件对 kubeadm init 进行预检
kubeadm init phase preflight --config kubeadm-config.yaml
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表。例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string 默认值:"registry.k8s.io"
选择拉取控制平面镜像的容器仓库。
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.5.41 -
显示针对控制平面和工作节点的 join 命令。
概要
显示针对控制平面和工作节点的 join 命令。
kubeadm init phase show-join-command [flags]
选项
-h, --help
show-join-command 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.42 -
将证书上传到 kubeadm-certs。
概要
将控制平面证书上传到 kubeadm-certs Secret。
kubeadm init phase upload-certs [flags]
选项
--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
证书密钥是十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
upload-certs 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用来与集群通信的 kubeconfig 文件。
如果此标志未设置,则可以在一组标准的位置搜索现有的 kubeconfig 文件。
--skip-certificate-key-print
不要打印输出用于加密控制平面证书的密钥。
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.43 -
上传 kubeadm 和 kubelet 配置到 ConfigMap 中。
概要
此命令并非设计用来单独运行。请参阅可用的子命令列表。
kubeadm init phase upload-config [flags]
选项
-h, --help
upload-config 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.44 -
将所有配置上传到 ConfigMap。
概要
将所有配置上传到 ConfigMap
kubeadm init phase upload-config all [flags]
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.45 -
将 kubeadm ClusterConfiguration 上传到 ConfigMap。
概要
将 kubeadm ClusterConfiguration 上传到 kube-system 命名空间中名为 kubeadm-config 的 ConfigMap 中。
这样就可以正确配置系统组件,并在升级时提供无缝的用户体验。
另外,可以使用 kubeadm 配置。
kubeadm init phase upload-config kubeadm [flags]
示例
# 上传集群配置
kubeadm init phase upload-config --config=myConfig.yaml
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubeadm 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.5.46 -
将 kubelet 组件配置上传到 ConfigMap。
概要
将从 kubeadm InitConfiguration 对象提取的 kubelet 配置上传到集群中的
kubelet-config
ConfigMap。
kubeadm init phase upload-config kubelet [flags]
示例
# 将 kubelet 配置从 kubeadm 配置文件上传到集群中的 ConfigMap。
kubeadm init phase upload-config kubelet --config kubeadm.yaml
选项
--config string
到 kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet 操作的帮助命令。
-- kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标签,
则可以通过一组标准路径来寻找已有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.6 -
在你希望加入现有集群的任何机器上运行它。
摘要
当节点加入 kubeadm 初始化的集群时,我们需要建立双向信任。
这个过程可以分解为发现(让待加入节点信任 Kubernetes 控制平面节点)和
TLS 引导(让 Kubernetes 控制平面节点信任待加入节点)两个部分。
有两种主要的发现方案。
第一种方案是使用共享令牌和 API 服务器的 IP 地址。
第二种是以文件形式提供标准 kubeconfig 文件的一个子集。
发现/kubeconfig 文件支持令牌、client-go 鉴权插件(“exec”)、“tokenFile" 和
"authProvider"。该文件可以是本地文件,也可以通过 HTTPS URL 下载。
格式是 kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443
、
kubeadm join --discovery-file path/to/file.conf
或者
kubeadm join --discovery-file https://url/file.conf
。
只能使用其中一种。
如果发现信息是从 URL 加载的,必须使用 HTTPS。
此外,在这种情况下,主机安装的 CA 包用于验证连接。
如果使用共享令牌进行发现,还应该传递 --discovery-token-ca-cert-hash 参数来验证
Kubernetes 控制平面节点提供的根证书颁发机构(CA)的公钥。
此参数的值指定为 "<hash-type>:<hex-encoded-value>",
其中支持的哈希类型为 "sha256"。哈希是通过 Subject Public Key Info(SPKI)对象的字节计算的(如 RFC7469)。
这个值可以从 "kubeadm init" 的输出中获得,或者可以使用标准工具进行计算。
可以多次重复 --discovery-token-ca-cert-hash 参数以允许多个公钥。
如果无法提前知道 CA 公钥哈希,则可以通过 --discovery-token-unsafe-skip-ca-verification 参数禁用此验证。
这削弱了 kubeadm 安全模型,因为其他节点可能会模仿 Kubernetes 控制平面节点。
TLS 引导机制也通过共享令牌驱动。
这用于向 Kubernetes 控制平面节点进行临时的身份验证,以提交本地创建的密钥对的证书签名请求(CSR)。
默认情况下,kubeadm 将设置 Kubernetes 控制平面节点自动批准这些签名请求。
这个令牌通过 --tls-bootstrap-token abcdef.1234567890abcdef 参数传入。
通常两个部分会使用相同的令牌。
在这种情况下可以使用 --token 参数,而不是单独指定每个令牌。
"join [api-server-endpoint]" 命令执行下列阶段:
preflight:运行接入前检查
control-plane-prepare:准备用作控制平面的机器
download-certs:[实验] 从 kubeadm-certs Secret 下载控制平面节点之间共享的证书
certs:为新的控制平面组件生成证书
kubeconfig:为新的控制平面组件生成 kubeconfig
control-plane:生成新控制平面组件的清单
kubelet-start:写入 kubelet 设置、证书并(重新)启动 kubelet
control-plane-join:将机器加入为控制平面实例
etcd:添加新的本地 etcd 成员
update-status:将新的控制平面节点注册到 kubeadm-config ConfigMap 中维护的 ClusterStatus 中(已弃用)
mark-control-plane:将节点标记为控制平面
wait-control-plane:[实验] 等待控制平面启动
kubeadm join [api-server-endpoint] [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值: 6443
如果节点应该托管新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 init 上传的证书 Secret。
证书密钥为一个十六进制编码的字符串,它是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
join 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点的名称。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--skip-phases strings
要跳过的阶段列表。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.1 -
使用此命令来调用 join
工作流程的某个阶段。
概要
使用此命令来调用 join
工作流程的某个阶段。
选项
-h, --help
phase 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.2 -
添加作为控制平面实例的机器。
概要
添加作为控制平面实例的机器。
kubeadm join phase control-plane-join [flags]
示例
# 将机器作为控制平面实例加入
kubeadm join phase control-plane-join all
选项
-h, --help
control-plane-join 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.6.3 -
添加作为控制平面实例的机器。
概要
添加作为控制平面实例的机器。
kubeadm join phase control-plane-join all [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--node-name string
指定节点名称。
--patches string
包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一。
“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.6.4 -
添加一个新的本地 etcd 成员。
概要
添加新的本地 etcd 成员。
kubeadm join phase control-plane-join etcd [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd 操作的帮助命令。
--node-name string
指定节点的名称。
--patches string
包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd” 、”kubeletconfiguration”之一。
“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.6.5 -
将节点标记为控制平面节点。
概要
将节点标记为控制平面节点。
kubeadm join phase control-plane-join mark-control-plane [flags]
选项
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
mark-control-plane 操作的帮助命令。
--node-name string
指定节点的名称。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.6.6 -
准备为控制平面服务的机器。
概要
准备为控制平面服务的机器。
kubeadm join phase control-plane-prepare [flags]
示例
# 准备为控制平面服务的机器
kubeadm join phase control-plane-prepare all
选项
-h, --help
control-plane-prepare 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.7 -
准备为控制平面服务的机器。
概要
准备为控制平面服务的机器。
kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
如果该节点托管一个新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥解密由 init 上传的证书 Secret。
证书密钥是十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash strings
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--node-name string
指定节点名称。
--patches string
包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一。
“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.8 -
为新的控制平面组件生成证书。
概要
为新的控制平面组件生成证书。
kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash strings
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
certs 操作的帮助命令。
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.9 -
为新的控制平面组件生成清单。
概要
为新的控制平面组件生成清单(manifest)。
kubeadm join phase control-plane-prepare control-plane [flags]
选项
--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
control-plane 操作的帮助命令。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如 "kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、
"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.10 -
[实验] 从 kubeadm-certs Secret 下载控制平面节点之间共享的证书。
概要
[实验] 从 kubeadm-certs Secret 下载控制平面节点之间共享的证书。
kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [flags]
选项
--certificate-key string
使用此密钥可以解密由 init 上传的证书 Secret。
证书密钥为一个十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
download-certs 操作的帮助命令。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.11 -
为新的控制平面组件生成 kubeconfig。
概要
为新的控制平面组件生成 kubeconfig。
kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags]
选项
--certificate-key string
使用此密钥可以解密由 init 上传的证书 Secret。
证书密钥为一个十六进制编码的字符串,它是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubeconfig 操作的帮助命令。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.12 -
配置 kubelet、证书并(重新)启动 kubelet。
概要
生成一个包含 KubeletConfiguration 的文件和一个包含特定于节点的 kubelet 配置的环境文件,然后(重新)启动 kubelet。
kubeadm join phase kubelet-start [api-server-endpoint] [flags]
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet-start 操作的帮助命令。
--node-name string
指定节点名称。
--patches string
目录路径,指向的目录中包含名为 “target[suffix][+patchtype].extension” 的文件。
例如,"kube-apiserver0+merge.yaml" 或 "etcd.json" 这种简单形式。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定按字母顺序首先应用哪些补丁。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.13 -
运行 join 命令前检查。
概要
运行 kubeadm join 命令添加节点前检查。
kubeadm join phase preflight [api-server-endpoint] [flags]
示例
# 使用配置文件运行 kubeadm join 命令添加节点前检查。
kubeadm join phase preflight --config kubeadm-config.yaml
选项
--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 `init` 操作上传的证书 Secret。
证书密钥为十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash strings
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.6.14 -
实验特性 :等待控制平面启动
概要
实验特性 :等待控制平面启动
kubeadm join phase wait-control-plane [flags]
选项
-h, --help
wait-control-plane 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
10.1.1.7 -
kubeconfig 文件工具。
概要
kubeconfig 文件工具。
选项
-h, --help
kubeconfig 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
10.1.1.7.1 -
为其他用户输出一个 kubeconfig 文件。
概要
为其他用户输出一个 kubeconfig 文件。
kubeadm kubeconfig user [flags]
示例
# 为一个名为 foo 的其他用户输出 kubeconfig 文件
kubeadm kubeconfig user --client-name= foo
# 使用 kubeadm 配置文件 bar 为另一个名为 foo 的用户输出 kubeconfig 文件
kubeadm alpha kubeconfig user --client-name= foo --config= bar
选项
--client-name string
用户名。如果生成客户端证书,则用作其 CN。
--config string
指向 kubeadm 配置文件的路径。
-h, --help
user 操作的帮助命令。
--org strings
客户端证书的组织。如果创建客户端证书,此值将用作其 O 字段值。
--token string
应该用此令牌做为 kubeconfig 的身份验证机制,而不是客户端证书。
--validity-period duration Default: 8760h0m0s
客户证书的合法期限。所设置值为相对当前时间的偏移。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
10.1.1.8 -
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
概要
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
"reset" 命令执行以下阶段:
preflight 重置预检
remove-etcd-member 移除本地 etcd 成员
cleanup-node 清理节点
kubeadm reset [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cleanup-tmp-dir
清理 "/etc/kubernetes/tmp" 目录。
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-f, --force
在不提示确认的情况下重置节点。
-h, --help
reset 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--skip-phases strings
要跳过的阶段列表。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.8.1 -
使用此命令来调用 reset
工作流程的某个阶段。
概要
使用此命令来调用 reset
工作流程的某个阶段。
选项
-h, --help
phase 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.8.2 -
执行 cleanup node(清理节点)操作。
概要
执行 cleanup node(清理节点)操作。
kubeadm reset phase cleanup-node [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cleanup-tmp-dir
清理 "/etc/kubernetes/tmp" 目录。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
cleanup-node 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.8.3 -
kubeadm reset(重置)前运行启动前检查。
概要
kubeadm reset(重置)前运行启动前检查。
kubeadm reset phase preflight [flags]
选项
--dry-run
不做任何更改;只输出将要执行的操作。
-f, --force
在不提示确认的情况下重置节点。
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.8.4 -
移除本地 etcd 成员。
概要
移除控制平面节点的本地 etcd 成员。
kubeadm reset phase remove-etcd-member [flags]
选项
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
remove-etcd-member 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在默认位置中查找现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.9 -
管理引导令牌。
概要
此命令管理引导令牌(bootstrap token)。它是可选的,仅适用于高级用例。
简而言之,引导令牌(Bootstrap Token)用于在客户端和服务器之间建立双向信任。
当客户端(例如,即将加入集群的节点)需要信任所通信的服务器时,可以使用引导令牌。
这时可以使用具有 “signing” 用途的引导令牌。引导令牌还可以作为一种允许对 API
服务器进行短期身份验证的方法(令牌用作 API 服务器信任客户端的方式),例如用于执行 TLS 引导程序。
引导令牌准确来说是什么?
它是位于 kube-system 命名空间中类型为 “bootstrap.kubernetes.io/token” 的一个 Secret。
引导令牌的格式必须为 “[a-z0-9]{6}.[a-z0-9]{16}”,前一部分是公共令牌 ID,而后者是令牌秘钥,必须在任何情况下都保密!
必须将 Secret 的名称命名为 “bootstrap-token-(token-id)”。
你可以在此处阅读有关引导令牌(bootstrap token)的更多信息:
https://kubernetes.io/zh-cn/docs/admin/bootstrap-tokens/
kubeadm token [flags]
选项
--dry-run
是否启用 `dry-run` 模式。
-h, --help
token 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置,则搜索一组标准位置以查找现有 kubeconfig 文件。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.9.1 -
在服务器上创建引导令牌。
概要
这个命令将为你创建一个引导令牌。
你可以设置此令牌的用途,"有效时间" 和可选的人性化的描述。
这里的 [token] 是指将要生成的实际令牌。
该令牌应该是一个通过安全机制生成的随机令牌,形式为 "[a-z0-9]{6}.[a-z0-9]{16}"。
如果没有给出 [token],kubeadm 将生成一个随机令牌。
kubeadm token create [token]
选项
--certificate-key string
当与 “--print-join-command” 一起使用时,打印作为控制平面加入集群时所需的所有 “kubeadm join” 标志。
要创建新的证书密钥,你必须使用 “kubeadm init phase upload-certs --upload-certs”。
--config string
kubeadm 配置文件的路径。
--description string
针对令牌用途的人性化的描述。
--groups stringSlice 默认值:[system:bootstrappers:kubeadm:default-node-token]
此令牌用于身份验证时将对其他组进行身份验证。必须匹配 "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z"
-h, --help
create 操作的帮助命令。
--print-join-command
不仅仅打印令牌,而是打印使用令牌加入集群所需的完整 'kubeadm join' 参数。
--ttl duration 默认值:24h0m0s
令牌有效时间,超过该时间令牌被自动删除。(例如:1s, 2m, 3h)。如果设置为 '0',令牌将永远不过期。
--usages stringSlice 默认值:[signing,authentication]
描述可以使用此令牌的方式。你可以多次使用 `--usages` 或者提供一个以逗号分隔的选项列表。
合法选项有:[signing,authentication]
从父命令继承的选项
--dry-run
是否启用 `dry-run` 运行模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.9.2 -
删除服务器上的引导令牌。
概要
这个命令将为你删除指定的引导令牌列表。
[token-value]
是要删除的 "[a-z0-9]{6}.[a-z0-9]{16}" 形式的完整令牌或者是 "[a-z0-9]{6}" 形式的令牌 ID。
kubeadm token delete [token-value] ...
选项
-h, --help
delete 操作的帮助命令。
从父命令继承的选项
--dry-run
是否启用 `dry-run` 运行模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.9.3 -
生成并打印一个引导令牌,但不要在服务器上创建它。
概要
此命令将打印一个随机生成的可以被 "init" 和 "join" 命令使用的引导令牌。
你不必使用此命令来生成令牌。你可以自己设定,只要格式符合 "[a-z0-9]{6}.[a-z0-9]{16}"。
之所以提供这个命令是为了方便生成规定格式的令牌。
你也可以使用 "kubeadm init" 并且不指定令牌,该命令会生成一个令牌并打印出来。
kubeadm token generate [flags]
选项
-h, --help
generate 操作的帮助命令。
从父命令继承的选项
--dry-run
是否启用 `dry-run` 模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.9.4 -
列出服务器上的引导令牌。
概要
此命令将为你列出所有的引导令牌。
kubeadm token list [flags]
选项
--allow-missing-template-keys 默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
-o, --experimental-output string 默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
-h, --help
list 操作的帮助命令。
--show-managed-fields
如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
从父命令继承的选项
--dry-run
是否启用 `dry-run` 模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
10.1.1.10 -
此命令能将集群平滑升级到新版本。
概要
此命令能将集群平滑升级到新版本。
kubeadm upgrade [flags]
选项
-h, --help
upgrade 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.10.1 -
将 Kubernetes 集群升级到指定版本。
概要
将 Kubernetes 集群升级到指定版本。
kubeadm upgrade apply [version]
选项
--allow-experimental-upgrades
显示 Kubernetes 的不稳定版本作为升级替代方案,并允许升级到 Kubernetes 的 Alpha、Beta 或 RC 版本。
--allow-release-candidate-upgrades
显示 Kubernetes 的候选版本作为升级替代方案,并允许升级到 Kubernetes 的 RC 版本。
--certificate-renewal Default: true
执行升级期间更改的组件所使用的证书的更新。
--config string
kubeadm 配置文件的路径。
--dry-run
不要更改任何状态,只输出要执行的操作。
--etcd-upgrade 默认值: true
执行 etcd 的升级。
--feature-gates string
一组键值对,用于描述各种功能。选项包括:
EtcdLearnerMode=true|false (ALPHA - 默认值=false)
PublicKeysECDSA=true|false (BETA - 默认值=true)
RootlessControlPlane=true|false (DEPRECATED - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-f, --force
强制升级,但可能无法满足某些要求。这也意味着非交互模式。
-h, --help
apply 操作的帮助命令。
-ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置标志,则在相关目录下搜索以查找现有 kubeconfig 文件。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或是简单的 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--print-config
指定是否应打印将在升级中使用的配置文件。
-y, --yes
执行升级,不提示确认(非交互模式)。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.10.2 -
显示哪些差异将被应用于现有的静态 Pod 资源清单。参考:kubeadm upgrade apply --dry-run
概要
显示哪些差异将被应用于现有的静态 Pod 资源清单。另请参考:kubeadm upgrade apply --dry-run
kubeadm upgrade diff [version] [flags]
选项
--api-server-manifest string 默认值:"/etc/kubernetes/manifests/kube-apiserver.yaml"
API 服务器清单的路径。
--config string
kubeadm 配置文件的路径。
-c, --context-lines int 默认值:3
diff 涉及了多少行上下文。
--controller-manager-manifest string 默认值:"/etc/kubernetes/manifests/kube-controller-manager.yaml"
控制器清单的路径。
-h, --help
diff 操作的帮助命令
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--scheduler-manifest string 默认值:"/etc/kubernetes/manifests/kube-scheduler.yaml"
调度程序清单的路径。
从父命令继承的选项
--rootfs string
[实验] 指向“真实”主机根文件系统的路径。
10.1.1.10.3 -
升级集群中某个节点的命令。
概要
升级集群中某个节点的命令。
"node" 命令执行以下阶段:
preflight 执行节点升级前检查
control-plane 如果存在的话,升级部署在该节点上的管理面实例
kubelet-config 更新该节点上的 kubelet 配置
kubeadm upgrade node [flags]
选项
--certificate-renewal 默认值: true
对升级期间变化的组件所使用的证书执行续订。
--config string
到 kubeadm 配置文件的路径。
--dry-run
不更改任何状态,只输出将要执行的操作。
--etcd-upgrade 默认值: true
执行 etcd 的升级。
-h, --help
node 操作的帮助命令。
--ignore-preflight-errors strings
其错误将显示为警告的检查列表。示例:'IsPrivilegedUser,Swap'。值 'all' 忽略所有检查中的错误。
--kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
用于与集群交互的 kubeconfig 文件。如果参数未指定,将从一系列标准位置检索存在的 kubeconfig 文件。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是"json" 或"yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--skip-phases strings
要跳过的阶段的列表。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.10.4 -
使用此命令调用 node 工作流的某个阶段。
概要
使用此命令调用 node 工作流的某个阶段。
选项
-h, --help
phase 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
10.1.1.10.5 -
升级部署在此节点上的控制平面实例,如果有的话。
概要
升级部署在此节点上的控制平面实例,如果有的话。
kubeadm upgrade node phase control-plane [flags]
选项
--certificate-renewal
续订在升级期间变更的组件所使用的证书。
--dry-run
不改变任何状态,只输出将要执行的动作。
--etcd-upgrade 默认值: true
执行 etcd 的升级。
-h, --help
control-plane 操作的帮助命令。
--kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。"extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 指向 “真实” 主机根文件系统的路径。
10.1.1.10.6 -
升级此节点的 kubelet 配置。
概要
从集群中 ConfigMap kubelet-config 下载 kubelet 配置。
kubeadm upgrade node phase kubelet-config [flags]
选项
--dry-run
不改变任何状态,只输出将要执行的操作。
-h, --help
kubelet-config 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--patches string
目录路径,指向的目录中包含名为 “target[suffix][+patchtype].extension” 的文件。
例如,"kube-apiserver0+merge.yaml" 或 "etcd.json" 这种简单形式。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定按字母顺序首先应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
10.1.1.10.7 -
执行升级节点的预检。
概要
执行 kubeadm 升级节点的预检。
kubeadm upgrade node phase preflight [flags]
选项
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查清单。示例:'IsPrivilegedUser,Swap'。值为 'all' 表示忽略所有检查的错误。
继承于父命令的选项
--rootfs string
[实验] 指向 “真实” 主机根文件系统的路径。
10.1.1.10.8 -
检查可升级到哪些版本,并验证你当前的集群是否可升级。
概述
检查可升级到哪些版本,并验证你当前的集群是否可升级。
该命令只能在存在 kubeconfig 文件 admin.conf
的控制平面节点上运行。
要跳过互联网检查,请传入可选参数 [version]。
kubeadm upgrade plan [version] [flags]
选项
--allow-experimental-upgrades
显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha、Beta 或 RC 版本。
--allow-missing-template-keys Default: true
如果为 true,则当模板中缺少字段或映射键时,忽略模板中的错误。仅适用于 golang 和
jsonpath 输出格式。
--allow-release-candidate-upgrades
显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的 RC 版本。
--config string
配置文件的路径。
-o, --experimental-output string Default: "text"
输出格式为
text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file
其中一种。
--feature-gates string
一组描述各种特征特性门控的键值对。选项有:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
plan 操作的帮助命令。
--ignore-preflight-errors strings
其错误将显示为警告的检查列表。例如:'IsPrivilegedUser,Swap'。值 'all' 忽略所有检查错误。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
-o, --output string
默认值:"text"
--print-config
指定是否打印将在升级中使用的配置文件。
--show-managed-fields
如果开启,以 JSON 或 YAML 格式打印对象时会保留 managedField。
从父命令继承的选项
--rootfs string
[实验] 指向 “真实” 宿主机根文件系统的路径。
10.1.1.11 -
打印 kubeadm 的版本。
概要
打印 kubeadm 的版本。
kubeadm version [flags]
选项
-h, --help
version 操作的帮助命令。
-o, --output string
输出格式;可用的选项有 'yaml'、'json' 和 'short'。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
10.1.1.12 -
此目录下的所有文件都是从其他仓库自动生成的。 不要人工编辑它们。 你必须在上游仓库中编辑它们
10.1.2 - kubeadm init
此命令初始化一个 Kubernetes 控制平面节点。
运行此命令以安装 Kubernetes 控制平面。
概要
运行此命令来搭建 Kubernetes 控制平面节点。
"init" 命令执行以下阶段:
preflight 预检
certs 生成证书
/ca 生成自签名根 CA 用于配置其他 kubernetes 组件
/apiserver 生成 apiserver 的证书
/apiserver-kubelet-client 生成 apiserver 连接到 kubelet 的证书
/front-proxy-ca 生成前端代理自签名CA(扩展apiserver)
/front-proxy-client 生成前端代理客户端的证书(扩展 apiserver)
/etcd-ca 生成 etcd 自签名 CA
/etcd-server 生成 etcd 服务器证书
/etcd-peer 生成 etcd 节点相互通信的证书
/etcd-healthcheck-client 生成 etcd 健康检查的证书
/apiserver-etcd-client 生成 apiserver 访问 etcd 的证书
/sa 生成用于签署服务帐户令牌的私钥和公钥
kubeconfig 生成建立控制平面和管理所需的所有 kubeconfig 文件
/admin 生成一个 kubeconfig 文件供管理员使用以及供 kubeadm 本身使用
/super-admin 为超级管理员生成 kubeconfig 文件
/kubelet 为 kubelet 生成一个 kubeconfig 文件,*仅*用于集群引导
/controller-manager 生成 kubeconfig 文件供控制器管理器使用
/scheduler 生成 kubeconfig 文件供调度程序使用
etcd 为本地 etcd 生成静态 Pod 清单文件
/local 为本地单节点本地 etcd 实例生成静态 Pod 清单文件
control-plane 生成建立控制平面所需的所有静态 Pod 清单文件
/apiserver 生成 kube-apiserver 静态 Pod 清单
/controller-manager 生成 kube-controller-manager 静态 Pod 清单
/scheduler 生成 kube-scheduler 静态 Pod 清单
kubelet-start 写入 kubelet 设置并启动(或重启) kubelet
upload-config 将 kubeadm 和 kubelet 配置上传到 ConfigMap
/kubeadm 将 kubeadm 集群配置上传到 ConfigMap
/kubelet 将 kubelet 组件配置上传到 ConfigMap
upload-certs 将证书上传到 kubeadm-certs
mark-control-plane 将节点标记为控制面
bootstrap-token 生成用于将节点加入集群的引导令牌
kubelet-finalize 在 TLS 引导后更新与 kubelet 相关的设置
/experimental-cert-rotation 启用 kubelet 客户端证书轮换
addon 安装用于通过一致性测试所需的插件
/coredns 将 CoreDNS 插件安装到 Kubernetes 集群
/kube-proxy 将 kube-proxy 插件安装到 Kubernetes 集群
show-join-command 显示控制平面和工作节点的加入命令
kubeadm init [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器绑定的端口。
--apiserver-cert-extra-sans strings
用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
证书密钥为十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组用来描述各种功能特性的键值(key=value)对。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
init 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
--node-name string
指定节点的名称。
--patches string
它包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是"json" 或"yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--pod-network-cidr string
指明 Pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDR。
--service-cidr string 默认值:"10.96.0.0/12"
为服务的虚拟 IP 地址另外指定 IP 地址段。
--service-dns-domain string 默认值:"cluster.local"
为服务另外指定域名,例如:"myorg.internal"。
--skip-certificate-key-print
不要打印用于加密控制平面证书的密钥。
--skip-phases strings
要跳过的阶段列表。
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。
--token string
这个令牌用于建立控制平面节点与工作节点间的双向通信。
格式为 [a-z0-9]{6}.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
--token-ttl duration 默认值:24h0m0s
令牌被自动删除之前的持续时间(例如 1s,2m,3h)。如果设置为 '0',则令牌将永不过期。
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
Init 命令的工作流程
kubeadm init
命令通过执行下列步骤来启动一个 Kubernetes 控制平面节点。
在做出变更前运行一系列的预检项来验证系统状态。一些检查项目仅仅触发警告,
其它的则会被视为错误并且退出 kubeadm,除非问题得到解决或者用户指定了
--ignore-preflight-errors=<错误列表>
参数。
生成一个自签名的 CA 证书来为集群中的每一个组件建立身份标识。
用户可以通过将其放入 --cert-dir
配置的证书目录中(默认为 /etc/kubernetes/pki
)
来提供他们自己的 CA 证书以及/或者密钥。
APIServer 证书将为任何 --apiserver-cert-extra-sans
参数值提供附加的 SAN 条目,必要时将其小写。
将 kubeconfig 文件写入 /etc/kubernetes/
目录以便 kubelet、控制器管理器和调度器用来连接到
API 服务器,它们每一个都有自己的身份标识。再编写额外的 kubeconfig 文件,将 kubeadm
作为管理实体(admin.conf
)和可以绕过 RBAC 的超级管理员用户(super-admin.conf
)。
为 API 服务器、控制器管理器和调度器生成静态 Pod 的清单文件。假使没有提供一个外部的 etcd
服务的话,也会为 etcd 生成一份额外的静态 Pod 清单文件。
静态 Pod 的清单文件被写入到 /etc/kubernetes/manifests
目录;
kubelet 会监视这个目录以便在系统启动的时候创建 Pod。
一旦控制平面的 Pod 都运行起来,kubeadm init
的工作流程就继续往下执行。
对控制平面节点应用标签和污点标记以便不会在它上面运行其它的工作负载。
生成令牌,将来其他节点可使用该令牌向控制平面注册自己。如
kubeadm token
文档所述,用户可以选择通过 --token
提供令牌。
为了使得节点能够遵照启动引导令牌 和
TLS 启动引导
这两份文档中描述的机制加入到集群中,kubeadm 会执行所有的必要配置:
更多相关信息,请查看 kubeadm join 。
通过 API 服务器安装一个 DNS 服务器 (CoreDNS) 和 kube-proxy 附加组件。
在 Kubernetes v1.11 和更高版本中,CoreDNS 是默认的 DNS 服务器。
请注意,尽管已部署 DNS 服务器,但直到安装 CNI 时才调度它。
警告:
从 v1.18 开始,在 kubeadm 中使用 kube-dns 的支持已被废弃,并已在 v1.21 版本中移除。
在 kubeadm 中使用 init 阶段
Kubeadm 允许你使用 kubeadm init phase
命令分阶段创建控制平面节点。
要查看阶段和子阶段的有序列表,可以调用 kubeadm init --help
。
该列表将位于帮助屏幕的顶部,每个阶段旁边都有一个描述。
注意,通过调用 kubeadm init
,所有阶段和子阶段都将按照此确切顺序执行。
某些阶段具有唯一的标志,因此,如果要查看可用选项的列表,请添加 --help
,例如:
sudo kubeadm init phase control-plane controller-manager --help
你也可以使用 --help
查看特定父阶段的子阶段列表:
sudo kubeadm init phase control-plane --help
kubeadm init
还公开了一个名为 --skip-phases
的参数,该参数可用于跳过某些阶段。
参数接受阶段名称列表,并且这些名称可以从上面的有序列表中获取。
例如:
sudo kubeadm init phase control-plane all --config= configfile.yaml
sudo kubeadm init phase etcd local --config= configfile.yaml
# 你现在可以修改控制平面和 etcd 清单文件
sudo kubeadm init --skip-phases= control-plane,etcd --config= configfile.yaml
该示例将执行的操作是基于 configfile.yaml
中的配置在 /etc/kubernetes/manifests
中写入控制平面和 etcd 的清单文件。
这允许你修改文件,然后使用 --skip-phases
跳过这些阶段。
通过调用最后一个命令,你将使用自定义清单文件创建一个控制平面节点。
特性状态:
Kubernetes v1.22 [beta]
或者,你可以使用 InitConfiguration
下的 skipPhases
字段。
结合一份配置文件来使用 kubeadm init
注意:
配置文件的功能仍然处于 Beta 状态并且在将来的版本中可能会改变。
通过一份配置文件而不是使用命令行参数来配置 kubeadm init
命令是可能的,
但是一些更加高级的功能只能够通过配置文件设定。
这份配置文件通过 --config
选项参数指定的,
它必须包含 ClusterConfiguration
结构,并可能包含更多由 ---\n
分隔的结构。
在某些情况下,可能不允许将 --config
与其他标志混合使用。
可以使用 kubeadm config print
命令打印出默认配置。
如果你的配置没有使用最新版本,推荐 使用
kubeadm config migrate
命令进行迁移。
关于配置的字段和用法的更多信息,你可以访问 API 参考页面 。
使用 kubeadm init 时设置特性门控
Kubeadm 支持一组独有的特性门控,只能在 kubeadm init
创建集群期间使用。
这些特性可以控制集群的行为。特性门控会在毕业到 GA 后被移除。
你可以使用 --feature-gates
标志来为 kubeadm init
设置特性门控,
或者你可以在用 --config
传递配置文件 时添加条目到
featureGates
字段中。
直接传递 Kubernetes 核心组件的特性门控 给 kubeadm 是不支持的。
相反,可以通过使用 kubeadm API 的自定义组件 来传递。
特性门控的列表:
kubeadm 特性门控
特性
默认值
Alpha
Beta
GA
ControlPlaneKubeletLocalMode
false
1.31
-
-
EtcdLearnerMode
true
1.27
1.29
-
PublicKeysECDSA
false
1.19
-
-
WaitForAllControlPlaneComponents
false
1.30
-
-
说明:
一旦特性门控变成了 GA,它的值会被默认锁定为 true
。
特性门控的描述:
ControlPlaneKubeletLocalMode
启用此特性门控后,当加入新的控制平面节点时,
kubeadm 将配置 kubelet 连接到本地 kube-apiserver。
这将确保在滚动升级期间不会违反版本偏差策略。
EtcdLearnerMode
启用此特性门控后,当加入新的控制平面节点时,将创建一个新的 etcd
成员作为学习者(learner),并仅在 etcd 数据完全对齐后进级为投票成员(voting member)。
PublicKeysECDSA
可用于创建集群时使用 ECDSA 证书而不是默认 RSA 算法。
支持用 kubeadm certs renew
更新现有 ECDSA 证书,
但你不能在集群运行期间或升级期间切换 RSA 和 ECDSA 算法。
Kubernetes 1.31 有一个错误,尽管开启了特性门控,
所生成的 kubeconfig 文件中的密钥仍使用 RSA 设置。
在 v1.31 之前的 Kubernetes 版本中,即使启用了 PublicKeysECDSA
特性门控,
所生成的 kubeconfig 文件中的密钥仍然被设置为使用 RSA。
WaitForAllControlPlaneComponents
启用此特性门控后,kubeadm 将等待控制平面节点上的所有控制平面组件
(kube-apiserver、kube-controller-manager、kube-scheduler)在其 /healthz
端点上报告 200 状态码。这些检测在 https://127.0.0.1:PORT/healthz
上执行,其中
PORT
取自组件的 --secure-port
标志。
如果没有启用此特性门控,kubeadm 将仅等待控制平面节点上的 kube-apiserver 准备就绪。
等待过程在 kubeadm 启动主机上的 kubelet 后立即开始。如果你希望在 kubeadm init
或 kubeadm join
命令执行期间观察所有控制平面组件的就绪状态,建议你启用此特性门控。
已弃用特性门控的列表:
kubeadm 弃用的特性门控
特性
默认值
Alpha
Beta
GA
弃用
RootlessControlPlane
false
1.22
-
-
1.31
特性门控描述:
RootlessControlPlane
设置此标志来配置 kubeadm 所部署的控制平面组件中的静态 Pod 容器
kube-apiserver
、kube-controller-manager
、kube-scheduler
和 etcd
以非 root 用户身份运行。如果未设置该标志,则这些组件以 root 身份运行。
你可以在升级到更新版本的 Kubernetes 之前更改此特性门控的值。
已移除的特性门控列表:
kubeadm 已移除的特性门控
特性
Alpha
Beta
GA
移除
IPv6DualStack
1.16
1.21
1.23
1.24
UnversionedKubeletConfigMap
1.22
1.23
1.25
1.26
UpgradeAddonsBeforeControlPlane
1.28
-
-
1.31
特性门控的描述:
IPv6DualStack
在 IP 双栈特性处于开发过程中时,此标志有助于配置组件的双栈支持。有关 Kubernetes
双栈支持的更多详细信息,请参阅 kubeadm 的双栈支持 。
UnversionedKubeletConfigMap
此标志控制 kubeadm 存储 kubelet 配置数据的 ConfigMap 的名称。
在未指定此标志或设置为 true
的情况下,此 ConfigMap 被命名为 kubelet-config
。
如果将此标志设置为 false
,则此 ConfigMap 的名称会包括 Kubernetes 的主要版本和次要版本
(例如:kubelet-config-1.31
)。
kubeadm 会确保用于读写 ConfigMap 的 RBAC 规则适合你设置的值。
当 kubeadm 写入此 ConfigMap 时(在 kubeadm init
或 kubeadm upgrade apply
期间),
kubeadm 根据 UnversionedKubeletConfigMap
的设置值来执行操作。
当读取此 ConfigMap 时(在执行 kubeadm join
、kubeadm reset
、kubeadm upgrade
等操作期间),
kubeadm 尝试首先使用无版本(后缀)的 ConfigMap 名称;
如果不成功,kubeadm 将回退到使用该 ConfigMap 的旧(带版本号的)名称。
UpgradeAddonsBeforeControlPlane
此特性门控已被移除。它在 v1.28 中作为一个已弃用的特性被引入,在 v1.31 中被移除。
有关旧版本的文档,请切换到相应的网站版本。
添加 kube-proxy 参数
kubeadm 配置中有关 kube-proxy 的说明请查看:
使用 kubeadm 启用 IPVS 模式的说明请查看:
向控制平面组件传递自定义的命令行参数
有关向控制平面组件传递命令行参数的说明请查看:
在没有互联网连接的情况下运行 kubeadm
要在没有互联网连接的情况下运行 kubeadm,你必须提前拉取所需的控制平面镜像。
你可以使用 kubeadm config images
子命令列出并拉取镜像:
kubeadm config images list
kubeadm config images pull
你可以通过 --config
把 kubeadm 配置文件 传递给上述命令来控制
kubernetesVersion
和 imageRepository
字段。
kubeadm 需要的所有默认 registry.k8s.io
镜像都支持多种硬件体系结构。
使用自定义的镜像
默认情况下,kubeadm 会从 registry.k8s.io
仓库拉取镜像。如果请求的 Kubernetes 版本是 CI 标签
(例如 ci/latest
),则使用 gcr.io/k8s-staging-ci-images
。
你可以通过使用带有配置文件的 kubeadm 来重写此操作。
允许的自定义功能有:
提供影响镜像版本的 kubernetesVersion
。
使用其他的 imageRepository
来代替 registry.k8s.io
。
为 etcd 或 CoreDNS 提供特定的 imageRepository
和 imageTag
。
由于向后兼容的原因,使用 imageRepository
所指定的定制镜像库可能与默认的
registry.k8s.io
镜像路径不同。例如,某镜像的子路径可能是 registry.k8s.io/subpath/image
,
但使用自定义仓库时默认为 my.customrepository.io/image
。
确保将镜像推送到 kubeadm 可以使用的自定义仓库的路径中,你必须:
使用 kubeadm config images {list|pull}
从 registry.k8s.io
的默认路径中拉取镜像。
将镜像推送到 kubeadm config images list --config=config.yaml
的路径,
其中 config.yaml
包含自定义的 imageRepository
和/或用于 etcd 和 CoreDNS 的 imageTag
。
将相同的 config.yaml
传递给 kubeadm init
。
定制沙箱(pause)镜像
如果需要为这些组件设置定制的镜像,
你需要在你的容器运行时 中完成一些配置。
参阅你的容器运行时的文档以了解如何改变此设置。
对于某些容器运行时而言,
你可以在容器运行时 主题下找到一些建议。
将控制平面证书上传到集群
通过将参数 --upload-certs
添加到 kubeadm init
,你可以将控制平面证书临时上传到集群中的 Secret。
请注意,此 Secret 将在 2 小时后自动过期。这些证书使用 32 字节密钥加密,可以使用 --certificate-key
指定该密钥。
通过将 --control-plane
和 --certificate-key
传递给 kubeadm join
,
可以在添加其他控制平面节点时使用相同的密钥下载证书。
以下阶段命令可用于证书到期后重新上传证书:
kubeadm init phase upload-certs --upload-certs --config= SOME_YAML_FILE
说明:
在使用 --config
传递配置文件 时,
可以在 InitConfiguration
中提供预定义的 certificateKey
。
如果未将预定义的证书密钥传递给 kubeadm init
和 kubeadm init phase upload-certs
,
则会自动生成一个新密钥。
以下命令可用于按需生成新密钥:
kubeadm certs certificate-key
使用 kubeadm 管理证书
有关使用 kubeadm 进行证书管理的详细信息,
请参阅使用 kubeadm 进行证书管理 。
该文档包括有关使用外部 CA、自定义证书和证书续订的信息。
管理 kubeadm 为 kubelet 提供的 systemd 配置文件
kubeadm
包自带了关于 systemd
如何运行 kubelet
的配置文件。
请注意 kubeadm
客户端命令行工具永远不会修改这份 systemd
配置文件。
这份 systemd
配置文件属于 kubeadm DEB/RPM 包。
有关更多信息,请阅读管理 systemd 的 kubeadm 内嵌文件 。
结合 CRI 运行时使用 kubeadm
默认情况下,kubeadm 尝试检测你的容器运行环境。有关此检测的更多详细信息,请参见
kubeadm CRI 安装指南 。
设置节点的名称
默认情况下,kubeadm
基于机器的主机地址分配一个节点名称。你可以使用 --node-name
参数覆盖此设置。
此标识将合适的 --hostname-override
值传递给 kubelet。
要注意,重载主机名可能会与云驱动发生冲突 。
kubeadm 自动化
除了像文档
kubeadm 基础教程 中所描述的那样,
将从 kubeadm init
取得的令牌复制到每个节点,你还可以并行地分发令牌以实现更简单的自动化。
要实现自动化,你必须知道控制平面节点启动后将拥有的 IP 地址,或使用 DNS 名称或负载均衡器的地址。
生成一个令牌。这个令牌必须采用的格式为:<6 个字符的字符串>.<16 个字符的字符串>
。
更加正式的说法是,它必须符合正则表达式:[a-z0-9]{6}\.[a-z0-9]{16}
。
kubeadm 可以为你生成一个令牌:
使用这个令牌同时启动控制平面节点和工作节点。这些节点一旦运行起来应该就会互相寻找对方并且形成集群。
同样的 --token
参数可以同时用于 kubeadm init
和 kubeadm join
命令。
当接入其他控制平面节点时,可以对 --certificate-key
执行类似的操作。可以使用以下方式生成密钥:
kubeadm certs certificate-key
一旦集群启动起来,你就可以从控制平面节点的 /etc/kubernetes/admin.conf
文件获取管理凭证,
并使用这个凭证同集群通信。
一旦集群启动起来,你就可以从控制平面节点中的 /etc/kubernetes/admin.conf
文件获取管理凭证或通过为其他用户生成的 kubeconfig 文件 与集群通信。
注意这种搭建集群的方式在安全保证上会有一些宽松,因为这种方式不允许使用
--discovery-token-ca-cert-hash
来验证根 CA 的哈希值
(因为当配置节点的时候,它还没有被生成)。
更多信息请参阅 kubeadm join 文档。
接下来
10.1.3 - kubeadm join
此命令用来初始化新的 Kubernetes 节点并将其加入集群。
在你希望加入现有集群的任何机器上运行它。
摘要
当节点加入 kubeadm 初始化的集群时,我们需要建立双向信任。
这个过程可以分解为发现(让待加入节点信任 Kubernetes 控制平面节点)和
TLS 引导(让 Kubernetes 控制平面节点信任待加入节点)两个部分。
有两种主要的发现方案。
第一种方案是使用共享令牌和 API 服务器的 IP 地址。
第二种是以文件形式提供标准 kubeconfig 文件的一个子集。
发现/kubeconfig 文件支持令牌、client-go 鉴权插件(“exec”)、“tokenFile" 和
"authProvider"。该文件可以是本地文件,也可以通过 HTTPS URL 下载。
格式是 kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443
、
kubeadm join --discovery-file path/to/file.conf
或者
kubeadm join --discovery-file https://url/file.conf
。
只能使用其中一种。
如果发现信息是从 URL 加载的,必须使用 HTTPS。
此外,在这种情况下,主机安装的 CA 包用于验证连接。
如果使用共享令牌进行发现,还应该传递 --discovery-token-ca-cert-hash 参数来验证
Kubernetes 控制平面节点提供的根证书颁发机构(CA)的公钥。
此参数的值指定为 "<hash-type>:<hex-encoded-value>",
其中支持的哈希类型为 "sha256"。哈希是通过 Subject Public Key Info(SPKI)对象的字节计算的(如 RFC7469)。
这个值可以从 "kubeadm init" 的输出中获得,或者可以使用标准工具进行计算。
可以多次重复 --discovery-token-ca-cert-hash 参数以允许多个公钥。
如果无法提前知道 CA 公钥哈希,则可以通过 --discovery-token-unsafe-skip-ca-verification 参数禁用此验证。
这削弱了 kubeadm 安全模型,因为其他节点可能会模仿 Kubernetes 控制平面节点。
TLS 引导机制也通过共享令牌驱动。
这用于向 Kubernetes 控制平面节点进行临时的身份验证,以提交本地创建的密钥对的证书签名请求(CSR)。
默认情况下,kubeadm 将设置 Kubernetes 控制平面节点自动批准这些签名请求。
这个令牌通过 --tls-bootstrap-token abcdef.1234567890abcdef 参数传入。
通常两个部分会使用相同的令牌。
在这种情况下可以使用 --token 参数,而不是单独指定每个令牌。
"join [api-server-endpoint]" 命令执行下列阶段:
preflight:运行接入前检查
control-plane-prepare:准备用作控制平面的机器
download-certs:[实验] 从 kubeadm-certs Secret 下载控制平面节点之间共享的证书
certs:为新的控制平面组件生成证书
kubeconfig:为新的控制平面组件生成 kubeconfig
control-plane:生成新控制平面组件的清单
kubelet-start:写入 kubelet 设置、证书并(重新)启动 kubelet
control-plane-join:将机器加入为控制平面实例
etcd:添加新的本地 etcd 成员
update-status:将新的控制平面节点注册到 kubeadm-config ConfigMap 中维护的 ClusterStatus 中(已弃用)
mark-control-plane:将节点标记为控制平面
wait-control-plane:[实验] 等待控制平面启动
kubeadm join [api-server-endpoint] [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值: 6443
如果节点应该托管新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 init 上传的证书 Secret。
证书密钥为一个十六进制编码的字符串,它是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
join 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点的名称。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--skip-phases strings
要跳过的阶段列表。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
join 工作流
kubeadm join
初始化 Kubernetes 工作节点或控制平面节点并将其添加到集群中。
对于工作节点,该操作包括以下步骤:
kubeadm 从 API 服务器下载必要的集群信息。
默认情况下,它使用引导令牌和 CA 密钥哈希来验证数据的真实性。
也可以通过文件或 URL 直接发现根 CA。
一旦知道集群信息,kubelet 就可以开始 TLS 引导过程。
TLS 引导程序使用共享令牌与 Kubernetes API 服务器进行临时的身份验证,以提交证书签名请求 (CSR);
默认情况下,控制平面自动对该 CSR 请求进行签名。
最后,kubeadm 配置本地 kubelet 使用分配给节点的确定标识连接到 API 服务器。
对于控制平面节点,执行额外的步骤:
从集群下载控制平面节点之间共享的证书(如果用户明确要求)。
生成控制平面组件清单、证书和 kubeconfig。
添加新的本地 etcd 成员。
使用 kubeadm 的 join phase 命令
kubeadm 允许你使用 kubeadm join phase
分阶段将节点加入集群。
要查看阶段和子阶段的有序列表,可以调用 kubeadm join --help
。
该列表将位于帮助屏幕的顶部,每个阶段旁边都有一个描述。
注意,通过调用 kubeadm join
,所有阶段和子阶段都将按照此确切顺序执行。
有些阶段具有唯一的标志,因此,如果要查看可用选项列表,请添加 --help
,例如:
kubeadm join phase kubelet-start --help
类似于 kubeadm init phase 命令,
kubeadm join phase
允许你使用 --skip-phases
标志跳过阶段列表。
例如:
sudo kubeadm join --skip-phases= preflight --config= config.yaml
特性状态:
Kubernetes v1.22 [beta]
或者,你可以使用 JoinConfiguration
中的 skipPhases
字段。
发现要信任的集群 CA
kubeadm 的发现有几个选项,每个选项都有安全性上的优缺点。
适合你的环境的正确方法取决于节点是如何准备的以及你对网络的安全性期望
和节点的生命周期特点。
带 CA 锁定模式的基于令牌的发现
这是 kubeadm 的默认模式。
在这种模式下,kubeadm 下载集群配置(包括根 CA)并使用令牌验证它,
并且会验证根 CA 的公钥与所提供的哈希是否匹配,
以及 API 服务器证书在根 CA 下是否有效。
CA 键哈希格式为 sha256:<hex_encoded_hash>
。
默认情况下,哈希值会打印在 kubeadm init
命令输出的末尾
或者从 kubeadm token create --print-join-command
命令的输出信息中返回。
它使用标准格式(请参考 RFC7469 )
并且也能通过第三方工具或者制备系统进行计算。
例如,使用 OpenSSL CLI:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
kubeadm join
命令示例:
对于工作节点:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443
对于控制面节点:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef --control-plane 1.2.3.4:6443
如果使用 --upload-certs
调用 kubeadm init
命令,
你也可以对控制平面节点调用带 --certificate-key
参数的 join
命令,
将证书复制到该节点。
优势:
劣势:
CA 哈希通常在控制平面节点被提供之前是不知道的,这使得构建使用 kubeadm 的自动化配置工具更加困难。
通过预先生成 CA,你可以解除这个限制。
无 CA 锁定模式的基于令牌的发现
此模式仅依靠对称令牌来签署 (HMAC-SHA256) 为控制平面建立信任根的发现信息。
要使用该模式,加入节点必须使用
--discovery-token-unsafe-skip-ca-verification
跳过 CA 公钥的哈希验证。
如果可以,你应该考虑使用其他模式。
kubeadm join
命令示例
kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-verification 1.2.3.4:6443
优势
劣势
如果攻击者能够通过某些漏洞窃取引导令牌,那么他们可以使用该令牌(连同网络级访问)
为其它处于引导过程中的节点提供假冒的控制平面节点。
在你的环境中,这可能是一个适当的折衷方法,也可能不是。
基于 HTTPS 或文件发现
这种方案提供了一种带外方式在控制平面节点和引导节点之间建立信任根。
如果使用 kubeadm 构建自动配置,请考虑使用此模式。
发现文件的格式为常规的 Kubernetes
kubeconfig 文件。
如果发现文件不包含凭据,则将使用 TLS 发现令牌。
kubeadm join
命令示例:
优势:
允许引导节点安全地发现控制平面节点的信任根,即使网络或其他工作节点受到损害。
劣势:
要求你有某种方法将发现信息从控制平面节点传送到引导节点。
如果发现文件包含凭据,你必须对其保密并通过安全通道进行传输。
这可能通过你的云提供商或供应工具来实现。
将自定义 kubelet 凭据与 kubeadm join
结合使用
要允许 kubeadm join
使用预定义的 kubelet 凭据并跳过客户端 TLS 引导程序和新节点的 CSR 批准:
从集群中带有 /etc/kubernetes/pki/ca.key
的工作控制平面节点执行
kubeadm kubeconfig user --org system:nodes --client-name system:node:$NODE > kubelet.conf
。
$NODE
必须设置为新节点的名称。
手动修改生成的 kubelet.conf
以调整集群名称和服务器端点,
或运行 kubeadm kubeconfig user --config
(它接受 InitConfiguration
)。
如果集群没有 ca.key
文件,你必须在外部对 kubelet.conf
中嵌入的证书进行签名。
有关更多信息,请参阅 PKI 证书和要求 和
使用 kubeadm 进行证书管理 。
将生成的 kubelet.conf
复制为新节点上的 /etc/kubernetes/kubelet.conf
。
在新节点上带着标志
--ignore-preflight-errors=FileAvailable--etc-kubernetes-kubelet.conf
执行 kubeadm join
。
确保你的安装更加安全
kubeadm 的默认值可能不适用于所有人。
本节说明如何以牺牲可用性为代价来加强 kubeadm 安装。
关闭节点客户端证书的自动批准
默认情况下,Kubernetes 启用了 CSR 自动批准器,如果在身份验证时使用启动引导令牌,
它会批准对 kubelet 的任何客户端证书的请求。
如果不希望集群自动批准 kubelet 客户端证书,可以通过执行以下命令关闭它:
kubectl delete clusterrolebinding kubeadm:node-autoapprove-bootstrap
关闭后,kubeadm join
操作将会被阻塞,直到管理员已经手动批准了在途中的 CSR 才会继续:
使用 kubectl get csr
,你可以看到原来的 CSR 处于 Pending 状态。
输出类似于:
NAME AGE REQUESTOR CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 18s system:bootstrap:878f07 Pending
kubectl certificate approve
允许管理员批准 CSR。
此操作告知证书签名控制器向请求者颁发一个证书,该证书具有 CSR 中所请求的那些属性。
kubectl certificate approve node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ
输出类似于:
certificatesigningrequest "node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ" approved
这会将 CRS 资源更改为 Active 状态。
输出类似于:
NAME AGE REQUESTOR CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 1m system:bootstrap:878f07 Approved,Issued
这迫使工作流只有在运行了 kubectl certificate approve
后,kubeadm join
才能成功。
关闭对 cluster-info
ConfigMap 的公开访问
为了实现使用令牌作为唯一验证信息的加入工作流,默认情况下会公开带有验证控制平面节点标识所需数据的 ConfigMap。
虽然此 ConfigMap 中没有私有数据,但一些用户可能希望无论如何都关闭它。
这样做需要禁用 kubeadm join
工作流的 --discovery-token
参数。
以下是实现步骤:
从 API 服务器获取 cluster-info
文件:
kubectl -n kube-public get cm cluster-info -o jsonpath = '{.data.kubeconfig}' | tee cluster-info.yaml
输出类似于:
apiVersion : v1
kind : Config
clusters :
- cluster :
certificate-authority-data : <ca-cert>
server : https://<ip>:<port>
name : ""
contexts : []
current-context : ""
preferences : {}
users : []
这些命令应该在执行 kubeadm init
之后、在 kubeadm join
之前执行。
使用带有配置文件的 kubeadm join
注意:
配置文件目前是 beta 功能,在将来的版本中可能会变动。
可以用配置文件替代命令行参数的方法配置 kubeadm join
,一些进阶功能也只有在使用配置文件时才可选用。
该文件通过 --config
参数来传递,并且文件中必须包含 JoinConfiguration
结构。
在某些情况下,不允许将 --config
与其他标志混合使用。
使用 kubeadm config print
命令可以打印默认配置。
如果你的配置没有使用最新版本,
推荐 使用 kubeadm config migrate
命令转换。
有关配置的字段和用法的更多信息,你可以导航到我们的
API 参考页 。
接下来
10.1.4 - kubeadm upgrade
kubeadm upgrade
是一个对用户友好的命令,它将复杂的升级逻辑包装在一条命令后面,支持升级的规划和实际执行。
kubeadm upgrade 指南
本文档 概述使用
kubeadm 执行升级的步骤。与 kubeadm 旧版本相关的文档,请参阅 Kubernetes 网站的旧版文档。
你可以使用 kubeadm upgrade diff
来查看将应用于静态 Pod 清单的更改。
在 Kubernetes v1.15.0 和更高版本中,kubeadm upgrade apply
和 kubeadm upgrade node
也将自动续订节点上的 kubeadm 托管证书,包括存储在 kubeconfig 文件中的证书。
如果不想续订,可以传递参数 --certificate-renewal=false
。
有关证书续订的更多详细信息请参见证书管理文档 。
说明:
kubeadm upgrade apply
和 kubeadm upgrade plan
命令都具有遗留的 --config
标志,
可以在执行特定控制平面节点的规划或升级时重新配置集群。
请注意,升级工作流不是为这种情况而设计的,并且有意外结果的报告。
kubeadm upgrade plan
检查可升级到哪些版本,并验证你当前的集群是否可升级。
概述
检查可升级到哪些版本,并验证你当前的集群是否可升级。
该命令只能在存在 kubeconfig 文件 admin.conf
的控制平面节点上运行。
要跳过互联网检查,请传入可选参数 [version]。
kubeadm upgrade plan [version] [flags]
选项
--allow-experimental-upgrades
显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha、Beta 或 RC 版本。
--allow-missing-template-keys Default: true
如果为 true,则当模板中缺少字段或映射键时,忽略模板中的错误。仅适用于 golang 和
jsonpath 输出格式。
--allow-release-candidate-upgrades
显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的 RC 版本。
--config string
配置文件的路径。
-o, --experimental-output string Default: "text"
输出格式为
text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file
其中一种。
--feature-gates string
一组描述各种特征特性门控的键值对。选项有:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
plan 操作的帮助命令。
--ignore-preflight-errors strings
其错误将显示为警告的检查列表。例如:'IsPrivilegedUser,Swap'。值 'all' 忽略所有检查错误。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
-o, --output string
默认值:"text"
--print-config
指定是否打印将在升级中使用的配置文件。
--show-managed-fields
如果开启,以 JSON 或 YAML 格式打印对象时会保留 managedField。
从父命令继承的选项
--rootfs string
[实验] 指向 “真实” 宿主机根文件系统的路径。
kubeadm upgrade apply
将 Kubernetes 集群升级到指定版本。
概要
将 Kubernetes 集群升级到指定版本。
kubeadm upgrade apply [version]
选项
--allow-experimental-upgrades
显示 Kubernetes 的不稳定版本作为升级替代方案,并允许升级到 Kubernetes 的 Alpha、Beta 或 RC 版本。
--allow-release-candidate-upgrades
显示 Kubernetes 的候选版本作为升级替代方案,并允许升级到 Kubernetes 的 RC 版本。
--certificate-renewal Default: true
执行升级期间更改的组件所使用的证书的更新。
--config string
kubeadm 配置文件的路径。
--dry-run
不要更改任何状态,只输出要执行的操作。
--etcd-upgrade 默认值: true
执行 etcd 的升级。
--feature-gates string
一组键值对,用于描述各种功能。选项包括:
EtcdLearnerMode=true|false (ALPHA - 默认值=false)
PublicKeysECDSA=true|false (BETA - 默认值=true)
RootlessControlPlane=true|false (DEPRECATED - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-f, --force
强制升级,但可能无法满足某些要求。这也意味着非交互模式。
-h, --help
apply 操作的帮助命令。
-ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置标志,则在相关目录下搜索以查找现有 kubeconfig 文件。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或是简单的 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--print-config
指定是否应打印将在升级中使用的配置文件。
-y, --yes
执行升级,不提示确认(非交互模式)。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
kubeadm upgrade diff
显示哪些差异将被应用于现有的静态 Pod 资源清单。参考:kubeadm upgrade apply --dry-run
概要
显示哪些差异将被应用于现有的静态 Pod 资源清单。另请参考:kubeadm upgrade apply --dry-run
kubeadm upgrade diff [version] [flags]
选项
--api-server-manifest string 默认值:"/etc/kubernetes/manifests/kube-apiserver.yaml"
API 服务器清单的路径。
--config string
kubeadm 配置文件的路径。
-c, --context-lines int 默认值:3
diff 涉及了多少行上下文。
--controller-manager-manifest string 默认值:"/etc/kubernetes/manifests/kube-controller-manager.yaml"
控制器清单的路径。
-h, --help
diff 操作的帮助命令
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--scheduler-manifest string 默认值:"/etc/kubernetes/manifests/kube-scheduler.yaml"
调度程序清单的路径。
从父命令继承的选项
--rootfs string
[实验] 指向“真实”主机根文件系统的路径。
kubeadm upgrade node
升级集群中某个节点的命令。
概要
升级集群中某个节点的命令。
"node" 命令执行以下阶段:
preflight 执行节点升级前检查
control-plane 如果存在的话,升级部署在该节点上的管理面实例
kubelet-config 更新该节点上的 kubelet 配置
kubeadm upgrade node [flags]
选项
--certificate-renewal 默认值: true
对升级期间变化的组件所使用的证书执行续订。
--config string
到 kubeadm 配置文件的路径。
--dry-run
不更改任何状态,只输出将要执行的操作。
--etcd-upgrade 默认值: true
执行 etcd 的升级。
-h, --help
node 操作的帮助命令。
--ignore-preflight-errors strings
其错误将显示为警告的检查列表。示例:'IsPrivilegedUser,Swap'。值 'all' 忽略所有检查中的错误。
--kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
用于与集群交互的 kubeconfig 文件。如果参数未指定,将从一系列标准位置检索存在的 kubeconfig 文件。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是"json" 或"yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--skip-phases strings
要跳过的阶段的列表。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
接下来
如果你使用 kubeadm v1.7.x 或更低版本初始化了集群,则可以参考
kubeadm config ,
为 kubeadm upgrade
配置你的集群。
10.1.5 - kubeadm config
在 kubeadm init
执行期间,kubeadm 将 ClusterConfiguration
对象上传
到你的集群的 kube-system
名字空间下名为 kubeadm-config
的 ConfigMap 对象中。
然后在 kubeadm join
、kubeadm reset
和 kubeadm upgrade
执行期间读取此配置。
你可以使用 kubeadm config print
命令打印默认静态配置,
kubeadm 运行 kubeadm init
and kubeadm join
时将使用此配置。
说明:
此命令的输出旨在作为示例。你必须手动编辑此命令的输出来适配你的设置。
删除你不确定的字段,kubeadm 将通过检查主机来尝试在运行时给它们设默认值。
更多有关 init
和 join
的信息请浏览使用带配置文件的 kubeadm init
或使用带配置文件的 kubeadm join 。
有关使用 kubeadm 的配置 API 的更多信息,
请浏览使用 kubeadm API 来自定义组件 。
你可以使用 kubeadm config migrate
来转换旧配置文件,
把其中已弃用的 API 版本更新为受支持的 API 版本。
kubeadm config validate
可用于验证配置文件。
kubeadm config images list
和 kubeadm config images pull
可以用来列出和拉取 kubeadm 所需的镜像。
kubeadm config print
打印配置
概要
此命令打印子命令所提供的配置信息。相关细节可参阅:
https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories
kubeadm config print [flags]
选项
-h, --help
print 命令的帮助信息。
从父命令继承而来的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如此标志未设置,将在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm config print init-defaults
打印用于 'kubeadm init' 的默认 init 配置。
概要
此命令打印对象,例如用于 'kubeadm init' 的默认 init 配置对象。
请注意,Bootstrap Token 字段之类的敏感值已替换为 "abcdef.0123456789abcdef"
之类的占位符值以通过验证,但不执行创建令牌的实际计算。
kubeadm config print init-defaults [flags]
选项
--component-configs strings
以逗号分隔的组件配置 API 对象的列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。
如果未设置此参数,则不会打印任何组件配置。
-h, --help
init-defaults 操作的帮助命令。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm config print join-defaults
打印默认的节点添加配置,该配置可用于 'kubeadm join' 命令。
概要
此命令打印对象,例如用于 'kubeadm join' 的默认 join 配置对象。
请注意,诸如启动引导令牌字段之类的敏感值已替换为 "abcdef.0123456789abcdef" 之类的占位符值以通过验证,
但不执行创建令牌的实际计算。
kubeadm config print join-defaults [flags]
选项
-h, --help
join-defaults 操作的帮助命令。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm config migrate
从文件中读取旧版本的 kubeadm 配置的 API 类型,并为新版本输出类似的配置对象
概要
此命令允许你在 CLI 工具中将本地旧版本的配置对象转换为最新支持的版本,而无需变更集群中的任何内容。
在此版本的 kubeadm 中,支持以下 API 版本:
因此,无论你在此处传递 --old-config 参数的版本是什么,当写入到 stdout 或 --new-config (如果已指定)时,
都会读取、反序列化、默认、转换、验证和重新序列化 API 对象。
换句话说,如果你将此文件传递给 "kubeadm init",则该命令的输出就是 kubeadm 实际上在内部读取的内容。
kubeadm config migrate [flags]
选项
-h, --help
migrate 操作的帮助信息。
--new-config string
使用新的 API 版本生成的 kubeadm 配置文件的路径。这个路径是可选的。如果没有指定,输出将被写到 stdout。
--old-config string
使用旧 API 版本且应转换的 kubeadm 配置文件的路径。此参数是必需的。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm config validate
读取包含 kubeadm 配置 API 的文件,并报告所有验证问题。
概要
这个命令允许你验证 kubeadm 配置 API 文件并报告所有警告和错误。
如果没有错误,退出状态将为零;否则,将为非零。
诸如未知 API 字段等任何解包问题都会触发错误。
未知的 API 版本和具有无效值的字段也会触发错误。
根据输入文件的内容,可能会报告任何其他错误或警告。
在这个版本的 kubeadm 中,支持以下 API 版本:
kubeadm config validate [flags]
选项
--allow-experimental-api
允许验证试验性的、未发布的 API。
--config string
指向 kubeadm 配置文件的路径。
-h, --help
validate 的帮助命令。
从父命令继承而来的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
在与集群通信时要使用的 kubeconfig 文件。
如果此标志未被设置,则会在一组标准位置中搜索现有的 kubeconfig 文件。
--rootfs string
[试验性] 指向“真实”主机根文件系统的路径。
kubeadm config images list
打印 kubeadm 要使用的镜像列表。配置文件用于自定义镜像或镜像存储库。
概要
打印 kubeadm 要使用的镜像列表。配置文件用于自定义镜像或镜像存储库。
kubeadm config images list [flags]
选项
--allow-missing-template-keys 默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
--config string
kubeadm 配置文件的路径。
-o, --experimental-output string 默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一。
--feature-gates string
一组键值对(key=value),用于描述各种特性。这些选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
list 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
--show-managed-fields
如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到“真实”主机根文件系统的路径。
kubeadm config images pull
拉取 kubeadm 使用的镜像。
概要
拉取 kubeadm 使用的镜像。
kubeadm config images pull [flags]
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
--feature-gates string
一系列键值对(key=value),用于描述各种特性。可选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
pull 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择一个特定的 Kubernetes 版本。
从父命令继承的选项
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
接下来
10.1.6 - kubeadm reset
该命令尽力还原由 kubeadm init
或 kubeadm join
所做的更改。
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
概要
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
"reset" 命令执行以下阶段:
preflight 重置预检
remove-etcd-member 移除本地 etcd 成员
cleanup-node 清理节点
kubeadm reset [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cleanup-tmp-dir
清理 "/etc/kubernetes/tmp" 目录。
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-f, --force
在不提示确认的情况下重置节点。
-h, --help
reset 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--skip-phases strings
要跳过的阶段列表。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
Reset 工作流程
kubeadm reset
负责从使用 kubeadm init
或 kubeadm join
命令创建的文件中清除节点本地文件系统。
对于控制平面节点,reset
还从 etcd 集群中删除该节点的本地 etcd Stacked 部署的成员。
kubeadm reset phase
可用于执行上述工作流程的各个阶段。
要跳过阶段列表,你可以使用 --skip-phases
参数,该参数的工作方式类似于 kubeadm join
和 kubeadm init
阶段运行器。
外部 etcd 清理
如果使用了外部 etcd,kubeadm reset
将不会删除任何 etcd 中的数据。
这意味着,如果再次使用相同的 etcd 端点运行 kubeadm init
,你将看到先前集群的状态。
要清理 etcd 中的数据,建议你使用 etcdctl 这样的客户端,例如:
更多详情请参考 etcd 文档 。
体面关闭 kube-apiserver
如果你为 kube-apiserver
配置了 --shutdown-delay-duration
标志,
你可以在运行 kubeadm reset
之前,运行以下命令尝试体面关闭正在运行的 API 服务器 Pod:
yq eval -i '.spec.containers[0].command = []' /etc/kubernetes/manifests/kube-apiserver.yaml
timeout 60 sh -c 'while pgrep kube-apiserver >/dev/null; do sleep 1; done' || true
接下来
10.1.7 - kubeadm token
如使用引导令牌进行身份验证 所述,
引导令牌用于在即将加入集群的节点和控制平面节点间建立双向认证。
kubeadm init
创建了一个有效期为 24 小时的令牌,下面的命令允许你管理令牌,也可以创建和管理新的令牌。
kubeadm token create
在服务器上创建引导令牌。
概要
这个命令将为你创建一个引导令牌。
你可以设置此令牌的用途,"有效时间" 和可选的人性化的描述。
这里的 [token] 是指将要生成的实际令牌。
该令牌应该是一个通过安全机制生成的随机令牌,形式为 "[a-z0-9]{6}.[a-z0-9]{16}"。
如果没有给出 [token],kubeadm 将生成一个随机令牌。
kubeadm token create [token]
选项
--certificate-key string
当与 “--print-join-command” 一起使用时,打印作为控制平面加入集群时所需的所有 “kubeadm join” 标志。
要创建新的证书密钥,你必须使用 “kubeadm init phase upload-certs --upload-certs”。
--config string
kubeadm 配置文件的路径。
--description string
针对令牌用途的人性化的描述。
--groups stringSlice 默认值:[system:bootstrappers:kubeadm:default-node-token]
此令牌用于身份验证时将对其他组进行身份验证。必须匹配 "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z"
-h, --help
create 操作的帮助命令。
--print-join-command
不仅仅打印令牌,而是打印使用令牌加入集群所需的完整 'kubeadm join' 参数。
--ttl duration 默认值:24h0m0s
令牌有效时间,超过该时间令牌被自动删除。(例如:1s, 2m, 3h)。如果设置为 '0',令牌将永远不过期。
--usages stringSlice 默认值:[signing,authentication]
描述可以使用此令牌的方式。你可以多次使用 `--usages` 或者提供一个以逗号分隔的选项列表。
合法选项有:[signing,authentication]
从父命令继承的选项
--dry-run
是否启用 `dry-run` 运行模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
kubeadm token delete
删除服务器上的引导令牌。
概要
这个命令将为你删除指定的引导令牌列表。
[token-value]
是要删除的 "[a-z0-9]{6}.[a-z0-9]{16}" 形式的完整令牌或者是 "[a-z0-9]{6}" 形式的令牌 ID。
kubeadm token delete [token-value] ...
选项
-h, --help
delete 操作的帮助命令。
从父命令继承的选项
--dry-run
是否启用 `dry-run` 运行模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
kubeadm token generate
生成并打印一个引导令牌,但不要在服务器上创建它。
概要
此命令将打印一个随机生成的可以被 "init" 和 "join" 命令使用的引导令牌。
你不必使用此命令来生成令牌。你可以自己设定,只要格式符合 "[a-z0-9]{6}.[a-z0-9]{16}"。
之所以提供这个命令是为了方便生成规定格式的令牌。
你也可以使用 "kubeadm init" 并且不指定令牌,该命令会生成一个令牌并打印出来。
kubeadm token generate [flags]
选项
-h, --help
generate 操作的帮助命令。
从父命令继承的选项
--dry-run
是否启用 `dry-run` 模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
kubeadm token list
列出服务器上的引导令牌。
概要
此命令将为你列出所有的引导令牌。
kubeadm token list [flags]
选项
--allow-missing-template-keys 默认值:true
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
-o, --experimental-output string 默认值:"text"
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
-h, --help
list 操作的帮助命令。
--show-managed-fields
如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
从父命令继承的选项
--dry-run
是否启用 `dry-run` 模式。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
接下来
10.1.8 - kubeadm version
此命令用来输出 kubeadm 的版本。
打印 kubeadm 的版本。
概要
打印 kubeadm 的版本。
kubeadm version [flags]
选项
-h, --help
version 操作的帮助命令。
-o, --output string
输出格式;可用的选项有 'yaml'、'json' 和 'short'。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
10.1.9 - kubeadm alpha
注意:
kubeadm alpha
提供了一组可用于收集社区反馈的预览性质功能。
请试用这些功能并给我们提供反馈!
目前在 kubeadm alpha
之下没有试验性质的命令。
接下来
10.1.10 - kubeadm certs
kubeadm certs
提供管理证书的工具。关于如何使用这些命令的细节,
可参见使用 kubeadm 管理证书 。
kubeadm certs
用来操作 Kubernetes 证书的一组命令。
处理 Kubernetes 证书的相关命令。
概要
处理 Kubernetes 证书相关的命令。
kubeadm certs [flags]
选项
-h, --help
certs 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
kubeadm certs renew
你可以使用 all
子命令来续订所有 Kubernetes 证书,也可以选择性地续订部分证书。更多的相关细节,
可参见手动续订证书 。
为 Kubernetes 集群更新证书
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm certs renew [flags]
选项
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订所有可用证书。
概要
续订运行控制平面所需的所有已知证书。续订是无条件进行的,与到期日期无关。续订也可以单独运行以进行更多控制。
kubeadm certs renew all [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
all 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订 kubeconfig 文件中嵌入的证书,供管理员和 kubeadm 自身使用。
概要
续订 kubeconfig 文件中嵌入的证书,供管理员和 kubeadm 自身使用。
无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案,
也可以使用 K8s 证书 API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。
kubeadm certs renew admin.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
到 kubeadm 配置文件的路径。
-h, --help
admin.conf 操作的帮助命令。
--kubeconfig string Default: "/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订 apiserver 用于访问 etcd 的证书。
概要
续订 apiserver 用于访问 etcd 的证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew apiserver-etcd-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver-etcd-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订 apiserver 用于连接 kubelet 的证书。
概要
续订 apiserver 用于连接 kubelet 的证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
也可能调用 K8s 证书 API 进行证书更新;亦或者,作为最后一个选择,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew apiserver-kubelet-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver-kubelet-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订用于提供 Kubernetes API 的证书。
概要
续订用于提供 Kubernetes API 的证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书更新,或者作为最后一个选择来生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew apiserver [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
apiserver 子操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。
概要
续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。
续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用 kubeadm 管理的本地 PKI 中的证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew controller-manager.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
controller-manager.conf 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes 证书 API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订存活态探针的证书,用于对 etcd 执行健康检查。
概要
续订存活态探针的证书,用于对 etcd 执行健康检查。
无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;作为替代方案,
也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。
kubeadm certs renew etcd-healthcheck-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-healthcheck-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订 etcd 节点间用来相互通信的证书。
概要
续订 etcd 节点间用来相互通信的证书。
无论证书的到期日期如何,续订都是无条件进行的;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用由 kubeadm 管理的本地 PKI 中的证书机构;
作为替代方案,也可以使用 K8s certificate API 进行证书续订,或者(作为最后一种选择)生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发续订的证书,以防证书文件在其他地方使用。
kubeadm certs renew etcd-peer [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-peer 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订用于提供 etcd 服务的证书。
概要
续订用于提供 etcd 服务的证书。
续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试在 kubeadm 管理的本地 PKI 中使用证书颁发机构;作为替代方案,
可以使用 K8s 证书 API 进行证书续订,或者作为最后一种选择来生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发续订的证书,以防文件在其他地方使用。
kubeadm certs renew etcd-server [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
etcd-server 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为前端代理客户端续订证书。
概要
为前端代理客户端续订证书。
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
默认情况下,续订尝试使用位于 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
也可以使用 K8s certificate API 进行证书续订;亦或者,作为最后一种方案,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew front-proxy-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
front-proxy-client 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--use-api
使用 Kubernetes certificate API 续订证书。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用。
概要
续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用。
续订无条件地进行,与证书的到期日期无关;SAN 等额外属性将基于现有的文件/证书,因此无需重新提供它们。
默认情况下,续订会尝试使用在 kubeadm 所管理的本地 PKI 中的证书颁发机构;作为替代方案,
也可以使用 K8s certificate API 进行证书续订;亦或者,作为最后一种选择,生成 CSR 请求。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
kubeadm certs renew scheduler.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
scheduler.conf 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为 super-admin 对嵌入于 kubeconfig 文件中的证书续期。
概要
为 super-admin 对嵌入于 kubeconfig 文件中的证书续期。
续期操作将无条件进行,不论证书的到期日期是何时;诸如 SAN 之类的额外属性将基于现有文件/证书,无需重新提供。
默认情况下,续期会尝试使用由 kubeadm 管理的本地 PKI 中的证书颁发机构;
作为替代方案,可以使用 K8s 证书 API 进行证书续期,或者作为最后的选项,生成一个 CSR 请求。
续期后,为了使更改生效,需要重启控制平面组件,并且如果该文件在其他地方使用,最终需要重新分发续期后的证书。
kubeadm certs renew super-admin.conf [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
kubeadm 配置文件的路径。
-h, --help
super-admin.conf 的帮助信息。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验性功能] 指向‘真实’宿主根文件系统的路径。
kubeadm certs certificate-key
此命令可用来生成一个新的控制面证书密钥。密钥可以作为 --certificate-key
标志的取值传递给 kubeadm init
和 kubeadm join
命令,从而在添加新的控制面节点时能够自动完成证书复制。
生成证书密钥。
概要
该命令将打印出可以与 "init" 命令一起使用的安全的随机生成的证书密钥。
你也可以使用 kubeadm init --upload-certs
而无需指定证书密钥;
此命令将为你生成并打印一个证书密钥。
kubeadm certs certificate-key [flags]
选项
-h, --help
certificate-key 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm certs check-expiration
此命令检查 kubeadm 所管理的本地 PKI 中的证书是否以及何时过期。更多的相关细节,
可参见检查证书过期 。
为一个 Kubernetes 集群检查证书的到期时间。
概要
检查 kubeadm 管理的本地 PKI 中证书的到期时间。
kubeadm certs check-expiration [flags]
选项
--allow-missing-template-keys 默认值:true
如果为 true,忽略模板中缺少某字段或映射键的错误。仅适用于 golang 和 jsonpath 输出格式。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存证书的路径。
--config string
到 kubeadm 配置文件的路径。
-o, --experimental-output string 默认值:"text"
输出格式。可选值为:
text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file。
-h, --help
check-expiration 操作的帮助命令。
--kubeconfig string 默认为:"/etc/kubernetes/admin.conf"
在和集群连接时使用该 kubeconfig 文件。
如果此标志未被设置,那么将会在一些标准的位置去搜索存在的 kubeconfig 文件。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
kubeadm certs generate-csr
此命令可用来为所有控制面证书和 kubeconfig 文件生成密钥和 CSR(签名请求)。
用户可以根据自身需要选择 CA 为 CSR 签名。要了解如何使用该命令的更多信息,
请参阅签署由 kubeadm 生成的证书签名请求(CSR) 。
生成密钥和证书签名请求。
概要
为运行控制平面所需的所有证书生成密钥和证书签名请求(CSR)。该命令会生成部分 kubeconfig 文件,
其中 "users > user > client-key-data" 字段包含私钥数据,并为每个 kubeconfig
文件创建一个随附的 ".csr" 文件。
此命令设计用于 Kubeadm 外部 CA 模式 。
它生成你可以提交给外部证书颁发机构进行签名的 CSR。
你需要使用 ".crt" 作为文件扩展名将 PEM 编码的签名证书与密钥文件一起保存。
或者,对于 kubeconfig 文件,PEM 编码的签名证书应使用 base64 编码,
并添加到 "users > user > client-certificate-data" 字段。
kubeadm certs generate-csr [flags]
示例
# 以下命令将为所有控制平面证书和 kubeconfig 文件生成密钥和 CSR:
kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki
选项
--cert-dir string
保存证书的路径。
--config string
到 kubeadm 配置文件的路径。
-h, --help
generate-csr 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
保存 kubeconfig 文件的路径。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
接下来
10.1.11 - kubeadm init phase
kubeadm init phase
能确保调用引导过程的原子步骤。
因此,如果希望自定义应用,则可以让 kubeadm 做一些工作,然后填补空白。
kubeadm init phase
与 kubeadm init 工作流
一致,后台都使用相同的代码。
kubeadm init phase preflight
使用此命令可以在控制平面节点上执行启动前检查。
运行预检。
概要
运行 kubeadm init 前的预检。
kubeadm init phase preflight [flags]
示例
# 使用配置文件对 kubeadm init 进行预检
kubeadm init phase preflight --config kubeadm-config.yaml
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表。例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--image-repository string 默认值:"registry.k8s.io"
选择拉取控制平面镜像的容器仓库。
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
kubeadm init phase kubelet-start
此阶段将写入 kubelet 配置文件和环境文件,然后启动 kubelet。
编写 kubelet 配置并(重新)启动 kubelet
概要
使用 kubelet 配置文件编写一个文件,并使用特定节点的 kubelet 设置编写一个环境文件,然后(重新)启动 kubelet。
kubeadm init phase kubelet-start [flags]
示例
# 将来自 InitConfiguration 文件中的 kubelet 参数写入一个动态环境文件。
kubeadm init phase kubelet-start --config config.yaml
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
连接到 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet-start 操作的帮助命令
--image-repository string 默认值:"registry.k8s.io"
选择一个容器镜像仓库来从中拉取控制平面组件的镜像
--node-name string
指定节点名称。
--patches string
目录路径,指向包含名为 “target[suffix][+patchtype].extension” 的文件的目录。
例如,"kube-apiserver0+merge.yaml" 或 "etcd.json" 这种简单形式。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定按字母顺序首先应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase certs
该阶段可用于创建 kubeadm 所需的所有证书。
证书生成。
概要
此命令不应单独运行。请参阅可用子命令列表。
kubeadm init phase certs [flags]
选项
-h, --help
certs 操作的帮助命令。
从父指令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成所有证书。
概要
生成所有证书。
kubeadm init phase certs all [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-cert-extra-sans strings
用于 API 服务器服务证书的可选额外替代名称(SAN)。可以同时使用 IP 地址和 DNS 名称。
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--service-cidr string 默认值:"10.96.0.0/12"
VIP 服务使用其它的 IP 地址范围。
--service-dns-domain string 默认值:"cluster.local"
服务使用其它的域名,例如:"myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成自签名的 Kubernetes CA 以便为其他 Kubernetes 组件提供身份标识。
概要
生成自签名的 Kubernetes CA 以便为其他 Kubernetes 组件提供身份标识,并将其保存到 ca.crt 和 ca.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs ca [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
ca 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成用于服务 Kubernetes API 的证书。
概要
生成用于服务 Kubernetes API 的证书,并将其保存到 apiserver.crt 和 apiserver.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs apiserver [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-cert-extra-sans strings
用于 API Server 服务证书的可选附加主体备用名称(SAN)。可以是 IP 地址和 DNS 名称。
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
apiserver 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--service-cidr string 默认值:"10.96.0.0/12"
指定服务 VIP 可使用的其他 IP 地址段。
--service-dns-domain string 默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成供 API 服务器连接 kubelet 的证书。
概要
生成供 API 服务器连接 kubelet 的证书,并将其保存到 apiserver-kubelet-client.crt 和 apiserver-kubelet-client.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs apiserver-kubelet-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
apiserver-kubelet-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 指向宿主机上的 '实际' 根文件系统的路径。
生成自签名 CA 来提供前端代理的身份。
概要
生成自签名 CA 来提供前端代理的身份,并将其保存到 front-proxy-ca.cert 和 front-proxy-ca.key 文件中。
如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。
kubeadm init phase certs front-proxy-ca [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
front-proxy-ca 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为前端代理客户端生成证书。
概要
为前端代理客户端生成证书,并将其保存到 front-proxy-client.crt 和 front-proxy-client.key 文件中。
如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。
kubeadm init phase certs front-proxy-client [flags]
选项
--cert-dir string 默认:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
front-proxy-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成用于为 etcd 设置身份的自签名 CA。
概要
生成用于为 etcd 设置身份的自签名 CA,并将其保存到 etcd/ca.crt 和 etcd/ca.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-ca [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-ca 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成用于提供 etcd 服务的证书。
概要
生成用于提供 etcd 服务的证书,并将其保存到 etcd/server.crt 和 etcd/server.key 文件中。
默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-server [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-server 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成 etcd 节点相互通信的证书。
概要
生成 etcd 节点相互通信的证书,并将其保存到 etcd/peer.crt 和 etcd/peer.key 文件中。
默认 SAN 为 localhost、127.0.0.1、127.0.0.1、:: 1
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-peer [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-peer 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成用于 etcd 健康检查的活跃性探针的证书。
概要
生成用于 etcd 健康检查的活跃性探针的证书,并将其保存到 etcd/healthcheck-client.crt 和 etcd/healthcheck-client.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs etcd-healthcheck-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书存储的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd-healthcheck-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成 apiserver 用来访问 etcd 的证书。
概要
生成 apiserver 用于访问 etcd 的证书,并将其保存到 apiserver-etcd-client.crt 和 apiserver-etcd-client.key 文件中。
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
kubeadm init phase certs apiserver-etcd-client [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
证书的存储路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
apiserver-etcd-client 操作的帮助命令。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成用来签署服务账号令牌的私钥及其公钥。
概要
生成用来签署服务账号令牌的私钥及其公钥,并将其保存到 sa.key 和 sa.pub 文件中。
如果两个文件都已存在,则 kubeadm 会跳过生成步骤,而将使用现有文件。
kubeadm init phase certs sa [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
-h, --help
sa 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase kubeconfig
可以通过调用 all
子命令来创建所有必需的 kubeconfig 文件,或者分别调用它们。
生成所有建立控制平面和管理员(admin)所需的 kubeconfig 文件。
概要
此命令并非设计用来单独运行。请阅读可用子命令列表。
kubeadm init phase kubeconfig [flags]
选项
-h, --help
kubeconfig 操作的帮助命令
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成所有 kubeconfig 文件。
概要
生成所有 kubeconfig 文件。
kubeadm init phase kubeconfig all [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果没有设置,将使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
--node-name string
指定节点名称。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为管理员(admin)和 kubeadm 本身生成 kubeconfig 文件。
概要
为管理员和 kubeadm 本身生成 kubeconfig 文件,并将其保存到 admin.conf 文件中。
kubeadm init phase kubeconfig admin [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
admin 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为 kubelet 生成一个 kubeconfig 文件,仅仅 用于集群引导目的。
概要
生成 kubelet 要使用的 kubeconfig 文件,并将其保存到 kubelet.conf 文件。
请注意,该操作目的是仅 用于引导集群。在控制平面启动之后,应该从 CSR API 请求所有 kubelet 凭据。
kubeadm init phase kubeconfig kubelet [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--node-name string
指定节点的名称。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成控制器管理器要使用的 kubeconfig 文件。
概要
生成控制器管理器要使用的 kubeconfig 文件,并保存到 controller-manager.conf 文件中。
kubeadm init phase kubeconfig controller-manager [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
controller-manager 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。
生成调度器使用的 kubeconfig 文件。
概要
生成调度器(scheduler)要使用的 kubeconfig 文件,并保存到 scheduler.conf 文件中。
kubeadm init phase kubeconfig scheduler [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
要绑定到 API 服务器的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
scheduler 操作的帮助命令。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
kubeconfig 文件的保存路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定特定的 Kubernetes 版本。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为 super-admin 生成一个 kubeconfig 文件。
概要
为 super-admin 生成一个 kubeconfig 文件,并将其保存到 super-admin.conf 文件中。
kubeadm init phase kubeconfig super-admin [flags]
选项
--apiserver-advertise-address string
API 服务器所公布其监听的 IP 地址。如果未设置,则使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器绑定的端口。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
super-admin 的帮助信息。
--kubeconfig-dir string 默认值:"/etc/kubernetes"
保存 kubeconfig 文件的路径。
--kubernetes-version string 默认值:"stable-1"
为控制平面指定一个特定的 Kubernetes 版本。
从父命令继承的选项
--rootfs string
[实验性功能] 指向‘真实’宿主根文件系统的路径。
kubeadm init phase control-plane
使用此阶段,可以为控制平面组件创建所有必需的静态 Pod 文件。
生成建立控制平面所需的静态 Pod 清单文件。
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm init phase control-plane [flags]
选项
-h, --help
control-plane 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成所有静态 Pod 清单文件。
概要
生成所有的静态 Pod 清单文件。
kubeadm init phase control-plane all [flags]
示例
# 为控制平面组件生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase control-plane all
# 使用从某配置文件中读取的选项为生成静态 Pod 清单文件。
kubeadm init phase control-plane all --config config.yaml
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认的网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器要绑定的端口。
--apiserver-extra-args <逗号分割的 'key=value' 对>
形式为 <flagname>=<value> 的一组额外参数,用来传递给 API 服务器,
或者覆盖其默认配置值。
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面选择一个稳定的 IP 地址或者 DNS 名称。
--controller-manager-extra-args <逗号分割的 'key=value' 对>
一组形式为 <flagname>=<value> 的额外参数,用来传递给控制管理器(Controller Manager)
或覆盖其默认设置值。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组用来描述各种特性门控的键值(key=value)对。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
all 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择指定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或是简单的 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相匹配。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置了此标志,控制平面将自动地为每个节点分配 CIDR。
--scheduler-extra-args <逗号分割的 'key=value' 对>
一组形式为 <flagname>=<value> 的额外参数,用来传递给调度器(Scheduler)
或覆盖其默认设置值。
--service-cidr string 默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。
从父指令继承的选项
--rootfs string
[实验] 指向'真实'宿主机的根文件系统的路径。
生成 kube-apiserver 静态 Pod 清单。
概要
生成 kube-apiserver 静态 Pod 清单。
kubeadm init phase control-plane apiserver [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
--apiserver-bind-port int32 默认值: 6443
要绑定到 API 服务器的端口。
--apiserver-extra-args <逗号分隔的 'key=value' 对>
一组 <flagname>=<value> 形式的额外参数,用来传递给 API
服务器或者覆盖其默认参数配置。
--cert-dir string 默认值:"/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组键值对,用于描述各种功能特性的特性门控。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
apiserver 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是"json" 或"yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
--service-cidr string 默认值:"10.96.0.0/12"
指定服务 VIP 使用 IP 地址的其他范围。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统路径。
生成 kube-controller-manager 静态 Pod 清单。
概要
生成 kube-controller-manager 静态 Pod 清单。
kubeadm init phase control-plane controller-manager [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--controller-manager-extra-args <comma-separated 'key=value' pairs>
一组 <flagname>=< 形式的额外参数,传递给控制器管理器(Controller Manager)
或者覆盖其默认配置值
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
controller-manager 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.ioo"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
生成 kube-scheduler 静态 Pod 清单。
概要
生成 kube-scheduler 静态 Pod 清单。
kubeadm init phase control-plane scheduler [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
scheduler 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge"、"json" 之一,分别与 kubectl
所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
--scheduler-extra-args <逗号分隔的 'key=value' 键值对>
一组 <flagname>=<value> 形式的额外参数,用来传递给调度器或者覆盖其默认参数配置。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase etcd
根据静态 Pod 文件,使用以下阶段创建一个本地 etcd 实例。
为本地 etcd 生成静态 Pod 的清单文件。
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm init phase etcd [flags]
选项
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
为本地单节点 etcd 实例生成静态 Pod 清单文件。
概要
为本地单节点 etcd 实例生成静态 Pod 清单文件。
kubeadm init phase etcd local [flags]
示例
# 为 etcd 生成静态 Pod 清单文件,其功能等效于 kubeadm init 生成的文件。
kubeadm init phase etcd local
# 使用从配置文件读取的选项为 etcd 生成静态 Pod 清单文件。
kubeadm init phase etcd local --config config.yaml
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
local 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择要从中拉取控制平面镜像的容器仓库。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml" 或是简单的 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相匹配。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase upload-config
可以使用此命令将 kubeadm 配置上传到集群。或者使用
kubeadm config 。
上传 kubeadm 和 kubelet 配置到 ConfigMap 中。
概要
此命令并非设计用来单独运行。请参阅可用的子命令列表。
kubeadm init phase upload-config [flags]
选项
-h, --help
upload-config 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
将所有配置上传到 ConfigMap。
概要
将所有配置上传到 ConfigMap
kubeadm init phase upload-config all [flags]
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
将 kubeadm ClusterConfiguration 上传到 ConfigMap。
概要
将 kubeadm ClusterConfiguration 上传到 kube-system 命名空间中名为 kubeadm-config 的 ConfigMap 中。
这样就可以正确配置系统组件,并在升级时提供无缝的用户体验。
另外,可以使用 kubeadm 配置。
kubeadm init phase upload-config kubeadm [flags]
示例
# 上传集群配置
kubeadm init phase upload-config --config=myConfig.yaml
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubeadm 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
将 kubelet 组件配置上传到 ConfigMap。
概要
将从 kubeadm InitConfiguration 对象提取的 kubelet 配置上传到集群中的
kubelet-config
ConfigMap。
kubeadm init phase upload-config kubelet [flags]
示例
# 将 kubelet 配置从 kubeadm 配置文件上传到集群中的 ConfigMap。
kubeadm init phase upload-config kubelet --config kubeadm.yaml
选项
--config string
到 kubeadm 配置文件的路径。
--cri-socket string
要连接的 CRI 套接字的路径。如果该值为空,kubeadm 将尝试自动检测;
仅当你安装了多个 CRI 或使用非标准的 CRI 套接字时才应使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet 操作的帮助命令。
-- kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标签,
则可以通过一组标准路径来寻找已有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase upload-certs
使用以下阶段将控制平面证书上传到集群。默认情况下,证书和加密密钥会在两个小时后过期。
将证书上传到 kubeadm-certs。
概要
将控制平面证书上传到 kubeadm-certs Secret。
kubeadm init phase upload-certs [flags]
选项
--certificate-key string
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
证书密钥是十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
upload-certs 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用来与集群通信的 kubeconfig 文件。
如果此标志未设置,则可以在一组标准的位置搜索现有的 kubeconfig 文件。
--skip-certificate-key-print
不要打印输出用于加密控制平面证书的密钥。
--upload-certs
将控制平面证书上传到 kubeadm-certs Secret。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase mark-control-plane
使用以下阶段来给作为控制平面的节点
打标签(label)和记录污点(taint)。
标记节点为控制平面节点。
概要
标记节点为控制平面节点。
kubeadm init phase mark-control-plane [flags]
示例
# 将控制平面标签和污点应用于当前节点,其功能等效于 kubeadm init 执行的操作
kubeadm init phase mark-control-plane --config config.yaml
# 将控制平面标签和污点应用于特定节点
kubeadm init phase mark-control-plane --node-name myNode
选项
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
mark-control-plane 操作的帮助命令。
--node-name string
指定节点名称。
从父命令继承的选项
--rootfs 字符串
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase bootstrap-token
使用以下阶段来配置引导令牌。
生成用于将节点加入集群的引导令牌
概要
启动引导令牌(bootstrap token)用于在即将加入集群的节点和控制平面节点之间建立双向信任。
该命令使启动引导令牌(bootstrap token)所需的所有配置生效,然后创建初始令牌。
kubeadm init phase bootstrap-token [flags]
示例
# 进行所有引导令牌配置,并创建一个初始令牌,功能上与 kubeadm init 生成的令牌等效。
kubeadm init phase bootstrap-token
选项
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
bootstrap-token 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--skip-token-print
跳过打印 'kubeadm init' 生成的默认引导令牌。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
kubeadm init phase kubelet-finalize
使用以下阶段在 TLS 引导后更新与 kubelet 相关的设置。
你可以使用 all
子命令来运行所有 kubelet-finalize
阶段。
TLS 引导后更新与 kubelet 相关的设置
概要
TLS 引导后更新与 kubelet 相关的设置
kubeadm init phase kubelet-finalize [flags]
示例
# 在 TLS 引导后更新与 kubelet 相关的设置
kubeadm init phase kubelet-finalize all --config
选项
-h, --help
kubelet-finalize 操作的帮助命令
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
运行 kubelet-finalize 的所有阶段
概要
运行 kubelet-finalize 的所有阶段
kubeadm init phase kubelet-finalize all [flags]
示例
# 在 TLS 引导后更新与 kubelet 相关的设置
kubeadm init phase kubelet-finalize all --config
选项
--cert-dir string 默认值: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
启用 kubelet 客户端证书轮换
概要
启用 kubelet 客户端证书轮换
kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]
选项
--cert-dir string Default: "/etc/kubernetes/pki"
保存和存储证书的路径。
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
experimental-cert-rotation 操作的帮助命令
继承于父命令的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
kubeadm init phase addon
可以使用 all
子命令安装所有可用的插件,或者有选择性地安装它们。
安装必要的插件以通过一致性测试。
概要
此命令并非设计用来单独运行。请参阅可用子命令列表。
kubeadm init phase addon [flags]
选项
-h, --help
addon 操作的帮助命令。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
安装所有插件。
概要
安装所有插件(addon)。
kubeadm init phase addon all [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组键值对(key=value),描述了各种特征。选项包括:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
all 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
--service-cidr string 默认值:"10.96.0.0/12"
为服务 VIP 使用 IP 地址的其他范围。
--service-dns-domain string 默认值:"cluster.local"
为服务使用其他域名,例如 "myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
将 CoreDNS 插件安装到 Kubernetes 集群。
概要
通过 API 服务器安装 CoreDNS 附加组件。请注意,即使 DNS 服务器已部署,在安装 CNI
之前 DNS 服务器不会被调度执行。
kubeadm init phase addon coredns [flags]
选项
--config string
kubeadm 配置文件的路径。
--dry-run
不做任何更改;只输出将要执行的操作。
--feature-gates string
一组用来描述各种特性门控的键值对(key=value)。选项是:
EtcdLearnerMode=true|false (BETA - 默认值=true)
PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)
-h, --help
coredns 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的
kubeconfig 文件。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--print-manifest
向 STDOUT 输出插件清单,而不是安装这些插件。
--service-cidr string 默认值:"10.96.0.0/12"
为服务 VIP 选择 IP 地址范围。
--service-dns-domain string 默认值:"cluster.local"
为服务使用其它域名,例如:"myorg.internal"。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
将 kube-proxy 插件安装到 Kubernetes 集群
概要
通过 API 服务器安装 kube-proxy 附加组件。
kubeadm init phase addon kube-proxy [flags]
选项
--apiserver-advertise-address string
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
--apiserver-bind-port int32 默认值: 6443
API 服务器绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane-endpoint string
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kube-proxy 操作的帮助命令。
--image-repository string 默认值:"registry.k8s.io"
选择用于拉取控制平面镜像的容器仓库。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
--kubernetes-version string 默认值:"stable-1"
为控制平面选择特定的 Kubernetes 版本。
--pod-network-cidr string
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
--print-manifest
向 STDOUT 打印插件清单,而非安装这些插件。
继承于父命令的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
有关 v1beta4
配置中每个字段的更多详细信息,可以访问
API 。
接下来
10.1.12 - kubeadm join phase
kubeadm join phase
使你能够调用 join
过程的基本原子步骤。
因此,如果希望执行自定义操作,可以让 kubeadm 做一些工作,然后由用户来补足剩余操作。
kubeadm join phase
与
kubeadm join 工作流程 一致,
后台都使用相同的代码。
kubeadm join phase
使用此命令来调用 join
工作流程的某个阶段。
概要
使用此命令来调用 join
工作流程的某个阶段。
选项
-h, --help
phase 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
kubeadm join phase preflight
使用此命令可以在即将加入集群的节点上执行启动前检查。
运行 join 命令前检查。
概要
运行 kubeadm join 命令添加节点前检查。
kubeadm join phase preflight [api-server-endpoint] [flags]
示例
# 使用配置文件运行 kubeadm join 命令添加节点前检查。
kubeadm join phase preflight --config kubeadm-config.yaml
选项
--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--certificate-key string
使用此密钥可以解密由 `init` 操作上传的证书 Secret。
证书密钥为十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash strings
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors stringSlice
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
kubeadm join phase control-plane-prepare
使用此阶段,你可以准备一个作为控制平面的节点。
准备为控制平面服务的机器。
概要
准备为控制平面服务的机器。
kubeadm join phase control-plane-prepare [flags]
示例
# 准备为控制平面服务的机器
kubeadm join phase control-plane-prepare all
选项
-h, --help
control-plane-prepare 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
准备为控制平面服务的机器。
概要
准备为控制平面服务的机器。
kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
如果该节点托管一个新的控制平面实例,则为 API 服务器要绑定的端口。
--certificate-key string
使用此密钥解密由 init 上传的证书 Secret。
证书密钥是十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash strings
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--node-name string
指定节点名称。
--patches string
包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一。
“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
[实验] 从 kubeadm-certs Secret 下载控制平面节点之间共享的证书。
概要
[实验] 从 kubeadm-certs Secret 下载控制平面节点之间共享的证书。
kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [flags]
选项
--certificate-key string
使用此密钥可以解密由 init 上传的证书 Secret。
证书密钥为一个十六进制编码的字符串,是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
download-certs 操作的帮助命令。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
为新的控制平面组件生成证书。
概要
为新的控制平面组件生成证书。
kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash strings
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
certs 操作的帮助命令。
--node-name string
指定节点名称。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
为新的控制平面组件生成 kubeconfig。
概要
为新的控制平面组件生成 kubeconfig。
kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags]
选项
--certificate-key string
使用此密钥可以解密由 init 上传的证书 Secret。
证书密钥为一个十六进制编码的字符串,它是大小为 32 字节的 AES 密钥。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubeconfig 操作的帮助命令。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
为新的控制平面组件生成清单。
概要
为新的控制平面组件生成清单(manifest)。
kubeadm join phase control-plane-prepare control-plane [flags]
选项
--apiserver-advertise-address string
对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--apiserver-bind-port int32 默认值:6443
针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
control-plane 操作的帮助命令。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如 "kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、
"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
并且它们与 kubectl 支持的补丁格式相同。
默认的 "patchtype" 是 "strategic"。
"extension" 必须是 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
从父命令中继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
kubeadm join phase kubelet-start
使用此阶段,你可以配置 kubelet 设置、证书和(重新)启动 kubelet。
配置 kubelet、证书并(重新)启动 kubelet。
概要
生成一个包含 KubeletConfiguration 的文件和一个包含特定于节点的 kubelet 配置的环境文件,然后(重新)启动 kubelet。
kubeadm join phase kubelet-start [api-server-endpoint] [flags]
选项
--config string
kubeadm 配置文件的路径。
--cri-socket string
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;
仅当安装了多个 CRI 或存在非标准的 CRI 套接字时,才使用此选项。
--discovery-file string
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
--discovery-token string
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
--discovery-token-ca-cert-hash stringSlice
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
--discovery-token-unsafe-skip-ca-verification
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
kubelet-start 操作的帮助命令。
--node-name string
指定节点名称。
--patches string
目录路径,指向的目录中包含名为 “target[suffix][+patchtype].extension” 的文件。
例如,"kube-apiserver0+merge.yaml" 或 "etcd.json" 这种简单形式。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定按字母顺序首先应用哪些补丁。
--tls-bootstrap-token string
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
--token string
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
kubeadm join phase control-plane-join
使用此阶段,你可以将节点作为控制平面实例加入。
添加作为控制平面实例的机器。
概要
添加作为控制平面实例的机器。
kubeadm join phase control-plane-join [flags]
示例
# 将机器作为控制平面实例加入
kubeadm join phase control-plane-join all
选项
-h, --help
control-plane-join 操作的帮助命令。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
添加作为控制平面实例的机器。
概要
添加作为控制平面实例的机器。
kubeadm join phase control-plane-join all [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
all 操作的帮助命令。
--node-name string
指定节点名称。
--patches string
包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一。
“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
添加一个新的本地 etcd 成员。
概要
添加新的本地 etcd 成员。
kubeadm join phase control-plane-join etcd [flags]
选项
--apiserver-advertise-address string
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
etcd 操作的帮助命令。
--node-name string
指定节点的名称。
--patches string
包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd” 、”kubeletconfiguration”之一。
“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
将节点标记为控制平面节点。
概要
将节点标记为控制平面节点。
kubeadm join phase control-plane-join mark-control-plane [flags]
选项
--config string
kubeadm 配置文件的路径。
--control-plane
在此节点上创建一个新的控制平面实例。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
mark-control-plane 操作的帮助命令。
--node-name string
指定节点的名称。
从父命令中继承的选项
--rootfs string
[实验] 到 '真实' 主机根文件系统的路径。
接下来
10.1.13 - kubeadm kubeconfig
kubeadm kubeconfig
提供用来管理 kubeconfig 文件的工具。
如果希望查看如何使用 kubeadm kubeconfig user
的示例,
请参阅为其他用户生成 kubeconfig 文件 。
kubeadm kubeconfig
kubeconfig 文件工具。
概要
kubeconfig 文件工具。
选项
-h, --help
kubeconfig 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
kubeadm kubeconfig user
此命令可用来为其他用户生成一个 kubeconfig 文件。
为其他用户输出一个 kubeconfig 文件。
概要
为其他用户输出一个 kubeconfig 文件。
kubeadm kubeconfig user [flags]
示例
# 为一个名为 foo 的其他用户输出 kubeconfig 文件
kubeadm kubeconfig user --client-name= foo
# 使用 kubeadm 配置文件 bar 为另一个名为 foo 的用户输出 kubeconfig 文件
kubeadm alpha kubeconfig user --client-name= foo --config= bar
选项
--client-name string
用户名。如果生成客户端证书,则用作其 CN。
--config string
指向 kubeadm 配置文件的路径。
-h, --help
user 操作的帮助命令。
--org strings
客户端证书的组织。如果创建客户端证书,此值将用作其 O 字段值。
--token string
应该用此令牌做为 kubeconfig 的身份验证机制,而不是客户端证书。
--validity-period duration Default: 8760h0m0s
客户证书的合法期限。所设置值为相对当前时间的偏移。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。设置此标志将导致 kubeadm 切换到所提供的路径。
10.1.14 - kubeadm reset phase
kubeadm reset phase
使你能够调用 reset
过程的基本原子步骤。
因此,如果希望执行自定义操作,你可以让 kubeadm 做一些工作,然后由用户来补足剩余操作。
kubeadm reset phase
与
kubeadm reset 工作流程 一致,
后台都使用相同的代码。
kubeadm reset phase
使用此命令来调用 reset
工作流程的某个阶段。
概要
使用此命令来调用 reset
工作流程的某个阶段。
选项
-h, --help
phase 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
kubeadm reset phase preflight
使用此阶段,你可以在要重置的节点上执行启动前检查阶段。
kubeadm reset(重置)前运行启动前检查。
概要
kubeadm reset(重置)前运行启动前检查。
kubeadm reset phase preflight [flags]
选项
--dry-run
不做任何更改;只输出将要执行的操作。
-f, --force
在不提示确认的情况下重置节点。
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
kubeadm reset phase remove-etcd-member
使用此阶段,你可以从 etcd 集群中移除此控制平面节点的 etcd 成员。
移除本地 etcd 成员。
概要
移除控制平面节点的本地 etcd 成员。
kubeadm reset phase remove-etcd-member [flags]
选项
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
remove-etcd-member 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在默认位置中查找现有的 kubeconfig 文件。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
kubeadm reset phase cleanup-node
使用此阶段,你可以在此节点上执行清理工作。
执行 cleanup node(清理节点)操作。
概要
执行 cleanup node(清理节点)操作。
kubeadm reset phase cleanup-node [flags]
选项
--cert-dir string 默认值:"/etc/kubernetes/pki"
存储证书的目录路径。如果已指定,则需要清空此目录。
--cleanup-tmp-dir
清理 "/etc/kubernetes/tmp" 目录。
--cri-socket string
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;
仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
--dry-run
不做任何更改;只输出将要执行的操作。
-h, --help
cleanup-node 操作的帮助命令。
从父命令继承的选项
--rootfs string
到“真实”主机根文件系统的路径。这将导致 kubeadm 切换到所提供的路径。
接下来
10.1.15 - kubeadm upgrade phase
在 Kubernetes v1.15.0 版本中,kubeadm 引入了对 kubeadm upgrade node
阶段的初步支持。
其他 kubeadm upgrade
子命令如 apply
等阶段将在未来发行版中添加。
kubeadm upgrade node 阶段
使用此阶段,你可以选择执行辅助控制平面或工作节点升级的单独步骤。
请注意,kubeadm upgrade apply
命令仍然必须在主控制平面节点上调用。
使用此命令调用 node 工作流的某个阶段。
概要
使用此命令调用 node 工作流的某个阶段。
选项
-h, --help
phase 操作的帮助命令。
从父命令继承的选项
--rootfs string
[实验] 指向 '真实' 宿主机根文件系统的路径。
执行升级节点的预检。
概要
执行 kubeadm 升级节点的预检。
kubeadm upgrade node phase preflight [flags]
选项
-h, --help
preflight 操作的帮助命令。
--ignore-preflight-errors strings
错误将显示为警告的检查清单。示例:'IsPrivilegedUser,Swap'。值为 'all' 表示忽略所有检查的错误。
继承于父命令的选项
--rootfs string
[实验] 指向 “真实” 主机根文件系统的路径。
升级部署在此节点上的控制平面实例,如果有的话。
概要
升级部署在此节点上的控制平面实例,如果有的话。
kubeadm upgrade node phase control-plane [flags]
选项
--certificate-renewal
续订在升级期间变更的组件所使用的证书。
--dry-run
不改变任何状态,只输出将要执行的动作。
--etcd-upgrade 默认值: true
执行 etcd 的升级。
-h, --help
control-plane 操作的帮助命令。
--kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
--patches string
包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd"、"kubeletconfiguration" 之一。
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。"extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 指向 “真实” 主机根文件系统的路径。
升级此节点的 kubelet 配置。
概要
从集群中 ConfigMap kubelet-config 下载 kubelet 配置。
kubeadm upgrade node phase kubelet-config [flags]
选项
--dry-run
不改变任何状态,只输出将要执行的操作。
-h, --help
kubelet-config 操作的帮助命令。
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
--patches string
目录路径,指向的目录中包含名为 “target[suffix][+patchtype].extension” 的文件。
例如,"kube-apiserver0+merge.yaml" 或 "etcd.json" 这种简单形式。
"target" 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd”、“kubeletconfiguration” 之一,
"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
"suffix" 是一个可选字符串,可用于确定按字母顺序首先应用哪些补丁。
从父命令继承的选项
--rootfs string
[实验] 到'真实'主机根文件系统的路径。
接下来
10.1.16 - 实现细节
特性状态:
Kubernetes v1.10 [stable]
kubeadm init
和 kubeadm join
结合在一起为从头开始创建最基本的 Kubernetes
集群提供了良好的用户体验,这与最佳实践一致。
但是,kubeadm 如何 做到这一点可能并不明显。
本文档提供了更多幕后的详细信息,旨在分享有关 Kubernetes 集群最佳实践的知识。
核心设计原则
kubeadm init
和 kubeadm join
设置的集群该是:
安全的 :它应采用最新的最佳实践,例如:
实施 RBAC 访问控制
使用节点鉴权机制(Node Authorizer)
在控制平面组件之间使用安全通信
在 API 服务器和 kubelet 之间使用安全通信
锁定 kubelet API
锁定对系统组件(例如 kube-proxy 和 CoreDNS)的 API 的访问
锁定启动引导令牌(Bootstrap Token)可以访问的内容
用户友好 :用户只需要运行几个命令即可:
kubeadm init
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f <所选网络.yaml>
kubeadm join --token <令牌> <端点>:<端口>
可扩展的 :
不 应偏向任何特定的网络提供商,不涉及配置集群网络
应该可以使用配置文件来自定义各种参数
常量以及众所周知的值和路径
为了降低复杂性并简化基于 kubeadm 的高级工具的开发,对于众所周知的路径和文件名,
kubeadm 使用了一组有限的常量值。
Kubernetes 目录 /etc/kubernetes
在应用程序中是一个常量,
因为在大多数情况下它显然是给定的路径,并且是最直观的位置;其他路径常量和文件名有:
/etc/kubernetes/
作为带有控制平面组件身份标识的 kubeconfig 文件的路径。kubeconfig 文件的名称为:
kubelet.conf
(在 TLS 引导时名称为 bootstrap-kubelet.conf
)
controller-manager.conf
scheduler.conf
admin.conf
用于集群管理员和 kubeadm 本身
super-admin.conf
用于可以绕过 RBAC 的集群超级管理员
证书和密钥文件的名称:
ca.crt
、ca.key
用于 Kubernetes 证书颁发机构
apiserver.crt
、apiserver.key
用于 API 服务器证书
apiserver-kubelet-client.crt
、apiserver-kubelet-client.key
用于 API 服务器安全地连接到 kubelet 的客户端证书
sa.pub
、sa.key
用于控制器管理器签署 ServiceAccount 时使用的密钥
front-proxy-ca.crt
、front-proxy-ca.key
用于前端代理证书颁发机构
front-proxy-client.crt
、front-proxy-client.key
用于前端代理客户端
kubeadm init 工作流程内部设计
kubeadm init
内部工作流程
包含一系列要执行的原子性工作任务,如 kubeadm init
中所述。
kubeadm init phase
命令允许用户分别调用每个任务,并最终提供可重用且可组合的 API 或工具箱,
其他 Kubernetes 引导工具、任何 IT 自动化工具和高级用户都可以使用它来创建自定义集群。
预检
kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并避免常见的集群启动问题。
用户可以使用 --ignore-preflight-errors
选项跳过特定的预检或全部检查。
[警告] 如果要使用的 Kubernetes 版本(由 --kubernetes-version
标志指定)比 kubeadm CLI
版本至少高一个小版本。
Kubernetes 系统要求:
如果在 Linux 上运行:
[错误] 如果内核早于最低要求的版本
[错误] 如果未设置所需的 Cgroups 子系统
[错误] 如果 CRI 端点未应答
[错误] 如果用户不是 root 用户
[错误] 如果机器主机名不是有效的 DNS 子域
[警告] 如果通过网络查找无法访问主机名
[错误] 如果 kubelet 版本低于 kubeadm 支持的最低 kubelet 版本(当前小版本 -1)
[错误] 如果 kubelet 版本比所需的控制平面板版本至少高一个小版本(不支持的版本偏差)
[警告] 如果 kubelet 服务不存在或已被禁用
[警告] 如果 firewalld 处于活动状态
[错误] 如果 API 服务器绑定的端口或 10250/10251/10252 端口已被占用
[错误] 如果 /etc/kubernetes/manifest
文件夹已经存在并且不为空
[错误] 如果启用了交换分区
[错误] 如果命令路径中没有 conntrack
、ip
、iptables
、mount
、nsenter
命令
[警告] 如果命令路径中没有 ebtables
、ethtool
、socat
、tc
、touch
、crictl
命令
[警告] 如果 API 服务器、控制器管理器、调度程序的其他参数标志包含一些无效选项
[警告] 如果与 https://API.AdvertiseAddress:API.BindPort 的连接通过代理
[警告] 如果服务子网的连接通过代理(仅检查第一个地址)
[警告] 如果 Pod 子网的连接通过代理(仅检查第一个地址)
如果提供了外部 etcd:
[错误] 如果 etcd 版本低于最低要求版本
[错误] 如果指定了 etcd 证书或密钥,但无法找到
如果未提供外部 etcd(因此将安装本地 etcd):
[错误] 如果端口 2379 已被占用
[错误] 如果 Etcd.DataDir 文件夹已经存在并且不为空
如果授权模式为 ABAC:
[错误] 如果 abac_policy.json 不存在
如果授权方式为 Webhook
[错误] 如果 webhook_authz.conf 不存在
生成必要的证书
kubeadm 生成用于不同目的的证书和私钥对:
Kubernetes 集群的自签名证书颁发机构会保存到 ca.crt
文件和 ca.key
私钥文件中
用于 API 服务器安全连接到 kubelet 的客户端证书,使用 ca.crt
作为 CA 生成,
并保存到 apiserver-kubelet-client.crt
,私钥保存到 apiserver-kubelet-client.key
文件中。该证书应该在 system:masters
组织中。
用于签名 ServiceAccount 令牌的私钥保存到 sa.key
文件中,公钥保存到 sa.pub
文件中。
证书默认情况下存储在 /etc/kubernetes/pki
中,但是该目录可以使用 --cert-dir
标志进行配置。
请注意:
如果证书和私钥对都存在,并且其内容经过评估符合上述规范,将使用现有文件,
并且跳过给定证书的生成阶段。
这意味着用户可以将现有的 CA 复制到 /etc/kubernetes/pki/ca.{crt,key}
,
kubeadm 将使用这些文件对其余证书进行签名。
请参阅使用自定义证书 。
仅对 CA 来说,如果所有其他证书和 kubeconfig 文件都已就位,则可以只提供 ca.crt
文件,
而不提供 ca.key
文件。
kubeadm 能够识别出这种情况并启用 ExternalCA,这也意味着了控制器管理器中的
csrsigner
控制器将不会启动。
如果 kubeadm 在外部 CA 模式
下运行,所有证书必须由用户提供,因为 kubeadm 无法自行生成证书。
如果在 --dry-run
模式下执行 kubeadm,证书文件将写入一个临时文件夹中。
可以使用 kubeadm init phase certs all
命令单独生成证书。
为控制平面组件生成 kubeconfig 文件
kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件:
控制器管理器的 kubeconfig 文件 —— /etc/kubernetes/controller-manager.conf
;
在此文件中嵌入了一个具有控制器管理器身份标识的客户端证书。
此客户端证书应具有 CN:system:kube-controller-manager
,
该 CN 由 RBAC 核心组件角色
默认定义的。
调度器的 kubeconfig 文件 —— /etc/kubernetes/scheduler.conf
;
此文件中嵌入了具有调度器身份标识的客户端证书。此客户端证书应具有 CN:system:kube-scheduler
,
该 CN 由 RBAC 核心组件角色
默认定义的。
此外,还会生成将 kubeadm 作为管理实体的 kubeconfig 文件并将其保存到 /etc/kubernetes/admin.conf
中。
该文件包含一个带有 Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin
的证书。kubeadm:cluster-admins
是一个由 kubeadm 管理的组,
它在 kubeadm init
期间通过使用 super-admin.conf
文件绑定到
cluster-admin
ClusterRole,不需要 RBAC。
此 admin.conf
文件必须保留在控制平面节点上,并且不得与其他用户共享。
在 kubeadm init
期间,会生成另一个 kubeconfig 文件并将其存储在 /etc/kubernetes/super-admin.conf
中。
该文件包含一个带有 Subject: O = system:masters, CN = kubernetes-super-admin
的证书。
system:masters
是一个绕过 RBAC 的超级用户组,使 super-admin.conf
在紧急情况下非常有用,因为 RBAC 配置错误导致集群被锁定。
super-admin.conf
文件可以存储在安全位置,并且不会与其他用户共享。
有关 RBAC 和内置 ClusterRoles 和组的其他信息,
请参阅面向用户的 RBAC 角色绑定 。
请注意:
ca.crt
证书内嵌在所有 kubeconfig 文件中。
如果给定的 kubeconfig 文件存在且其内容经过评估符合上述规范,则 kubeadm 将使用现有文件,
并跳过给定 kubeconfig 的生成阶段。
如果 kubeadm 以 ExternalCA 模式
运行,则所有必需的 kubeconfig 也必须由用户提供,因为 kubeadm 不能自己生成。
如果在 --dry-run
模式下执行 kubeadm,则 kubeconfig 文件将写入一个临时文件夹中。
可以使用
kubeadm init phase kubeconfig all
命令分别生成 kubeconfig 文件。
为控制平面组件生成静态 Pod 清单
kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 /etc/kubernetes/manifests
目录。
kubelet 启动后会监视这个目录以便创建 Pod。
静态 Pod 清单有一些共同的属性:
所有静态 Pod 都部署在 kube-system
名字空间
所有静态 Pod 都打上 tier:control-plane
和 component:{组件名称}
标签
所有静态 Pod 均使用 system-node-critical
优先级
所有静态 Pod 都设置了 hostNetwork:true
,使得控制平面在配置网络之前启动;结果导致:
控制器管理器和调度器用来调用 API 服务器的地址为 127.0.0.1
如果在本地设置 etcd 服务器,etcd-servers
地址将被设置为 127.0.0.1:2379
同时为控制器管理器和调度器启用了领导者选举
控制器管理器和调度器将引用 kubeconfig 文件及其各自的唯一标识
如将自定义参数传递给控制平面组件
中所述,所有静态 Pod 都会获得用户指定的额外标志
所有静态 Pod 都会获得用户指定的额外卷(主机路径)
请注意:
所有镜像默认从 registry.k8s.io 拉取。关于自定义镜像仓库,
请参阅使用自定义镜像 。
如果在 --dry-run
模式下执行 kubeadm,则静态 Pod 文件写入一个临时文件夹中。
可以使用 kubeadm init phase control-plane all
命令分别生成主控组件的静态 Pod 清单。
API 服务器
API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响:
要绑定的 apiserver-advertise-address
和 apiserver-bind-port
;
如果未提供,则这些值默认为机器上默认网络接口的 IP 地址和 6443 端口。
service-cluster-ip-range
给 Service 使用
如果指定了外部 etcd 服务器,则应指定 etcd-servers
地址和相关的 TLS 设置
(etcd-cafile
、etcd-certfile
、etcd-keyfile
);
如果未提供外部 etcd 服务器,则将使用本地 etcd(通过主机网络)
如果指定了云提供商,则配置相应的 --cloud-provider
参数,如果该路径存在,则配置 --cloud-config
(这是实验性的,是 Alpha 版本,将在以后的版本中删除)
无条件设置的其他 API 服务器标志有:
--insecure-port=0
禁止到 API 服务器不安全的连接
--enable-bootstrap-token-auth=true
启用 BootstrapTokenAuthenticator
身份验证模块。
更多细节请参见 TLS 引导 。
--allow-privileged
设为 true
(诸如 kube-proxy 这些组件有此要求)
--requestheader-client-ca-file
设为 front-proxy-ca.crt
--kubelet-preferred-address-types
设为 InternalIP,ExternalIP,Hostname;
这使得在节点的主机名无法解析的环境中,kubectl log
和 API 服务器与 kubelet
的其他通信可以工作
使用在前面步骤中生成的证书的标志:
--client-ca-file
设为 ca.crt
--tls-cert-file
设为 apiserver.crt
--tls-private-key-file
设为 apiserver.key
--kubelet-client-certificate
设为 apiserver-kubelet-client.crt
--kubelet-client-key
设为 apiserver-kubelet-client.key
--service-account-key-file
设为 sa.pub
--requestheader-client-ca-file
设为 front-proxy-ca.crt
--proxy-client-cert-file
设为 front-proxy-client.crt
--proxy-client-key-file
设为 front-proxy-client.key
控制器管理器
控制器管理器的静态 Pod 清单受用户提供的以下参数的影响:
如果指定了云提供商,则指定相应的 --cloud-provider
,如果存在这样的配置文件,
则指定 --cloud-config
路径(此为试验性功能,是 Alpha 版本,将在以后的版本中删除)。
其他无条件设置的标志包括:
使用先前步骤中生成的证书的标志:
--root-ca-file
设为 ca.crt
如果禁用了 External CA 模式,则 --cluster-signing-cert-file
设为 ca.crt
,否则设为 ""
如果禁用了 External CA 模式,则 --cluster-signing-key-file
设为 ca.key
,否则设为 ""
--service-account-private-key-file
设为 sa.key
调度器
调度器的静态 Pod 清单不受用户提供的参数的影响。
为本地 etcd 生成静态 Pod 清单
如果你指定的是外部 etcd,则应跳过此步骤,否则 kubeadm 会生成静态 Pod 清单文件,
以创建在 Pod 中运行的、具有以下属性的本地 etcd 实例:
在 localhost:2379
上监听并使用 HostNetwork=true
将 hostPath
从 dataDir
挂载到主机的文件系统
用户指定的任何其他标志
请注意:
etcd 容器镜像默认从 registry.gcr.io
拉取。有关自定义镜像仓库,
请参阅使用自定义镜像 。
如果你以 --dry-run
模式执行 kubeadm 命令,etcd 的静态 Pod 清单将被写入一个临时文件夹。
你可以使用 'kubeadm init phase etcd local'
命令为本地 etcd 直接调用静态 Pod 清单生成逻辑。
等待控制平面启动
kubeadm 等待(最多 4m0s),直到 localhost:6443/healthz
(kube-apiserver 存活)返回 ok
。
但是为了检测死锁条件,如果 localhost:10255/healthz
(kubelet 存活)或
localhost:10255/healthz/syncloop
(kubelet 就绪)未能在 40s 和 60s 内未返回 ok
,
则 kubeadm 会快速失败。
kubeadm 依靠 kubelet 拉取控制平面镜像并将其作为静态 Pod 正确运行。
控制平面启动后,kubeadm 将完成以下段落中描述的任务。
将 kubeadm ClusterConfiguration 保存在 ConfigMap 中以供以后参考
kubeadm 将传递给 kubeadm init
的配置保存在 kube-system
名字空间下名为
kubeadm-config
的 ConfigMap 中。
这将确保将来执行的 kubeadm 操作(例如 kubeadm upgrade
)将能够确定实际/当前集群状态,
并根据该数据做出新的决策。
请注意:
在保存 ClusterConfiguration 之前,从配置中删除令牌等敏感信息。
可以使用 kubeadm init phase upload-config
命令单独上传主控节点配置。
将节点标记为控制平面
一旦控制平面可用,kubeadm 将执行以下操作:
给节点打上 node-role.kubernetes.io/control-plane=""
标签,标记其为控制平面
给节点打上 node-role.kubernetes.io/control-plane:NoSchedule
污点
请注意,标记控制面的这个阶段可以单独通过
kubeadm init phase mark-control-plane
命令来实现。
kubeadm 使用引导令牌认证
将新节点连接到现有集群;更多的详细信息,
请参见设计提案 。
kubeadm init
确保为该过程正确配置了所有内容,这包括以下步骤以及设置 API
服务器和控制器标志,如前几段所述。
创建引导令牌
kubeadm init
创建第一个引导令牌,该令牌是自动生成的或由用户提供的 --token
标志的值;如引导令牌规范文档中所述,令牌应保存在 kube-system
名字空间下名为
bootstrap-token-<令牌 ID>
的 Secret 中。
请注意:
由 kubeadm init
创建的默认令牌将用于在 TLS 引导过程中验证临时用户;
这些用户会成为 system:bootstrappers:kubeadm:default-node-token
组的成员。
令牌的有效期有限,默认为 24 小时(间隔可以通过 -token-ttl
标志进行更改)。
可以使用 kubeadm token
命令创建其他令牌,这些令牌还提供其他有用的令牌管理功能。
允许加入的节点调用 CSR API
kubeadm 确保 system:bootstrappers:kubeadm:default-node-token
组中的用户能够访问证书签名 API。
这是通过在上述组与默认 RBAC 角色 system:node-bootstrapper
之间创建名为
kubeadm:kubelet-bootstrap
的 ClusterRoleBinding 来实现的。
为新的引导令牌设置自动批准
kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。
这是通过在 system:bootstrappers:kubeadm:default-node-token
用户组和
system:certificates.k8s.io:certificatesigningrequests:nodeclient
默认角色之间
创建名为 kubeadm:node-autoapprove-bootstrap
的 ClusterRoleBinding 来实现的。
还应创建 system:certificates.k8s.io:certificatesigningrequests:nodeclient
角色,
授予对 /apis/certificates.k8s.io/certificatesigningrequests/nodeclient
执行 POST 的权限。
通过自动批准设置节点证书轮换
kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的新证书的 CSR 请求。
这是通过在 system:nodes
组和
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
默认角色之间创建名为 kubeadm:node-autoapprove-certificate-rotation
的
ClusterRoleBinding 来实现的。
创建公共 cluster-info ConfigMap
本步骤在 kube-public
名字空间中创建名为 cluster-info
的 ConfigMap。
另外,它创建一个 Role 和一个 RoleBinding,为未经身份验证的用户授予对 ConfigMap
的访问权限(即 RBAC 组 system:unauthenticated
中的用户)。
说明:
对 cluster-info
ConfigMap 的访问不受 速率限制。
如果你把 API 服务器暴露到外网,这可能是一个问题,也可能不是;
这里最坏的情况是 DoS 攻击,攻击者使用 kube-apiserver 可处理的所有当前请求来为
cluster-info
ConfigMap 提供服务。
安装插件
kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。
代理
在 kube-system
名字空间中创建一个用于 kube-proxy
的 ServiceAccount;
然后以 DaemonSet 的方式部署 kube-proxy:
主控节点凭据(ca.crt
和 token
)来自 ServiceAccount
API 服务器节点的位置(URL)来自 ConfigMap
kube-proxy
的 ServiceAccount 绑定了 system:node-proxier
ClusterRole 中的特权
DNS
CoreDNS Service 的名称为 kube-dns
。
这样做是为了防止当用户通过此处 描述的
--config
方法将集群 DNS 从 kube-dns 切换到 CoreDNS 时出现服务中断。
在 kube-system
名字空间中创建 CoreDNS 的 ServiceAccount
coredns
的 ServiceAccount 绑定了 system:coredns
ClusterRole 中的特权
在 Kubernetes 1.21 版本中,kubeadm 对 kube-dns
的支持被移除。
你可以在 kubeadm 使用 CoreDNS,即使相关的 Service 名字仍然是 kube-dns
。
kubeadm join 步骤内部设计
与 kubeadm init
类似,kubeadm join
内部工作流由一系列待执行的原子工作任务组成。
这分为发现(让该节点信任 Kubernetes 的主控节点)和 TLS 引导
(让 Kubernetes 的主控节点信任该节点)。
请参阅使用引导令牌进行身份验证
或相应的设计提案 。
预检
kubeadm
在开始执行之前执行一组预检,目的是验证先决条件,避免常见的集群启动问题。
请注意:
kubeadm join
预检基本上是 kubeadm init
预检的一个子集。
从 1.24 开始,kubeadm 使用 crictl 与所有已知的 CRI 端点进行通信。
从 1.9 开始,kubeadm 支持加入在 Windows 上运行的节点;在这种情况下,
将跳过 Linux 特定的控制参数。
在任何情况下,用户都可以通过 --ignore-preflight-errors
选项跳过特定的预检(或者进而跳过所有预检)。
发现 cluster-info
主要有两种发现方案。第一种是使用一个共享令牌以及 API 服务器的 IP 地址。
第二种是提供一个文件(它是标准 kubeconfig 文件的子集)。
共享令牌发现
如果带 --discovery-token
参数调用 kubeadm join
,则使用了令牌发现功能;
在这种情况下,节点基本上从 kube-public
名字空间中的 cluster-info
ConfigMap
中检索集群 CA 证书。
为了防止“中间人”攻击,采取了以下步骤:
说明:
通过设置 --discovery-token-unsafe-skip-ca-verification
标志可以跳过公钥验证;
这样做会削弱 kubeadm 安全模型,因为其他人可能冒充 Kubernetes 主控节点。
文件/HTTPS 发现
如果带 --discovery-file
参数调用 kubeadm join
,则使用文件发现功能;
该文件可以是本地文件或通过 HTTPS URL 下载;对于 HTTPS,主机安装的 CA 包用于验证连接。
通过文件发现,集群 CA 证书是文件本身提供;事实上,这个发现文件是一个 kubeconfig 文件,
只设置了 server
和 certificate-authority-data
属性,
如 kubeadm join
参考文档中所述,当与集群建立连接时,kubeadm 尝试访问 cluster-info
ConfigMap,
如果可用,就使用它。
TLS 引导
知道集群信息后,kubeadm 将写入文件 bootstrap-kubelet.conf
,从而允许 kubelet 执行
TLS 引导。
TLS 引导机制使用共享令牌对 Kubernetes API 服务器进行临时身份验证,
以便为本地创建的密钥对提交证书签名请求(CSR)。
该请求会被自动批准,并且该操作保存 ca.crt
文件和 kubelet.conf
文件,用于
kubelet 加入集群,同时删除 bootstrap-kubelet.conf
。
说明:
临时身份验证根据 kubeadm init
过程中保存的令牌进行验证(或者使用 kubeadm token
命令创建的其他令牌)
临时身份验证解析到 system:bootstrappers:kubeadm:default-node-token
组的一个用户成员,
该成员在 kubeadm init
过程中被授予对 CSR API 的访问权
自动的 CSR 审批由 csrapprover 控制器基于 kubeadm init
过程中给出的配置来管理
11 - 命令行工具 (kubectl)
Kubernetes 提供 kubectl 是使用 Kubernetes API 与 Kubernetes
集群的控制面 进行通信的命令行工具。
这个工具叫做 kubectl
。
针对配置信息,kubectl
在 $HOME/.kube
目录中查找一个名为 config
的配置文件。
你可以通过设置 KUBECONFIG
环境变量或设置
--kubeconfig
参数来指定其它 kubeconfig 文件。
本文概述了 kubectl
语法和命令操作描述,并提供了常见的示例。
有关每个命令的详细信息,包括所有受支持的参数和子命令,
请参阅 kubectl 参考文档。
有关安装说明,请参见安装 kubectl ;
如需快速指南,请参见备忘单 。
如果你更习惯使用 docker
命令行工具,
Docker 用户的 kubectl
介绍了一些 Kubernetes 的等价命令。
语法
使用以下语法从终端窗口运行 kubectl
命令:
kubectl [ command] [ TYPE] [ NAME] [ flags]
其中 command
、TYPE
、NAME
和 flags
分别是:
要按类型和名称指定资源:
要对所有类型相同的资源进行分组,请执行以下操作:TYPE1 name1 name2 name<#>
。
例子:kubectl get pod example-pod1 example-pod2
分别指定多个资源类型:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
。
例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
用一个或多个文件指定资源:-f file1 -f file2 -f file<#>
使用 YAML 而不是 JSON ,
因为 YAML 对用户更友好, 特别是对于配置文件。
例子:kubectl get -f ./pod.yaml
flags
: 指定可选的参数。例如,可以使用 -s
或 --server
参数指定
Kubernetes API 服务器的地址和端口。
注意:
从命令行指定的参数会覆盖默认值和任何相应的环境变量。
如果你需要帮助,在终端窗口中运行 kubectl help
。
集群内身份验证和命名空间覆盖
默认情况下,kubectl
命令首先确定它是否在 Pod 中运行,从而被视为在集群中运行。
它首先检查 KUBERNETES_SERVICE_HOST
和 KUBERNETES_SERVICE_PORT
环境变量以及
/var/run/secrets/kubernetes.io/serviceaccount/token
中是否存在服务帐户令牌文件。
如果三个条件都被满足,则假定在集群内进行身份验证。
为保持向后兼容性,如果在集群内身份验证期间设置了 POD_NAMESPACE
环境变量,它将覆盖服务帐户令牌中的默认命名空间。
任何依赖默认命名空间的清单或工具都会受到影响。
POD_NAMESPACE
环境变量
如果设置了 POD_NAMESPACE
环境变量,对命名空间资源的 CLI 操作对象将使用该变量值作为默认值。
例如,如果该变量设置为 seattle
,kubectl get pods
将返回 seattle
命名空间中的 Pod。
这是因为 Pod 是一个命名空间资源,且命令中没有提供命名空间。
直接使用 --namespace <value>
会覆盖此行为。
kubectl 如何处理 ServiceAccount 令牌
假设:
有 Kubernetes 服务帐户令牌文件挂载在
/var/run/secrets/kubernetes.io/serviceaccount/token
上,并且
设置了 KUBERNETES_SERVICE_HOST
环境变量,并且
设置了 KUBERNETES_SERVICE_PORT
环境变量,并且
你没有在 kubectl 命令行上明确指定命名空间。
然后 kubectl 假定它正在你的集群中运行。
kubectl 工具查找该 ServiceAccount 的命名空间
(该命名空间与 Pod 的命名空间相同)并针对该命名空间进行操作。
这与集群外运行的情况不同;
当 kubectl 在集群外运行并且你没有指定命名空间时,
kubectl 命令会针对你在客户端配置中为当前上下文设置的命名空间进行操作。
要为你的 kubectl 更改默认的命名空间,你可以使用以下命令:
kubectl config set-context --current --namespace= <namespace-name>
操作
下表包含所有 kubectl 操作的简短描述和普通语法:
操作
语法
描述
alpha
kubectl alpha SUBCOMMAND [flags]
列出与 Alpha 级别特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。
annotate
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
添加或更新一个或多个资源的注解。
api-resources
kubectl api-resources [flags]
列出可用的 API 资源。
api-versions
kubectl api-versions [flags]
列出可用的 API 版本。
apply
kubectl apply -f FILENAME [flags]
从文件或 stdin 对资源应用配置更改。
attach
kubectl attach POD -c CONTAINER [-i] [-t] [flags]
挂接到正在运行的容器,查看输出流或与容器(stdin)交互。
auth
kubectl auth [flags] [options]
检查授权。
autoscale
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
自动扩缩由副本控制器管理的一组 pod。
certificate
kubectl certificate SUBCOMMAND [options]
修改证书资源。
cluster-info
kubectl cluster-info [flags]
显示有关集群中主服务器和服务的端口信息。
completion
kubectl completion SHELL [options]
为指定的 Shell(Bash 或 Zsh)输出 Shell 补齐代码。
config
kubectl config SUBCOMMAND [flags]
修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。
convert
kubectl convert -f FILENAME [options]
在不同的 API 版本之间转换配置文件。配置文件可以是 YAML 或 JSON 格式。注意 - 需要安装 kubectl-convert
插件。
cordon
kubectl cordon NODE [options]
将节点标记为不可调度。
cp
kubectl cp <file-spec-src> <file-spec-dest> [options]
从容器复制文件、目录或将文件、目录复制到容器。
create
kubectl create -f FILENAME [flags]
从文件或 stdin 创建一个或多个资源。
delete
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源本身,删除资源。
describe
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
显示一个或多个资源的详细状态。
diff
kubectl diff -f FILENAME [flags]
在当前起作用的配置和文件或标准输之间作对比(BETA )
drain
kubectl drain NODE [options]
腾空节点以准备维护。
edit
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
events
kubectl events
列举事件。
exec
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
对 Pod 中的容器执行命令。
explain
kubectl explain TYPE [--recursive=false] [flags]
获取多种资源的文档。例如 Pod、Node、Service 等。
expose
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]
将副本控制器、Service 或 Pod 作为新的 Kubernetes 服务暴露。
get
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
列出一个或多个资源。
kustomize
kubectl kustomize [flags] [options]`
列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。
label
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
添加或更新一个或多个资源的标签。
logs
kubectl logs POD [-c CONTAINER] [--follow] [flags]
打印 Pod 中容器的日志。
options
kubectl options
全局命令行选项列表,这些选项适用于所有命令。
patch
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
使用策略合并流程更新资源的一个或多个字段。
plugin
kubectl plugin [flags] [options]
提供用于与插件交互的实用程序。
port-forward
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
将一个或多个本地端口转发到一个 Pod。
proxy
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
运行访问 Kubernetes API 服务器的代理。
replace
kubectl replace -f FILENAME
基于文件或标准输入替换资源。
rollout
kubectl rollout SUBCOMMAND [options]
管理资源的上线。有效的资源类型包括:Deployment、 DaemonSet 和 StatefulSet。
run
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags]
在集群上运行指定的镜像。
scale
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
更新指定副本控制器的大小。
set
kubectl set SUBCOMMAND [options]
配置应用资源。
taint
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]
更新一个或多个节点上的污点。
top
kubectl top (POD | NODE) [flags] [options]
显示 Pod 或节点的资源(CPU/内存/存储)使用情况。
uncordon
kubectl uncordon NODE [options]
将节点标记为可调度。
version
kubectl version [--client] [flags]
显示运行在客户端和服务器上的 Kubernetes 版本。
wait
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options]
实验特性:等待一种或多种资源的特定状况。
了解更多有关命令操作的信息,
请参阅 kubectl 参考文档。
资源类型
下表列出所有受支持的资源类型及其缩写别名。
(以下输出可以通过 kubectl api-resources
获取,内容以 Kubernetes 1.25.0 版本为准。)
资源名
缩写名
API 版本
按命名空间
资源类型
bindings
v1
true
Binding
componentstatuses
cs
v1
false
ComponentStatus
configmaps
cm
v1
true
ConfigMap
endpoints
ep
v1
true
Endpoints
events
ev
v1
true
Event
limitranges
limits
v1
true
LimitRange
namespaces
ns
v1
false
Namespace
nodes
no
v1
false
Node
persistentvolumeclaims
pvc
v1
true
PersistentVolumeClaim
persistentvolumes
pv
v1
false
PersistentVolume
pods
po
v1
true
Pod
podtemplates
v1
true
PodTemplate
replicationcontrollers
rc
v1
true
ReplicationController
resourcequotas
quota
v1
true
ResourceQuota
secrets
v1
true
Secret
serviceaccounts
sa
v1
true
ServiceAccount
services
svc
v1
true
Service
mutatingwebhookconfigurations
admissionregistration.k8s.io/v1
false
MutatingWebhookConfiguration
validatingwebhookconfigurations
admissionregistration.k8s.io/v1
false
ValidatingWebhookConfiguration
customresourcedefinitions
crd,crds
apiextensions.k8s.io/v1
false
CustomResourceDefinition
apiservices
apiregistration.k8s.io/v1
false
APIService
controllerrevisions
apps/v1
true
ControllerRevision
daemonsets
ds
apps/v1
true
DaemonSet
deployments
deploy
apps/v1
true
Deployment
replicasets
rs
apps/v1
true
ReplicaSet
statefulsets
sts
apps/v1
true
StatefulSet
tokenreviews
authentication.k8s.io/v1
false
TokenReview
localsubjectaccessreviews
authorization.k8s.io/v1
true
LocalSubjectAccessReview
selfsubjectaccessreviews
authorization.k8s.io/v1
false
SelfSubjectAccessReview
selfsubjectrulesreviews
authorization.k8s.io/v1
false
SelfSubjectRulesReview
subjectaccessreviews
authorization.k8s.io/v1
false
SubjectAccessReview
horizontalpodautoscalers
hpa
autoscaling/v2
true
HorizontalPodAutoscaler
cronjobs
cj
batch/v1
true
CronJob
jobs
batch/v1
true
Job
certificatesigningrequests
csr
certificates.k8s.io/v1
false
CertificateSigningRequest
leases
coordination.k8s.io/v1
true
Lease
endpointslices
discovery.k8s.io/v1
true
EndpointSlice
events
ev
events.k8s.io/v1
true
Event
flowschemas
flowcontrol.apiserver.k8s.io/v1beta2
false
FlowSchema
prioritylevelconfigurations
flowcontrol.apiserver.k8s.io/v1beta2
false
PriorityLevelConfiguration
ingressclasses
networking.k8s.io/v1
false
IngressClass
ingresses
ing
networking.k8s.io/v1
true
Ingress
networkpolicies
netpol
networking.k8s.io/v1
true
NetworkPolicy
runtimeclasses
node.k8s.io/v1
false
RuntimeClass
poddisruptionbudgets
pdb
policy/v1
true
PodDisruptionBudget
podsecuritypolicies
psp
policy/v1beta1
false
PodSecurityPolicy
clusterrolebindings
rbac.authorization.k8s.io/v1
false
ClusterRoleBinding
clusterroles
rbac.authorization.k8s.io/v1
false
ClusterRole
rolebindings
rbac.authorization.k8s.io/v1
true
RoleBinding
roles
rbac.authorization.k8s.io/v1
true
Role
priorityclasses
pc
scheduling.k8s.io/v1
false
PriorityClass
csidrivers
storage.k8s.io/v1
false
CSIDriver
csinodes
storage.k8s.io/v1
false
CSINode
csistoragecapacities
storage.k8s.io/v1
true
CSIStorageCapacity
storageclasses
sc
storage.k8s.io/v1
false
StorageClass
volumeattachments
storage.k8s.io/v1
false
VolumeAttachment
输出选项
有关如何格式化或排序某些命令的输出的信息,请参阅以下章节。有关哪些命令支持不同输出选项的详细信息,
请参阅 kubectl 参考文档。
所有 kubectl
命令的默认输出格式都是人类可读的纯文本格式。要以特定格式在终端窗口输出详细信息,
可以将 -o
或 --output
参数添加到受支持的 kubectl
命令中。
语法
kubectl [ command] [ TYPE] [ NAME] -o <output_format>
取决于具体的 kubectl
操作,支持的输出格式如下:
输出格式
描述
-o custom-columns=<spec>
使用逗号分隔的自定义列 列表打印表。
-o custom-columns-file=<filename>
使用 <filename>
文件中的自定义列 模板打印表。
-o json
输出 JSON 格式的 API 对象
-o jsonpath=<template>
打印 jsonpath 表达式定义的字段
-o jsonpath-file=<filename>
打印 <filename>
文件中 jsonpath 表达式定义的字段。
-o name
仅打印资源名称而不打印任何其他内容。
-o wide
以纯文本格式输出,包含所有附加信息。对于 Pod 包含节点名。
-o yaml
输出 YAML 格式的 API 对象。
示例
在此示例中,以下命令将单个 Pod 的详细信息输出为 YAML 格式的对象:
kubectl get pod web-pod-13je7 -o yaml
请记住:有关每个命令支持哪种输出格式的详细信息,
请参阅 kubectl 参考文档。
自定义列
要定义自定义列并仅将所需的详细信息输出到表中,可以使用 custom-columns
选项。
你可以选择内联定义自定义列或使用模板文件:-o custom-columns=<spec>
或
-o custom-columns-file=<filename>
。
示例
内联:
kubectl get pods <pod-name> -o custom-columns= NAME:.metadata.name,RSRC:.metadata.resourceVersion
模板文件:
kubectl get pods <pod-name> -o custom-columns-file= template.txt
其中,template.txt
文件包含:
NAME RSRC
metadata.name metadata.resourceVersion
运行这两个命令之一的结果类似于:
NAME RSRC
submit-queue 610995
Server-side 列
kubectl
支持从服务器接收关于对象的特定列信息。
这意味着对于任何给定的资源,服务器将返回与该资源相关的列和行,以便客户端打印。
通过让服务器封装打印的细节,这允许在针对同一集群使用的客户端之间提供一致的人类可读输出。
此功能默认启用。要禁用它,请将该 --server-print=false
参数添加到 kubectl get
命令中。
例子
要打印有关 Pod 状态的信息,请使用如下命令:
kubectl get pods <pod-name> --server-print= false
输出类似于:
NAME AGE
pod-name 1m
排序列表对象
要将对象排序后输出到终端窗口,可以将 --sort-by
参数添加到支持的 kubectl
命令。
通过使用 --sort-by
参数指定任何数字或字符串字段来对对象进行排序。
要指定字段,请使用 jsonpath 表达式。
语法
kubectl [ command] [ TYPE] [ NAME] --sort-by= <jsonpath_exp>
示例
要打印按名称排序的 Pod 列表,请运行:
kubectl get pods --sort-by= .metadata.name
示例:常用操作
使用以下示例集来帮助你熟悉运行常用 kubectl 操作:
kubectl apply
- 以文件或标准输入为准应用或更新资源。
# 使用 example-service.yaml 中的定义创建 Service。
kubectl apply -f example-service.yaml
# 使用 example-controller.yaml 中的定义创建 replication controller。
kubectl apply -f example-controller.yaml
# 使用 <directory> 路径下的任意 .yaml、.yml 或 .json 文件 创建对象。
kubectl apply -f <directory>
kubectl get
- 列出一个或多个资源。
# 以纯文本输出格式列出所有 Pod。
kubectl get pods
# 以纯文本输出格式列出所有 Pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:你可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>
# 以纯文本输出格式列出所有副本控制器和 Service。
kubectl get rc,services
# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 Pod
kubectl get pods --field-selector= spec.nodeName= server01
kubectl describe
- 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。
# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe nodes <node-name>
# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe pods/<pod-name>
# 显示由名为 <rc-name> 的副本控制器管理的所有 Pod 的详细信息。
# 记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
kubectl describe pods <rc-name>
# 描述所有的 Pod
kubectl describe pods
说明:
kubectl get
命令通常用于检索同一资源类别的一个或多个资源。
它具有丰富的参数,允许你使用 -o
或 --output
参数自定义输出格式。
你可以指定 -w
或 --watch
参数以开始监测特定对象的更新。
kubectl describe
命令更侧重于描述指定资源的许多相关方面。它可以调用对 API 服务器
的多个 API 调用来为用户构建视图。
例如,该 kubectl describe node
命令不仅检索有关节点的信息,还检索在其上运行的 Pod 的摘要,为节点生成的事件等。
kubectl delete
- 基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源来删除资源。
# 使用 pod.yaml 文件中指定的类型和名称删除 Pod。
kubectl delete -f pod.yaml
# 删除所有带有 '<label-key>=<label-value>' 标签的 Pod 和 Service。
kubectl delete pods,services -l <label-key>= <label-value>
# 删除所有 Pod,包括未初始化的 Pod。
kubectl delete pods --all
kubectl exec
- 对 Pod 中的容器执行命令。
# 从 Pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> -- date
# 运行输出 'date' 获取在 Pod <pod-name> 中容器 <container-name> 的输出。
kubectl exec <pod-name> -c <container-name> -- date
# 获取一个交互 TTY 并在 Pod <pod-name> 中运行 /bin/bash。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> -- /bin/bash
kubectl logs
- 打印 Pod 中容器的日志。
# 返回 Pod <pod-name> 的日志快照。
kubectl logs <pod-name>
# 从 Pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>
kubectl diff
- 查看集群建议更新的差异。
# “pod.json” 中包含的差异资源。
kubectl diff -f pod.json
# 从标准输入读取的差异文件。
cat service.yaml | kubectl diff -f -
示例:创建和使用插件
使用以下示例来帮助你熟悉编写和使用 kubectl
插件:
# 用任何语言创建一个简单的插件,并为生成的可执行文件命名
# 以前缀 "kubectl-" 开始
cat ./kubectl-hello
#!/bin/sh
# 这个插件打印单词 "hello world"
echo "hello world"
这个插件写好了,把它变成可执行的:
sudo chmod a+x ./kubectl-hello
# 并将其移动到路径中的某个位置
sudo mv ./kubectl-hello /usr/local/bin
sudo chown root:root /usr/local/bin
# 你现在已经创建并"安装了"一个 kubectl 插件。
# 你可以开始使用这个插件,从 kubectl 调用它,就像它是一个常规命令一样
kubectl hello
hello world
# 你可以"卸载"一个插件,只需从你的 $PATH 中删除它
sudo rm /usr/local/bin/kubectl-hello
为了查看可用的所有 kubectl
插件,你可以使用 kubectl plugin list
子命令:
输出类似于:
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
/usr/local/bin/kubectl-bar
kubectl plugin list
指令也可以向你告警哪些插件被运行,或是被其它插件覆盖了,例如:
sudo chmod -x /usr/local/bin/kubectl-foo # 删除执行权限
kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
- warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
/usr/local/bin/kubectl-bar
error: one plugin warning was found
你可以将插件视为在现有 kubectl 命令之上构建更复杂功能的一种方法:
接下来的几个示例假设你已经将 kubectl-whoami
设置为以下内容:
#!/bin/bash
#这个插件利用 `kubectl config` 命令基于当前所选上下文输出当前用户的信息
kubectl config view --template= '{{ range .contexts }}{{ if eq .name "' $( kubectl config current-context) '" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
运行以上命令将为你提供一个输出,其中包含 KUBECONFIG 文件中当前上下文的用户:
#!/bin/bash
# 使文件成为可执行的
sudo chmod +x ./kubectl-whoami
# 然后移动到你的路径中
sudo mv ./kubectl-whoami /usr/local/bin
kubectl whoami
Current user: plugins-user
接下来
11.1 - kubectl 介绍
kubectl 是 Kubernetes CLI 版本的瑞士军刀,可以胜任多种多样的任务。
本文主要介绍如何使用 kubectl 在 Kubernetes 中声明式管理应用,本文还涵盖了一些其他的 kubectl 功能。
命令分类
大多数 kubectl 命令通常可以分为以下几类:
类型
用途
描述
声明式资源管理
部署和运维(如 GitOps)
使用资源管理声明式管理 Kubernetes 工作负载
命令式资源管理
仅限开发环境
使用命令行参数和标志来管理 Kubernetes 工作负载
打印工作负载状态
调试
打印有关工作负载的信息
与容器交互
调试
执行、挂接、复制、日志
集群管理
集群运维
排空和封锁节点
声明式应用管理
管理资源的首选方法是配合 kubectl Apply 命令一起使用名为资源的声明式文件。
此命令读取本地(或远程)文件结构,并修改集群状态以反映声明的意图。
Apply
Apply 是在 Kubernetes 集群中管理资源的首选机制。
打印工作负载状态
用户需要查看工作负载状态。
打印关于资源的摘要状态和信息
打印关于资源的完整状态和信息
打印资源的特定字段
查询与标签匹配的资源
调试工作负载
kubectl 支持通过提供以下命令进行调试:
打印 Container 日志
打印集群事件
执行或挂接到 Container
将集群中 Container 中的文件复制到用户的文件系统
集群管理
有时用户可能需要对集群的节点执行操作。
kubectl 支持使用命令将工作负载从节点中排空,以便节点可以被停用或调试。
Porcelain
用户可能会发现使用资源管理进行 开发 过于繁琐,
他们更喜欢使用类似于 Shell 的工作流以 命令式 与集群交互。
kubectl 提供了用于生成和修改资源的 Porcelain 命令。
生成和创建 Deployment、StatefulSet、Service、ConfigMap 等这类资源
设置资源的字段
在文本编辑器中(实时)编辑资源
Porcelain 仅限开发使用
Porcelain 命令在开发集群中进行工作负载实验时可以节省时间,但不应用于生产。
11.2 - kubectl 参考
11.2.1 - kubectl
简介
kubectl 用于控制 Kubernetes 集群管理器。
参阅更多细节:
https://kubernetes.io/zh-cn/docs/reference/kubectl/
选项
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中的集群名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
-h, --help
kubectl 操作的帮助命令。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.2 - kubectl annotate
简介
更新一个或多个资源上的注解。
所有 Kubernetes 对象都支持以注解(Annotation)的形式为对象存储额外的数据。
注解是一些键/值对,可以比标签的数据量更大,可以包含诸如结构化 JSON 这类任意字符串值。
各种工具和系统扩展可以使用注解来存储自己的数据。
尝试设置已存在的注解的操作将会失败,除非设置了 --overwrite 选项。
如果 --resource-version 被指定且与服务器上当前资源版本不匹配,命令将会失败。
使用 "kubectl api-resources" 获取可支持的资源完整列表。
kubectl annotate [ --overwrite] ( -f FILENAME | TYPE NAME) KEY_1 = VAL_1 ... KEY_N = VAL_N [ --resource-version= version]
示例
# 使用注解 'description' 和值 'my frontend' 更新 Pod 'foo'
# 如果同一注解被设置多次,则只使用最后一个值
kubectl annotate pods foo description = 'my frontend'
# 更新在 "pod.json" 中指定 type 和 name 的 Pod
kubectl annotate -f pod.json description = 'my frontend'
# 更新 Pod 'foo',设置注解 'description' 和值 'my frontend running nginx',覆盖其当前值
kubectl annotate --overwrite pods foo description = 'my frontend running nginx'
# 更新命名空间中的所有 Pod
kubectl annotate pods --all description = 'my frontend running nginx'
# 仅在资源版本仍为 1 时更新 Pod 'foo'
kubectl annotate pods foo description = 'my frontend running nginx' --resource-version= 1
# 通过删除名为 'description' 的注解(如果存在)来更新 Pod 'foo'
# 不需要 --overwrite 标志
kubectl annotate pods foo description-
选项
--all
在指定资源类型的命名空间中,选择所有资源。
-A, --all-namespaces
如果为 true,则在所有命名空间中执行指定的操作。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-annotate"
用于跟踪字段属主关系的管理器的名称。
--field-selector string
过滤所用的选择算符(字段查询),支持 '='、'==' 和 '!='。
(例如 --field-selector key1=value1,key2=value2)。服务器针对每种类型仅支持有限数量的字段查询。
-f, --filename strings
文件名、目录或文件 URL,用于标识要更新注解的资源。
-h, --help
annotate 的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--list
如果为 true,则显示给定资源的注解。
--local
如果为 true,则注解不会与 api-server 通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--overwrite
如果为 true,则允许注解被覆盖,否则拒绝覆盖现有注解的更新。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--resource-version string
如果非空,则只有在所给值是对象的当前资源版本时,注解更新才会成功。仅在指定单个资源时有效。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
kubeconfig 中要使用的集群的名称。
--context string
kubeconfig 要使用的上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.3 - kubectl api-resources
简介
打印服务器支持的 API 资源。
kubectl api-resources [flags]
示例
# 打印服务器支持的 API 资源
kubectl api-resources
# 打印支持的 API 资源,但包含更多信息
kubectl api-resources -o wide
# 按列排序打印支持的 API 资源
kubectl api-resources --sort-by=name
# 打印支持的命名空间资源
kubectl api-resources --namespaced=true
# 打印支持的非命名空间资源
kubectl api-resources --namespaced=false
# 打印特定 APIGroup 支持的 API 资源
kubectl api-resources --api-group=rbac.authorization.k8s.io
选项
--api-group string
限制为指定 API 组中的资源。
--cached
如果可用,将使用缓存的资源列表。
--categories strings
指定资源的类别。
-h, --help
关于 api-resources 的帮助信息。
--namespaced 默认值:true
如果为false,则返回非命名空间作用域的资源,否则默认返回命名空间作用域的资源。
--no-headers
当使用默认或自定义列输出格式时,不要打印标题(默认打印标题)。
-o, --output string
输出格式,可选值为:wide、name。
--sort-by string
如果非空,则使用指定字段对资源列表进行排序,此字段可以是 "name" 或 "kind"。
--verbs strings
筛选支持指定动词的资源。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.4 - kubectl api-versions
简介
以 "group/version" 的形式打印服务器支持的 API 版本。
示例
# Print the supported API versions
kubectl api-versions
选项
-h, --help
关于 api-versions 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.5 - kubectl apply
简介
基于文件名或标准输入将配置应用于资源。必须指定资源名称。如果资源尚不存在,则资源会被创建。
若要使用 apply
命令,最初创建资源时应始终使用 apply
或 create --save-config
。
kubectl apply ( -f FILENAME | -k DIRECTORY)
示例
# 将 pod.json 中的配置应用到 Pod
kubectl apply -f ./pod.json
# 应用来自包含 kustomization.yaml 的目录(即 dir/kustomization.yaml)中的资源
kubectl apply -k dir/
# 将传递到 stdin 的 JSON 应用到 Pod
cat pod.json | kubectl apply -f -
# 应用所有以 ".json" 结尾的文件中的配置
kubectl apply -f '*.json'
# 注意:--prune 仍处于 Alpha 阶段
# 应用 manifest.yaml 中与标签 app=nginx 匹配的配置,并删除不在文件中的、与标签 app=nginx 匹配的所有其他资源
kubectl apply --prune -f manifest.yaml -l app = nginx
# 应用 manifest.yaml 文件中的配置,并删除文件中未提及的所有其他 ConfigMap。
kubectl apply --prune -f manifest.yaml --all --prune-allowlist= core/v1/ConfigMap
选项
--all
选择指定资源类型的命名空间中的所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--cascade string[="background"] 默认值:"background"
必须是 "background"、"orphan" 或 "foreground"。
选择依赖项(例如,由 ReplicationController 创建的 Pod)的删除级联策略,
默认为 background。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-client-side-apply"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
包含了待应用的配置信息的文件。
--force
如果为真,则立即从 API 中移除资源并略过体面删除处理。
请注意,立即删除某些资源可能会导致不一致或数据丢失,并且需要确认操作。
--force-conflicts
如果为真,服务器端应用将在遇到冲突时实施强制更改。
--grace-period int 默认值:-1
指定给资源的体面终止时间(以秒为单位)。
如果为负数则忽略,为 1 表示立即关闭。
仅当 --force 为真(强制删除)时才可以设置为 0。
-h, --help
help for apply
-k, --kustomize string
处理 kustomization 目录,此标志不能与 -f 或 -R 一起使用。
--openapi-patch 默认值:true
如果为真,则当 openapi 存在且资源可在 openapi 规范中找到时,使用 openapi 计算 diff。
否则,回退到使用内置类型。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--overwrite 默认值:true
使用修改后的配置中的值自动解决修改后的配置与实时配置之间的冲突。
--prune
自动删除未出现在配置中但由 "apply" 或 "create --save-config" 创建的资源对象。
应与 -l 或 --all 一起使用。
--prune-allowlist strings
由 "group/version/kind" 组成的列表,可覆盖默认允许列表,用于 --prune 操作。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--server-side
如果为真,则 apply 将在服务器侧而不是客户端中运行。
--show-managed-fields
如果为真,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--timeout duration
放弃删除之前等待的时间长度,为 0 表示根据对象的大小确定超时。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--wait
如果为真,则等待资源消失后再返回。此参数会等待终结器被清空。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.5.1 - kubectl apply edit-last-applied
简介
使用默认编辑器编辑资源的最新的 last-applied-configuration 注解。
edit-last-applied 命令允许你直接编辑可以通过命令行工具检索的任何 API 资源。
它将打开由 KUBE_EDITOR 或 EDITOR 环境变量定义的编辑器,或者在 Linux 上默认使用 "vi" 或在 Windows 上默认使用 "notepad"。
你可以编辑多个对象,不过所做的更改只能是逐个被应用的。此命令接受文件名以及命令行参数,但你指向的文件必须是资源的先前保存的版本。
默认格式为 YAML。若要以 JSON 格式编辑,请指定 -o json
。
标志 --windows-line-endings
可用于强制使用 Windows 风格的行尾,否则将使用操作系统的默认设置。
如果在更新过程中发生错误,则会在磁盘上创建一个包含未被应用的变更的临时文件。
更新资源时最常见的错误是另一个编辑者更改了服务器上的资源,发生这种情况时,你必须将更改应用于资源的较新版本,
或更新临时保存的副本以包含最新的资源版本。
kubectl apply edit-last-applied ( RESOURCE/NAME | -f FILENAME)
示例
# 在 YAML 中按类型/名称编辑 last-applied-configuration 注解
kubectl apply edit-last-applied deployment/nginx
# 通过 JSON 文件编辑 last-applied-configuration 注解
kubectl apply edit-last-applied -f deploy.yaml -o json
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--field-manager string 默认值:"kubectl-client-side-apply"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
用于编辑资源的文件名、目录或文件 URL 的列表。
-h, --help
关于 edit-last-applied 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--windows-line-endings
仅在 --edit=true 时起作用。默认为你所用平台本地的行结尾格式。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.5.2 - kubectl apply set-last-applied
简介
设置 last-applied-configuration 注解使之与某文件内容相匹配。
这会导致 last-applied-configuration 被更新,就像运行了 kubectl apply -f <file>
一样,
但是不会更新对象的任何其他部分。
kubectl apply set-last-applied -f FILENAME
示例
# 设置资源的 last-applied-configuration,使之与某文件内容相同
kubectl apply set-last-applied -f deploy.yaml
# 针对目录中的每一个配置文件执行 set-last-applied 操作
kubectl apply set-last-applied -f path/
# 设置资源的 last-applied-configuration 注解,使之与某文件内容匹配;如果该注解尚不存在,则会被创建。
kubectl apply set-last-applied -f deploy.yaml --create-annotation= true
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--create-annotation
如果当前的对象没有 'last-applied-configuration' 注解,将该注解会被创建。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
-f, --filename strings
包含 last-applied-configuration 注解的文件的文件名、目录或 URL 的列表。
-h, --help
关于 set-last-applied 的帮助信息。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当指定 `-o=go-template` 、`-o=go-template-file` 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.5.3 - kubectl apply view-last-applied
简介
根据所给类别/名称或文件来查看最新的 last-applied-configuration 注解。
默认输出将以 YAML 格式打印到标准输出。你可以使用 -o 选项来更改输出格式。
kubectl apply view-last-applied ( TYPE [ NAME | -l label] | TYPE/NAME | -f FILENAME)
示例
# 根据所给类别/名称以 YAML 格式查看 last-applied-configuration 注解
kubectl apply view-last-applied deployment/nginx
# 根据所给文件以 JSON 格式查看 last-applied-configuration 注解
kubectl apply view-last-applied -f deploy.yaml -o json
选项
--all
选择指定资源类型的命名空间中的所有资源。
-f, --filename strings
包含 last-applied-configuration 注解的文件的文件名、目录或 URL 的列表。
-h, --help
view-last-applied 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string 默认值:"yaml"
输出格式。必须是 yaml 或 json 之一。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.6 - kubectl attach
简介
挂接到现有容器内已运行的进程。
kubectl attach (POD | TYPE/NAME) -c CONTAINER
示例
# 从运行的 Pod mypod 获取输出;使用 'kubectl.kubernetes.io/default-container' 注解来选择要挂接的容器,
# 否则将选择 Pod 中的第一个容器
kubectl attach mypod
# 从 Pod mypod 获取 ruby-container 的输出
kubectl attach mypod -c ruby-container
# 切换到原始终端模式;从 Pod mypod 将 stdin 发送到 ruby-container 中的 'bash',
# 并将 stdout/stderr 从 'bash' 发送回客户端
kubectl attach mypod -c ruby-container -i -t
# 获取名为 nginx 的 ReplicaSet 中第一个 Pod 的输出
kubectl attach rs/nginx
选项
-c, --container string
容器名称。
如果省略,则使用 kubectl.kubernetes.io/default-container 注解来选择要挂接的容器,
否则将选择 Pod 中的第一个容器。
-h, --help
关于 attach 的帮助信息。
--pod-running-timeout duration 默认值:1m0s
等待至少一个 Pod 运行的时间长度(例如 5 秒、2 分钟或 3 小时,大于零)。
-q, --quiet
仅打印远程会话的输出。
-i, --stdin
将 stdin 传递给容器。
-t, --tty
Stdin 是一个 TTY。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.7 - kubectl auth
简介
检查授权。
选项
-h, --help
关于 auth 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.7.1 - kubectl auth can-i
简介
检查某个操作是否被允许。
VERB 指的是逻辑上的 Kubernetes API 动词,如 get
、list
、watch
、delete
等。
TYPE 指的是 Kubernetes 中的一种资源类型,快捷表示和资源组都可被解析。
NONRESOURCEURL 是以 /
开头的部分 URL。
NAME 是特定 Kubernetes 资源的名称,此命令可与身份伪装功能完美搭配,请参阅 --as 全局标志。
kubectl auth can-i VERB [ TYPE | TYPE/NAME | NONRESOURCEURL]
示例
# 检查是否可以在任意命名空间中创建 Pod
kubectl auth can-i create pods --all-namespaces
# 检查是否可以列出当前命名空间中的 Deployment
kubectl auth can-i list deployments.apps
# 检查命名空间 "dev" 的服务帐户 "foo" 是否可以列出命名空间 "prod" 下的 Pod。
# 你必须有权限使用全局选项 "--as" 所涉及的身份伪装功能。
kubectl auth can-i list pods --as= system:serviceaccount:dev:foo -n prod
# 检查我是否可以在当前命名空间中执行所有操作("*" 表示全部)
kubectl auth can-i '*' '*'
# 检查是否可以在命名空间 "foo" 中获取名为 "bar" 的 Job
kubectl auth can-i list jobs.batch/bar -n foo
# 检查我是否可以读取 Pod 日志
kubectl auth can-i get pods --subresource= log
# 检查是否可以访问 URL /logs/
kubectl auth can-i get /logs/
# 检查我是否可以批准 certificates.k8s.io
kubectl auth can-i approve certificates.k8s.io
# 列出命名空间 "foo" 中所有允许的操作
kubectl auth can-i --list --namespace= foo
选项
-A, --all-namespaces
如果为 true,则在所有命名空间中执行指定的操作。
-h, --help
关于 can-i 的帮助信息。
--list
如果为真,则打印所有允许的操作。
--no-headers
如果为真,则打印允许的操作而不打印标题。
-q, --quiet
如果为真,则抑制输出并仅返回退出代码。
--subresource string
子资源(例如 pod/log 或 deploy/scale)。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.7.2 - kubectl auth reconcile
简介
调和 RBAC 角色、角色绑定、集群角色和集群角色绑定对象的规则。
如果需要,将创建缺失的对象,同时对于命名空间作用域的对象,其所归属的命名空间也会被创建。
现有角色将被更新以包含输入对象中的权限,如果指定了 --remove-extra-permissions
,则额外的权限会被删除。
现有绑定将被更新以包含输入对象中的主体,如果指定了 --remove-extra-subjects
,则额外的主体会被删除。
对于 RBAC 资源,这种操作比 apply
更可取,因为能够对规则和主体作语义感知的合并。
kubectl auth reconcile -f FILENAME
示例
# 调和某文件中的 RBAC 资源
kubectl auth reconcile -f my-rbac-rules.yaml
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
-f, --filename strings
包含要被调和的资源的文件名、目录或文件 URL 列表。
-h, --help
关于 reconcile 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--remove-extra-permissions
如果为真,则删除之前添加到角色的额外权限。
--remove-extra-subjects
如果为真,则删除之前添加到角色绑定上的额外主体。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.7.3 - kubectl auth whoami
简介
实验性功能:检查你的身份和属性(如所属的组、额外信息等)。
此命令有助于让你了解当前用户属性,尤其是在 Kubernetes
集群中启用动态身份验证(例如令牌 Webhook、身份认证代理或 OIDC 提供程序)时。
示例
# 获取你的主体属性
kubectl auth whoami
# 以 JSON 格式获取主体属性
kubectl auth whoami -o json
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
-h, --help
关于 whoami 的帮助信息。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.8 - kubectl autoscale
简介
创建一个自动扩缩器,自动选择并设置在 Kubernetes 集群中运行的 Pod 数量。
按名称查找 Deployment、ReplicaSet、StatefulSet 或 ReplicationController,并创建使用给定资源作为参照指标的自动扩缩器。
自动扩缩器可以根据需要自动增加或减少系统内部署的 Pod 数量。
kubectl autoscale ( -f FILENAME | TYPE NAME | TYPE/NAME) [ --min= MINPODS] --max= MAXPODS [ --cpu-percent= CPU]
示例
# 自动扩缩 Deployment "foo",其 Pod 数量在 2 到 10 之间,未指定目标 CPU 利用率,因此将使用默认的自动扩缩策略
kubectl autoscale deployment foo --min= 2 --max= 10
# 自动扩缩 ReplicationController "foo",其 Pod 数量在 1 到 5 之间,目标 CPU 利用率为 80%
kubectl autoscale rc foo --max= 5 --cpu-percent= 80
选项
--allow-missing-template-keys 默认值:true
如果为 true,则当模板中缺少字段或映射键时,忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
--cpu-percent int32 默认值:-1
所有 Pod 的平均 CPU 利用率(以请求的 CPU 的百分比表示)目标。如果未指定或为负数,则将使用默认的自动扩缩策略。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-autoscale"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
用于标识要自动扩缩的资源的文件名、目录或文件 URL 列表。
-h, --help
关于 autoscale 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--max int32 默认值:-1
自动扩缩器可设置的 Pod 数量上限(必需)。
--min int32 默认值:-1
自动扩缩器可以设置的 Pod 数量下限。如果未指定或为负数,服务器将应用默认值。
--name string
新创建对象的名称。如果未指定,则将使用输入资源的名称。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.9 - kubectl certificate
简介
修改证书资源。
kubectl certificate SUBCOMMAND
选项
-h, --help
关于 certificate 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.9.1 - kubectl certificate approve
简介
批准证书签名请求。
kubectl certificate approve
允许集群管理员批准证书签名请求(CSR)。
此操作通知证书签名控制器向请求者颁发具有 CSR 中请求属性的证书。
安全提示:取决于所请求的属性,被颁发的证书可能会授予请求者访问集群资源的权限,
或以所请求的身份进行身份验证的权限。在批准 CSR 之前,请确保你了解已签署的证书可以执行哪些操作。
kubectl certificate approve ( -f FILENAME | NAME)
示例
# 批准 CSR 'csr-sqgzp'
kubectl certificate approve csr-sqgzp
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
-f, --filename strings
文件名、目录或文件 URL,用于标识要更新的资源。
--force
在 CSR 已被批准的情况下更新 CSR。
-h, --help
approve 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.9.2 - kubectl certificate deny
简介
拒绝证书签名请求。
kubectl certificate deny
允许集群管理员拒绝证书签名请求 (CSR)。
此操作通知证书签名控制器不向请求者颁发证书。
kubectl certificate deny ( -f FILENAME | NAME)
示例
# 拒绝 CSR 'csr-sqgzp'
kubectl certificate deny csr-sqgzp
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
-f, --filename strings
文件名、目录或文件 URL,用于标识要更新的资源。
--force
在 CSR 已被拒绝的情况下更新 CSR。
-h, --help
deny 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.10 - kubectl cluster-info
简介
显示控制平面和带有标签 kubernetes.io/cluster-service=true 的 Service 的地址。
要进一步调试和诊断集群问题,请使用 "kubectl cluster-info dump"。
kubectl cluster-info [ flags]
示例
# 打印控制平面和集群服务的地址
kubectl cluster-info
选项
-h, --help
关于 cluster-info 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.10.1 - kubectl cluster-info dump
简介
转储集群信息,适合于调试和诊断集群问题。默认情况下,将所有内容转储到 stdout。你可以使用
--output-directory 指定目录。如果指定目录,Kubernetes 将在该目录中构建一组文件。
默认情况下,仅转储当前命名空间和 "kube-system" 命名空间中的内容,但你也可以使用 --namespaces
标志切换到其他命名空间,或指定 --all-namespaces 以转储所有命名空间。
该命令还会转储集群中所有 Pod 的日志;这些日志根据命名空间和 Pod 名称转储到不同的目录中。
kubectl cluster-info dump [ flags]
示例
# 将当前集群状态转储到标准输出
kubectl cluster-info dump
# 将当前集群状态转储到 /path/to/cluster-state
kubectl cluster-info dump --output-directory= /path/to/cluster-state
# 将所有命名空间转储到标准输出
kubectl cluster-info dump --all-namespaces
# 将一组命名空间转储到 /path/to/cluster-state
kubectl cluster-info dump --namespaces default,kube-system --output-directory= /path/to/cluster-state
选项
-A, --all-namespaces
如果为真,则转储所有命名空间。
如果为真,则忽略 --namespaces。
--allow-missing-template-keys 默认值:true
如果为 true,则当模板中缺少字段或映射键时,忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
-h, --help
dump 命令的帮助信息。
--namespaces strings
要转储的命名空间的逗号分隔列表。
-o, --output string 默认值:"json"
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--output-directory string
输出文件的位置。如果为空或 "-",则使用 stdout,否则在该目录中创建目录层次结构。
--pod-running-timeout duration 默认值:20s
等待至少一个 Pod 运行的时长(例如 5s、2m 或 3h,大于零)。
--show-managed-fields
如果为真,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.11 - kubectl completion
简介
输出指定 shell(bash、zsh、fish 或 powershell)的 shell 补全代码。
必须评估 shell 代码才能提供 kubectl 命令的交互式补全,这可以通过从 .bash_profile 中获取它来完成。
有关如何执行此操作的详细说明请参见此处:
zsh 用户注意事项:[1] zsh 补全仅支持 zsh >= 5.2 版本。
kubectl completion SHELL
示例
# 使用 homebrew 在 macOS 上安装 bash-completion
## 如果运行 macOS 附带的 Bash 3.2
brew install bash-completion
## 或者,如果运行的是 Bash 4.1+
brew install bash-completion@2
## 如果通过 homebrew 安装了 kubectl,Shell 补全应该能够立即起作用
## 如果你通过其他方式安装,则可能需要将新的补全数据添加到补全目录中
kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl
# 在 Linux 上安装 bash 补全
## 如果 Linux 上未安装 bash-completion,请通过发行版的包管理器安装 "bash-completion" 包。
## 将 bash 的 kubectl 补全代码加载到当前 shell 中
source <(kubectl completion bash)
## 将 bash 补全代码写入文件并从 .bash_profile 中引用之
kubectl completion bash > ~/.kube/completion.bash.inc
printf "
# kubectl shell completion
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile
source $HOME/.bash_profile
# 将 zsh[1] 的 kubectl 补全代码加载到当前 shell 中
source <(kubectl completion zsh)
# 将 zsh[1] 的 kubectl 补全代码设置为在启动时自动加载
kubectl completion zsh > "${fpath[1]}/_kubectl"
# 将 fish[2] 的 kubectl 补全代码加载到当前 shell 中
kubectl completion fish | source
# 要为每个会话都加载补全代码,请执行一次如下命令:
kubectl completion fish > ~/.config/fish/completions/kubectl.fish
# 将 powershell 的 kubectl 补全代码加载到当前 shell 中
kubectl completion powershell | Out-String | Invoke-Expression
# 设置 powershell 的 kubectl 补全代码在启动时运行
## 将补全代码保存到脚本并在配置文件中执行
kubectl completion powershell > $HOME\.kube\completion.ps1
Add-Content $PROFILE "$HOME\.kube\completion.ps1"
## 执行配置文件中的补全代码
Add-Content $PROFILE "if (Get-Command kubectl -ErrorAction SilentlyContinue) {
kubectl completion powershell | Out-String | Invoke-Expression
}"
## 直接将补全代码添加到 $PROFILE 脚本
kubectl completion powershell >> $PROFILE
选项
-h, --help
关于 completion 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.12 - kubectl config
简介
使用 "kubectl config set current-context my-context" 等子命令修改 kubeconfig 文件。
加载顺序遵循以下规则:
如果设置了 --kubeconfig 标志,则仅加载该文件。该标志只能设置一次,并且不会发生合并。
如果设置了 $KUBECONFIG 环境变量,则将其用作路径列表(系统的正常路径分隔规则),这些路径会被合并。
当某个值被修改时,也会在定义这部分内容的文件中修改此值。当某个值被创建时,也会在存在的第一个文件中创建此值。
如果链中不存在文件,则它会创建列表中的最后一个文件。
否则,将使用 ${HOME}/.kube/config
,并且不会发生合并。
kubectl config SUBCOMMAND
选项
-h, --help
关于 config 的帮助信息。
--kubeconfig string
使用特定的 kubeconfig 文件
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.1 - kubectl config current-context
简介
显示当前上下文。
kubectl config current-context [ flags]
示例
# 显示当前上下文
kubectl config current-context
选项
-h, --help
关于 current-context 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.2 - kubectl config delete-cluster
简介
从 kubeconfig 中删除指定的集群。
kubectl config delete-cluster NAME
示例
# 删除 minikube 集群
kubectl config delete-cluster minikube
选项
-h, --help
关于 delete-cluster 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.3 - kubectl config delete-context
简介
从 kubeconfig 中删除指定的上下文。
kubectl config delete-context NAME
示例
# 删除 minikube 集群的上下文
kubectl config delete-context minikube
选项
-h, --help
关于 delete-context 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.4 - kubectl config delete-user
简介
从 kubeconfig 中删除指定用户。
kubectl config delete-user NAME
示例
# 删除 minikube 用户
kubectl config delete-user minikube
选项
-h, --help
关于 delete-user 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.5 - kubectl config get-clusters
简介
显示 kubeconfig 中定义的集群。
kubectl config get-clusters [flags]
示例
# 列出 kubectl 所知悉的集群
kubectl config get-clusters
选项
-h, --help
关于 get-clusters 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.6 - kubectl config get-contexts
简介
显示 kubeconfig 文件中的一个或多个上下文。
kubectl config get-contexts [( -o|--output=) name)]
示例
# 列出 kubeconfig 文件中的所有上下文
kubectl config get-contexts
# 描述 kubeconfig 文件中指定上下文的详细信息
kubectl config get-contexts my-context
选项
-h, --help
关于 get-contexts 的帮助信息。
--no-headers
当使用默认或自定义列输出格式时,不要打印标题(默认打印标题)。
-o, --output string
输出格式。可选值为:name。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.7 - kubectl config get-users
简介
显示 kubeconfig 中定义的用户。
kubectl config get-users [ flags]
示例
# 列出 kubectl 知悉的用户
kubectl config get-users
选项
-h, --help
关于 get-users 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.8 - kubectl config rename-context
简介
重命名 kubeconfig 文件中的上下文。
CONTEXT_NAME 是要更改的上下文名称。
NEW_NAME 是要设置的新名称。
注意:如果重命名的上下文是“当前上下文”,则该字段也将被更新。
kubectl config rename-context CONTEXT_NAME NEW_NAME
示例
# 将 kubeconfig 文件中上下文 "old-name" 重命名为 "new-name"
kubectl config rename-context old-name new-name
选项
-h, --help
关于 rename-context 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.9 - kubectl config set
简介
设置 kubeconfig 文件中的单个值。
PROPERTY_NAME 是一个以点分隔的名称,其中每个元素代表一个属性名称或一个键名。键名不得包含点。
PROPERTY_VALUE 是要设置的值。除非使用 --set-raw-bytes
标志,否则二进制字段(例如 certificate-authority-data
)必须为经过 base64 编码的字符串。
指定已存在的属性名称将把新字段值与现有值合并。
kubectl config set PROPERTY_NAME PROPERTY_VALUE
示例
# 将 my-cluster 集群的 server 字段设置为 https://1.2.3.4
kubectl config set clusters.my-cluster.server https://1.2.3.4
# 设置 my-cluster 集群的 certificate-authority-data 字段
kubectl config set clusters.my-cluster.certificate-authority-data $( echo "cert_data_here" | base64 -i -)
# 将 my-context 上下文中的 cluster 字段设置为 my-cluster
kubectl config set contexts.my-context.cluster my-cluster
# 使用 --set-raw-bytes 选项设置 cluster-admin 用户中的 client-key-data 字段
kubectl config set users.cluster-admin.client-key-data cert_data_here --set-raw-bytes= true
选项
-h, --help
关于 set 的帮助信息。
--set-raw-bytes tristate[=true]
写入 []byte 格式的 PROPERTY_VALUE 时,直接写入给定的字符串,无需 base64 解码。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.10 - kubectl config set-cluster
简介
设置 kubeconfig 中的集群条目。
kubectl config set-cluster NAME [ --server= server] [ --certificate-authority= path/to/certificate/authority] [ --insecure-skip-tls-verify= true] [ --tls-server-name= example.com]
示例
# 仅设置 e2e 集群条目上的 server 字段,不触及其他值
kubectl config set-cluster e2e --server= https://1.2.3.4
# 在 e2e 集群条目中嵌入证书颁发机构的数据
kubectl config set-cluster e2e --embed-certs --certificate-authority= ~/.kube/e2e/kubernetes.ca.crt
# 禁用 e2e 集群条目中的证书检查
kubectl config set-cluster e2e --insecure-skip-tls-verify= true
# 设置用于验证 e2e 集群条目的自定义 TLS 服务器名称
kubectl config set-cluster e2e --tls-server-name= my-cluster-name
# 设置 e2e 集群条目的代理 URL
kubectl config set-cluster e2e --proxy-url= https://1.2.3.4
选项
--certificate-authority string
kubeconfig 中集群条目的证书颁发机构文件的路径。
--embed-certs tristate[=true]
在 kubeconfig 中嵌入集群条目的证书。
-h, --help
关于 set-cluster 的帮助信息。
--insecure-skip-tls-verify tristate[=true]
设置 kubeconfig 中的集群条目的 insecure-skip-tls-verify 字段。
--proxy-url string
kubeconfig 中集群条目的代理地址。
--server string
kubeconfig 中集群条目的 server 字段。
--tls-server-name string
kubeconfig 中的集群条目的 tls-server-name 字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.11 - kubectl config set-context
简介
在 kubeconfig 中设置上下文条目。
kubectl config set-context [ NAME | --current] [ --cluster= cluster_nickname] [ --user= user_nickname] [ --namespace= namespace]
示例
# 在 gce 上下文条目上设置用户字段,而不影响其他值
kubectl config set-context gce --user=cluster-admin
选项
--cluster string
kubeconfig 中上下文条目的集群。
--current
修改当前上下文。
-h, --help
关于 set-context 的帮助信息。
--namespace string
kubeconfig 中上下文条目的命名空间。
--user string
kubeconfig 中上下文条目的用户。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.12 - kubectl config set-credentials
简介
在 kubeconfig 中设置用户条目。
指定已存在的属性名称将把新字段值与现有值合并。
客户端证书标志:--client-certificate=certfile --client-key=keyfile
持有者令牌标志:--token=bearer_token
基本身份验证标志:--username=basic_user --password=basic_password
持有者令牌和基本身份验证是互斥的(不可同时使用)。
kubectl config set-credentials NAME [ --client-certificate= path/to/certfile] [ --client-key= path/to/keyfile] [ --token= bearer_token] [ --username= basic_user] [ --password= basic_password] [ --auth-provider= provider_name] [ --auth-provider-arg= key = value] [ --exec-command= exec_command] [ --exec-api-version= exec_api_version] [ --exec-arg= arg] [ --exec-env= key = value]
示例
# 仅设置 "cluster-admin" 条目上的 "client-key" 字段,不触及其他值
kubectl config set-credentials cluster-admin --client-key= ~/.kube/admin.key
# 为 "cluster-admin" 条目设置基本身份验证
kubectl config set-credentials cluster-admin --username= admin --password= uXFGweU9l35qcif
# 在 "cluster-admin" 条目中嵌入客户端证书数据
kubectl config set-credentials cluster-admin --client-certificate= ~/.kube/admin.crt --embed-certs= true
# 为 "cluster-admin" 条目启用 Google Compute Platform 身份认证提供程序
kubectl config set-credentials cluster-admin --auth-provider= gcp
# 使用附加参数为 "cluster-admin" 条目启用 OpenID Connect 身份认证提供程序
kubectl config set-credentials cluster-admin --auth-provider= oidc --auth-provider-arg= client-id= foo --auth-provider-arg= client-secret= bar
# 删除 "cluster-admin" 条目的 OpenID Connect 身份验证提供程序的 "client-secret" 配置值
kubectl config set-credentials cluster-admin --auth-provider= oidc --auth-provider-arg= client-secret-
# 为 "cluster-admin" 条目启用新的 exec 认证插件
kubectl config set-credentials cluster-admin --exec-command= /path/to/the/executable --exec-api-version= client.authentication.k8s.io/v1beta1
# 为 "cluster-admin" 条目启用新的、带交互模式的 exec 认证插件
kubectl config set-credentials cluster-admin --exec-command= /path/to/the/executable --exec-api-version= client.authentication.k8s.io/v1beta1 --exec-interactive-mode= Never
# 为 "cluster-admin" 条目定义新的 exec 认证插件参数
kubectl config set-credentials cluster-admin --exec-arg= arg1 --exec-arg= arg2
# 为 "cluster-admin" 条目创建或更新 exec 认证插件环境变量
kubectl config set-credentials cluster-admin --exec-env= key1 = val1 --exec-env= key2 = val2
# 删除 "cluster-admin" 条目的 exec 认证插件环境变量
kubectl config set-credentials cluster-admin --exec-env= var-to-remove-
选项
--auth-provider string
kubeconfig 中用户条目的身份验证提供程序。
--auth-provider-arg strings
身份验证提供程序参数,'key=value' 格式。
--client-certificate string
kubeconfig 中用户条目的客户端证书文件路径。
--client-key string
kubeconfig 中用户条目的客户端密钥文件路径。
--embed-certs tristate[=true]
在 kubeconfig 中嵌入用户条目的客户端证书/密钥。
--exec-api-version string
kubeconfig 中用户条目的 exec 凭据插件的 API 版本。
--exec-arg strings
kubeconfig 中用户条目的 exec 凭据插件命令的新参数。
--exec-command string
kubeconfig 中用户条目的 exec 凭据插件命令。
--exec-env strings
exec 凭证插件的环境变量,'key=value' 格式。。
--exec-interactive-mode string
kubeconfig 中用户条目的 exec 凭据插件的交互模式。
--exec-provide-cluster-info tristate[=true]
提供给 kubeconfig 中用户条目所使用的 exec 凭据插件的集群信息。
-h, --help
关于 set-credentials 的帮助信息。
--password string
kubeconfig 中用户条目的密码。
--token string
kubeconfig 中用户条目的 token。
--username string
kubeconfig 中用户条目的用户名。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.13 - kubectl config unset
简介
去除 kubeconfig 文件中的某个值的设置。
PROPERTY_NAME 是一个以点分隔的名称,其中每个元素代表一个属性名称或一个键名。键名不得包含点。
kubectl config unset PROPERTY_NAME
示例
# 去除 current-context 设置
kubectl config unset current-context
# 去掉 foo 上下文中的 namespace 设置
kubectl config unset contexts.foo.namespace
选项
-h, --help
关于 unset 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.14 - kubectl config use-context
简介
在 kubeconfig 文件中设置当前上下文。
kubectl config use-context CONTEXT_NAME
示例
# 使用 minikube 集群的上下文
kubectl config use-context minikube
选项
-h, --help
关于 use-context 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.12.15 - kubectl config view
简介
显示合并的 kubeconfig 配置或指定的 kubeconfig 文件。
可以使用 --output jsonpath={...}
通过 jsonpath 表达式提取特定值。
kubectl config view [ flags]
示例
# 显示合并的 kubeconfig 设置
kubectl config view
# 显示合并的 kubeconfig 设置、原始证书数据和公开的密钥
kubectl config view --raw
# 获取 e2e 用户的密码
kubectl config view -o jsonpath = '{.users[?(@.name == "e2e")].user.password}'
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--flatten
将生成的 kubeconfig 文件扁平化为自包含的输出(对于创建可移植的 kubeconfig 文件很有用)。
-h, --help
关于 view 的帮助信息。
--merge tristate[=true] 默认值:true
合并 kubeconfig 文件的完整层次结构数据。
--minify
从输出中删除当前上下文未使用的所有信息。
-o, --output string 默认值:"yaml"
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--raw
显示原始字节数据和敏感数据。
--show-managed-fields
如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当指定 `-o=go-template` 、`-o=go-template-file` 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.13 - kubectl cordon
简介
将节点标记为不可调度的。
示例
# 将节点 "foo" 标记为不可调度的
kubectl cordon foo
选项
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
-h, --help
cordon 操作的帮助命令。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中的集群名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 用于控制 Kubernetes 集群管理器
11.2.14 - kubectl cp
简介
将文件、目录复制到容器;或从容器复制文件、目录。
kubectl cp <file-spec-src> <file-spec-dest>
示例
# !!!重要提示!!!
# 要求你的容器镜像中存在 'tar' 可执行文件
# 如果 'tar' 不存在,'kubectl cp' 将会失败
#
# 对于符号链接、通配符扩展或文件模式保留等高级用例,考虑使用 'kubectl exec'
# 将本地文件 /tmp/foo 复制到远程命名空间 <some-namespace> 中 Pod 中的 /tmp/bar
tar cf - /tmp/foo | kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - -C /tmp/bar
# 将 /tmp/foo 从远程 Pod 复制到本地的 /tmp/bar
kubectl exec -n <some-namespace> <some-pod> -- tar cf - /tmp/foo | tar xf - -C /tmp/bar
# 将本地目录 /tmp/foo_dir 复制到远程默认命名空间中 Pod 中的 /tmp/bar_dir
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
# 将本地文件 /tmp/foo 复制到远程 Pod 中特定容器内的 /tmp/bar
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>
# 将本地文件 /tmp/foo 复制到远程命名空间 <some-namespace> 内 Pod 中的 /tmp/bar
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar
# 将 /tmp/foo 从远程 Pod 复制到本地的 /tmp/bar
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
选项
-c, --container string
容器名称。如果省略,将使用 kubectl.kubernetes.io/default-container
注解来选择要被挂接的容器,或者选择 Pod 中的第一个容器。
-h, --help
cp 操作的帮助命令。
--no-preserve
被复制的文件/目录的所有权和权限将不会在容器中保留。
--retries int
设置从容器完成复制操作的重试次数。
指定 0 表示禁止重试,指定任何负值表示无限重试。默认值为 0(不重试)。
--as string
要伪装此操作的用户名。用户可以是命名空间中的普通用户或服务账户。
--as-group strings
要伪装此操作的组,此标志可以被重复使用以指定多个组。
--as-uid string
要伪装此操作的 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书颁发机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
表示对污点 NotReady:NoExecute 的容忍时长(以秒计)。
默认情况下,这一容忍度会被添加到尚未具有此容忍度的每个 Pod 中。
--default-unreachable-toleration-seconds int 默认值:300
表示对污点 unreachable:NoExecute 的容忍时长(以秒计)。
默认情况下,这一容忍度会被添加到尚未具有此容忍度的每个 Pod 中。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则表示不会检查服务器证书的有效性。这样会导致你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求所用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,CLI 请求将使用此命名空间。
--password string
API 服务器进行基本身份认证的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
放弃单个服务器请求之前的等待时间,非零值需要包含相应时间单位(例如:1s、2m、3h)。零值则表示不做超时要求。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名称。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
API 服务器进行身份认证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
API 服务器进行基本身份认证的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;
--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.15 - kubectl create
简介
基于文件或标准输入创建一个资源。
接受 JSON 和 YAML 格式。
kubectl create -f FILENAME
示例
# 使用 pod.json 中的数据创建一个 Pod
kubectl create -f ./pod.json
# 基于传入到标准输入的 JSON 创建一个 Pod
cat pod.json | kubectl create -f -
# 以 JSON 编辑 registry.yaml 中的数据,然后使用已编辑的数据来创建资源
kubectl create -f registry.yaml --edit -o json
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--edit
在创建之前编辑 API 资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
用于创建资源的文件名、目录或文件 URL。
-h, --help
create 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--raw string
用于向服务器发送 POST 请求的原始 URI。使用 kubeconfig 文件中指定的传输方式。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
此标志在你希望后续对该对象执行 kubectl apply 时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--windows-line-endings
仅在 --edit=true 时相关。默认为你所用平台原生的行结尾格式。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.1 - kubectl create clusterrole
简介
创建一个集群角色。
kubectl create clusterrole NAME --verb= verb --resource= resource.group [ --resource-name= resourcename] [ --dry-run= server|client|none]
示例
# 创建一个名为 "pod-reader" 的集群角色,允许用户对 Pod 执行 "get"、"watch" 和 "list" 操作
kubectl create clusterrole pod-reader --verb= get,list,watch --resource= pods
# 创建一个名为 "pod-reader" 的集群角色,并指定 ResourceName
kubectl create clusterrole pod-reader --verb= get --resource= pods --resource-name= readablepod --resource-name= anotherpod
# 创建一个名为 "foo" 的集群角色,并指定 API 组
kubectl create clusterrole foo --verb= get,list,watch --resource= rs.apps
# 创建一个名为 "foo" 的集群角色,并指定 SubResource
kubectl create clusterrole foo --verb= get,list,watch --resource= pods,pods/status
# 创建一个名为 "foo" 的集群角色,并指定 NonResourceURL
kubectl create clusterrole "foo" --verb= get --non-resource-url= /logs/*
# 创建一个名为 "monitoring" 的集群角色,并指定 AggregationRule
kubectl create clusterrole monitoring --aggregation-rule= "rbac.example.com/aggregate-to-monitoring=true"
选项
--aggregation-rule <英文逗号分隔的 'key=value' 对>
用于组合 ClusterRole 的聚合标签选择算符。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
clusterrole 操作的帮助命令。
--non-resource-url strings
用户应有权限访问的部分 URL。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--resource strings
规则适用的资源。
--resource-name strings
规则适用的白名单中的资源,可以为多项重复使用此标志。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--verb strings
适用于规则中所含资源的动词。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.2 - kubectl create clusterrolebinding
简介
为特定的集群角色创建一个集群角色绑定。
kubectl create clusterrolebinding NAME --clusterrole= NAME [ --user= username] [ --group= groupname] [ --serviceaccount= namespace:serviceaccountname] [ --dry-run= server|client|none]
示例
# 使用 cluster-admin 集群角色为 user1、user2 和 group1 创建一个集群角色绑定
kubectl create clusterrolebinding cluster-admin --clusterrole= cluster-admin --user= user1 --user= user2 --group= group1
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--clusterrole string
特定 ClusterRoleBinding 应引用的 ClusterRole。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--group strings
要绑定到 ClusterRole 的组。此标志可以被重复使用以添加多个组。
-h, --help
clusterrolebinding 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--serviceaccount strings
要绑定到 ClusterRole 的服务账户,格式为 :。此标志可以被重复使用以添加多个服务账户。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--user strings
要绑定到 ClusterRole 的用户名。此标志可以被重复使用以添加多个用户。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.3 - kubectl create configmap
简介
基于文件、目录或指定的文字值创建 ConfigMap。
一个 ConfigMap 可以包含一个或多个键/值对。
当你基于文件创建 ConfigMap 时,键默认为文件的基本名称,值默认为文件内容。
如果基本名称是无效的键,你可以指定一个替代键。
当基于目录创建 ConfigMap 时,目录中每个基本名称是有效键的文件都会被打包到 ConfigMap 中。
除常规文件之外的所有目录条目都会被忽略(例如子目录、符号链接、设备、管道等)。
kubectl create configmap NAME [ --from-file=[ key =] source] [ --from-literal= key1 = value1] [ --dry-run= server|client|none]
示例
# 基于 bar 文件夹新建一个名为 my-config 的 ConfigMap
kubectl create configmap my-config --from-file= path/to/bar
# 新建一个名为 my-config 的 ConfigMap,使用指定的键而不是磁盘上的文件基本名称
kubectl create configmap my-config --from-file= key1 = /path/to/bar/file1.txt --from-file= key2 = /path/to/bar/file2.txt
# 新建一个名为 my-config 的 ConfigMap,包含 key1=config1 和 key2=config2
kubectl create configmap my-config --from-literal= key1 = config1 --from-literal= key2 = config2
# 从文件中的 key=value 对新建一个名为 my-config 的 ConfigMap
kubectl create configmap my-config --from-file= path/to/bar
# 从 env 文件新建一个名为 my-config 的 ConfigMap
kubectl create configmap my-config --from-env-file= path/to/foo.env --from-env-file= path/to/bar.env
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--append-hash
将 ConfigMap 的哈希值追加到其名称上。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--from-env-file strings
指定文件的路径以读取 key=val 对的那些行来创建 ConfigMap。
--from-file strings
键文件可以使用其文件路径来指定,在这种情况下,文件的基本名称将用作 ConfigMap 的键。
另外,键文件也可以选择使用键和文件路径来指定,在这种情况下,将使用指定的键。
指定一个目录将遍历此目录中所有被命名的文件(其基本名称为有效的 ConfigMap 键)。
--from-literal strings
指定键和文字值以插入到 ConfigMap 中(例如 mykey=somevalue)。
-h, --help
configmap 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.4 - kubectl create cronjob
简介
创建具有指定名称的 CronJob。
kubectl create cronjob NAME --image= image --schedule= '0/5 * * * ?' -- [ COMMAND] [ args...] [ flags]
示例
# 创建 CronJob
kubectl create cronjob my-job --image= busybox --schedule= "*/1 * * * *"
# 创建带有命令的 CronJob
kubectl create cronjob my-job --image= busybox --schedule= "*/1 * * * *" -- date
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
cronjob 操作的帮助命令。
--image string
要运行的镜像名称。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--restart string
Job 的重启策略。支持的值:OnFailure、Never
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--schedule string
Job 运行应使用的 Cron 格式的排期表。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.5 - kubectl create deployment
简介
创建指定名称的 Deployment。
kubectl create deployment NAME --image= image -- [ COMMAND] [ args...]
示例
# 创建一个名为 my-dep 的 Deployment,它将运行 busybox 镜像
kubectl create deployment my-dep --image= busybox
# 创建一个带有命令的 Deployment
kubectl create deployment my-dep --image= busybox -- date
# 创建一个名为 my-dep 的 Deployment,它将运行 nginx 镜像并有 3 个副本
kubectl create deployment my-dep --image= nginx --replicas= 3
# 创建一个名为 my-dep 的 Deployment,它将运行 busybox 镜像并公开端口 5701
kubectl create deployment my-dep --image= busybox --port= 5701
# 创建一个名为 my-dep 的 Deployment,它将运行多个容器
kubectl create deployment my-dep --image= busybox:latest --image= ubuntu:latest --image= nginx
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
deployment 操作的帮助命令。
--image strings
要运行的镜像名称。Deployment 可以为多容器 Pod 设置多个镜像。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--port int32 默认值:-1
指定 Deployment 公开的 containerPort。
-r, --replicas int32 默认值:1
要创建的副本数。默认值为 1。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.6 - kubectl create ingress
简介
创建指定名称的 Ingress。
kubectl create ingress NAME --rule= host/path= service:port[ ,tls[= secret]]
示例
# 创建一个名为 'simple' 的 Ingress,使用 TLS 类别 Secret "my-cert"
# 将针对 foo.com/bar 的请求重定向到 svc1:8080
kubectl create ingress simple --rule= "foo.com/bar=svc1:8080,tls=my-cert"
# 创建一个 Ingress,获取指向服务 svc:port 的所有 "/path" 请求,并将 Ingress Class 设置为 "otheringress"
kubectl create ingress catch-all --class= otheringress --rule= "/path=svc:port"
# 创建含两个注解 ingress.annotation1 和 ingress.annotation2 的 Ingress
kubectl create ingress annotated --class= default --rule= "foo.com/bar=svc:port" \
--annotation ingress.annotation1= foo \
--annotation ingress.annotation2= bla
# 创建具有相同主机和多个路径的 Ingress
kubectl create ingress multipath --class= default \
--rule= "foo.com/=svc:port" \
--rule= "foo.com/admin/=svcadmin:portadmin"
# 创建具有多个主机且 pathType 为 Prefix 的 Ingress
kubectl create ingress ingress1 --class= default \
--rule= "foo.com/path*=svc:8080" \
--rule= "bar.com/admin*=svc2:http"
# 创建使用默认 Ingress 证书来启用 TLS 且具备不同路径类型的 Ingress
kubectl create ingress ingtls --class= default \
--rule= "foo.com/=svc:https,tls" \
--rule= "foo.com/path/subpath*=othersvc:8080"
# 创建使用特定密钥来启用 TLS 且 pathType 为 Prefix 的 Ingress
kubectl create ingress ingsecret --class= default \
--rule= "foo.com/*=svc:8080,tls=secret1"
# 创建具有默认后端的 Ingress
kubectl create ingress ingdefault --class= default \
--default-backend= defaultsvc:http \
--rule= "foo.com/*=svc:8080,tls=secret1"
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--annotation strings
要在 Ingress 对象中插入的注解,格式为 annotation=value
--class string
要被使用的 Ingress Class
--default-backend string
用作后端的默认服务,格式为 svcname:port
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
ingress 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--rule strings
规则格式为 host/path=service:port[,tls=secretname]。包含前导字符 '*' 的路径被视为 pathType=Prefix。
tls 参数是可选的。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.7 - kubectl create job
简介
创建指定名称的 Job。
kubectl create job NAME --image= image [ --from= cronjob/name] -- [ COMMAND] [ args...]
示例
# 创建一个 Job
kubectl create job my-job --image= busybox
# 创建带一条命令的 Job
kubectl create job my-job --image= busybox -- date
# 从名为 "a-cronjob" 的定时任务创建一个 Job
kubectl create job test-job --from= cronjob/a-cronjob
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--from string
要创建 Job 的资源的来源名称(仅支持 cronjob)。
-h, --help
job 操作的帮助命令。
--image string
要运行的镜像名称。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.8 - kubectl create namespace
简介
用指定的名称创建命名空间。
kubectl create namespace NAME [ --dry-run= server|client|none]
示例
# 新建一个名为 my-namespace 的命名空间
kubectl create namespace my-namespace
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
namespace 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.9 - kubectl create poddisruptionbudget
简介
创建具有指定名称、选择算符和预期最少可用 Pod 个数的 Pod 干扰预算。
kubectl create poddisruptionbudget NAME --selector= SELECTOR --min-available= N [ --dry-run= server|client|none]
示例
# 创建一个名为 my-pdb 的 Pod 干扰预算,它将选择所有带有 app=rails 标签的 Pod
# 并要求至少有一个 Pod 在任何时候都是可用的
kubectl create poddisruptionbudget my-pdb --selector= app = rails --min-available= 1
# 创建一个名为 my-pdb 的 Pod 干扰预算,它将选择所有带有 app=nginx 标签的 Pod
# 并要求在任何时候所选 Pod 中至少有一半是可用的
kubectl create pdb my-pdb --selector= app = nginx --min-available= 50%
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
poddisruptionbudget 操作的帮助命令。
--max-unavailable string
指定预算要求的最大不可用 Pod 个数或百分比。
--min-available string
指定预算要求的最小不可用 Pod 个数或百分比。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--selector string
指定预算所用的标签选择算符。仅支持基于等值的选择算符。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.10 - kubectl create priorityclass
简介
创建带有指定名称、取值、globalDefault 设置及描述的优先级类对象。
kubectl create priorityclass NAME --value= VALUE --global-default= BOOL [ --dry-run= server|client|none]
示例
# 创建一个名为 high-priority 的优先级类
kubectl create priorityclass high-priority --value= 1000 --description= "high priority"
# 创建一个名为 default-priority 的优先级类,并将其视为全局默认优先级
kubectl create priorityclass default-priority --value= 1000 --global-default= true --description= "default priority"
# 创建一个名为 high-priority 的优先级类,它不能抢占低优先级的 Pod
kubectl create priorityclass high-priority --value= 1000 --description= "high priority" --preemption-policy= "Never"
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--description string
description 是一个任意字符串,通常提供有关何时应使用此优先级的指南。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--global-default
global-default 指定优先级类是否应被视为默认优先级。
-h, --help
priorityclass 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--preemption-policy string 默认值:"PreemptLowerPriority"
preemption-policy 是用于抢占低优先级 Pod 的策略。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--value int32
指定优先级类的取值。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.11 - kubectl create quota
简介
创建具有指定名称、硬性限制和可选范围的资源配额。
kubectl create quota NAME [ --hard= key1 = value1,key2= value2] [ --scopes= Scope1,Scope2] [ --dry-run= server|client|none]
示例
# 新建一个名为 my-quota 的资源配额
kubectl create quota my-quota --hard= cpu = 1,memory= 1G,pods= 2,services= 3,replicationcontrollers= 2,resourcequotas= 1,secrets= 5,persistentvolumeclaims= 10
# 新建一个名为 best-effort 的资源配额
kubectl create quota best-effort --hard= pods = 100 --scopes= BestEffort
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--hard string
以逗号分隔的、用于定义硬性限制的资源数量(resource=quantity)对的集合。
-h, --help
quota 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--scopes string
以逗号分隔的配额范围的集合,这些范围必须与配额跟踪的所有对象匹配。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果验证无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义验证,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.12 - kubectl create role
简介
创建单一规则的角色。
kubectl create role NAME --verb= verb --resource= resource.group/subresource [ --resource-name= resourcename] [ --dry-run= server|client|none]
示例
# 创建一个名为 "pod-reader" 的角色,允许用户对 Pod 执行 "get"、"watch" 和 "list" 操作
kubectl create role pod-reader --verb= get --verb= list --verb= watch --resource= pods
# 创建一个名为 "pod-reader" 的角色,并指定资源名称
kubectl create role pod-reader --verb= get --resource= pods --resource-name= readablepod --resource-name= anotherpod
# 创建一个名为 "foo" 的角色,并指定 API 组
kubectl create role foo --verb= get,list,watch --resource= rs.apps
# 创建一个名为 "foo" 的角色,并指定子资源
kubectl create role foo --verb= get,list,watch --resource= pods,pods/status
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
role 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--resource strings
规则适用的资源。
--resource-name strings
规则适用的白名单中的资源,可以为多项重复使用此标志。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--verb strings
适用于规则中所含资源的动词。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.13 - kubectl create rolebinding
简介
为特定角色或集群角色创建角色绑定。
kubectl create rolebinding NAME --clusterrole= NAME|--role= NAME [ --user= 用户名] [ --group= 组名] [ --serviceaccount= 命名空间:服务账户名] [ --dry-run= server|client|none]
示例
# 使用 admin 集群角色为 user1、user2 和 group1 创建角色绑定
kubectl create rolebinding admin --clusterrole= admin --user= user1 --user= user2 --group= group1
# 使用 admin 角色为服务账户 monitoring:sa-dev 创建角色绑定
kubectl create rolebinding admin-binding --role= admin --serviceaccount= monitoring:sa-dev
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--clusterrole string
指定 RoleBinding 应引用的 ClusterRole。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--group strings
要绑定到角色的组。此标志可以重复使用以添加多个组。
-h, --help
rolebinding 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--role string
指定 RoleBinding 应引用的角色。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--serviceaccount strings
要绑定到角色的服务账户,格式为 `:`。此标志可以重复使用以添加多个服务账户。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--user strings
要绑定到角色的用户名。此标志可以重复使用以添加多个用户。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.14 - kubectl create secret
简介
创建指定类型的 Secret:
docker-registry 类型 Secret 用于访问容器镜像仓库。
generic 类型 Secret 表示不透明 Secret 类型。
tls 类型 Secret 包含 TLS 证书及其关联密钥。
kubectl create secret ( docker-registry | generic | tls)
选项
-h, --help
secret 操作的帮助命令。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.15 - kubectl create secret docker-registry
简介
新建一个 Docker 仓库所用的 Secret。
Dockercfg Secret 用于向 Docker 仓库进行身份认证。
当使用 Docker 命令行推送镜像时,你可以通过运行以下命令向给定的仓库进行身份认证:
docker login DOCKER_REGISTRY_SERVER --username= DOCKER_USER --password= DOCKER_PASSWORD --email= DOCKER_EMAIL
这一命令会生成一个 ~/.dockercfg
文件,后续的 docker push
和 docker pull
命令将使用该文件向 Docker 仓库作身份认证。电子邮件地址是可选的。
在创建应用时,你可能有一个 Docker 仓库要求进行身份认证。为了让节点代表你拉取镜像,这些节点必须有凭据。
你可以通过创建一个 dockercfg Secret 并将其附加到你的服务帐户来提供这种凭据信息。
kubectl create secret docker-registry NAME --docker-username= user --docker-password= password --docker-email= email [ --docker-server= string] [ --from-file=[ key =] source] [ --dry-run= server|client|none]
示例
# 如果你还没有 .dockercfg 文件,可以直接创建一个 dockercfg Secret
kubectl create secret docker-registry my-secret --docker-server= DOCKER_REGISTRY_SERVER --docker-username= DOCKER_USER --docker-password= DOCKER_PASSWORD --docker-email= DOCKER_EMAIL
# 基于 ~/.docker/config.json 新建一个名为 my-secret 的 Secret
kubectl create secret docker-registry my-secret --from-file= path/to/.docker/config.json
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--append-hash
将 Secret 的哈希值追加到它的名称上。
--docker-email string
用于访问 Docker 仓库的电子邮件。
--docker-password string
用于向 Docker 仓库作身份认证的密码。
--docker-server string 默认值:"https://index.docker.io/v1/"
Docker 仓库所在的服务器地址。
--docker-username string
Docker 仓库身份认证所用的用户名。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--from-file strings
密钥文件可以通过其文件路径指定,这种情况将为它们分配一个默认名称 .dockerconfigjson;
也可以选择指定名称和文件路径,这种情况将使用给定的名称。
指定一个目录将遍历目录中所有已命名的且是有效 Secret 密钥的文件。
对于此命令,密钥应始终为 .dockerconfigjson。
-h, --help
docker-registry 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
此标志在你希望后续对该对象执行 kubectl apply 时很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份认证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份认证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份认证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.16 - kubectl create secret generic
简介
基于文件、目录或指定的文字值创建 Secret。
单个 Secret 可以包含一个或多个键值对。
当基于文件创建 Secret 时,键将默认为文件的基本名称,值将默认为文件内容。
如果基本名称是无效的键,或者你希望选择自己的键,你可以指定一个替代键。
当基于目录创建 Secret 时,目录中每个基本名称为有效键的文件都将被打包到 Secret 中。
除常规文件外的所有目录条目(例如子目录、符号链接、设备、管道等)都将被忽略。
kubectl create secret generic NAME [ --type= string] [ --from-file=[ key =] source] [ --from-literal= key1 = value1] [ --dry-run= server|client|none]
示例
# 新建一个名为 my-secret 的 Secret,其键为文件夹 bar 中的每个文件
kubectl create secret generic my-secret --from-file= path/to/bar
# 使用指定的键而不是磁盘上的文件名来新建一个名为 my-secret 的 Secret
kubectl create secret generic my-secret --from-file= ssh-privatekey= path/to/id_rsa --from-file= ssh-publickey= path/to/id_rsa.pub
# 使用 key1=supersecret 和 key2=topsecret 新建一个名为 my-secret 的 Secret
kubectl create secret generic my-secret --from-literal= key1 = supersecret --from-literal= key2 = topsecret
# 组合使用文件和文字值新建一个名为 my-secret 的 Secret
kubectl create secret generic my-secret --from-file= ssh-privatekey= path/to/id_rsa --from-literal= passphrase = topsecret
# 使用 env 文件新建一个名为 my-secret 的 Secret
kubectl create secret generic my-secret --from-env-file= path/to/foo.env --from-env-file= path/to/bar.env
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--append-hash
将 Secret 的哈希值追加到它的名称上。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
--from-env-file strings
指定文件路径以读取 key=val 对的行来创建一个 Secret。
--from-file strings
键可以通过其文件路径被指定,这种情况将为它们分配一个默认名称;
键也可以选择通过某个名称和文件路径被指定,这种情况将使用给定的名称。
指定一个目录将遍历目录中所有已命名的且是有效 Secret 键的文件。
--from-literal strings
指定键和文字值以插入到 Secret 中(例如 mykey=somevalue)。
-h, --help
generic 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
此标志在你希望后续对该对象执行 kubectl apply 时很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--type string
要创建的 Secret 的类别。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份认证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份认证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份认证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.17 - kubectl create secret tls
简介
使用给定的公钥/私钥对创建 TLS Secret。
事先公钥/私钥对必须存在。公钥证书必须是以 .PEM 编码的,并且与给定的私钥匹配。
kubectl create secret tls NAME --cert= path/to/cert/file --key= path/to/key/file [ --dry-run= server|client|none]
示例
# 使用给定的密钥对新建一个名为 tls-secret 的 TLS Secret
kubectl create secret tls tls-secret --cert= path/to/tls.crt --key= path/to/tls.key
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--append-hash
将 Secret 的哈希值追加到它的名称上。
--cert string
PEM 编码的公钥证书的路径。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
tls 操作的帮助命令。
--key string
与给定证书关联的私钥的路径。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.18 - kubectl create service
简介
使用指定的子命令创建 Service。
kubectl create service [ flags]
选项
-h, --help
service 操作的帮助命令。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.19 - kubectl create service clusterip
简介
创建指定名称的 ClusterIP Service。
kubectl create service clusterip NAME [ --tcp= <port>:<targetPort>] [ --dry-run= server|client|none]
示例
# 新建一个名为 my-cs 的 ClusterIP Service
kubectl create service clusterip my-cs --tcp= 5678:8080
# 新建一个名为 my-cs 的 ClusterIP Service(无头模式)
kubectl create service clusterip my-cs --clusterip= "None"
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--clusterip string
指定你自己的 ClusterIP 或设为 “None” 来创建无头服务(无负载均衡)。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
clusterip 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--tcp strings
端口对可以指定为 "<端口>:<目标端口>"。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.20 - kubectl create service externalname
简介
创建指定名称的 ExternalName Service。
ExternalName Service 引用外部 DNS 地址,而不仅仅是 Pod,
这类 Service 允许应用作者引用平台外、其他集群或本地存在的服务。
kubectl create service externalname NAME --external-name external.name [ --dry-run= server|client|none]
示例
# 新建一个名为 my-ns 的 ExternalName Service
kubectl create service externalname my-ns --external-name bar.com
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--external-name string
Service 对外的名称。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
externalname 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--tcp strings
端口对可以指定为 "<端口>:<目标端口>"。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.21 - kubectl create service loadbalancer
简介
创建指定名称的 LoadBalancer 类型 Service。
kubectl create service loadbalancer NAME [ --tcp= port:targetPort] [ --dry-run= server|client|none]
示例
# 新建名为 my-lbs 的 LoadBalancer 类型 Service
kubectl create service loadbalancer my-lbs --tcp= 5678:8080
选项
--allow-missing-template-keys Default: true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] Default: "none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
关于 loadbalancer 的帮助信息。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--tcp strings
端口对可以指定为 "<端口>:<目标端口>"。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.22 - kubectl create service nodeport
简介
创建一个指定名称的 NodePort 类型 Service。
kubectl create service nodeport NAME [ --tcp= port:targetPort] [ --dry-run= server|client|none]
示例
# 新建一个名为 my-ns 的 NodePort 类型 Service
kubectl create service nodeport my-ns --tcp= 5678:8080
选项
--allow-missing-template-keys Default: true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] Default: "none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
关于 nodeport 的帮助信息。
--node-port int
用于在集群中每个节点上公开 Service 的端口。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--tcp strings
端口对可以指定为 "<端口>:<目标端口>"。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.23 - kubectl create serviceaccount
简介
创建指定名称的服务帐户。
kubectl create serviceaccount NAME [--dry-run=server|client|none]
示例
# 创建一个名为 my-service-account 的服务帐号
kubectl create serviceaccount my-service-account
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-create"
用于跟踪字段属主关系的管理器的名称。
-h, --help
clusterrolebinding 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.15.24 - kubectl create token
简介
请求一个服务账号令牌。
kubectl create token SERVICE_ACCOUNT_NAME
示例
# 请求一个令牌,以当前命名空间中的服务账号 "myapp" 向 kube-apiserver 进行身份认证
kubectl create token myapp
# 为特定命名空间中的服务账号请求一个令牌
kubectl create token myapp --namespace myns
# 请求一个含自定义过期时间的令牌
kubectl create token myapp --duration 10m
# 请求一个包含特定受众的令牌
kubectl create token myapp --audience https://example.com
# 请求一个绑定到 Secret 对象实例的令牌
kubectl create token myapp --bound-object-kind Secret --bound-object-name mysecret
# 请求一个绑定到特定 UID 的 Secret 对象实例的令牌
kubectl create token myapp --bound-object-kind Secret --bound-object-name mysecret --bound-object-uid 0d4691ed-659b-4935-a832-355f77ee47cc
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--audience strings
所请求令牌的受众。如果不设置,默认请求一个用于 Kubernetes API 服务器的令牌。
可以重复使用此参数以便为多个受众请求有效的令牌。
--bound-object-kind string
要绑定令牌的目标对象的类别。支持的类别有 Node、Pod 和 Secret。
如果设置了此参数,则必须提供 `--bound-object-name`。
--bound-object-name string
要绑定令牌的目标对象的名称。当对象被删除时,令牌将会过期。需要指定 `--bound-object-kind`。
--bound-object-uid string
要绑定令牌的目标对象的 UID。需要同时指定 `--bound-object-kind` 和 `--bound-object-name`。
如果不设置,则使用现有对象的 UID。
--duration duration
对于将被颁发令牌,所请求的生命期。如果不设置或设置为 0,则生命期将由服务器自动确定。
服务器可能会返回一个生命期更长或更短的令牌。
-h, --help
token 操作的帮助命令。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.16 - kubectl debug
简介
使用交互式调试容器调试集群资源。
“debug” 针对按资源和名称标识的集群对象为常用的调试任务提供自动化操作。如果不指定资源,则默认使用 Pod。
“debug” 采取的操作因指定的资源而异。支持的操作包括:
工作负载:创建现有 Pod 的副本并更改某些属性,例如将镜像标签更改为新版本。
工作负载:向已运行的 Pod 中添加临时容器,例如在不重启 Pod 的情况下添加调试工具。
节点:新建一个在节点的主机命名空间中运行并可以访问节点文件系统的 Pod。
kubectl debug ( POD | TYPE[[ .VERSION] .GROUP] /NAME) [ -- COMMAND [ args...] ]
示例
# 在名为 mypod 的 Pod 中创建一个交互式调试会话并立即挂接到此会话
kubectl debug mypod -it --image= busybox
# 为文件 pod.yaml 中的 Pod 创建一个交互式调试会话并立即挂接到此会话
# (需要在集群中启用 EphemeralContainers 特性)
kubectl debug -f pod.yaml -it --image= busybox
# 使用特定的自动调试镜像创建一个名为 debugger 的调试容器
kubectl debug --image= myproj/debug-tools -c debugger mypod
# 创建 mypod 的副本,添加调试容器并挂接到此容器
kubectl debug mypod -it --image= busybox --copy-to= my-debugger
# 创建 mypod 的副本,更改 mycontainer 的命令
kubectl debug mypod -it --copy-to= my-debugger --container= mycontainer -- sh
# 创建 mypod 的副本,将所有容器镜像更改为 busybox
kubectl debug mypod --copy-to= my-debugger --set-image= *= busybox
# 创建 mypod 的副本,添加调试容器并更改容器镜像
kubectl debug mypod -it --copy-to= my-debugger --image= debian --set-image= app = app:debug,sidecar= sidecar:debug
# 在节点上创建一个交互式调试会话并立即挂接到此会话
# 容器将在主机命名空间中运行,主机的文件系统将被挂载到 /host
kubectl debug node/mynode -it --image= busybox
选项
--arguments-only
如果指定,`--` 之后的所有内容将作为 Args 而不是作为 Command 传递给新容器。
--attach
如果为 true,则等待容器开始运行,然后就像以前调用 “kubectl attach ...” 一样执行挂接操作。
默认为 false,如果设置了 “-i/--stdin”,则默认为 true。
-c, --container string
调试容器要使用的容器名称。
--copy-to string
创建目标 Pod 的副本,并将副本命名为指定名称。
--custom string
包含部分容器规约的 JSON 或 YAML 文件的路径,用于自定义内置调试配置文件。
--env stringToString 默认值:[]
要在容器中设置的环境变量。
-f, --filename strings
标识要调试的资源。
-h, --help
debug 操作的帮助命令。
--image string
调试容器要使用的容器镜像。
--image-pull-policy string
容器的镜像拉取策略。如果留空,此值将不会由客户端指定,而是默认由服务器指定。
--keep-annotations
如果为真,则保留原始 Pod 的注解。
(此标志仅与 '--copy-to' 一起使用时才有效)
--keep-init-containers Default: true
运行 Pod 的初始化容器,默认为 true。
(此标志仅与 '--copy-to' 一起使用时才有效)
--keep-labels
如果为真,则保留原始 Pod 的标签。
(此标志仅与 '--copy-to' 一起使用时才有效)
--keep-liveness
如果为真,则保留原始 Pod 的存活性检测。
(此标志仅与 '--copy-to' 一起使用时才有效)
--keep-readiness
如果为真,则保留原始 Pod 的就绪性探测。
(此标志仅与 '--copy-to; 一起使用时才有效)
--keep-startup
如果为真,则保留原始 Pod 的启动性检测。
(此标志仅与 '--copy-to' 一起使用时才有效)
--profile string 默认值:"legacy"
可选项包括 "legacy"、"general"、"baseline"、"netadmin"、"restricted" 或 "sysadmin"。
-q, --quiet
如果为 true,则抑制资讯类消息。
--replace
当与 “--copy-to” 一起使用时,删除原来的 Pod。
--same-node
当与 “--copy-to” 一起使用时,将目标 Pod 的副本调度到同一个节点上。
--set-image stringToString 默认值:[]
当与 “--copy-to” 一起使用时,提供一个 name=image 对的列表以更改容器镜像,类似于 `kubectl set image` 的工作方式。
--share-processes 默认值:true
当与 “--copy-to” 一起使用时,在副本中启用进程命名空间共享。
-i, --stdin
即使什么都没挂接,也要保持 Pod 中容器上的标准输入处于打开状态。
--target string
当使用临时容器时,将目标锁定为名称所指定的容器中的进程。
-t, --tty
为调试容器分配 TTY。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中的集群名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.17 - kubectl delete
简介
基于文件名、标准输入、资源和名称,或基于资源和标签选择算符来删除资源。
接受 JSON 和 YAML 格式。只能指定一种类型的参数:文件名、资源加名称,或资源加标签选择算符。
某些资源(如 Pod)支持体面删除。这些资源定义了在强制终止之前的默认时长(宽限期),
但你可以使用 --grace-period 标志覆盖该值,或传递 --now 将宽限期设置为 1。
由于这些资源通常代表集群中的实体,所以删除可能不会立即得到确认。
如果托管 Pod 的节点宕机或无法访问 API 服务器,则终止所用的时间可能比宽限期长得多。
要强制删除某资源,你必须指定 --force 标志。
注意:只有一部分资源支持体面删除。如果不支持体面删除,--grace-period 标志将被忽略。
重要提示:强制删除 Pod 不会等待确认 Pod 的进程已被终止,
这可能会导致直到节点检测到删除请求并完成体面删除之前,Pod 中的进程一直继续运行。
如果你的进程使用共享存储或与远程 API 通信并依赖 Pod 的名称来标识自己,强制删除这些 Pod
可能会导致在不同机器上运行的多个进程使用相同的标识,从而可能导致数据损坏或不一致。
只有在你确定 Pod 已被终止或你的应用可以容忍同时运行相同 Pod 的多个副本时,才可以强制删除 Pod。
此外,如果你强制删除 Pod,调度器可能会在节点释放这些资源之前在这些节点上调度新的 Pod,从而使得 Pod 被立即驱逐。
请注意,删除命令不会检查资源版本,因此如果有人在你提交删除指令时提交了资源更新指令,
他们的更新请求将与剩余的资源一起丢失。
在 CustomResourceDefinition 被删除之后,对发现缓存的的刷新可能需要长达 6 小时的时长。
如果你不想等待,可以运行 "kubectl api-resources" 来刷新发现缓存。
kubectl delete ([ -f FILENAME] | [ -k DIRECTORY] | TYPE [( NAME | -l label | --all)])
示例
# 使用 pod.json 中指定的类型和名称删除一个 Pod
kubectl delete -f ./pod.json
# 基于包含 kustomization.yaml 的目录(例如 dir/kustomization.yaml)中的内容删除资源
kubectl delete -k dir
# 删除所有以 '.json' 结尾的文件中的资源
kubectl delete -f '*.json'
# 基于传递到标准输入的 JSON 中的类型和名称删除一个 Pod
cat pod.json | kubectl delete -f -
# 删除名称为 "baz" 和 "foo" 的 Pod 和 Service
kubectl delete pod,service baz foo
# 删除打了标签 name=myLabel 的 Pod 和 Service
kubectl delete pods,services -l name = myLabel
# 以最小延迟删除一个 Pod
kubectl delete pod foo --now
# 强制删除一个死节点上的 Pod
kubectl delete pod foo --force
# 删除所有 Pod
kubectl delete pods --all
选项
--all
删除指定资源类型的命名空间中的所有资源。
-A, --all-namespaces
如果存在,则列举所有命名空间中请求的对象。
即使使用 --namespace 指定,当前上下文中的命名空间也会被忽略。
--cascade string[="background"] 默认值:"background"
必须是 "background"、"orphan" 或 "foreground"。
选择依赖项(例如,由 ReplicationController 创建的 Pod)的删除级联策略,
默认为 background。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-selector string
过滤所用的选择算符(字段查询),支持 '='、'==' 和 '!='。
(例如 --field-selector key1=value1,key2=value2)。服务器针对每种类型仅支持有限数量的字段查询。
-f, --filename strings
包含要删除的资源的文件名。
--force
如果为真,则立即从 API 中移除资源并略过体面删除处理。
请注意,立即删除某些资源可能会导致不一致或数据丢失,并且需要确认操作。
--grace-period int 默认值:-1
指定给资源的体面终止时间(以秒为单位)。
如果为负数则忽略,为 1 表示立即关闭。
仅当 --force 为真(强制删除)时才可以设置为 0。
-h, --help
delete 操作的帮助命令。
--ignore-not-found
将 “resource not found” 视为成功删除。当指定 --all 参数时,默认值为 “true”。
-i, --interactive
如果为 true,仅在用户确认时删除资源。
-k, --kustomize string
处理 kustomization 目录,此标志不能与 -f 或 -R 一起使用。
--now
如果为 true,资源将被标记为立即关闭(等同于 --grace-period=1)。
-o, --output string
输出模式。使用 “-o name” 以获得更简短的输出(resource/name)。
--raw string
向服务器发送 DELETE 请求所用的原始 URI。使用 kubeconfig 文件中指定的传输方式。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--timeout duration
放弃删除之前等待的时间长度,为 0 表示根据对象的大小确定超时。
--wait 默认值:true
如果为 true,则等待资源消失后再返回。此参数会等待终结器被清空。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.18 - kubectl describe
简介
显示某个特定资源或某组资源的细节。
打印所选资源的详细描述,包括事件或控制器等相关资源。
你可以通过名称选择单个对象,选择该类型的所有对象,提供名称前缀或标签选择算符。例如:
kubectl describe TYPE NAME_PREFIX
这条命令将首先检查与 TYPE 和 NAME_PREFIX 的精确匹配。
如果不存在这样的资源,它将输出名称以 NAME_PREFIX 为前缀的所有资源的细节。
使用 "kubectl api-resources" 获取受支持资源的完整列表。
kubectl describe ( -f FILENAME | TYPE [ NAME_PREFIX | -l label] | TYPE/NAME)
示例
# 描述一个节点
kubectl describe nodes kubernetes-node-emt8.c.myproject.internal
# 描述一个 Pod
kubectl describe pods/nginx
# 描述在 "pod.json" 中通过类别和名称标识的 Pod
kubectl describe -f pod.json
# 描述所有 Pod
kubectl describe pods
# 描述带标签 name=myLabel 的 Pod
kubectl describe pods -l name = myLabel
# 描述由 “frontend” 副本控制器管理的所有 Pod
# (副本控制器所创建的 Pod 在 Pod 名称中带有此副本控制器的名称作为前缀)
kubectl describe pods frontend
选项
-A, --all-namespaces
如果存在,则列举所有命名空间中请求的对象。
即使使用 --namespace 指定,当前上下文中的命名空间也会被忽略。
--chunk-size int 默认值:500
以块的形式返回大的列表,而不是一次性全部返回。设为 0 表示禁用。
此标志处于 Beta 阶段,未来可能会有变更。
-f, --filename strings
文件名、目录或文件 URL 的列表,包含要描述的资源。
-h, --help
describe 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-events 默认值:true
如果为 true,显示与所描述对象相关的事件。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.19 - kubectl diff
简介
对比当前在线配置与通过文件名或标准输入所指定的配置之间的差异,并显示如果应用配置后将会如何变化。
输出始终是 YAML。
KUBECTL_EXTERNAL_DIFF 环境变量可用于选择你自己的 diff 命令。
用户也可以使用带参数的外部命令,例如:
KUBECTL_EXTERNAL_DIFF = "colordiff -N -u"
默认情况下,路径中可用的 "diff" 命令在运行时会附带 "-u"(统一差异)和 "-N"(将缺失的文件视为空)选项。
退出状态:0 表示未发现差异。1 表示发现差异。>1 表示 kubectl 或 diff 发生错误。
注意:如果使用 KUBECTL_EXTERNAL_DIFF,则需要遵循该约定。
示例
# 对比 pod.json 中包含的资源
kubectl diff -f pod.json
# 对比从标准输入读取到的文件
cat service.yaml | kubectl diff -f -
选项
--concurrency int 默认值:1
在与当前版本进行差异比较时并行处理的对象的数量。
数量越多,速度越快,但在短时间内会消耗更多的内存、I/O 和 CPU 等资源。
--field-manager string 默认值:"kubectl-client-side-apply"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
包含 diff 操作所用配置的文件名、目录或指向文件的 URL。
--force-conflicts
如果为 true,服务器端应用将基于冲突强制进行更改。
-h, --help
diff 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--prune
包含将通过裁剪操作被删除的资源。可以与 -l 一起使用,默认显示所有将被裁剪的资源。
--prune-allowlist strings
使用 <group/version/kind> 覆写默认的允许列表以执行 --prune 操作。
-R, --recursive
以递归方式处理以 -f 或 --filename 指定的目录。当你希望管理在同一目录中组织的相关清单时,这很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--server-side
如果为 true,应用操作将在服务器上运行,而不是在客户端运行。
--show-managed-fields
如果为 true,则在 diff 中包含托管的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中的集群名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份认证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份认证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份认证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.20 - kubectl drain
简介
腾空节点以准备维护。
给定节点将被标记为不可调度,以防止新的 Pod 调度到此。
如果 API 服务器支持 Eviction ,
则 "drain" 会驱逐 Pod。否则,它将使用常规的 DELETE 来删除 Pod。
"drain" 会驱逐或删除除镜像 Pod(无法通过 API 服务器删除)之外的所有 Pod。
如果存在 DaemonSet 管理的 Pod,若没有 --ignore-daemonsets
,"drain" 将不会继续执行,
无论如何,"drain" 操作都不会删除 Daemonset 所管理的任何 Pod,因为这些 Pod 会立即被 DaemonSet 控制器替换,
如果有 Pod 既不是镜像 Pod,也不是由 ReplicationController、ReplicaSet、DaemonSet、StatefulSet 或 Job 管理,
则 "drain" 不会删除此 Pod,除非你使用 --force。如果一个或多个 Pod 的管理资源丢失,--force 还将允许继续删除。
"drain" 等待体面终止。在命令完成之前,不应在机器上进行操作。
当你准备好将节点重新投入使用时,请使用 kubectl uncordon
,这将使节点再次可调度。
示例
# 腾空节点 "foo",即使上面有不受 ReplicationController、ReplicaSet、Job、DaemonSet 或 StatefulSet 管理的 Pod
kubectl drain foo --force
# 与上条命令类似,但如果存在不受 ReplicationController、ReplicaSet、Job、DaemonSet 或 StatefulSet 管理的 Pod,则中止,并使用 15 分钟的宽限期
kubectl drain foo --grace-period= 900
选项
--chunk-size int 默认值:500
以块的形式返回大的列表,而不是一次性全部返回。设为 0 表示禁用。
此标志处于 Beta 阶段,未来可能会有变更。
--delete-emptydir-data
即使存在使用 emptyDir(腾空节点时将被删除的本地数据)的 Pod,也要继续。
--disable-eviction
强制使用删除操作来进行节点腾空,即使系统支持驱逐操作。
这种设置将绕过检查 PodDisruptionBudget 约束,请谨慎使用。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--force
即使存在未声明控制器的 Pod,也要继续。
--grace-period int 默认值:-1
给予每个 Pod 体面终止的时间段长度(以秒为单位)。如果为负,则将使用 Pod 中指定的默认值。
-h, --help
关于 drain 的帮助信息。
--ignore-daemonsets
忽略 DaemonSet 所控制的 Pod。
--pod-selector string
用于过滤节点上 Pod 的标签选择器。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--skip-wait-for-delete-timeout int
如果 Pod 的 DeletionTimestamp 比当前时间早 N 秒,那么跳过等待该 Pod 的过程。
秒数必须大于 0 才能跳过等待。
--timeout duration
在放弃之前等待的时间长度,为 0 表示无限等待。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string Default: "$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.21 - kubectl edit
简介
用默认编辑器编辑资源。
edit 命令允许你直接编辑可通过命令行工具检索的任何 API 资源。
它将打开由 KUBE_EDITOR 或 EDITOR 环境变量定义的编辑器,或者回退到使用 Linux 的 "vi" 或 Windows 的 "notepad"。
当尝试打开编辑器时,它将首先尝试使用 "SHELL" 环境变量中定义的 shell。
如果未定义,将使用默认的 shell,在 Linux 中为 "/bin/bash",在 Windows 中为 "cmd"。
你可以编辑多个对象,但一次只会应用一个更改。该命令接受文件名和命令行参数,尽管你指向的文件必须是以前保存的资源版本。
edit 是通过用于获取资源的 API 版本完成的。要编辑特定 API 版本的资源,请完全限定资源、版本和组。
默认格式为 YAML。要以 JSON 格式进行编辑,请指定 "-o json"。
--windows-line-endings
标志可用于强制 Windows 行结束,否则将使用操作系统的默认值。
如果更新时发生错误,将在磁盘上创建一个临时文件,其中包含未应用的更改。
更新资源时最常见的错误是另一个编辑器更改了服务器上的资源。发生这种情况时,
你必须在应用到较新版本的资源进行更新,或更新临时保存的副本以包含最新的资源版本。
kubectl edit ( RESOURCE/NAME | -f FILENAME)
示例
# 编辑名为 "registry" 的 Service
kubectl edit svc/registry
# 使用替代编辑器
KUBE_EDITOR = "nano" kubectl edit svc/registry
# 使用 v1 API 格式编辑 JSON 中的 Job "myjob"
kubectl edit job.v1.batch/myjob -o json
# 在 YAML 中编辑 Deployment "mydeployment" 并将修改后的配置保存在其注解中
kubectl edit deployment/mydeployment -o yaml --save-config
# 编辑 "mydeployment" Deployment 的 "status" 子资源
kubectl edit deployment mydeployment --subresource= 'status'
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--field-manager string Default: "kubectl-edit"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
用于编辑资源的文件名、目录或文件 URL 的列表。
-h, --help
关于 edit 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--output-patch
如果资源被编辑,则输出补丁。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--subresource string
如果指定,edit 将对所请求对象的子资源进行操作。
(目前)只能是 status 子资源。
该标志处于 Beta 状态,将来可能会发生变化。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--windows-line-endings
仅在 --edit=true 时相关。默认为你所用平台原生的行结尾格式。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.22 - kubectl events
简介
显示事件。
打印一张包含与事件相关的最重要信息的表格。
你可以请求某个命名空间的事件、所有命名空间的事件,或者仅过滤出与指定资源相关的事件。
kubectl events [( -o|--output=) json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file] [ --for TYPE/NAME] [ --watch] [ --types= Normal,Warning]
示例
# 列举 default 命名空间中近期的事件
kubectl events
# 列举所有命名空间中近期的事件
kubectl events --all-namespaces
# 列举指定 Pod 的近期事件,然后等待更多事件,并在出现新事件时列举出来
kubectl events --for pod/web-pod-13je7 --watch
# 以 YAML 格式列举近期的事件
kubectl events -oyaml
# 仅列举类别为 “Warning” 或 “Normal” 的近期事件
kubectl events --types= Warning,Normal
选项
-A, --all-namespaces
如果存在,则列举所有命名空间中请求的对象。
即使使用 --namespace 指定,当前上下文中的命名空间也会被忽略。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--chunk-size int 默认值:500
以块的形式返回大的列表,而不是一次性全部返回。设为 0 表示禁用。
此标志处于 Beta 阶段,未来可能会有变更。
--for string
仅过滤与指定资源相关的事件。
-h, --help
events 操作的帮助命令。
--no-headers
在使用默认的输出格式时不打印表头。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--types strings
仅输出指定类型的事件。
-w, --watch
列举请求的事件后,继续监视更多事件。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理
11.2.23 - kubectl exec
简介
在容器中执行命令。
kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]
示例
# 在 Pod mypod 中执行 'date' 命令获取输出,默认在第一个容器中执行
kubectl exec mypod -- date
# 在 Pod mypod 的 ruby-container 容器中执行 'date' 命令并获取输出
kubectl exec mypod -c ruby-container -- date
# 切换到原始终端模式;从 Pod mypod 将 stdin 发送到 ruby-container 中的 'bash',
# 并将 stdout/stderr 从 'bash' 发送回客户端
kubectl exec mypod -c ruby-container -i -t -- bash -il
# 在 Pod mypod 的第一个容器中列出 /usr 的内容,并按修改时间排序
# 如果你要在 Pod 中执行的命令具有任何与 kubectl 本身重叠的标志(例如 -i),
# 则必须使用两个破折号(--)来分隔命令的标志/参数
# 另请注意,不要用引号括住你的命令及其标志/参数,
# 除非这是你正常执行它的方式(即执行 ls -t /usr,而不是 "ls -t /usr")
kubectl exec mypod -i -t -- ls -t /usr
# 在 Deployment mydeployment 中的第一个 Pod 运行 'date' 命令并获取输出,默认使用 Pod 的第一个容器
kubectl exec deploy/mydeployment -- date
# 在 Service myservice 的第一个 Pod 运行 'date' 命令并获取输出,默认使用 Pod 的第一个容器
kubectl exec svc/myservice -- date
选项
-c, --container string
容器名称。
如果省略,则使用 kubectl.kubernetes.io/default-container 注解来选择要挂接的容器,
否则将选择 Pod 中的第一个容器。
-f, --filename strings
用于在资源中执行的文件。
-h, --help
关于 exec 的帮助信息。
--pod-running-timeout duration 默认:1m0s
等待至少一个 Pod 运行的时间长度(例如 5 秒、2 分钟或 3 小时,大于零)。
-q, --quiet
仅打印远程会话的输出。
-i, --stdin
将 stdin 传递给容器。
-t, --tty
Stdin 是一个 TTY。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.24 - kubectl explain
简介
描述各种资源的字段和结构。
此命令描述与每个被支持的 API 资源关联的字段。
这些字段通过一个简单的 JSONPath 标识符进行识别:
<类型>.<字段名>[.<字段名>]
有关每个字段的信息是以 OpenAPI 格式从服务器中检索而来的。
使用 "kubectl api-resources" 获取受支持的资源的完整列表。
kubectl explain TYPE [ --recursive= FALSE|TRUE] [ --api-version= api-version-group] [ --output= plaintext|plaintext-openapiv2]
示例
# 获取资源及其字段的文档
kubectl explain pods
# 获取资源中的所有字段
kubectl explain pods --recursive
# 获取被支持的 API 版本中 Deployment 的解释
kubectl explain deployments --api-version= apps/v1
# 获取资源中特定字段的文档
kubectl explain pods.spec.containers
# 获取资源的不同格式的文档
kubectl explain deployment --output= plaintext-openapiv2
选项
--api-version string
使用资源的给定的 API 版本(组/版本)。
-h, --help
explain 操作的帮助命令。
--output string 默认值:"plaintext"
渲染模式的格式。有效值为:(plaintext、plaintext-openapiv2)。
--recursive
如果为真,递归打印所有字段的名称。否则,打印可用字段及其描述。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群控制器
11.2.25 - kubectl expose
简介
将资源公开为新的 Kubernetes 服务。
基于名称查找 Deployment、Service、ReplicaSet、ReplicationController 或 Pod,
并将该资源的选择算符用作指定端口上新服务的选择算符。
只有当 Deployment 或 ReplicaSet 的选择算符可转换为服务支持的选择算符
(即选择算符仅包含 matchLabels 部分)时,才会将其公开为服务。
请注意,如果未通过 --port 指定端口且所公开的资源有多个端口,
则新服务将重用所有这些端口。此外,如果未指定标签,新服务将重用它所公开的资源的标签。
可能的资源包括(不区分大小写):
pod (po),service (svc),replicationcontroller (rc),deployment (deploy),replicaset (rs)
kubectl expose 命令的格式为:
kubectl expose ( -f FILENAME | TYPE NAME) [ --port= port] [ --protocol= TCP|UDP|SCTP] [ --target-port= number-or-name] [ --name= name] [ --external-ip= external-ip-of-service] [ --type= type]
示例
# 为多副本的 nginx 创建一个服务,服务端口为 80,通过端口 8000 连接到容器
kubectl expose rc nginx --port= 80 --target-port= 8000
# 为在 "nginx-controller.yaml" 中以 type 和 name 指定的 ReplicationController 创建一个服务
# 服务端口为 80,通过端口 8000 连接到容器
kubectl expose -f nginx-controller.yaml --port= 80 --target-port= 8000
# 为名为 valid-pod 的 Pod 创建一个服务,服务端口为 444,名称为 "frontend"
kubectl expose pod valid-pod --port= 444 --name= frontend
# 基于上述服务创建第二个服务,将容器端口 8443 公开为端口 443,名称为 "nginx-https"
kubectl expose service nginx --port= 443 --target-port= 8443 --name= nginx-https
# 为在端口 4100 上平衡 UDP 流量的多副本流应用创建一个服务,名称为 “video-stream”
kubectl expose rc streamer --port= 4100 --protocol= UDP --name= video-stream
# 为使用 ReplicaSet 的多副本 nginx 创建一个服务,服务端口为 80,通过端口 8000 连接到容器
kubectl expose rs nginx --port= 80 --target-port= 8000
# 为 nginx Deployment 创建一个服务,服务端口为 80,通过端口 8000 连接到容器
kubectl expose deployment nginx --port= 80 --target-port= 8000
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--cluster-ip string
要指派给服务的 ClusterIP。留空表示自动分配,或设置为 “None” 以创建无头服务。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--external-ip string
服务要接受的附加外部 IP 地址(不由 Kubernetes 管理)。
如果此 IP 被路由到某个节点,则除了生成的服务 IP 之外,还可以通过此 IP 访问服务。
--field-manager string 默认值:"kubectl-expose"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL 列表,用于标识要公开服务的资源。
-h, --help
expose 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-l, --labels string
要应用到此子命令所创建的服务上的标签。
--load-balancer-ip string
要指派给负载均衡器的 IP。如果为空,将创建并使用一个临时 IP(具体取决于云提供商)。
--name string
新建对象的名称。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--override-type string 默认值:"merge"
用于覆盖已生成对象的方法:json、merge 或 strategic。
--overrides string
用于覆盖已生成对象的内联 JSON。如果此字段非空,它将用于覆盖已生成的对象。
要求对象提供一个有效的 apiVersion 字段。
--port string
应该用于提供服务的端口。如果不指定,则从正被公开的资源复制。
--protocol string
要创建的服务的网络协议。默认是 “TCP”。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--selector string
指定服务所用的标签选择算符。仅支持基于等式的选择算符需求。
如果为空(默认值),则从 ReplicationController 或 ReplicaSet 中推断选择算符。
--session-affinity string
如果非空,将服务的会话亲和性设置为此值;有效值为:“None”、“ClientIP”。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--target-port string
容器上服务应将流量导向的端口名称或端口号。可选。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--type string
此服务的类别:ClusterIP、NodePort、LoadBalancer 或 ExternalName。默认是 “ClusterIP”。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.26 - kubectl get
简介
显示一个或多个资源。
打印一张包含与指定资源相关的最重要信息的表格。
你可以使用标签选择算符(--selector 标志)来过滤列表。
如果所请求的资源类型是命名空间作用域的,你只会看到当前命名空间中的结果,
除非你传递 --all-namespaces 参数。
通过将输出指定为 “template” 并提供一个 Go 模板作为 --template 标志的值,你可以过滤所读取资源的属性。
使用 "kubectl api-resources" 获取受支持的资源的完整列表。
kubectl get [( -o|--output=) json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide] ( TYPE[ .VERSION][ .GROUP] [ NAME | -l label] | TYPE[ .VERSION][ .GROUP] /NAME ...) [ flags]
示例
# 以 ps 输出格式列举所有 Pod
kubectl get pods
# 以 ps 输出格式列举所有 Pod,并提供更多信息(如节点名称)
kubectl get pods -o wide
# 以 ps 输出格式列举指定名称的单个副本控制器
kubectl get replicationcontroller web
# 以 JSON 输出格式列举 "apps" API 组 "v1" 版本中的 Deployment
kubectl get deployments.v1.apps -o json
# 以 JSON 输出格式列举单个 Pod
kubectl get -o json pod web-pod-13je7
# 以 JSON 输出格式列举在 "pod.yaml" 中以 type 和 name 指定的 Pod
kubectl get -f pod.yaml -o json
# 列举 kustomization.yaml 所在目录(例如 dir/kustomization.yaml)中的资源
kubectl get -k dir/
# 仅返回指定 Pod 的 phase 值
kubectl get -o template pod/web-pod-13je7 --template={{ .status.phase}}
# 在自定义列中列举资源信息
kubectl get pod test-pod -o custom-columns= CONTAINER:.spec.containers[ 0] .name,IMAGE:.spec.containers[ 0] .image
# 以 ps 输出格式同时列举所有副本控制器和服务
kubectl get rc,services
# 按类型和名称列举一个或多个资源
kubectl get rc/web service/frontend pods/web-pod-13je7
# 列举单个 Pod 的 “status” 子资源
kubectl get pod web-pod-13je7 --subresource status
# 列出 “backend” 命名空间中的所有 Deployment
kubectl get deployments.apps --namespace backend
# 列出所有命名空间中存在的所有 Pod
kubectl get pods --all-namespaces
选项
-A, --all-namespaces
如果存在此标志,则跨所有命名空间列举所请求的对象。
即使使用 --namespace 指定了命名空间,当前上下文中的命名空间也会被忽略。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--chunk-size int 默认值:500
以块的形式返回大的列表,而不是一次性全部返回。设为 0 表示禁用。
此标志处于 Beta 阶段,未来可能会有变更。
--field-selector string
过滤所用的选择算符(字段查询),支持 '='、'==' 和 '!='。
(例如 --field-selector key1=value1,key2=value2)。服务器针对每种类型仅支持有限数量的字段查询。
-f, --filename strings
文件名、目录或文件 URL 列表,用于标识要从服务器获取的资源。
-h, --help
get 操作的帮助命令。
--ignore-not-found
如果请求的对象不存在,此命令将返回退出码 0。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-L, --label-columns strings
接受一个用逗号分隔的标签列表,这些标签将被用作所打印表格中的不同列。
名称区分大小写。你也可以使用多个标志选项,例如 -L label1 -L label2...
--no-headers
当使用默认或自定义列输出格式时,不要打印标题(默认打印标题)。
-o, --output string
输出格式。可选值为:json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、
jsonpath-as-json、jsonpath-file、custom-columns、custom-columns-file、wide。参见自定义列
[https://kubernetes.io/zh-cn/docs/reference/kubectl/#custom-columns]、golang 模板
[http://golang.org/pkg/text/template/#pkg-overview] 和 jsonpath 模板
[https://kubernetes.io/zh-cn/docs/reference/kubectl/jsonpath/]。
--output-watch-events
使用 --watch 或 --watch-only 标志时输出监视事件对象。现有对象被输出为初始的 ADDED 事件。
--raw string
向服务器发送请求所用的原始 URI。使用 kubeconfig 文件中指定的传输方式。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--server-print 默认值:true
如果为 true,则令服务器返回适当的表格输出。支持扩展 API 和 CRD。
--show-kind
如果存在此标志,则列举所请求对象的资源类型。
--show-labels
打印时,将所有标签显示为最后一列(默认隐藏标签列)。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--sort-by string
如果非空,则使用此字段规约对列表类型进行排序。
字段规约表示为 JSONPath 表达式(例如 “{.metadata.name}”)。
由此 JSONPath 表达式指定的 API 资源中的字段必须是一个整数或字符串。
--subresource string
如果指定,则读取所请求对象的指定子资源。
必须是 status、scale 之一。此标志处于 Beta 阶段,未来可能会有所变化。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
-w, --watch
列举/获取请求的对象后,监视其变化。
--watch-only
监视所请求对象的变化,而不先列举/获取对象。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.27 - kubectl kustomize
简介
使用 'kustomization.yaml' 文件构建一组 KRM 资源。
DIR 参数必须是包含 'kustomization.yaml' 的目录的路径,
或相对于 git 仓库根目录而言路径后缀相同的 Git 存储库 URL。
如果省略 DIR,则认定为 '.'(当前目录)。
kubectl kustomize DIR [flags]
示例
# 使用当前工作目录执行 build 操作
kubectl kustomize
# 使用一些共享的配置目录来执行 build 操作
kubectl kustomize /home/config/production
# 基于 Github 仓库来执行 build 操作
kubectl kustomize https://github.com/kubernetes-sigs/kustomize.git/examples/helloWorld?ref=v1.0.6
选项
--as-current-user
使用命令执行者所拥有的 uid 和 gid 在容器中执行此操作。
--enable-alpha-plugins
启用 Kustomize 插件。
--enable-helm
启用 Helm Chart 生成器。
-e, --env strings
函数要使用的环境变量列表。
--helm-api-versions strings
Helm 用于 Capabilities.APIVersions 的 Kubernetes API 版本
--helm-command string 默认:"helm"
helm 命令(可执行文件路径)。
--helm-kube-version string
Helm 用于 Capabilities.KubeVersion 的 Kubernetes 版本。
-h, --help
关于 Kustomize 的帮助信息。
--load-restrictor string 默认:"LoadRestrictionsRootOnly"
如果设置为 'LoadRestrictionsNone',本地 kustomization
可能会从其根目录之外加载文件,但这会破坏了 kustomization 的可重定位能力。
--mount strings
针对从文件系统读取的存储选项列表。
--network
为声明网络的函数启用网络访问。
--network-name string 默认:"bridge"
运行容器的 Docker 网络。
-o, --output string
如果指定,则将输出写入此路径。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.28 - kubectl label
简介
更新资源上的标签。
标签的键和值必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,每个最多 63 个字符。
键可以选择以 DNS 子域前缀加上一个斜杠 '/' 开头,如 example.com/my-app。
如果 --overwrite 为 true,则现有标签可以被覆盖,否则尝试覆盖标签将导致错误。
如果指定了 --resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
kubectl label [ --overwrite] ( -f FILENAME | TYPE NAME) KEY_1 = VAL_1 ... KEY_N = VAL_N [ --resource-version= version]
示例
# 使用标签 'unhealthy' 和值 'true' 更新 Pod 'foo'
kubectl label pods foo unhealthy = true
# 使用标签 'status' 和值 'unhealthy' 更新 Pod 'foo',覆盖所有现有值
kubectl label --overwrite pods foo status = unhealthy
# 更新命名空间中的所有 Pod
kubectl label pods --all status = unhealthy
# 更新由 "pod.json" 中的 type 和 name 标识的 Pod
kubectl label -f pod.json status = unhealthy
# 仅在资源版本为 1 且未更改时更新 Pod 'foo'
kubectl label pods foo status = unhealthy --resource-version= 1
# 如果存在名为 'bar' 的标签,则通过移除此标签来更新 Pod 'foo'
# 不需要 --overwrite 标志
kubectl label pods foo bar-
选项
--all
在指定资源类型的命名空间中,选择所有资源。
-A, --all-namespaces
如果为 true,则在所有命名空间中执行指定的操作。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-label"
用于跟踪字段属主关系的管理器的名称。
--field-selector string
过滤所用的选择算符(字段查询),支持 '='、'==' 和 '!='。
(例如 --field-selector key1=value1,key2=value2)。服务器针对每种类型仅支持有限数量的字段查询。
-f, --filename strings
文件名、目录或文件 URL,用于标识要更新标签的资源。
-h, --help
label 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--list
如果为 true,则显示给定资源的标签。
--local
如果为 true,则 label 操作不会与 api-server 通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--overwrite
如果为 true,则允许标签被覆盖,否则拒绝覆盖现有标签的更新。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中相互关联的清单时很有用。
--resource-version string
如果非空,则只有在所给值是对象的当前资源版本时,标签更新才会成功。仅在指定单个资源时有效。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求所针对的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 用于控制 Kubernetes 集群管理器
11.2.29 - kubectl logs
简介
打印 Pod 或指定资源中某个容器的日志。如果 Pod 只有一个容器,则容器名称是可选的。
kubectl logs [ -f] [ -p] ( POD | TYPE/NAME) [ -c CONTAINER]
示例
# 返回只有一个容器的 nginx Pod 中的快照日志
kubectl logs nginx
# 返回有多个容器的 nginx Pod 中的快照日志
kubectl logs nginx --all-containers= true
# 返回带 app=nginx 标签定义的 Pod 中所有容器的快照日志
kubectl logs -l app = nginx --all-containers= true
# 返回 web-1 Pod 中之前终止的 ruby 容器日志的日志
kubectl logs -p -c ruby web-1
# 开始流式传输 web-1 Pod 中 ruby 容器的日志
kubectl logs -f -c ruby web-1
# 开始流式传输带 app=nginx 标签定义的 Pod 中所有容器的日志
kubectl logs -f -l app = nginx --all-containers= true
# 仅显示 nginx Pod 的最近 20 行输出
kubectl logs --tail= 20 nginx
# 显示 nginx Pod 在过去一小时内写入的所有日志
kubectl logs --since= 1h nginx
# 显示所提供证书过期的 kubelet 的日志
kubectl logs --insecure-skip-tls-verify-backend nginx
# 返回名为 hello 的 Job 的第一个容器的快照日志
kubectl logs job/hello
# 返回 nginx Deployment 的 nginx-1 容器的快照日志
kubectl logs deployment/nginx -c nginx-1
选项
--all-containers
获取 Pod 中所有容器的日志。
--all-pods
从所有 Pod 获取日志。将前缀设置为 true。
-c, --container string
打印指定容器的日志。
-f, --follow
指定日志是否应以流式传输。
-h, --help
logs 操作的帮助命令。
--ignore-errors
如果在监视/跟随 Pod 日志,则允许出现任何非致命的错误。
--insecure-skip-tls-verify-backend
跳过请求日志来源的 kubelet 的身份验证。从理论上讲,攻击者可能会提供无效的日志内容。
如果你的 kubelet 提供的证书已过期,你可能需要使用此参数。
--limit-bytes int
要返回的日志的最大字节数。默认为无限制。
--max-log-requests int 默认值:5
指定使用选择算符时要遵循的最大并发日志数。默认值为 5。
--pod-running-timeout duration 默认值:20s
等待至少一个 Pod 运行的时长(例如 5s、2m 或 3h,大于零)。
--prefix
在每行日志前添加日志来源(Pod 名称和容器名称)的前缀。
-p, --previous
如果为 true,则打印 Pod 中容器的前一个实例的日志(如果存在)。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--since duration
仅返回比相对时长更新的日志,如 5s、2m 或 3h。
默认返回所有日志。只能使用 since-time 和 since 之一。
--since-time string
仅返回特定日期(RFC3339)之后的日志。默认返回所有日志。
只能使用 since-time 和 since 之一。
--tail int 默认值:-1
要显示的最近日志文件的行数。不带选择算符时默认为 -1 将显示所有日志行。
否则如果提供了选择算符,则为 10。
--timestamps
在日志输出的每一行中包含时间戳。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中的集群名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求所针对的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 用于控制 Kubernetes 集群管理器
11.2.30 - kubectl options
简介
打印被所有命令继承的标志列表。
示例
# 打印被所有命令继承的标志
kubectl options
选项
-h, --help
关于 options 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.31 - kubectl patch
简介
使用策略合并补丁、JSON 合并补丁或 JSON 补丁来更新某资源的字段。
接受 JSON 和 YAML 格式。
注意:自定义资源不支持策略合并补丁。
kubectl patch ( -f FILENAME | TYPE NAME) [ -p PATCH|--patch-file FILE]
示例
# 使用策略合并补丁部分更新节点,指定补丁为 JSON 格式
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
# 使用策略合并补丁部分更新节点,指定补丁为 YAML 格式
kubectl patch node k8s-node-1 -p $'spec:\n unschedulable: true'
# 使用策略合并补丁部分更新以在 "node.json" 中所指定类别和名称标识的节点
kubectl patch -f node.json -p '{"spec":{"unschedulable":true}}'
# 更新容器的镜像;spec.containers[*].name 是必需的,因为它是合并键
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# 使用带有位置数组的 JSON 补丁更新容器的镜像
kubectl patch pod valid-pod --type= 'json' -p= '[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
# 使用合并补丁通过 “scale” 子资源更新 Deployment 的副本
kubectl patch deployment nginx-deployment --subresource= 'scale' --type= 'merge' -p '{"spec":{"replicas":2}}'
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-patch"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL 的列表,用于标识要更新的资源。
-h, --help
patch 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--local
如果为真,patch 操作将作用于文件内容,而不是服务器端资源。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-p, --patch string
要被应用到资源 JSON 文件的补丁。
--patch-file string
包含要被应用到资源的补丁的文件。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--subresource string
如果指定此标志,patch 操作将作用于所请求对象的子资源。
必须是 status、scale 之一。此标志处于 Beta 阶段,未来可能会有所变化。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--type string 默认值:"strategic"
提供的补丁类型;可以是 json、merge、strategic 之一。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.32 - kubectl plugin
简介
提供与插件交互的实用程序。
插件提供主要命令行发布版本所不具备的扩展功能,请参阅文档和示例以获取有关如何编写自己的插件的更多信息。
发现和安装插件的最简单方法是通过 kubernetes 子项目 krew ,要安装 krew 请参阅
krew.sigs.k8s.io 。
示例
# 列出所有可用的插件
kubectl plugin list
# 仅列出可用插件的二进制名称,不包含路径
kubectl plugin list --name-only
选项
-h, --help
关于 plugin 的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.32.1 - kubectl plugin list
简介
列出用户 PATH 中所有可用的插件文件。
可用的插件文件要符合以下条件:
可执行文件
位于用户的 PATH 中某处
以 "kubectl-" 开头
kubectl plugin list [ flags]
示例
# 列出所有可用的插件
kubectl plugin list
# 仅列出可用插件的二进制名称,不包含路径
kubectl plugin list --name-only
选项
-h, --help
关于 list 的帮助信息。
--name-only
如果为真,则仅显示每个插件的二进制名称,而不是其完整路径。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.33 - kubectl port-forward
简介
转发一个或多个本地端口到某 Pod。
使用资源类型/名称(例如 deployment/mydeployment)来选择 Pod。
如果省略,资源类型默认为 “pod”。
如果有多个 Pod 与条件匹配,将自动选择一个 Pod。
一旦所选 Pod 终止,转发会话也会结束,你需要重新运行命令以恢复转发。
kubectl port-forward TYPE/NAME [ options] [ LOCAL_PORT:] REMOTE_PORT [ ...[ LOCAL_PORT_N:] REMOTE_PORT_N]
示例
# 在本地监听端口 5000 和 6000,转发与 Pod 中的端口 5000 和 6000 间的往来数据
kubectl port-forward pod/mypod 5000 6000
# 在本地监听端口 5000 和 6000,转发与 Deployment 所选择的 Pod 中端口 5000 和 6000 间往来数据
kubectl port-forward deployment/mydeployment 5000 6000
# 在本地监听端口 8443,将数据转发到由 Service 所选择的 Pod 中名为 "https" 的服务端口的 targetPort
kubectl port-forward service/myservice 8443:https
# 在本地监听端口 8888,将数据转发到 Pod 中的端口 5000
kubectl port-forward pod/mypod 8888:5000
# 在所有地址上监听端口 8888,将数据转发到 Pod 中的端口 5000
kubectl port-forward --address 0.0.0.0 pod/mypod 8888:5000
# 在 localhost 和选定的 IP 上监听端口 8888,将数据转发到 Pod 中的端口 5000
kubectl port-forward --address localhost,10.19.21.23 pod/mypod 8888:5000
# 在本地监听随机端口,将数据转发到 Pod 中的端口 5000
kubectl port-forward pod/mypod :5000
选项
--address strings 默认值:"localhost"
要监听的地址列表(用英文逗号隔开)。取值仅接受 IP 地址或 localhost。
当地址中包含 localhost 时,kubectl 将尝试绑定到 127.0.0.1 和 ::1,
如果这两个地址都不可用于绑定,则会失败。
-h, --help
port-forward 操作的帮助命令。
--pod-running-timeout duration 默认值:1m0s
等待至少一个 Pod 运行的时长(例如 5s、2m 或 3h,大于零)。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.34 - kubectl proxy
简介
在 localhost 和 Kubernetes API 服务器之间创建一个代理服务器或应用级网关。
它还允许在指定的 HTTP 路径上提供静态内容。除了与静态内容路径匹配的路径之外,
所有传入的数据通过一个端口进入,并被转发到远程 Kubernetes API 服务器端口。
kubectl proxy [ --port= PORT] [ --www= static-dir] [ --www-prefix= prefix] [ --api-prefix= prefix]
示例
# 代理所有的 Kubernetes API 请求,不对其他请求作处理
kubectl proxy --api-prefix= /
# 仅代理部分 Kubernetes API 和一些静态文件
# 你可以使用 `curl localhost:8001/api/v1/pods` 获取 Pod 信息
kubectl proxy --www= /my/files --www-prefix= /static/ --api-prefix= /api/
# 要在不同的根路径下代理整个 Kubernetes API
# 你可以使用 `curl localhost:8001/custom/api/v1/pods` 获取 Pod 信息
kubectl proxy --api-prefix= /custom/
# 在端口 8011 上运行指向 Kubernetes API 服务器的代理,并使用 ./local/www/ 提供静态内容
kubectl proxy --port= 8011 --www= ./local/www/
# 在任意本地端口上运行指向 Kubernetes API 服务器的代理
# 为服务器选择的端口将被输出到标准输出
kubectl proxy --port= 0
# 运行指向 Kubernetes API 服务器的代理,将 API 前缀更改为 k8s-api
# 例如,这会让用户能够通过 localhost:8001/k8s-api/v1/pods/ 访问 Pod API
kubectl proxy --api-prefix= /k8s-api
选项
--accept-hosts string 默认值:"^localhost$,^127\.0\.0\.1$,^\[::1\]$"
这个正则表达式表示代理应接受的主机。
--accept-paths string 默认值:"^.*"
这个正则表达式表示代理应接受的路径。
--address string 默认值:"127.0.0.1"
用来提供服务的 IP 地址。
--api-prefix string 默认值:"/"
被代理的 API 所使用的前缀。
--append-server-path
如果为 true,则启用自动路径追加机制,将 kube 上下文服务器路径追加到每个请求。
--disable-filter
如果为 true,则在代理中禁用请求过滤。
此设置是危险的,因为这一设置在使用可访问的端口时可能会使你容易受到 XSRF 攻击。
-h, --help
proxy 操作的帮助命令。
--keepalive duration
keepalive 指定活动网络连接保持活动的时长。设置为 0 可禁用 keepalive。
-p, --port int 默认值:8001
要运行代理的端口。设置为 0 将随机拣选一个端口。
--reject-methods string 默认值:"^$"
这个正则表达式表示代理应该拒绝的 HTTP 方法(例如 --reject-methods='POST,PUT,PATCH')。
--reject-paths string 默认值:"^/api/.*/pods/.*/exec, ^/api/.*/pods/.*/attach"
这个正则表达式表示代理应该拒绝的路径。此处指定的路径即使被 --accept-paths 接受也会被拒绝。
-u, --unix-socket string
用来运行代理的 Unix 套接字。
-w, --www string
同时使用所指定前缀下给定的目录来提供静态文件。
-P, --www-prefix string 默认值:"/static/"
如果指定了静态文件目录,则此标志设置用来提供静态文件服务的前缀。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.35 - kubectl replace
简介
按文件名或标准输入来替换某资源。
支持 JSON 和 YAML 格式。如果要替换某个现有资源,则必须提供完整的资源规约。
你可以通过以下方式获取资源规约:
kubectl get TYPE NAME -o yaml
然后运行以下命令替换资源。
kubectl replace -f FILENAME
示例
# 使用 pod.json 中的数据替换 Pod
kubectl replace -f ./pod.json
# 基于传递到标准输入中的 JSON 替换 Pod
cat pod.json | kubectl replace -f -
# 将单容器 Pod 的镜像版本(标签)更新为 v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
# 强制替换、删除,然后重新创建资源
kubectl replace --force -f ./pod.json
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--cascade string[="background"] 默认值:"background"
必须是 "background"、"orphan" 或 "foreground"。
选择依赖项(例如,由 ReplicationController 创建的 Pod)的删除级联策略,
默认为 background。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-replace"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
包含了待替换的配置信息的文件列表。
--force
如果为真,则立即从 API 中移除资源并略过体面删除处理。
请注意,立即删除某些资源可能会导致不一致或数据丢失,并且需要确认操作。
--grace-period int 默认值:-1
指定给资源的体面终止时间(以秒为单位)。
如果为负数则忽略,为 1 表示立即关闭。
仅当 --force 为真(强制删除)时才可以设置为 0。
-h, --help
replace 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录,此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--raw string
标志值为以 PUT 方式发送到服务器上的原始 URI。使用 kubeconfig 文件中指定的传输方式。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--subresource string
如果指定此标志,replace 将操作所请求对象的子资源。必须是 status、scale 之一。
此标志处于 Beta 阶段,未来可能会有变更。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--timeout duration
放弃删除之前等待的时长;标志值为 0 表示根据对象的大小确定超时。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--wait
如果为真,则等待资源消失后再返回。此参数会等待终结器被清空。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
kubeconfig 中要使用的集群的名称。
--context string
kubeconfig 要使用的上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.36 - kubectl rollout
简介
管理一个或多个资源的上线。
有效的资源类型包括:
deployments
daemonsets
statefulsets
kubectl rollout SUBCOMMAND
示例
# 回滚到先前的 Deployment 版本
kubectl rollout undo deployment/abc
# 检查 Daemonset 的部署状态
kubectl rollout status daemonset/foo
# 重启 Deployment
kubectl rollout restart deployment/abc
# 重启带有 'app=nginx' 标签的 Deployment
kubectl rollout restart deployment --selector= app = nginx
选项
-h, --help
rollout 命令的帮助信息。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.36.1 - kubectl rollout history
简介
查看以前上线的修订版本和配置。
kubectl rollout history ( TYPE NAME | TYPE/NAME) [ flags]
示例
# 查看 Deployment 的上线历史记录
kubectl rollout history deployment/abc
# 查看 Daemonset 修订版本 3 的详细信息
kubectl rollout history daemonset/abc --revision= 3
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
-f, --filename strings
文件名、目录或文件 URL,用于标识要从服务器获取的资源。
-h, --help
关于 history 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--revision int
查看详细信息,包括指定修订版本的 Pod 模版。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.36.2 - kubectl rollout pause
简介
将所提供的资源标记为已暂停。
控制器不会调和已暂停的资源。使用 kubectl rollout resume
可恢复已暂停的资源,目前只有 Deployment 支持暂停。
kubectl rollout pause RESOURCE
示例
# 将 nginx Deployment 标记为暂停
# Deployment 的任何当前状态都将继续发挥作用;
# 只要 Deployment 处于暂停状态,对 Deployment 的更新就不会产生影响
kubectl rollout pause deployment/nginx
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--field-manager string Default: "kubectl-rollout"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL,用于标识要从服务器获取的资源。
-h, --help
关于 pause 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当指定 `-o=go-template` 、`-o=go-template-file` 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.36.3 - kubectl rollout restart
简介
重启资源。
kubectl rollout restart RESOURCE
示例
# 重启 test-namespace 命名空间下的所有 Deployment
kubectl rollout restart deployment -n test-namespace
# 重启 Deployment
kubectl rollout restart deployment/nginx
# 重启 Daemonset
kubectl rollout restart daemonset/abc
# 重启带有标签 app=nginx 的 Deployment
kubectl rollout restart deployment --selector= app = nginx
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--field-manager string 默认值:"kubectl-rollout"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL,用于标识要从服务器获取的资源。
-h, --help
关于 restart 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当指定 `-o=go-template` 、`-o=go-template-file` 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.36.4 - kubectl rollout resume
简介
恢复暂停的资源。
控制器不会调和已暂停的资源。通过恢复资源,我们可以让控制器再次调和它,目前只有部署支持恢复。
kubectl rollout resume RESOURCE
示例
# 恢复已暂停的 Deployment
kubectl rollout resume deployment/nginx
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--field-manager string 默认值:"kubectl-rollout"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL,用于标识要从服务器获取的资源。
-h, --help
关于 resume 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
If true, keep the managedFields when printing objects in JSON or YAML format.
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当指定 `-o=go-template` 、`-o=go-template-file` 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.36.5 - kubectl rollout status
简介
显示上线的状态。
默认情况下,"rollout status" 将监视最新的上线状态,直到它完成。
如果你不想等待 rollout 完成,则可以使用 --watch=false。请注意,如果中间开始了新的上线动作,
则 "rollout status" 将继续监视最新修订版本。如果你想 watch 特定的修订版本并在它被另一个修订覆盖时中止,
请使用 --revision=N,其中 N 是你需要监视的修订版本。
kubectl rollout status ( TYPE NAME | TYPE/NAME) [ flags]
示例
# 监视部署的上线状态
kubectl rollout status deployment/nginx
选项
-f, --filename strings
文件名、目录或文件 URL,用于标识要从服务器获取的资源。
-h, --help
关于 status 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--revision int
固定到特定修订版本以显示其状态。默认为 0(最后修订版本)。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--timeout duration
结束监视之前等待的时间长度,零表示永不结束。任何其他值都应包含相应的时间单位(例如 1s、2m、3h)。
-w, --watch Default: true
监视上线状态直至上线完成。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.36.6 - kubectl rollout undo
简介
回滚到之前上线的版本。
kubectl rollout undo ( TYPE NAME | TYPE/NAME) [ flags]
示例
# 回滚到上一个 Deployment 的上一次部署状态
kubectl rollout undo deployment/abc
# 回滚到 Daemonset 的修订版本 3
kubectl rollout undo daemonset/abc --to-revision= 3
# 试运行回滚到 Deployment 的上一次部署状态
kubectl rollout undo --dry-run= server deployment/abc
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
-f, --filename strings
用于标识从服务器获取的资源的文件名、目录或文件的 URL。
-h, --help
关于 undo 的帮助信息。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--to-revision int
要回滚到的修订版本。默认为 0(最新修订版本)。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.37 - kubectl run
简介
创建 Pod 并在其中运行特定镜像。
kubectl run NAME --image= image [ --env= "key=value" ] [ --port= port] [ --dry-run= server|client] [ --overrides= inline-json] [ --command] -- [ COMMAND] [ args...]
示例
# 启动一个 nginx Pod
kubectl run nginx --image= nginx
# 启动一个 hazelcast Pod 并让容器暴露端口 5701
kubectl run hazelcast --image= hazelcast/hazelcast --port= 5701
# 启动一个 hazelcast Pod 并在容器中设置环境变量 "DNS_DOMAIN=cluster" 和 "POD_NAMESPACE=default"
kubectl run hazelcast --image= hazelcast/hazelcast --env= "DNS_DOMAIN=cluster" --env= "POD_NAMESPACE=default"
# 启动一个 hazelcast Pod 并设置标签 "app=hazelcast" 和 "env=prod"
kubectl run hazelcast --image= hazelcast/hazelcast --labels= "app=hazelcast,env=prod"
# 试运行;打印相应的 API 对象而不创建它们
kubectl run nginx --image= nginx --dry-run= client
# 启动一个 nginx Pod,但使用从 JSON 解析的部分设置值覆盖 Pod 的 spec
kubectl run nginx --image= nginx --overrides= '{ "apiVersion": "v1", "spec": { ... } }'
# 启动一个 busybox Pod 并将其保持在前台,如果退出则不重启
kubectl run -i -t busybox --image= busybox --restart= Never
# 使用默认命令启动一个 nginx Pod,并为该默认命令使用自定义参数(arg1 .. argN)
kubectl run nginx --image= nginx -- <arg1> <arg2> ... <argN>
# 使用不同的命令和自定义参数启动 nginx Pod
kubectl run nginx --image= nginx --command -- <cmd> <arg1> ... <argN>
选项
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--annotations strings
要应用到 Pod 的多个注解。
--attach
如果为 true,则等待 Pod 开始运行,然后像调用 “kubectl attach ...” 一样挂接到 Pod。
默认值为 false,除非设置了 “-i/--stdin”,则默认值为 true。
使用 “--restart=Never” 时,返回容器进程的退出码。
--cascade string[="background"] 默认值:"background"
必须是 "background"、"orphan" 或 "foreground"。
选择依赖项(例如,由 ReplicationController 创建的 Pod)的删除级联策略,
默认为 background。
--command
如果为 true 并且存在额外的参数,则将它们用作容器中的 “command” 字段,而不是默认的 “args” 字段。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--env strings
要在容器中设置的环境变量。
--expose --port
如果为 true,则创建与 Pod 关联的 ClusterIP 服务。需要指定 --port 参数。
--field-manager string 默认值:"kubectl-run"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
用来替换资源。
--force
如果为真,则立即从 API 中移除资源并略过体面删除处理。
请注意,立即删除某些资源可能会导致不一致或数据丢失,并且需要确认操作。
--grace-period int 默认值:-1
指定给资源的体面终止时间(以秒为单位)。
如果为负数则忽略,为 1 表示立即关闭。
仅当 --force 为真(强制删除)时才可以设置为 0。
-h, --help
run 操作的帮助命令。
--image string
要运行的容器的镜像。
--image-pull-policy string
容器的镜像拉取策略。如果留空,则此值不会由客户端指定,而是默认由服务器指定。
-k, --kustomize string
处理 kustomization 目录,此标志不能与 -f 或 -R 一起使用。
-l, --labels string
要应用到 Pod 的、用逗号分隔的标签。这将覆盖之前的值。
--leave-stdin-open
如果 Pod 以交互模式启动或在启动时带有标准输入,则在第一次挂接完成后保持标准输入打开。
默认情况下,标准输入会在第一次挂接完成后被关闭。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--override-type string 默认值:"merge"
用于覆盖生成对象的方法:json、merge 或 strategic。
--overrides string
用于覆盖已生成对象的内联 JSON。如果此字段非空,则用于覆盖已生成的对象。
要求对象提供一个有效的 apiVersion 字段。
--pod-running-timeout duration 默认值:1m0s
等待至少一个 Pod 运行的时长(例如 5s、2m 或 3h,大于零)。
--port string
指定容器暴露的端口。
--privileged
如果为 true,则以特权模式运行容器。
-q, --quiet
如果为 true,则抑制提示信息。
-R, --recursive
以递归方式处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--restart string 默认值:"Always"
指定 Pod 的重启策略。有效值为 Always、OnFailure、Never。
--rm
如果为 true,则在 Pod 退出后删除它。仅在挂接到容器时有效,例如使用 “--attach” 或 “-i/--stdin”。
--save-config
如果为 true,则当前对象的配置将被保存在其注解中。否则,注解将保持不变。
当你希望后续对此对象执行 `kubectl apply` 操作时,此标志很有用。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
-i, --stdin
即使没有挂接任何内容,也保持 Pod 中容器的标准输入处于打开状态。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--timeout duration
放弃删除之前等待的时长;标志值为 0 表示根据对象的大小确定超时。
-t, --tty
为 Pod 中的容器分配 TTY。
--wait 默认值:true
如果为 true,则等待资源消失后再返回。此参数会等待终结器被清空。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.38 - kubectl scale
简介
为 Deployment、ReplicaSet、ReplicationController 或 StatefulSet 设置新的副本数。
扩缩容还允许用户为 scale 操作指定一个或多个前提条件。
如果指定了 --current-replicas
或 --resource-version
,则在尝试扩缩容之前这些参数会被验证,
并且在将扩缩容请求发送到服务器时保证前提条件成立。
kubectl scale [ --resource-version= version] [ --current-replicas= count] --replicas= COUNT ( -f FILENAME | TYPE NAME)
示例
# 将名为 “foo” 的 ReplicaSet 扩缩容到 3 个副本
kubectl scale --replicas= 3 rs/foo
# 将 "foo.yaml" 中以 type 和 name 指定的某资源扩缩容到 3 个副本
kubectl scale --replicas= 3 -f foo.yaml
# 如果名为 mysql 的 Deployment 当前有 2 个副本,则将 mysql 扩容到 3 个副本
kubectl scale --current-replicas= 2 --replicas= 3 deployment/mysql
# 扩缩容多个 ReplicationController
kubectl scale --replicas= 5 rc/example1 rc/example2 rc/example3
# 将名为 “web” 的 StatefulSet 扩缩容到 3 个副本
kubectl scale --replicas= 3 statefulset/web
选项
--all
选择指定资源类型的命名空间中的所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--current-replicas int 默认值:-1
当前副本数的前提条件。要求资源的当前副本数与此值匹配才能进行扩缩容。
默认值 -1 表示没有条件。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
-f, --filename strings
文件名、目录或文件 URL 的列表,用于标识要设置新副本数的资源。
-h, --help
scale 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--replicas int
期望新的副本数。必需。
--resource-version string
资源版本的前提条件。要求当前资源版本与此值匹配才能进行扩缩容。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--timeout duration
等待放弃扩缩容操作之前的时长,零表示不等待。
其他值应包含相应的时间单位(例如 1s、2m、3h)。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.39 - kubectl set
简介
配置应用程序资源。
这些命令可帮助你更改现有的应用程序资源。
kubectl set SUBCOMMAND
选项
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.39.1 - kubectl set env
简介
更新 Pod 模板中的环境变量。
列举一个或多个 Pod 和 Pod 模板中的环境变量定义。
添加、更新或移除(在副本控制器或 Deployment 配置中的)一个或多个 Pod 模板中的容器环境变量定义。
查看或修改指定 Pod 或 Pod 模板中所有容器的环境变量定义,或者只查看与通配符匹配的那些环境变量定义。
如果在命令行上设置了 "--env -",则可以使用标准的 env 语法从标准输入中读取环境变量。
可能的资源包括(不区分大小写):
pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), statefulset (sts), cronjob (cj), replicaset (rs)
kubectl set env RESOURCE/NAME KEY_1 = VAL_1 ... KEY_N = VAL_N
示例
# 使用新的环境变量更新 Deployment “registry”
kubectl set env deployment/registry STORAGE_DIR = /local
# 列举 Deployment “sample-build” 中定义的环境变量
kubectl set env deployment/sample-build --list
# 列举所有 Pod 中定义的环境变量
kubectl set env pods --all --list
# 以 YAML 格式输出修改后的 Deployment,但不更改服务器上的对象
kubectl set env deployment/sample-build STORAGE_DIR = /data -o yaml
# 更新项目中所有副本控制器中的所有容器,为之添加 ENV=prod
kubectl set env rc --all ENV = prod
# 从 Secret 导入环境变量
kubectl set env --from= secret/mysecret deployment/myapp
# 从带前缀的 ConfigMap 中导入环境变量
kubectl set env --from= configmap/myconfigmap --prefix= MYSQL_ deployment/myapp
# 从 ConfigMap 中导入特定键
kubectl set env --keys= my-example-key --from= configmap/myconfigmap deployment/myapp
# 从所有 Deployment 配置中的容器 “c1” 中移除环境变量 ENV
kubectl set env deployments --all --containers= "c1" ENV-
# 从磁盘上的 Deployment 定义中移除环境变量 ENV 并更新服务器上的 Deployment 配置
kubectl set env -f deploy.json ENV-
# 将某些本地 Shell 环境变量设置到服务器上的 Deployment 配置中
env | grep RAILS_ | kubectl set env -e - deployment/registry
选项
--all
如果为真,则选择指定资源类型的命名空间中的所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
-c, --containers string 默认值:"*"
所选 Pod 模板中要更改的容器名称 - 可以使用通配符。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
-e, --env strings
为某个环境变量指定一个键值对列表,以设置到每个容器中。
--field-manager string 默认值:"kubectl-set"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL 组成的列表,用于标识要更新环境的资源。
--from string
要从中注入环境变量的资源的名称。
-h, --help
env 操作的帮助命令。
--keys strings
要从指定的资源中导入的、以英文逗号分隔的键的列表。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--list
如果为真,则以标准格式显示环境及所有变更。
当我们使用 `kubectl view env` 命令时,此标志将被移除。
--local
如果为真,`set env` 将不会与 API 服务器通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
--overwrite 默认值:true
如果为真,允许环境被覆盖,否则拒绝要覆盖现有环境的更新。
--prefix string
要追加到变量名上的前缀。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--resolve
如果为真,则在列出变量时显示 Secret 或 ConfigMap 引用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为真,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.39.2 - kubectl set image
简介
更新资源的现有容器镜像。
可能的资源包括(不区分大小写):
pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), statefulset (sts), cronjob (cj), replicaset (rs)
kubectl set image ( -f FILENAME | TYPE NAME) CONTAINER_NAME_1 = CONTAINER_IMAGE_1 ... CONTAINER_NAME_N = CONTAINER_IMAGE_N
示例
# 将 Deployment 的 nginx 容器镜像设置为 “nginx:1.9.1”,并将其 busybox 容器镜像设置为 “busybox”
kubectl set image deployment/nginx busybox = busybox nginx = nginx:1.9.1
# 更新所有 Deployment 和副本控制器的 nginx 容器镜像为 “nginx:1.9.1”
kubectl set image deployments,rc nginx = nginx:1.9.1 --all
# 更新 DaemonSet abc 的所有容器镜像为 "nginx:1.9.1"
kubectl set image daemonset abc *= nginx:1.9.1
# 使用本地文件更新 nginx 容器镜像,并以 YAML 格式打印结果,但不向服务器发出请求
kubectl set image -f path/to/file.yaml nginx = nginx:1.9.1 --local -o yaml
选项
--all
在指定资源类型的命名空间中,选择所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-set"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL,用于标识要从服务器获取的资源。
-h, --help
image 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--local
如果为 true,`set image` 将不会与 API 服务器通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.39.3 - kubectl set resources
简介
为定义 Pod 模板的任一资源指定计算资源要求(CPU、内存)。
如果 Pod 被成功调度,将保证获得所请求的资源量,但可以在某一瞬间达到其指定的限制值。
对于每类计算资源,如果只指定限制值而省略请求值,则请求值将被默认设置为限制值。
可能的资源包括(不区分大小写):使用 "kubectl api-resources" 查看受支持资源的完整列表。
kubectl set resources ( -f FILENAME | TYPE NAME) ([ --limits= LIMITS & --requests= REQUESTS]
示例
# 将 Deployment nginx 中容器 nginx 的 CPU 限制设置为 "200m", 将内存限制设置为 "512Mi"
kubectl set resources deployment nginx -c= nginx --limits= cpu = 200m,memory= 512Mi
# 为 nginx 中的所有容器设置资源请求和限制
kubectl set resources deployment nginx --limits= cpu = 200m,memory= 512Mi --requests= cpu = 100m,memory= 256Mi
# 移除 nginx 中容器对资源的资源请求
kubectl set resources deployment nginx --limits= cpu = 0,memory= 0 --requests= cpu = 0,memory= 0
# 打印基于本地清单更新 nginx 容器限制的结果(以 YAML 格式),不向服务器发送请求
kubectl set resources -f path/to/file.yaml --limits= cpu = 200m,memory= 512Mi --local -o yaml
选项
--all
在指定资源类型的命名空间中,选择所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
-c, --containers string 默认值:"*"
在所选 Pod 模板中要更改的容器名称,默认会选择所有容器 - 可以使用通配符。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-set"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL 的列表,用于标识要从服务器获取的资源。
-h, --help
resources 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--limits string
指定容器的资源请求。例如,“cpu=100m,memory=256Mi”。
请注意,服务器端组件可能会根据服务器配置(例如 LimitRange)分配请求。
--local
如果为真,`set resources` 将不会与 API 服务器通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--requests string
指定容器的资源请求。例如,“cpu=100m,memory=256Mi”。
请注意,服务器端组件可能会根据服务器配置(例如 LimitRange)分配请求。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为真,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为真,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为真,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.39.4 - kubectl set selector
简介
为某个资源设置选择算符。请注意,
如果资源在 set selector
调用之前已有选择算符,则新的选择算符将覆盖旧的选择算符。
选择算符必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,最长为 63 个字符。
如果指定了 --resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
注意:目前只能在 Service 对象上设置选择算符。
kubectl set selector ( -f FILENAME | TYPE NAME) EXPRESSIONS [ --resource-version= version]
示例
# 在创建 Deployment/Service 对之前设置标签和选择算符
kubectl create service clusterip my-svc --clusterip= "None" -o yaml --dry-run= client | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
kubectl create deployment my-dep -o yaml --dry-run= client | kubectl label --local -f - environment = qa -o yaml | kubectl create -f -
选项
--all
选择指定资源类型的命名空间中的所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-set"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
使用文件名来区分不同的资源。
-h, --help
selector 操作的帮助命令。
--local
如果为 true,则注解不会与 api-server 通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive 默认值:true
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--resource-version string
如果非空,则只有在所给值是对象的当前资源版本时,选择算符更新才会成功。仅在指定单个资源时有效。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.39.5 - kubectl set serviceaccount
简介
更新 Pod 模板资源的服务账号。
可能的资源(不区分大小写)可以是:
replicationcontroller (rc), deployment (deploy), daemonset (ds), job, replicaset (rs), statefulset
kubectl set serviceaccount ( -f FILENAME | TYPE NAME) SERVICE_ACCOUNT
示例
# 将名为 nginx-deployment 的 Deployment 的服务账号设置为 serviceaccount1
kubectl set serviceaccount deployment nginx-deployment serviceaccount1
# 打印使用本地文件中服务账号更新 nginx Deployment 后的结果(以 YAML 格式),不向 API 服务器发送请求
kubectl set sa -f nginx-deployment.yaml serviceaccount1 --local --dry-run= client -o yaml
选项
--all
在指定资源类型的命名空间中,选择所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-set"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL 的列表,用于标识要从服务器获取的资源。
-h, --help
serviceaccount 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--local
如果为真,`set serviceaccount` 将不会与 API 服务器通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
--show-managed-fields
如果为真,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为真,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为真,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.39.6 - kubectl set subject
简介
更新角色绑定或集群角色绑定中的用户、组或服务账号。
kubectl set subject ( -f FILENAME | TYPE NAME) [ --user= username] [ --group= groupname] [ --serviceaccount= namespace:serviceaccountname] [ --dry-run= server|client|none]
示例
# 更新 serviceaccount1 的集群角色绑定
kubectl set subject clusterrolebinding admin --serviceaccount= namespace:serviceaccount1
# 更新 user1、user2 和 group1 的角色绑定
kubectl set subject rolebinding admin --user= user1 --user= user2 --group= group1
# 打印从本地更新角色绑定主体的结果(以 YAML 格式),但不向服务器发送请求
kubectl create rolebinding admin --role= admin --user= admin -o yaml --dry-run= client | kubectl set subject --local -f - --user= foo -o yaml
选项
--all
在指定资源类型的命名空间中,选择所有资源。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是 client 策略,仅打印将要发送的对象,而不实际发送。
如果是 server 策略,提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-set"
用于跟踪字段属主关系的管理器的名称。
-f, --filename strings
文件名、目录或文件 URL 的列表,用于标识要更新主体的资源。
--group strings
要绑定到角色的组列表。
-h, --help
subject 操作的帮助命令。
-k, --kustomize string
处理 kustomization 目录。此标志不能与 -f 或 -R 一起使用。
--local
如果为真,`set subject` 将不会与 API 服务器通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--serviceaccount strings
要绑定到角色的服务账号列表。
--show-managed-fields
如果为真,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--user strings
要绑定到角色的用户名列表。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.40 - kubectl taint
简介
更新一个或多个节点上的污点。
污点由键、值和效果组成。作为此命令的参数,污点表示为 key=value:effect。
键必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,最多 253 个字符。
可选地,键可以以 DNS 子域前缀加上一个 "/" 开头,例如 example.com/my-app。
值是可选的。如果给定,则必须以字母或数字开头,可以包含字母、数字、连字符、点和下划线,最多 63 个字符。
效果必须是 NoSchedule、PreferNoSchedule 或 NoExecute。
目前污点只能应用于节点。
kubectl taint NODE NAME KEY_1 = VAL_1:TAINT_EFFECT_1 ... KEY_N = VAL_N:TAINT_EFFECT_N
示例
# 使用带有键为 "dedicated" 和值为 "special-user" 以及效果为 "NoSchedule" 的污点来更新节点 "foo"
# 如果具有该键和效果的污点已经存在,则其值将按指定方式替换
kubectl taint nodes foo dedicated=special-user:NoSchedule
# 从节点 "foo" 中删除键为 "dedicated" 且效果为 "NoSchedule" 的污点(如果存在)
kubectl taint nodes foo dedicated:NoSchedule-
# 从节点 "foo" 中删除所有带有键为 "dedicated" 的污点
kubectl taint nodes foo dedicated-
# 在标签为 myLabel=X 的节点上添加键为 'dedicated' 的污点
kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule
# 向节点 "foo" 添加一个带有键 "bar" 且没有值的污点
kubectl taint nodes foo bar:NoSchedule
选项
--all
选择集群中的所有节点
--allow-missing-template-keys 默认值:true
如果为 true,则当模板中缺少字段或映射键时,忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是客户端策略,则只打印要发送的对象,
而不发送该对象。如果是服务器策略,则提交服务器端请求而不持久化资源。
--field-manager string 默认值:"kubectl-taint"
用于追踪字段所有权的管理者名称。
-h, --help
关于 taint 的帮助信息。
-o, --output string
输出格式,可以为以下选项之一:
(json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file)。
--overwrite
如果为真,则允许覆盖污点,否则拒绝覆盖现有污点的污点更新。
-l, --selector string
用来执行过滤的选择算符(标签查询),支持 '='、'==' 和 '!='(例如 -l key1=value1,key2=value2)。
匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当 -o=go-template、-o=go-template-file 时使用的模板字符串或模板文件路径。
模板格式为 [golang 模板](http://golang.org/pkg/text/template/#pkg-overview)。
--validate string[="strict"] 默认值:"strict"
必须是以下选项之一:strict(或 true)、warn、ignore(或 false)。
"true" 或 "strict" 将使用模式定义来验证输入,如果无效,则请求失败。
如果在 API 服务器上启用了 ServerSideFieldValidation,则执行服务器端验证,
但如果未启用,它将回退到可靠性较低的客户端验证。
如果在 API 服务器上启用了服务器端字段验证,"warn" 将警告未知或重复的字段而不阻止请求,
否则操作与 "ignore" 的表现相同。
"false" 或 "ignore" 将不会执行任何模式定义检查,而是静默删除所有未知或重复的字段。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string Default: "$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.41 - kubectl top
简介
显示资源(CPU/内存)使用情况。
选项
--api-group string
筛选指定 API 组中的资源。
--cached
如果可用,将使用缓存的资源列表。
--categories strings
筛选属于指定类别的资源。
-h, --help
关于 api-resources 的帮助信息。
--namespaced 默认值:true
如果为 false,则返回非命名空间作用域的资源,否则默认返回命名空间作用域的资源。
--no-headers
当使用默认或自定义列输出格式时,不要打印标题(默认打印标题)。
-o, --output string
输出格式,可选值为:wide、name。
--sort-by string
如果非空,则使用指定字段对资源列表进行排序,此字段可以是 "name" 或 "kind"。
--verbs strings
筛选支持指定动词的资源。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.41.1 - kubectl top node
简介
显示节点的资源(CPU/内存)使用情况。
top-node 命令可以让你查看节点的资源消耗情况。
kubectl top node [ NAME | -l label]
示例
# 显示所有节点的指标
kubectl top node
# 显示指定节点的指标
kubectl top node NODE_NAME
选项
-h, --help
node 操作的帮助命令。
--no-headers
如果存在,则打印没有标头的输出。
-l, --selector string
用来执行过滤的选择算符(标签查询),支持 '='、'==' 和 '!='(例如 -l key1=value1,key2=value2)。
匹配的对象必须满足所有指定的标签约束。
--show-capacity
基于节点的 Capacity 而不是 Allocatable(默认)打印节点资源。
--sort-by string
如果非空,则使用指定字段对节点列表进行排序。字段可以是 “cpu” 或 “memory”。
--use-protocol-buffers 默认值:true
启用协议缓冲区(protocol-buffers)以访问 Metrics API。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.41.2 - kubectl top pod
简介
显示 Pod 的资源(CPU/内存)使用情况。
top pod
命令允许你查看 Pod 的资源消耗情况。
由于指标管道的延迟,Pod 创建后的几分钟内可能无法获取资源消耗数据。
kubectl top pod [ NAME | -l label]
示例
# 显示 default 命名空间中所有 Pod 的指标
kubectl top pod
# 显示指定命名空间中所有 Pod 的指标
kubectl top pod --namespace= NAMESPACE
# 显示指定 Pod 及其容器的指标
kubectl top pod POD_NAME --containers
# 显示由标签 name=myLabel 所定义的 Pod 的指标
kubectl top pod -l name = myLabel
选项
-A, --all-namespaces
如果存在,则列举所有命名空间中请求的对象。
即使使用 --namespace 指定,当前上下文中的命名空间也会被忽略。
--containers
如果存在,则打印 Pod 内的容器的使用情况。
--field-selector string
过滤所用的选择算符(字段查询),支持 '='、'==' 和 '!='。
(例如 --field-selector key1=value1,key2=value2)。服务器针对每种类型仅支持有限数量的字段查询。
-h, --help
pod 操作的帮助命令。
--no-headers
如果存在,则打印不带标头的输出。
-l, --selector string
用来执行过滤的选择算符(标签查询),支持 '='、'==' 和 '!='(例如 -l key1=value1,key2=value2)。
匹配的对象必须满足所有指定的标签约束。
--sort-by string
如果非空,则使用指定字段对 Pod 列表进行排序。字段可以是 “cpu” 或 “memory”。
--sum
打印资源使用量的总和。
--use-protocol-buffers 默认值:true
启用协议缓冲区(protocol-buffers)以访问 Metrics API。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
11.2.42 - kubectl uncordon
简介
将节点标记为可调度。
kubectl uncordon NODE
示例
# Mark node "foo" as schedulable
kubectl uncordon foo
选项
--dry-run string[="unchanged"] 默认值:"none"
必须是 "none"、"server" 或 "client"。如果是客户端策略,则只打印要发送的对象,
而不发送该对象。如果是服务器策略,则提交服务器端请求而不持久化资源。
-h, --help
关于 uncordon 的帮助信息。
-l, --selector string
用来过滤的选择算符(标签查询),支持 '='、'==' 和 '!='(例如 -l key1=value1,key2=value2)。
匹配的对象必须满足所有指定的标签约束。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string Default: "$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.43 - kubectl version
简介
打印当前上下文的客户端和服务器版本信息。
示例
# 打印当前上下文的客户端和服务器版本
kubectl version
选项
--client
如果为 true,则仅显示客户端版本(不需要服务器)。
-h, --help
关于版本的帮助信息
-o, --output string
`yaml` 或 `json` 之一。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string Default: "$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 中集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
对 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port。
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
对 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.2.44 - kubectl wait
简介
实验特性:等待一个或多个资源到达特定状态。
此命令接受多个资源作为输入,并等待直到在每个给定资源的状态字段中看到所指定的状况。
此外,这一命令可以通过提供 "delete" 关键字作为 --for 标志的值来等待给定的一组资源被删除。
当指定条件被满足时,命令将向 stdout 打印一条成功消息。你可以使用 -o 选项更改输出目标。
kubectl wait ([ -f FILENAME] | resource.group/resource.name | resource.group [( -l label | --all)]) [ --for= delete|--for condition = available|--for= jsonpath = '{}' [= value]]
示例
# 等待 Pod "busybox1" 包含 "Ready" 类型的状况值
kubectl wait --for= condition = Ready pod/busybox1
# 状态状况的默认值为真;可以在等号分隔符后给出其他等待目标(用 Unicode 大小写折叠形式转换之后执行比较,这是更通用的大小写不敏感形式)
kubectl wait --for= condition = Ready = false pod/busybox1
# 等待 Pod "busybox1" 的状态阶段包含 "Running"
kubectl wait --for= jsonpath = '{.status.phase}' = Running pod/busybox1
# 等待 Pod "busybox1" 状况变为 Ready
kubectl wait --for= 'jsonpath={.status.conditions[?(@.type=="Ready")].status}=True' pod/busybox1
# 等待 Service "loadbalancer" 具备入站规则
kubectl wait --for= jsonpath = '{.status.loadBalancer.ingress}' service/loadbalancer
# 发出 "delete" 命令后,等待 Pod "busybox1" 被删除,超时时间为 60 秒
kubectl delete pod/busybox1
kubectl wait --for= delete pod/busybox1 --timeout= 60s
选项
--all
选择指定资源类型的命名空间中的所有资源。
-A, --all-namespaces
如果存在,则列举所有命名空间中请求的对象。
即使使用 --namespace 指定,当前上下文中的命名空间也会被忽略。
--allow-missing-template-keys 默认值:true
如果为 true,在模板中字段或映射键缺失时忽略模板中的错误。
仅适用于 golang 和 jsonpath 输出格式。
--field-selector string
过滤所用的选择算符(字段查询),支持 '='、'==' 和 '!='。
(例如 --field-selector key1=value1,key2=value2)。服务器针对每种类型仅支持有限数量的字段查询。
-f, --filename strings
使用文件名来区分不同的资源。
--for string
等待的条件:[delete|condition=condition-name[=condition-value]|jsonpath='{JSONPath expression}'=[JSONPath value]]。
默认的状况值为 true。在执行 Unicode 大小写折叠之后比较条件值,这是更通用的不区分大小写形式。
-h, --help
关于 wait 的帮助信息。
--local
如果为 true,则注解不会与 api-server 通信,而是在本地运行。
-o, --output string
输出格式。可选值为:
json、yaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file。
-R, --recursive
递归处理在 -f、--filename 中给出的目录。当你想要管理位于同一目录中的相关清单时很有用。
-l, --selector string
过滤所用的选择算符(标签查询),支持 '='、'==' 和 '!='。
(例如 -l key1=value1,key2=value2)。匹配的对象必须满足所有指定的标签约束。
--show-managed-fields
如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。
--template string
当指定 `-o=go-template` 、`-o=go-template-file` 时使用的模板字符串或模板文件路径。
模板格式为 golang 模板 [http://golang.org/pkg/text/template/#pkg-overview]。
--timeout duration 默认值:30s
放弃前等待的时间长度。0 表示检查一次,不等待,负数表示等待一周。
--as string
操作所用的伪装用户名。用户可以是常规用户或命名空间中的服务账号。
--as-group strings
操作所用的伪装用户组,此标志可以被重复设置以指定多个组。
--as-uid string
操作所用的伪装 UID。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录。
--certificate-authority string
证书机构的证书文件的路径。
--client-certificate string
TLS 客户端证书文件的路径。
--client-key string
TLS 客户端密钥文件的路径。
--cluster string
要使用的 kubeconfig 集群的名称。
--context string
要使用的 kubeconfig 上下文的名称。
--default-not-ready-toleration-seconds int 默认值:300
设置针对 notReady:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--default-unreachable-toleration-seconds int 默认值:300
设置针对 unreachable:NoExecute 的容忍度的 tolerationSeconds,默认添加到所有尚未设置此容忍度的 Pod。
--disable-compression
如果为 true,则对服务器所有请求的响应不再压缩。
--insecure-skip-tls-verify
如果为 true,则不检查服务器证书的有效性。这将使你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求要使用的 kubeconfig 文件的路径。
--match-server-version
要求服务器版本与客户端版本匹配。
-n, --namespace string
如果存在,则是此 CLI 请求的命名空间范围。
--password string
向 API 服务器进行基本身份验证所用的密码。
--profile string 默认值:"none"
要记录的性能分析信息。可选值为(none|cpu|heap|goroutine|threadcreate|block|mutex)。
--profile-output string 默认值:"profile.pprof"
性能分析信息要写入的目标文件的名称。
--request-timeout string 默认值:"0"
在放弃某个服务器请求之前等待的时长。非零值应包含相应的时间单位(例如 1s、2m、3h)。
值为零表示请求不会超时。
-s, --server string
Kubernetes API 服务器的地址和端口。
--storage-driver-buffer-duration duration 默认值:1m0s
对存储驱动的写入操作将被缓存的时长;缓存的操作会作为一个事务提交给非内存后端。
--storage-driver-db string 默认值:"cadvisor"
数据库名称。
--storage-driver-host string 默认值:"localhost:8086"
数据库 host:port
--storage-driver-password string 默认值:"root"
数据库密码。
--storage-driver-secure
使用与数据库的安全连接。
--storage-driver-table string 默认值:"stats"
表名。
--storage-driver-user string 默认值:"root"
数据库用户名。
--tls-server-name string
服务器证书验证所用的服务器名称。如果未提供,则使用与服务器通信所用的主机名。
--token string
向 API 服务器进行身份验证的持有者令牌。
--user string
要使用的 kubeconfig 用户的名称。
--username string
向 API 服务器进行基本身份验证时所用的用户名。
--version version[=true]
--version, --version=raw 打印版本信息并退出;--version=vX.Y.Z... 设置报告的版本。
--warnings-as-errors
将从服务器收到的警告视为错误,并以非零退出码退出。
另请参见
kubectl - kubectl 控制 Kubernetes 集群管理器
11.3 - kubectl 快速参考
本页列举常用的 kubectl
命令和参数。
说明:
这些指令适用于 Kubernetes v1.31。要检查版本,请使用 kubectl version
命令。
kubectl 自动补全
BASH
source <( kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包
echo "source <(kubectl completion bash)" >> ~/.bashrc # 在你的 bash shell 中永久地添加自动补全
你还可以在补全时为 kubectl
使用一个速记别名:
alias k = kubectl
complete -o default -F __start_kubectl k
ZSH
source <( kubectl completion zsh) # 在 zsh 中设置当前 shell 的自动补全
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # 在你的 zsh shell 中永久地添加自动补全
FISH
说明:
需要 kubectl 版本 1.23 或更高版本。
echo 'kubectl completion fish | source' > ~/.config/fish/completions/kubectl.fish && source ~/.config/fish/completions/kubectl.fish
关于 --all-namespaces
的一点说明
我们经常用到 --all-namespaces
参数,你应该要知道它的简写:
kubectl -A
kubectl 上下文和配置
设置 kubectl
与哪个 Kubernetes 集群进行通信并修改配置信息。
查看使用 kubeconfig 跨集群授权访问
文档获取配置文件详细信息。
kubectl config view # 显示合并的 kubeconfig 配置
# 同时使用多个 kubeconfig 文件并查看合并的配置
KUBECONFIG = ~/.kube/config:~/.kube/kubconfig2
kubectl config view
# 显示合并的 kubeconfig 配置和原始证书数据以及公开的 Secret
kubectl config view --raw
# 获取 e2e 用户的密码
kubectl config view -o jsonpath = '{.users[?(@.name == "e2e")].user.password}'
# 获取 e2e 用户的证书
kubectl config view --raw -o jsonpath = '{.users[?(.name == "e2e")].user.client-certificate-data}' | base64 -d
kubectl config view -o jsonpath = '{.users[].name}' # 显示第一个用户
kubectl config view -o jsonpath = '{.users[*].name}' # 获取用户列表
kubectl config get-contexts # 显示上下文列表
kubectl config get-contexts -o name # 获取所有上下文的名称
kubectl config current-context # 展示当前所处的上下文
kubectl config use-context my-cluster-name # 设置默认的上下文为 my-cluster-name
kubectl config set-cluster my-cluster-name # 在 kubeconfig 中设置集群条目
# 在 kubeconfig 中配置代理服务器的 URL,以用于该客户端的请求
kubectl config set-cluster my-cluster-name --proxy-url= my-proxy-url
# 添加新的用户配置到 kubeconf 中,使用 basic auth 进行身份认证
kubectl config set-credentials kubeuser/foo.kubernetes.com --username= kubeuser --password= kubepassword
# 在指定上下文中持久性地保存名字空间,供所有后续 kubectl 命令使用
kubectl config set-context --current --namespace= ggckad-s2
# 使用特定的用户名和名字空间设置上下文
kubectl config set-context gce --user= cluster-admin --namespace= foo \
&& kubectl config use-context gce
kubectl config unset users.foo # 删除用户 foo
# 设置或显示 context / namespace 的短别名
# (仅适用于 bash 和 bash 兼容的 shell,在使用 kn 设置命名空间之前要先设置 current-context)
alias kx = 'f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn = 'f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
kubectl apply
apply
通过定义 Kubernetes 资源的文件来管理应用。
它通过运行 kubectl apply
在集群中创建和更新资源。
这是在生产中管理 Kubernetes 应用的推荐方法。
参见 kubectl 文档 。
创建对象
Kubernetes 配置可以用 YAML 或 JSON 定义。可以使用的文件扩展名有
.yaml
、.yml
和 .json
。
kubectl apply -f ./my-manifest.yaml # 创建资源
kubectl apply -f ./my1.yaml -f ./my2.yaml # 使用多个文件创建
kubectl apply -f ./dir # 基于目录下的所有清单文件创建资源
kubectl apply -f https://example.com/manifest.yaml # 从 URL 中创建资源(注意:这是一个示例域名,不包含有效的清单)
kubectl create deployment nginx --image= nginx # 启动单实例 nginx
# 创建一个打印 “Hello World” 的 Job
kubectl create job hello --image= busybox:1.28 -- echo "Hello World"
# 创建一个打印 “Hello World” 间隔 1 分钟的 CronJob
kubectl create cronjob hello --image= busybox:1.28 --schedule= "*/1 * * * *" -- echo "Hello World"
kubectl explain pods # 获取 Pod 清单的文档说明
# 从标准输入创建多个 YAML 对象
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000"
EOF
# 创建有多个 key 的 Secret
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
查看和查找资源
# get 命令的基本输出
kubectl get services # 列出当前命名空间下的所有 Service
kubectl get pods --all-namespaces # 列出所有命名空间下的全部的 Pod
kubectl get pods -o wide # 列出当前命名空间下的全部 Pod 并显示更详细的信息
kubectl get deployment my-dep # 列出某个特定的 Deployment
kubectl get pods # 列出当前命名空间下的全部 Pod
kubectl get pod my-pod -o yaml # 获取一个 Pod 的 YAML
# describe 命令的详细输出
kubectl describe nodes my-node
kubectl describe pods my-pod
# 列出当前名字空间下所有 Service,按名称排序
kubectl get services --sort-by= .metadata.name
# 列出 Pod,按重启次数排序
kubectl get pods --sort-by= '.status.containerStatuses[0].restartCount'
# 列举所有 PV 持久卷,按容量排序
kubectl get pv --sort-by= .spec.capacity.storage
# 获取包含 app=cassandra 标签的所有 Pod 的 version 标签
kubectl get pods --selector= app = cassandra -o \
jsonpath = '{.items[*].metadata.labels.version}'
# 检索带有 “.” 键值,例如 'ca.crt'
kubectl get configmap myconfig \
-o jsonpath = '{.data.ca\.crt}'
# 检索一个 base64 编码的值,其中的键名应该包含减号而不是下划线
kubectl get secret my-secret --template= '{{index .data "key-name-with-dashes"}}'
# 获取所有工作节点(使用选择算符以排除标签名称为 'node-role.kubernetes.io/control-plane' 的结果)
kubectl get node --selector= '!node-role.kubernetes.io/control-plane'
# 获取当前命名空间中正在运行的 Pod
kubectl get pods --field-selector= status.phase= Running
# 获取全部节点的 ExternalIP 地址
kubectl get nodes -o jsonpath = '{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 列出属于某个特定 RC 的 Pod 的名称
# 在转换对于 jsonpath 过于复杂的场合,"jq" 命令很有用;可以在 https://jqlang.github.io/jq/ 找到它
sel = ${ $( kubectl get rc my-rc --output= json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"' ) %?}
echo $( kubectl get pods --selector= $sel --output= jsonpath ={ .items..metadata.name} )
# 显示所有 Pod 的标签(或任何其他支持标签的 Kubernetes 对象)
kubectl get pods --show-labels
# 检查哪些节点处于就绪状态
JSONPATH = '{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath = " $JSONPATH " | grep "Ready=True"
# 使用自定义列检查哪些节点处于就绪状态
kubectl get node -o custom-columns= 'NODE_NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].status'
# 不使用外部工具来输出解码后的 Secret
kubectl get secret my-secret -o go-template= '{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
# 列出被一个 Pod 使用的全部 Secret
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# 列举所有 Pod 中初始化容器的容器 ID(containerID)
# 可用于在清理已停止的容器时避免删除初始化容器
kubectl get pods --all-namespaces -o jsonpath = '{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# 列出事件(Event),按时间戳排序
kubectl get events --sort-by= .metadata.creationTimestamp
# 列出所有警告事件
kubectl events --types= Warning
# 比较当前的集群状态和假定某清单被应用之后的集群状态
kubectl diff -f ./my-manifest.yaml
# 生成一个句点分隔的树,其中包含为节点返回的所有键
# 在复杂的嵌套JSON结构中定位键时非常有用
kubectl get nodes -o json | jq -c 'paths|join(".")'
# 生成一个句点分隔的树,其中包含为 Pod 等返回的所有键
kubectl get pods -o json | jq -c 'paths|join(".")'
# 假设你的 Pod 有默认的容器和默认的名字空间,并且支持 'env' 命令,可以使用以下脚本为所有 Pod 生成 ENV 变量。
# 该脚本也可用于在所有的 Pod 里运行任何受支持的命令,而不仅仅是 'env'。
for pod in $( kubectl get po --output= jsonpath ={ .items..metadata.name} ) ; do echo $pod && kubectl exec -it $pod -- env; done
# 获取一个 Deployment 的 status 子资源
kubectl get deployment nginx-deployment --subresource= status
更新资源
kubectl set image deployment/frontend www = image:v2 # 滚动更新 "frontend" Deployment 的 "www" 容器镜像
kubectl rollout history deployment/frontend # 检查 Deployment 的历史记录,包括版本
kubectl rollout undo deployment/frontend # 回滚到上次部署版本
kubectl rollout undo deployment/frontend --to-revision= 2 # 回滚到特定部署版本
kubectl rollout status -w deployment/frontend # 监视 "frontend" Deployment 的滚动升级状态直到完成
kubectl rollout restart deployment/frontend # 轮替重启 "frontend" Deployment
cat pod.json | kubectl replace -f - # 通过传入到标准输入的 JSON 来替换 Pod
# 强制替换,删除后重建资源。会导致服务不可用。
kubectl replace --force -f ./pod.json
# 为多副本的 nginx 创建服务,使用 80 端口提供服务,连接到容器的 8000 端口
kubectl expose rc nginx --port= 80 --target-port= 8000
# 将某单容器 Pod 的镜像版本(标签)更新到 v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label= awesome # 添加标签
kubectl label pods my-pod new-label- # 移除标签
kubectl label pods my-pod new-label= new-value --overwrite # 覆盖现有的值
kubectl annotate pods my-pod icon-url= http://goo.gl/XXBTWq # 添加注解
kubectl annotate pods my-pod icon-url- # 移除注解
kubectl autoscale deployment foo --min= 2 --max= 10 # 对 "foo" Deployment 自动扩缩容
部分更新资源
# 部分更新某节点
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
# 更新容器的镜像;spec.containers[*].name 是必需的。因为它是一个合并性质的主键。
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# 使用带位置数组的 JSON patch 更新容器的镜像
kubectl patch pod valid-pod --type= 'json' -p= '[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
# 使用带位置数组的 JSON patch 禁用某 Deployment 的 livenessProbe
kubectl patch deployment valid-deployment --type json -p= '[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
# 在带位置数组中添加元素
kubectl patch sa default --type= 'json' -p= '[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
# 通过修正 scale 子资源来更新 Deployment 的副本数
kubectl patch deployment nginx-deployment --subresource= 'scale' --type= 'merge' -p '{"spec":{"replicas":2}}'
编辑资源
使用你偏爱的编辑器编辑 API 资源。
kubectl edit svc/docker-registry # 编辑名为 docker-registry 的服务
KUBE_EDITOR = "nano" kubectl edit svc/docker-registry # 使用其他编辑器
对资源进行扩缩
kubectl scale --replicas= 3 rs/foo # 将名为 'foo' 的副本集扩缩到 3 副本
kubectl scale --replicas= 3 -f foo.yaml # 将在 "foo.yaml" 中的特定资源扩缩到 3 个副本
kubectl scale --current-replicas= 2 --replicas= 3 deployment/mysql # 如果名为 mysql 的 Deployment 的副本当前是 2,那么将它扩缩到 3
kubectl scale --replicas= 5 rc/foo rc/bar rc/baz # 扩缩多个副本控制器
删除资源
kubectl delete -f ./pod.json # 删除在 pod.json 中指定的类型和名称的 Pod
kubectl delete pod unwanted --now # 删除 Pod 且无宽限期限(无优雅时段)
kubectl delete pod,service baz foo # 删除名称为 "baz" 和 "foo" 的 Pod 和服务
kubectl delete pods,services -l name = myLabel # 删除包含 name=myLabel 标签的 Pod 和服务
kubectl -n my-ns delete pod,svc --all # 删除在 my-ns 名字空间中全部的 Pod 和服务
# 删除所有与 pattern1 或 pattern2 awk 模式匹配的 Pod
kubectl get pods -n mynamespace --no-headers= true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod
与运行中的 Pod 进行交互
kubectl logs my-pod # 获取 Pod 日志(标准输出)
kubectl logs -l name = myLabel # 获取含 name=myLabel 标签的 Pod 的日志(标准输出)
kubectl logs my-pod --previous # 获取上个容器实例的 Pod 日志(标准输出)
kubectl logs my-pod -c my-container # 获取 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs -l name = myLabel -c my-container # 获取含 name=myLabel 标签的 Pod 容器日志(标准输出, 多容器场景)
kubectl logs my-pod -c my-container --previous # 获取 Pod 中某容器的上个实例的日志(标准输出, 多容器场景)
kubectl logs -f my-pod # 流式输出 Pod 的日志(标准输出)
kubectl logs -f my-pod -c my-container # 流式输出 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs -f -l name = myLabel --all-containers # 流式输出含 name=myLabel 标签的 Pod 的所有日志(标准输出)
kubectl run -i --tty busybox --image= busybox:1.28 -- sh # 以交互式 Shell 运行 Pod
kubectl run nginx --image= nginx -n mynamespace # 在 “mynamespace” 命名空间中运行单个 nginx Pod
kubectl run nginx --image= nginx --dry-run= client -o yaml > pod.yaml
# 为运行 nginx Pod 生成规约并将其写入到名为 pod.yaml 的文件
kubectl attach my-pod -i # 挂接到一个运行的容器中
kubectl port-forward my-pod 5000:6000 # 在本地计算机上侦听端口 5000 并转发到 my-pod 上的端口 6000
kubectl exec my-pod -- ls / # 在已有的 Pod 中运行命令(单容器场景)
kubectl exec --stdin --tty my-pod -- /bin/sh # 使用交互 shell 访问正在运行的 Pod (一个容器场景)
kubectl exec my-pod -c my-container -- ls / # 在已有的 Pod 中运行命令(多容器场景)
kubectl debug my-pod -it --image= busybox:1.28 # 在现有 Pod 中创建交互式调试会话并立即附加到此 Pod 上
kubectl debug node/my-node -it --image= busybox:1.28 # 在节点上创建交互式调试会话并立即附加到此节点上
kubectl top pod # 显示默认命名空间中所有 Pod 的度量值
kubectl top pod POD_NAME --containers # 显示给定 Pod 和其中容器的度量值
kubectl top pod POD_NAME --sort-by= cpu # 显示给定 Pod 的指标并且按照 'cpu' 或者 'memory' 排序
从容器中复制文件和目录
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # 将 /tmp/foo_dir 本地目录复制到远程当前命名空间中 Pod 中的 /tmp/bar_dir
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # 将 /tmp/foo 本地文件复制到远程 Pod 中特定容器的 /tmp/bar 下
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间内指定 Pod 中的 /tmp/bar
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # 将 /tmp/foo 从远程 Pod 复制到本地 /tmp/bar
说明:
kubectl cp
要求容器镜像中存在 “tar” 二进制文件。如果 “tar” 不存在,kubectl cp
将失败。
对于进阶用例,例如符号链接、通配符扩展或保留文件权限,请考虑使用 kubectl exec
。
tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间中 Pod 中的 /tmp/bar
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # 将 /tmp/foo 从远程 Pod 复制到本地 /tmp/bar
与 Deployments 和 Services 进行交互
kubectl logs deploy/my-deployment # 获取一个 Deployment 的 Pod 的日志(单容器例子)
kubectl logs deploy/my-deployment -c my-container # 获取一个 Deployment 的 Pod 的日志(多容器例子)
kubectl port-forward svc/my-service 5000 # 侦听本地端口 5000 并转发到 Service 后端端口 5000
kubectl port-forward svc/my-service 5000:my-service-port # 侦听本地端口 5000 并转发到名字为 <my-service-port> 的 Service 目标端口
kubectl port-forward deploy/my-deployment 5000:6000 # 侦听本地端口 5000 并转发到 <my-deployment> 创建的 Pod 里的端口 6000
kubectl exec deploy/my-deployment -- ls # 在 Deployment 里的第一个 Pod 的第一个容器里运行命令(单容器和多容器例子)
与节点和集群进行交互
kubectl cordon my-node # 标记 my-node 节点为不可调度
kubectl drain my-node # 对 my-node 节点进行清空操作,为节点维护做准备
kubectl uncordon my-node # 标记 my-node 节点为可以调度
kubectl top node # 显示所有节点的度量值
kubectl top node my-node # 显示给定节点的度量值
kubectl cluster-info # 显示主控节点和服务的地址
kubectl cluster-info dump # 将当前集群状态转储到标准输出
kubectl cluster-info dump --output-directory= /path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state
# 查看当前节点上存在的现有污点
kubectl get nodes -o= 'custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'
# 如果已存在具有指定键和效果的污点,则替换其值为指定值
kubectl taint nodes foo dedicated = special-user:NoSchedule
资源类型
列出所支持的全部资源类型和它们的简称、
API 组 、
是否是名字空间作用域 和
Kind 。
用于探索 API 资源的其他操作:
kubectl api-resources --namespaced= true # 所有命名空间作用域的资源
kubectl api-resources --namespaced= false # 所有非命名空间作用域的资源
kubectl api-resources -o name # 用简单格式列举所有资源(仅显示资源名称)
kubectl api-resources -o wide # 用扩展格式列举所有资源(又称 "wide" 格式)
kubectl api-resources --verbs= list,get # 支持 "list" 和 "get" 请求动词的所有资源
kubectl api-resources --api-group= extensions # "extensions" API 组中的所有资源
要以特定格式将详细信息输出到终端窗口,将 -o
(或者 --output
)参数添加到支持的 kubectl
命令中。
输出格式
描述
-o=custom-columns=<spec>
使用逗号分隔的自定义列来打印表格
-o=custom-columns-file=<filename>
使用 <filename>
文件中的自定义列模板打印表格
-o=go-template=<template>
打印在 golang 模板 中定义的字段
-o=go-template-file=<filename>
打印在 <filename>
文件中由 golang 模板 定义的字段
-o=json
输出 JSON 格式的 API 对象
-o=jsonpath=<template>
打印 jsonpath 表达式中定义的字段
-o=jsonpath-file=<filename>
打印在 <filename>
文件中定义的 jsonpath 表达式所指定的字段
-o=name
仅打印资源名称而不打印其他内容
-o=wide
以纯文本格式输出额外信息,对于 Pod 来说,输出中包含了节点名称
-o=yaml
输出 YAML 格式的 API 对象
使用 -o=custom-columns
的示例:
# 集群中运行着的所有镜像
kubectl get pods -A -o= custom-columns= 'DATA:spec.containers[*].image'
# 列举 default 名字空间中运行的所有镜像,按 Pod 分组
kubectl get pods --namespace default --output= custom-columns= "NAME:.metadata.name,IMAGE:.spec.containers[*].image"
# 除 "registry.k8s.io/coredns:1.6.2" 之外的所有镜像
kubectl get pods -A -o= custom-columns= 'DATA:spec.containers[?(@.image!="registry.k8s.io/coredns:1.6.2")].image'
# 输出 metadata 下面的所有字段,无论 Pod 名字为何
kubectl get pods -A -o= custom-columns= 'DATA:metadata.*'
有关更多示例,请参看 kubectl 参考文档 。
kubectl 日志输出详细程度和调试
kubectl 日志输出详细程度是通过 -v
或者 --v
来控制的,参数后跟一个数字表示日志的级别。
Kubernetes 通用的日志习惯和相关的日志级别在
这里 有相应的描述。
详细程度
描述
--v=0
用于那些应该 始终 对运维人员可见的信息,因为这些信息一般很有用。
--v=1
如果你不想要看到冗余信息,此值是一个合理的默认日志级别。
--v=2
输出有关服务的稳定状态的信息以及重要的日志消息,这些信息可能与系统中的重大变化有关。这是建议大多数系统设置的默认日志级别。
--v=3
包含有关系统状态变化的扩展信息。
--v=4
包含调试级别的冗余信息。
--v=5
跟踪级别的详细程度。
--v=6
显示所请求的资源。
--v=7
显示 HTTP 请求头。
--v=8
显示 HTTP 请求内容。
--v=9
显示 HTTP 请求内容而且不截断内容。
接下来
11.4 - kubectl 命令
kubectl 命令参考
11.5 - kubectl
简介
kubectl 管理控制 Kubernetes 集群。
更多信息请查阅命令行工具 (kubectl
)。
选项
--add-dir-header
设置为 true 表示添加文件目录到日志信息头中
--alsologtostderr
表示将日志输出到文件的同时输出到 stderr
--as string
以指定用户的身份执行操作
--as-group stringArray
模拟指定的组来执行操作,可以使用这个标志来指定多个组。
--azure-container-registry-config string
包含 Azure 容器仓库配置信息的文件的路径。
--cache-dir string 默认值:"$HOME/.kube/cache"
默认缓存目录
--certificate-authority string
指向证书机构的 cert 文件路径
--client-certificate string
TLS 使用的客户端证书路径
--client-key string
TLS 使用的客户端密钥文件路径
--cloud-provider-gce-l7lb-src-cidrs cidrs 默认值:130.211.0.0/22,35.191.0.0/16
在 GCE 防火墙中开放的 CIDR,用来进行 L7 LB 流量代理和健康检查。
--cloud-provider-gce-lb-src-cidrs cidrs 默认值:130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16
在 GCE 防火墙中开放的 CIDR,用来进行 L4 LB 流量代理和健康检查。
--cluster string
要使用的 kubeconfig 集群的名称
--context string
要使用的 kubeconfig 上下文的名称
--default-not-ready-toleration-seconds int 默认值:300
表示 `notReady` 状态的容忍度秒数:默认情况下,`NoExecute` 被添加到尚未具有此容忍度的每个 Pod 中。
--default-unreachable-toleration-seconds int 默认值:300
表示 `unreachable` 状态的容忍度秒数:默认情况下,`NoExecute` 被添加到尚未具有此容忍度的每个 Pod 中。
-h, --help
kubectl 操作的帮助命令
--insecure-skip-tls-verify
设置为 true,则表示不会检查服务器证书的有效性。这样会导致你的 HTTPS 连接不安全。
--kubeconfig string
CLI 请求使用的 kubeconfig 配置文件的路径。
--log-backtrace-at traceLocation 默认值:0
当日志机制运行到指定文件的指定行(file:N)时,打印调用堆栈信息
--log-dir string
如果不为空,则将日志文件写入此目录
--log-file string
如果不为空,则将使用此日志文件
--log-file-max-size uint 默认值:1800
定义日志文件的最大尺寸。单位为兆字节。如果值设置为 0,则表示日志文件大小不受限制。
--log-flush-frequency duration 默认值:5s
两次日志刷新操作之间的最长时间(秒)
--logtostderr 默认值:true
日志输出到 stderr 而不是文件中
--match-server-version
要求客户端版本和服务端版本相匹配
-n, --namespace string
如果存在,CLI 请求将使用此命名空间
--one-output
如果为 true,则只将日志写入初始严重级别(而不是同时写入所有较低的严重级别)。
--password string
API 服务器进行基本身份验证的密码
--profile string 默认值:"none"
要记录的性能指标的名称。可取(none|cpu|heap|goroutine|threadcreate|block|mutex)其中之一。
--profile-output string 默认值:"profile.pprof"
用于转储所记录的性能信息的文件名
--request-timeout string 默认值:"0"
放弃单个服务器请求之前的等待时间,非零值需要包含相应时间单位(例如:1s、2m、3h)。零值则表示不做超时要求。
-s, --server string
Kubernetes API 服务器的地址和端口
--skip-headers
设置为 true 则表示跳过在日志消息中出现 header 前缀信息
--skip-log-headers
设置为 true 则表示在打开日志文件时跳过 header 信息
--stderrthreshold severity 默认值:2
等于或高于此阈值的日志将输出到标准错误输出(stderr)
--token string
用于对 API 服务器进行身份认证的持有者令牌
--user string
指定使用 kubeconfig 配置文件中的用户名
--username string
用于 API 服务器的基本身份验证的用户名
-v, --v Level
指定输出日志的日志详细级别
--version version[=true]
打印 kubectl 版本信息并退出
--vmodule moduleSpec
以逗号分隔的 pattern=N 设置列表,用于过滤文件的日志记录
环境变量
KUBECONFIG
kubectl 的配置 ("kubeconfig") 文件的路径。默认值:"$HOME/.kube/config"
KUBECTL_COMMAND_HEADERS
设置为 false 时,将关闭额外的 HTTP 标头,不再详细说明被调用的 kubectl 命令(此变量适用于 Kubernetes v1.22 或更高版本)
KUBECTL_DEBUG_CUSTOM_PROFILE
设置为 true 时,将在 kubectl 调试中启用自定义标志,该标志用于自定义预定义的配置文件。
KUBECTL_EXPLAIN_OPENAPIV3
切换对 `kubectl explain` 的调用是否使用可用的新 OpenAPIv3 数据源。OpenAPIV3 自 Kubernetes 1.24 起默认被启用。
KUBECTL_ENABLE_CMD_SHADOW
当设置为 true 时,如果子命令不存在,外部插件可以用作内置命令的子命令。
此功能处于 alpha 阶段,只能用于 create 命令(例如 kubectl create networkpolicy)。
KUBECTL_PORT_FORWARD_WEBSOCKETS
当设置为 true 时,`kubectl port-forward` 命令将尝试使用 WebSocket 协议进行流式传输。
如果升级到 WebSocket 失败,命令将回退到使用当前的 SPDY 协议。
KUBECTL_REMOTE_COMMAND_WEBSOCKETS
当设置为 true 时,kubectl exec、cp 和 attach 命令将尝试使用 WebSocket 协议进行流式传输。
如果升级到 WebSocket 失败,这些命令将回退为使用当前的 SPDY 协议。
另请参见
11.6 - JSONPath 支持
kubectl 支持 JSONPath 模板。
JSONPath 模板由 {} 包起来的 JSONPath 表达式组成。Kubectl 使用 JSONPath 表达式来过滤 JSON 对象中的特定字段并格式化输出。
除了原始的 JSONPath 模板语法,以下函数和语法也是有效的:
使用双引号将 JSONPath 表达式内的文本引起来。
使用 range
,end
运算符来迭代列表。
使用负片索引后退列表。负索引不会“环绕”列表,并且只要 -index + listLength> = 0
就有效。
给定 JSON 输入:
{
"kind" : "List" ,
"items" :[
{
"kind" :"None" ,
"metadata" :{
"name" :"127.0.0.1" ,
"labels" :{
"kubernetes.io/hostname" :"127.0.0.1"
}
},
"status" :{
"capacity" :{"cpu" :"4" },
"addresses" :[{"type" : "LegacyHostIP" , "address" :"127.0.0.1" }]
}
},
{
"kind" :"None" ,
"metadata" :{"name" :"127.0.0.2" },
"status" :{
"capacity" :{"cpu" :"8" },
"addresses" :[
{"type" : "LegacyHostIP" , "address" :"127.0.0.2" },
{"type" : "another" , "address" :"127.0.0.3" }
]
}
}
],
"users" :[
{
"name" : "myself" ,
"user" : {}
},
{
"name" : "e2e" ,
"user" : {"username" : "admin" , "password" : "secret" }
}
]
}
函数
描述
示例
结果
text
纯文本
kind is {.kind}
kind is List
@
当前对象
{@}
与输入相同
.
或 []
子运算符
{.kind}
、{['kind']}
或 {['name\.type']}
List
..
递归下降
{..name}
127.0.0.1 127.0.0.2 myself e2e
*
通配符。获取所有对象
{.items[*].metadata.name}
[127.0.0.1 127.0.0.2]
[start:end:step]
下标运算符
{.users[0].name}
myself
[,]
并集运算符
{.items[*]['metadata.name', 'status.capacity']}
127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8]
?()
过滤
{.users[?(@.name=="e2e")].user.password}
secret
range
,end
迭代列表
{range .items[*]}[{.metadata.name}, {.status.capacity}] {end}
[127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]]
''
引用解释执行字符串
{range .items[*]}{.metadata.name}{'\t'}{end}
127.0.0.1 127.0.0.2
\
转义终止符
{.items[0].metadata.labels.kubernetes\.io/hostname}
127.0.0.1
使用 kubectl
和 JSONPath 表达式的示例:
kubectl get pods -o json
kubectl get pods -o= jsonpath = '{@}'
kubectl get pods -o= jsonpath = '{.items[0]}'
kubectl get pods -o= jsonpath = '{.items[0].metadata.name}'
kubectl get pods -o= jsonpath = "{.items[*]['metadata.name', 'status.capacity']}"
kubectl get pods -o= jsonpath = '{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
kubectl get pods -o= jsonpath = '{.items[0].metadata.labels.kubernetes\.io/hostname}'
说明:
在 Windows 上,对于任何包含空格的 JSONPath 模板,你必须使用双引号(不是上面 bash 所示的单引号)。
反过来,这意味着你必须在模板中的所有文字周围使用单引号或转义的双引号。例如:
C:\ > kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.startTime}{'\n'}{end}"
C:\ > kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{\"\t\"}{.status.startTime}{\"\n\"}{end}"
说明: 不支持 JSONPath 正则表达式。如需使用正则表达式进行匹配操作,你可以使用如 jq
之类的工具。
# kubectl 的 JSONpath 输出不支持正则表达式
# 下面的命令不会生效
kubectl get pods -o jsonpath = '{.items[?(@.metadata.name=~/^test$/)].metadata.name}'
# 下面的命令可以获得所需的结果
kubectl get pods -o json | jq -r '.items[] | select(.metadata.name | test("test-")).metadata.name'
11.7 - 适用于 Docker 用户的 kubectl
你可以使用 Kubernetes 命令行工具 kubectl
与 API 服务器进行交互。如果你熟悉 Docker 命令行工具,
则使用 kubectl 非常简单。但是,Docker 命令和 kubectl 命令之间有一些区别。以下显示了 Docker 子命令,
并描述了等效的 kubectl
命令。
docker run
要运行 nginx 部署并将其暴露,请参见 kubectl create deployment
使用 docker 命令:
docker run -d --restart= always -e DOMAIN = cluster --name nginx-app -p 80:80 nginx
55c103fa129692154a7652490236fee9be47d70a8dd562281ae7d2f9a339a6db
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon of…" 9 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp nginx-app
使用 kubectl 命令:
# 启动运行 nginx 的 Pod
kubectl create deployment --image= nginx nginx-app
deployment.apps/nginx-app created
# 添加 env 到 nginx-app
kubectl set env deployment/nginx-app DOMAIN = cluster
deployment.apps/nginx-app env updated
说明:
kubectl
命令打印创建或突变资源的类型和名称,然后可以在后续命令中使用。部署后,你可以公开新的 Service。
# 通过 Service 公开端口
kubectl expose deployment nginx-app --port= 80 --name= nginx-http
service "nginx-http" exposed
在 kubectl 命令中,我们创建了一个 Deployment ,
这将保证有 N 个运行 nginx 的 Pod(N 代表 spec 中声明的副本数,默认为 1)。
我们还创建了一个 Service ,其选择算符与容器标签匹配。
查看使用 Service 访问集群中的应用程序 获取更多信息。
默认情况下镜像会在后台运行,与 docker run -d ...
类似,如果你想在前台运行,
使用 kubectl run
在前台运行 Pod:
kubectl run [ -i] [ --tty] --attach <name> --image= <image>
与 docker run ...
不同的是,如果指定了 --attach
,我们将连接到 stdin
、stdout
和 stderr
,
而不能控制具体连接到哪个输出流(docker -a ...
)。要从容器中退出,可以输入 Ctrl + P,然后按 Ctrl + Q。
因为我们使用 Deployment 启动了容器,如果你终止连接到的进程(例如 ctrl-c
),容器将会重启,
这跟 docker run -it
不同。如果想销毁该 Deployment(和它的 Pod),
你需要运行 kubectl delete deployment <name>
。
docker ps
如何列出哪些正在运行?查看 kubectl get 。
使用 docker 命令:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14636241935f ubuntu:16.04 "echo test" 5 seconds ago Exited (0) 5 seconds ago cocky_fermi
55c103fa1296 nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-app
使用 kubectl 命令:
NAME READY STATUS RESTARTS AGE
nginx-app-8df569cb7-4gd89 1/1 Running 0 3m
ubuntu 0/1 Completed 0 20s
docker attach
如何连接到已经运行在容器中的进程?
查看 kubectl attach 。
使用 docker 命令:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon of…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp nginx-app
docker attach 55c103fa1296
...
使用 kubectl 命令:
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl attach -it nginx-app-5jyvm
...
要从容器中分离,可以输入 Ctrl + P,然后按 Ctrl + Q。
docker exec
如何在容器中执行命令?查看 kubectl exec 。
使用 docker 命令:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon of…" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp nginx-app
docker exec 55c103fa1296 cat /etc/hostname
55c103fa1296
使用 kubectl 命令:
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl exec nginx-app-5jyvm -- cat /etc/hostname
nginx-app-5jyvm
执行交互式命令怎么办?
使用 docker 命令:
docker exec -ti 55c103fa1296 /bin/sh
# exit
使用 kubectl 命令:
kubectl exec -ti nginx-app-5jyvm -- /bin/sh
# exit
更多信息请查看获取运行中容器的 Shell 环境 。
docker logs
如何查看运行中进程的 stdout/stderr?查看 kubectl logs 。
使用 docker 命令:
192.168.9.1 - - [14/Jul/2015:01:04:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
192.168.9.1 - - [14/Jul/2015:01:04:03 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
使用 kubectl 命令:
kubectl logs -f nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
现在是时候提一下 Pod 和容器之间的细微差别了;默认情况下如果 Pod 中的进程退出 Pod 也不会终止,
相反它将会重启该进程。这类似于 docker run
时的 --restart=always
选项,这是主要差别。
在 Docker 中,进程的每个调用的输出都是被连接起来的,但是对于 Kubernetes,每个调用都是分开的。
要查看以前在 Kubernetes 中执行的输出,请执行以下操作:
kubectl logs --previous nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
查看日志架构 获取更多信息。
docker stop 和 docker rm
如何停止和删除运行中的进程?查看 kubectl delete 。
使用 docker 命令:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9ec34d98787 nginx "nginx -g 'daemon of" 22 hours ago Up 22 hours 0.0.0.0:80->80/tcp, 443/tcp nginx-app
a9ec34d98787
a9ec34d98787
使用 kubectl 命令:
kubectl get deployment nginx-app
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 1/1 1 1 2m
kubectl get po -l app = nginx-app
NAME READY STATUS RESTARTS AGE
nginx-app-2883164633-aklf7 1/1 Running 0 2m
kubectl delete deployment nginx-app
deployment "nginx-app" deleted
kubectl get po -l app = nginx-app
# 什么都没有返回
说明:
请注意,我们不直接删除 Pod。使用 kubectl 命令,我们要删除拥有该 Pod 的 Deployment。
如果我们直接删除 Pod,Deployment 将会重新创建该 Pod。
docker login
在 kubectl 中没有对 docker login
的直接模拟。如果你有兴趣在私有镜像仓库中使用 Kubernetes,
请参阅使用私有镜像仓库 。
docker version
如何查看客户端和服务端的版本?查看 kubectl version 。
使用 docker 命令:
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64
使用 kubectl 命令:
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
docker info
如何获取有关环境和配置的各种信息?查看 kubectl cluster-info 。
使用 docker 命令:
Containers: 40
Images: 168
Storage Driver: aufs
Root Dir: /usr/local/google/docker/aufs
Backing Filesystem: extfs
Dirs: 248
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-53-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 12
Total Memory: 31.32 GiB
Name: k8s-is-fun.mtv.corp.google.com
ID: ADUV:GCYR:B3VJ:HMPO:LNPQ:KD5S:YKFQ:76VN:IANZ:7TFV:ZBF4:BYJO
WARNING: No swap limit support
使用 kubectl 命令:
Kubernetes master is running at https://203.0.113.141
KubeDNS is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kube-dns/proxy
kubernetes-dashboard is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy
Grafana is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
Heapster is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
InfluxDB is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
11.8 - kubectl 的用法约定
kubectl
的推荐用法约定。
在可重用脚本中使用 kubectl
对于脚本中的稳定输出:
请求一个面向机器的输出格式,例如 -o name
、-o json
、-o yaml
、-o go template
或 -o jsonpath
。
完全限定版本。例如 jobs.v1.batch/myjob
。这将确保 kubectl 不会使用其默认版本,该版本会随着时间的推移而更改。
不要依赖上下文、首选项或其他隐式状态。
子资源
你可以将 --subresource
Beta 标志用于 kubectl 命令,例如 get
、patch
、edit
和 replace
来获取和更新所有支持子资源的资源的子资源。目前,仅支持 status
和 scale
子资源。
对于 kubectl edit
,不支持 scale
子资源。如果将 --subresource
与 kubectl edit
一起使用,
并指定 scale
作为子资源,则命令将会报错。
针对子资源的 API 协定与完整资源相同。在更新 status
子资源为一个新值时,请记住,
子资源可能是潜在的由控制器调和为不同的值。
最佳实践
kubectl run
若希望 kubectl run
满足基础设施即代码的要求:
使用特定版本的标签标记镜像,不要将该标签改为新版本。例如使用 :v1234
、v1.2.3
、r03062016-1-4
,
而不是 :latest
(有关详细信息,请参阅配置的最佳实践 )。
使用基于版本控制的脚本来运行包含大量参数的镜像。
对于无法通过 kubectl run
参数来表示的功能特性,使用基于源码控制的配置文件,以记录要使用的功能特性。
你可以使用 --dry-run=client
参数来预览而不真正提交即将下发到集群的对象实例:
kubectl apply
你可以使用 kubectl apply
命令创建或更新资源。有关使用 kubectl apply 更新资源的详细信息,请参阅 Kubectl 文档 。
12 - 调试集群
12.1 - 流控
API 优先级和公平性控制着 Kubernetes API 服务器在负载过高的情况下的行为。你可以在
API 优先级和公平性 文档中找到更多信息。
问题诊断
对于启用了 APF 的 API 服务器,每个 HTTP 响应都有两个额外的 HTTP 头:
X-Kubernetes-PF-FlowSchema-UID
和 X-Kubernetes-PF-PriorityLevel-UID
,
给出与请求匹配的 FlowSchema 和已分配的优先级级别。
如果请求用户没有查看这些对象的权限,则这些 HTTP 头中将不包含 API 对象的名称,
因此在调试时,你可以使用类似如下的命令:
kubectl get flowschemas -o custom-columns= "uid:{metadata.uid},name:{metadata.name}"
kubectl get prioritylevelconfigurations -o custom-columns= "uid:{metadata.uid},name:{metadata.name}"
来获取 UID 与 FlowSchema 的名称和 PriorityLevelConfiguration 的名称之间的对应关系。
调试端点
启用 APF 特性后,kube-apiserver
会在其 HTTP/HTTPS 端口额外提供以下路径:
你需要确保自己具有访问这些端点的权限。如果你使用管理员身份,则无需进行任何操作。
必要时可以通过设置 nonResourceURLs
来访问 /debug/api_priority_and_fairness/
参照 RBAC 文档授予权限。
/debug/api_priority_and_fairness/dump_priority_levels
——
所有优先级及其当前状态的列表。你可以这样获取:
kubectl get --raw /debug/api_priority_and_fairness/dump_priority_levels
输出格式为 CSV,类似于:
PriorityLevelName, ActiveQueues, IsIdle, IsQuiescing, WaitingRequests, ExecutingRequests, DispatchedRequests, RejectedRequests, TimedoutRequests, CancelledRequests
catch-all, 0, true, false, 0, 0, 1, 0, 0, 0
exempt, 0, true, false, 0, 0, 0, 0, 0, 0
global-default, 0, true, false, 0, 0, 46, 0, 0, 0
leader-election, 0, true, false, 0, 0, 4, 0, 0, 0
node-high, 0, true, false, 0, 0, 34, 0, 0, 0
system, 0, true, false, 0, 0, 48, 0, 0, 0
workload-high, 0, true, false, 0, 0, 500, 0, 0, 0
workload-low, 0, true, false, 0, 0, 0, 0, 0, 0
所选列名的解释:
IsQuiescing
表示当队列已被腾空时此优先级级别是否将被移除。
/debug/api_priority_and_fairness/dump_queues
—— 所有队列及其当前状态的列表。
你可以这样获取:
kubectl get --raw /debug/api_priority_and_fairness/dump_queues
输出格式为 CSV,类似于:
PriorityLevelName, Index, PendingRequests, ExecutingRequests, SeatsInUse, NextDispatchR, InitialSeatsSum, MaxSeatsSum, TotalWorkSum
workload-low, 14, 27, 0, 0, 77.64342019ss, 270, 270, 0.81000000ss
workload-low, 74, 26, 0, 0, 76.95387841ss, 260, 260, 0.78000000ss
...
leader-election, 0, 0, 0, 0, 5088.87053833ss, 0, 0, 0.00000000ss
leader-election, 1, 0, 0, 0, 0.00000000ss, 0, 0, 0.00000000ss
...
workload-high, 0, 0, 0, 0, 0.00000000ss, 0, 0, 0.00000000ss
workload-high, 1, 0, 0, 0, 1119.44936475ss, 0, 0, 0.00000000ss
所选列名的解释:
NextDispatchR
:下一个请求将被调度时的 R 进度计读数,单位为 seat-second。
InitialSeatsSum
:与在某个给定队列中所有请求关联的 InitialSeats 的总和。
MaxSeatsSum
:与某个给定队列中所有请求关联的 MaxSeats 的总和。
TotalWorkSum
:在某个给定队列中所有等待中请求的总工作量,单位为 seat-second。
注意:seat-second
(缩写为 ss
)是 APF 领域中的工作量单位。
/debug/api_priority_and_fairness/dump_requests
- 所有请求的列表,
包括队列中正在等待的请求和正在执行的请求。你可以运行以下类似命令获取此列表:
kubectl get --raw /debug/api_priority_and_fairness/dump_requests
输出格式为 CSV,类似于:
PriorityLevelName, FlowSchemaName, QueueIndex, RequestIndexInQueue, FlowDistingsher, ArriveTime, InitialSeats, FinalSeats, AdditionalLatency, StartTime
exempt, exempt, -1, -1, , 2023-07-15T04:51:25.596404345Z, 1, 0, 0s, 2023-07-15T04:51:25.596404345Z
workload-low, service-accounts, 14, 0, system:serviceaccount:default:loadtest, 2023-07-18T00:12:51.386556253Z, 10, 0, 0s, 0001-01-01T00:00:00Z
workload-low, service-accounts, 14, 1, system:serviceaccount:default:loadtest, 2023-07-18T00:12:51.487092539Z, 10, 0, 0s, 0001-01-01T00:00:00Z
你可以使用以下命令获得更详细的清单:
kubectl get --raw '/debug/api_priority_and_fairness/dump_requests?includeRequestDetails=1'
输出格式为 CSV,类似于:
PriorityLevelName, FlowSchemaName, QueueIndex, RequestIndexInQueue, FlowDistingsher, ArriveTime, InitialSeats, FinalSeats, AdditionalLatency, StartTime, UserName, Verb, APIPath, Namespace, Name, APIVersion, Resource, SubResource
exempt, exempt, -1, -1, , 2023-07-15T04:51:25.596404345Z, 1, 0, 0s, 2023-07-15T04:51:25.596404345Z, system:serviceaccount:system:admin, list, /api/v1/namespaces/kube-stress/configmaps, kube-stress, , v1, configmaps,
workload-low, service-accounts, 14, 0, system:serviceaccount:default:loadtest, 2023-07-18T00:13:08.986534842Z, 10, 0, 0s, 0001-01-01T00:00:00Z, system:serviceaccount:default:loadtest, list, /api/v1/namespaces/kube-stress/configmaps, kube-stress, , v1, configmaps,
workload-low, service-accounts, 14, 1, system:serviceaccount:default:loadtest, 2023-07-18T00:13:09.086476021Z, 10, 0, 0s, 0001-01-01T00:00:00Z, system:serviceaccount:default:loadtest, list, /api/v1/namespaces/kube-stress/configmaps, kube-stress, , v1, configmaps,
所选列名的解释:
QueueIndex
:队列的索引。对于没有队列的优先级级别,该值将为 -1。
RequestIndexInQueue
:某个给定请求在队列中的索引。对于正在执行的请求,该值将为 -1。
InitialSeats
:在请求的初始(正常)执行阶段占用的席位数。
FinalSeats
:在请求执行的最终阶段占用的席位数,包括与之关联的 WATCH 通知。
AdditionalLatency
:在请求执行的最终阶段所耗用的额外时间。
FinalSeats 将在此时间段内被占用。这并不意味着用户会感知到任何延迟。
StartTime
:请求开始执行的时间。对于排队的请求,该值将为 0001-01-01T00:00:00Z。
调试日志生成行为
在 -v=3
或更详细的情况下,API 服务器会为在 API 服务日志中为每个请求输出一行 httplog,
其中包括以下属性:
apf_fs
:请求被分类到的 FlowSchema 的名称。
apf_pl
:该 FlowSchema 的优先级名称。
apf_iseats
:为请求执行的初始(正常)阶段确定的席位数量。
apf_fseats
:为请求的最后执行阶段(考虑关联的 watch
通知)确定的席位数量。
apf_additionalLatency
:请求执行最后阶段的持续时间。
在更高级别的精细度下,将有日志行揭示 APF 如何处理请求的详细信息,主要用于调试目的。
APF 将以下两个头添加到每个 HTTP 响应消息中。
这些信息不会出现在审计日志中,但可以从客户端查看。
对于使用 klog
的客户端,使用 -v=8
或更高的详细级别可以查看这些头。
X-Kubernetes-PF-FlowSchema-UID
保存相应请求被分类到的 FlowSchema 对象的 UID。
X-Kubernetes-PF-PriorityLevel-UID
保存与该 FlowSchema 关联的 PriorityLevelConfiguration 对象的 UID。
接下来
有关 API 优先级和公平性的设计细节的背景信息,
请参阅增强提案 。
13 - 组件工具
13.1 - 特性门控
本页详述了管理员可以在不同的 Kubernetes 组件上指定的各种特性门控。
关于特性各个阶段的说明,请参见特性阶段 。
概述
特性门控是描述 Kubernetes 特性的一组键值对。你可以在 Kubernetes 的各个组件中使用
--feature-gates
标志来启用或禁用这些特性。
每个 Kubernetes 组件都支持启用或禁用与该组件相关的一组特性门控。
使用 -h
参数来查看所有组件支持的完整特性门控。
要为诸如 kubelet 之类的组件设置特性门控,请使用 --feature-gates
参数,
并向其传递一个特性设置键值对列表:
--feature-gates= ...,GracefulNodeShutdown= true
下表总结了在不同的 Kubernetes 组件上可以设置的特性门控。
引入特性或更改其发布阶段后,"开始(Since)" 列将包含 Kubernetes 版本。
"结束(Until)" 列(如果不为空)包含最后一个 Kubernetes 版本,你仍可以在其中使用特性门控。
如果某个特性处于 Alpha 或 Beta 状态,你可以在
Alpha 和 Beta 特性门控表 中找到该特性。
如果某个特性处于稳定状态,
你可以在已毕业和废弃特性门控表 中找到该特性的所有阶段。
已毕业和废弃特性门控表 还列出了废弃的和已被移除的特性。
Alpha 和 Beta 状态的特性门控
处于 Alpha 或 Beta 状态的特性门控
特性
默认值
阶段
自从
直到
AnonymousAuthConfigurableEndpoints
false
Alpha
1.31
–
AnyVolumeDataSource
false
Alpha
1.18
1.23
AnyVolumeDataSource
true
Beta
1.24
–
APIResponseCompression
false
Alpha
1.7
1.15
APIResponseCompression
true
Beta
1.16
–
APIServerIdentity
false
Alpha
1.20
1.25
APIServerIdentity
true
Beta
1.26
–
APIServerTracing
false
Alpha
1.22
1.26
APIServerTracing
true
Beta
1.27
–
AuthorizeNodeWithSelectors
false
Alpha
1.31
–
AuthorizeWithSelectors
false
Alpha
1.31
–
CloudControllerManagerWebhook
false
Alpha
1.27
–
ClusterTrustBundle
false
Alpha
1.27
–
ClusterTrustBundleProjection
false
Alpha
1.29
–
ComponentSLIs
false
Alpha
1.26
1.26
ComponentSLIs
true
Beta
1.27
–
ConcurrentWatchObjectDecode
false
Beta
1.31
–
ConsistentListFromCache
false
Alpha
1.28
1.30
ConsistentListFromCache
true
Beta
1.31
–
ContainerCheckpoint
false
Alpha
1.25
1.29
ContainerCheckpoint
true
Beta
1.30
–
ContextualLogging
false
Alpha
1.24
–
ContextualLogging
true
Beta
1.30
–
CoordinatedLeaderElection
false
Alpha
1.31
–
CPUManagerPolicyAlphaOptions
false
Alpha
1.23
–
CPUManagerPolicyBetaOptions
true
Beta
1.23
–
CPUManagerPolicyOptions
false
Alpha
1.22
1.22
CPUManagerPolicyOptions
true
Beta
1.23
–
CRDValidationRatcheting
false
Alpha
1.28
1.29
CRDValidationRatcheting
true
Beta
1.30
–
CronJobsScheduledAnnotation
true
Beta
1.28
–
CrossNamespaceVolumeDataSource
false
Alpha
1.26
–
CSIMigrationPortworx
false
Alpha
1.23
1.24
CSIMigrationPortworx
false
Beta
1.25
1.30
CSIMigrationPortworx
true
Beta
1.31
–
CSIVolumeHealth
false
Alpha
1.21
–
CustomCPUCFSQuotaPeriod
false
Alpha
1.12
–
CustomResourceFieldSelectors
false
Alpha
1.30
1.30
CustomResourceFieldSelectors
true
Beta
1.31
–
DisableAllocatorDualWrite
false
Alpha
1.31
–
DisableNodeKubeProxyVersion
false
Alpha
1.29
1.30
DisableNodeKubeProxyVersion
true
Beta
1.31
–
DRAControlPlaneController
false
Alpha
1.26
–
DynamicResourceAllocation
false
Alpha
1.30
–
EventedPLEG
false
Alpha
1.25
–
GracefulNodeShutdown
false
Alpha
1.20
1.20
GracefulNodeShutdown
true
Beta
1.21
–
GracefulNodeShutdownBasedOnPodPriority
false
Alpha
1.23
1.23
GracefulNodeShutdownBasedOnPodPriority
true
Beta
1.24
–
HonorPVReclaimPolicy
false
Alpha
1.23
1.30
HonorPVReclaimPolicy
true
Beta
1.31
–
HPAScaleToZero
false
Alpha
1.16
–
ImageMaximumGCAge
false
Alpha
1.29
1.29
ImageMaximumGCAge
true
Beta
1.30
–
ImageVolume
false
Alpha
1.31
–
InPlacePodVerticalScaling
false
Alpha
1.27
–
InTreePluginPortworxUnregister
false
Alpha
1.23
–
JobBackoffLimitPerIndex
false
Alpha
1.28
1.28
JobBackoffLimitPerIndex
true
Beta
1.29
–
JobManagedBy
false
Alpha
1.30
–
JobPodReplacementPolicy
false
Alpha
1.28
1.28
JobPodReplacementPolicy
true
Beta
1.29
–
JobSuccessPolicy
false
Alpha
1.30
1.30
JobSuccessPolicy
true
Beta
1.31
–
KubeletCgroupDriverFromCRI
false
Alpha
1.28
1.30
KubeletCgroupDriverFromCRI
true
Beta
1.31
–
KubeletInUserNamespace
false
Alpha
1.22
–
KubeletPodResourcesDynamicResources
false
Alpha
1.27
–
KubeletPodResourcesGet
false
Alpha
1.27
–
KubeletSeparateDiskGC
false
Alpha
1.29
1.30
KubeletSeparateDiskGC
true
Beta
1.31
–
KubeletTracing
false
Alpha
1.25
1.26
KubeletTracing
true
Beta
1.27
–
LoadBalancerIPMode
false
Alpha
1.29
1.30
LoadBalancerIPMode
true
Beta
1.30
–
LocalStorageCapacityIsolationFSQuotaMonitoring
false
Alpha
1.15
1.30
LocalStorageCapacityIsolationFSQuotaMonitoring
false
Beta
1.31
–
LoggingAlphaOptions
false
Alpha
1.24
–
LoggingBetaOptions
true
Beta
1.24
–
MatchLabelKeysInPodAffinity
false
Alpha
1.29
1.30
MatchLabelKeysInPodAffinity
true
Beta
1.31
–
MatchLabelKeysInPodTopologySpread
false
Alpha
1.25
1.26
MatchLabelKeysInPodTopologySpread
true
Beta
1.27
–
MaxUnavailableStatefulSet
false
Alpha
1.24
–
MemoryManager
false
Alpha
1.21
1.21
MemoryManager
true
Beta
1.22
–
MemoryQoS
false
Alpha
1.22
–
MultiCIDRServiceAllocator
false
Alpha
1.27
1.30
MultiCIDRServiceAllocator
false
Beta
1.31
–
MutatingAdmissionPolicy
false
Alpha
1.30
–
NFTablesProxyMode
false
Alpha
1.29
1.30
NFTablesProxyMode
true
Beta
1.31
–
NodeInclusionPolicyInPodTopologySpread
false
Alpha
1.25
1.25
NodeInclusionPolicyInPodTopologySpread
true
Beta
1.26
–
NodeLogQuery
false
Alpha
1.27
1.29
NodeLogQuery
false
Beta
1.30
–
NodeSwap
false
Alpha
1.22
1.27
NodeSwap
false
Beta
1.28
1.29
NodeSwap
true
Beta
1.30
–
OpenAPIEnums
false
Alpha
1.23
1.23
OpenAPIEnums
true
Beta
1.24
–
PodAndContainerStatsFromCRI
false
Alpha
1.23
–
PodDeletionCost
false
Alpha
1.21
1.21
PodDeletionCost
true
Beta
1.22
–
PodIndexLabel
true
Beta
1.28
–
PodLifecycleSleepAction
false
Alpha
1.29
1.29
PodLifecycleSleepAction
true
Beta
1.30
–
PodReadyToStartContainersCondition
false
Alpha
1.28
1.28
PodReadyToStartContainersCondition
true
Beta
1.29
–
PortForwardWebsockets
false
Alpha
1.30
1.30
PortForwardWebsockets
true
Beta
1.31
–
ProcMountType
false
Alpha
1.12
1.30
ProcMountType
false
Beta
1.31
–
QOSReserved
false
Alpha
1.11
–
RecoverVolumeExpansionFailure
false
Alpha
1.23
–
RecursiveReadOnlyMounts
false
Alpha
1.30
1.30
RecursiveReadOnlyMounts
true
Beta
1.31
–
RelaxedEnvironmentVariableValidation
false
Alpha
1.30
–
ReloadKubeletServerCertificateFile
true
Beta
1.31
–
ResilientWatchCacheInitialization
true
Beta
1.31
–
ResourceHealthStatus
false
Alpha
1.31
–
RetryGenerateName
false
Alpha
1.30
1.30
RetryGenerateName
true
Beta
1.31
–
RotateKubeletServerCertificate
false
Alpha
1.7
1.11
RotateKubeletServerCertificate
true
Beta
1.12
–
RuntimeClassInImageCriApi
false
Alpha
1.29
–
SchedulerQueueingHints
true
Beta
1.28
1.28
SchedulerQueueingHints
false
Beta
1.29
–
SELinuxMount
false
Alpha
1.30
–
SELinuxMountReadWriteOncePod
false
Alpha
1.25
1.26
SELinuxMountReadWriteOncePod
false
Beta
1.27
1.27
SELinuxMountReadWriteOncePod
true
Beta
1.28
–
SeparateTaintEvictionController
true
Beta
1.29
–
ServiceAccountTokenJTI
false
Alpha
1.29
1.29
ServiceAccountTokenJTI
true
Beta
1.30
–
ServiceAccountTokenNodeBinding
false
Alpha
1.29
1.30
ServiceAccountTokenNodeBinding
true
Beta
1.31
–
ServiceAccountTokenNodeBindingValidation
false
Alpha
1.29
1.29
ServiceAccountTokenNodeBindingValidation
true
Beta
1.30
–
ServiceAccountTokenPodNodeInfo
false
Alpha
1.29
1.29
ServiceAccountTokenPodNodeInfo
true
Beta
1.30
–
ServiceTrafficDistribution
false
Alpha
1.30
1.30
ServiceTrafficDistribution
true
Beta
1.31
–
SidecarContainers
false
Alpha
1.28
1.28
SidecarContainers
true
Beta
1.29
–
SizeMemoryBackedVolumes
false
Alpha
1.20
1.21
SizeMemoryBackedVolumes
true
Beta
1.22
–
StatefulSetAutoDeletePVC
false
Alpha
1.23
1.26
StatefulSetAutoDeletePVC
true
Beta
1.27
–
StorageVersionAPI
false
Alpha
1.20
–
StorageVersionHash
false
Alpha
1.14
1.14
StorageVersionHash
true
Beta
1.15
–
StorageVersionMigrator
false
Alpha
1.30
1.32
StrictCostEnforcementForVAP
false
Beta
1.31
–
StrictCostEnforcementForWebhooks
false
Beta
1.31
–
StructuredAuthenticationConfiguration
false
Alpha
1.29
1.29
StructuredAuthenticationConfiguration
true
Beta
1.30
–
StructuredAuthorizationConfiguration
false
Alpha
1.29
1.29
StructuredAuthorizationConfiguration
true
Beta
1.30
–
SupplementalGroupsPolicy
false
Alpha
1.31
–
TopologyAwareHints
false
Alpha
1.21
1.22
TopologyAwareHints
false
Beta
1.23
1.23
TopologyAwareHints
true
Beta
1.24
–
TopologyManagerPolicyAlphaOptions
false
Alpha
1.26
–
TopologyManagerPolicyBetaOptions
false
Beta
1.26
1.27
TopologyManagerPolicyBetaOptions
true
Beta
1.28
–
TopologyManagerPolicyOptions
false
Alpha
1.26
1.27
TopologyManagerPolicyOptions
true
Beta
1.28
–
TranslateStreamCloseWebsocketRequests
true
Beta
1.30
–
UnauthenticatedHTTP2DOSMitigation
false
Beta
1.28
1.28
UnauthenticatedHTTP2DOSMitigation
true
Beta
1.29
–
UnknownVersionInteroperabilityProxy
false
Alpha
1.28
–
UserNamespacesPodSecurityStandards
false
Alpha
1.29
–
UserNamespacesSupport
false
Alpha
1.28
1.29
UserNamespacesSupport
false
Beta
1.30
–
VolumeAttributesClass
false
Alpha
1.29
1.30
VolumeAttributesClass
false
Beta
1.31
–
VolumeCapacityPriority
false
Alpha
1.21
–
WatchCacheInitializationPostStartHook
false
Beta
1.31
–
WatchFromStorageWithoutResourceVersion
false
Beta
1.30
–
WatchList
false
Alpha
1.27
–
WindowsHostNetwork
true
Alpha
1.26
–
WinDSR
false
Alpha
1.14
–
WinOverlay
false
Alpha
1.14
1.19
WinOverlay
true
Beta
1.20
–
已毕业和已废弃的特性门控
已毕业或已废弃的特性门控
特性
默认值
阶段
自从
直到
AdmissionWebhookMatchConditions
false
Alpha
1.27
1.27
AdmissionWebhookMatchConditions
true
Beta
1.28
1.29
AdmissionWebhookMatchConditions
true
GA
1.30
–
AggregatedDiscoveryEndpoint
false
Alpha
1.26
1.26
AggregatedDiscoveryEndpoint
true
Beta
1.27
1.29
AggregatedDiscoveryEndpoint
true
GA
1.30
–
AllowDNSOnlyNodeCSR
false
已弃用
1.31
–
AllowInsecureKubeletCertificateSigningRequests
false
已弃用
1.31
–
AllowServiceLBStatusOnNonLB
false
已弃用
1.29
–
APIListChunking
false
Alpha
1.8
1.8
APIListChunking
true
Beta
1.9
1.28
APIListChunking
true
GA
1.29
–
AppArmor
true
Beta
1.4
1.30
AppArmor
true
GA
1.31
–
AppArmorFields
true
Beta
1.30
1.30
AppArmorFields
true
GA
1.31
–
CloudDualStackNodeIPs
false
Alpha
1.27
1.28
CloudDualStackNodeIPs
true
Beta
1.29
1.29
CloudDualStackNodeIPs
true
GA
1.30
–
CPUManager
false
Alpha
1.8
1.9
CPUManager
true
Beta
1.10
1.25
CPUManager
true
GA
1.26
–
DefaultHostNetworkHostPortsInPodTemplates
false
已弃用
1.28
–
DevicePluginCDIDevices
false
Alpha
1.28
1.28
DevicePluginCDIDevices
true
Beta
1.29
1.30
DevicePluginCDIDevices
true
GA
1.31
–
DisableCloudProviders
false
Alpha
1.22
1.28
DisableCloudProviders
true
Beta
1.29
–
DisableCloudProviders
true
GA
1.31
–
DisableKubeletCloudCredentialProviders
false
Alpha
1.23
1.28
DisableKubeletCloudCredentialProviders
true
Beta
1.29
1.30
DisableKubeletCloudCredentialProviders
true
GA
1.31
–
EfficientWatchResumption
false
Alpha
1.20
1.20
EfficientWatchResumption
true
Beta
1.21
1.23
EfficientWatchResumption
true
GA
1.24
–
ElasticIndexedJob
true
Beta
1.27
1.30
ElasticIndexedJob
true
GA
1.31
–
ExecProbeTimeout
true
GA
1.20
–
HPAContainerMetrics
false
Alpha
1.20
1.26
HPAContainerMetrics
true
Beta
1.27
1.29
HPAContainerMetrics
true
GA
1.30
–
JobPodFailurePolicy
false
Alpha
1.25
1.25
JobPodFailurePolicy
true
Beta
1.26
1.30
JobPodFailurePolicy
true
GA
1.31
–
KMSv1
true
已弃用
1.28
1.28
KMSv1
false
已弃用
1.29
–
KMSv2
false
Alpha
1.25
1.26
KMSv2
true
Beta
1.27
1.28
KMSv2
true
GA
1.29
–
KMSv2KDF
false
Beta
1.28
1.28
KMSv2KDF
true
GA
1.29
–
KubeProxyDrainingTerminatingNodes
false
Alpha
1.28
1.30
KubeProxyDrainingTerminatingNodes
true
Beta
1.30
1.30
KubeProxyDrainingTerminatingNodes
true
GA
1.31
–
LegacyServiceAccountTokenCleanUp
false
Alpha
1.28
1.28
LegacyServiceAccountTokenCleanUp
true
Beta
1.29
1.29
LegacyServiceAccountTokenCleanUp
true
GA
1.30
–
LogarithmicScaleDown
false
Alpha
1.21
1.30
LogarithmicScaleDown
true
GA
1.31
–
MinDomainsInPodTopologySpread
false
Alpha
1.24
1.24
MinDomainsInPodTopologySpread
false
Beta
1.25
1.26
MinDomainsInPodTopologySpread
true
Beta
1.27
1.29
MinDomainsInPodTopologySpread
true
GA
1.30
–
NewVolumeManagerReconstruction
false
Beta
1.27
1.27
NewVolumeManagerReconstruction
true
Beta
1.28
1.29
NewVolumeManagerReconstruction
true
GA
1.30
–
NodeOutOfServiceVolumeDetach
false
Alpha
1.24
1.25
NodeOutOfServiceVolumeDetach
true
Beta
1.26
1.27
NodeOutOfServiceVolumeDetach
true
GA
1.28
–
PDBUnhealthyPodEvictionPolicy
false
Alpha
1.26
1.26
PDBUnhealthyPodEvictionPolicy
true
Beta
1.27
1.30
PDBUnhealthyPodEvictionPolicy
true
GA
1.31
–
PersistentVolumeLastPhaseTransitionTime
false
Alpha
1.28
1.28
PersistentVolumeLastPhaseTransitionTime
true
Beta
1.29
1.30
PersistentVolumeLastPhaseTransitionTime
true
GA
1.31
–
PodDisruptionConditions
false
Alpha
1.25
1.25
PodDisruptionConditions
true
Beta
1.26
1.30
PodDisruptionConditions
true
GA
1.31
–
PodHostIPs
false
Alpha
1.28
1.28
PodHostIPs
true
Beta
1.29
1.30
PodHostIPs
true
GA
1.30
–
PodSchedulingReadiness
false
Alpha
1.26
1.26
PodSchedulingReadiness
true
Beta
1.27
1.29
PodSchedulingReadiness
true
GA
1.30
–
RemainingItemCount
false
Alpha
1.15
1.15
RemainingItemCount
true
Beta
1.16
1.28
RemainingItemCount
true
GA
1.29
–
ServerSideApply
false
Alpha
1.14
1.15
ServerSideApply
true
Beta
1.16
1.21
ServerSideApply
true
GA
1.22
–
ServerSideFieldValidation
false
Alpha
1.23
1.24
ServerSideFieldValidation
true
Beta
1.25
1.26
ServerSideFieldValidation
true
GA
1.27
–
StableLoadBalancerNodeSet
true
Beta
1.27
1.29
StableLoadBalancerNodeSet
true
GA
1.30
–
StatefulSetStartOrdinal
false
Alpha
1.26
1.26
StatefulSetStartOrdinal
true
Beta
1.27
1.30
StatefulSetStartOrdinal
true
GA
1.31
–
ValidatingAdmissionPolicy
false
Alpha
1.26
1.27
ValidatingAdmissionPolicy
false
Beta
1.28
1.29
ValidatingAdmissionPolicy
true
GA
1.30
–
WatchBookmark
false
Alpha
1.15
1.15
WatchBookmark
true
Beta
1.16
1.16
WatchBookmark
true
GA
1.17
–
ZeroLimitedNominalConcurrencyShares
false
Beta
1.29
1.29
ZeroLimitedNominalConcurrencyShares
true
GA
1.30
–
使用特性
特性阶段
处于 Alpha 、Beta 、GA 阶段的特性。
Alpha 特性代表:
默认禁用。
可能有错误,启用此特性可能会导致错误。
随时可能删除对此特性的支持,恕不另行通知。
在以后的软件版本中,API 可能会以不兼容的方式更改,恕不另行通知。
建议将其仅用于短期测试中,因为开启特性会增加错误的风险,并且缺乏长期支持。
Beta 特性代表:
通常默认启用。Beta API 组默认是被禁用的 。
该特性已经经过良好测试。启用该特性是安全的。
尽管详细信息可能会更改,但不会放弃对整体特性的支持。
对象的架构或语义可能会在随后的 Beta 或稳定版本中以不兼容的方式更改。
当发生这种情况时,我们将提供迁移到下一版本的说明。此特性可能需要删除、编辑和重新创建 API 对象。
编辑过程可能需要慎重操作,因为这可能会导致依赖该特性的应用程序停机。
推荐仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果你具有多个可以独立升级的,则可以放宽此限制。
说明:
请试用 Beta 特性并提供相关反馈!
一旦特性结束 Beta 状态,我们就不太可能再对特性进行大幅修改。
General Availability (GA)特性也称为稳定 特性,GA 特性代表着:
此特性会一直启用;你不能禁用它。
不再需要相应的特性门控。
对于许多后续版本,特性的稳定版本将出现在发行的软件中。
特性门控列表
每个特性门控均用于启用或禁用某个特定的特性:
AdmissionWebhookMatchConditions
:
在变更性质和合法性检查性质的准入 Webhook
上启用匹配状况 。
AggregatedDiscoveryEndpoint
:
启用单个 HTTP 端点 /discovery/<version>
,
支持用 ETag 进行原生 HTTP 缓存,包含 API 服务器已知的所有 APIResource。
AllowDNSOnlyNodeCSR
:
允许 kubelet 在不提供节点 IP、仅提供 DNS 名称的情况下请求证书。
AllowInsecureKubeletCertificateSigningRequests
:
针对签名者为 kubelet 的 CertificateSigningRequest) ,
禁用节点准入检查。除非禁用此特性门控,
否则 Kubernetes 会强制要求新的 kubelet 证书的 commonName
为 system:node:$nodeName
。
AllowServiceLBStatusOnNonLB
:
允许对类型为 LoadBalancer
以外的 Service 设置 .status.ingress.loadBalancer
。
AnonymousAuthConfigurableEndpoints
:
允许只对特定 API 服务器端点来配置匿名身份验证/鉴权。
AnyVolumeDataSource
:
允许使用任何自定义的资源来作为
PVC 中的 dataSource
。
APIListChunking
:
允许 API 客户端以块的形式从 API 服务器检索(LIST
或 GET
)资源。
APIResponseCompression
:
压缩 LIST
或 GET
请求的 API 响应。
APIServerIdentity
:
使用 Lease(租约) 为集群中的每个
API 服务器赋予一个 ID。
APIServerTracing
:
在 API 服务器中添加对分布式跟踪的支持。
更多细节参阅针对 Kubernetes 系统组件的追踪 。
AppArmor
:
在 Linux 节点上为 Pod 启用 AppArmor 机制的强制访问控制。
更多细节参阅 AppArmor 教程 。
AppArmorFields
:
启用与 AppArmor 相关的安全上下文设置。
有关 AppArmor 和 Kubernetes 的更多信息,请阅读
Linux 内核中的安全特性
部分中的 AppArmor
小节。
AuthorizeNodeWithSelectors
:
允许节点鉴权器 使用细粒度选择算符鉴权。
需要启用 AuthorizeWithSelectors
。
AuthorizeWithSelectors
:
允许授权使用字段和标签选择算符。
启用 SubjectAccessReview API
中的 fieldSelector
和 labelSelector
字段,
将字段和标签选择算符信息传递给授权 Webhook ,
启用授权程序 CEL 库 中的
fieldSelector
和 labelSelector
特性,
并允许在授权 Webhook matchConditions
中检查 fieldSelector
和 labelSelector
字段。
CloudControllerManagerWebhook
:
启用在云控制器管理器中的 Webhook。
CloudDualStackNodeIPs
:
允许在外部云驱动中通过 kubelet --node-ip
设置双协议栈。
有关更多详细信息,请参阅配置 IPv4/IPv6 双栈 。
ClusterTrustBundle
:
启用 ClusterTrustBundle 对象和 kubelet 集成。
ClusterTrustBundleProjection
:
clusterTrustBundle
投射卷源 。
ComponentSLIs
:
在 kubelet、kube-scheduler、kube-proxy、kube-controller-manager、cloud-controller-manager
等 Kubernetes 组件上启用 /metrics/slis
端点,从而允许你抓取健康检查指标。
ConcurrentWatchObjectDecode
:
启用并发监视对象解码。目的是避免在安装了转换 Webhook 时造成 API 服务器的监视缓存内容不足。
ConsistentListFromCache
:
通过直接使用监视缓存来为 list 请求提供一致性的数据,提升 Kubernetes API 服务器的性能,
从而改善可扩展性和响应时间。为了从缓存获取一致的列表,Kubernetes 需要使用较新的
Etcd 版本(v3.4.31+ 或 v3.5.13+),这些版本包含了对监视进度请求特性的修复。
如果使用较旧的 Etcd 版本,Kubernetes 会自动检测到并回退到从 Etcd 提供一致的读取操作。
进度通知能够确保监视缓存与 Etcd 保持一致,同时减少对 Etcd 进行资源密集型仲裁读取的需求。
更多细节请参阅 Kubernetes 文档
get 和 list 语义 。
ContainerCheckpoint
:
启用 kubelet checkpoint
API。
详情见 Kubelet Checkpoint API 。
ContextualLogging
:
在支持上下文日志记录的 Kubernetes 组件的日志输出中启用额外的详细信息。
CoordinatedLeaderElection
:
启用支持 LeaseCandidate API 的行为,并且以确定性的方式为 Kubernetes 控制平面启用协调领导者选举。
CPUManager
:
启用容器级别的 CPU 亲和性支持,有关更多详细信息,请参见
CPU 管理策略 。
CPUManagerPolicyAlphaOptions
:
允许对 CPU 管理器策略进行微调,针对试验性的、Alpha 质量级别的选项。
此特性门控用来保护一组质量级别为 Alpha 的 CPU 管理器选项。
此特性门控永远不会被升级为 Beta 或者稳定版本。
CPUManagerPolicyBetaOptions
:
允许对 CPU 管理器策略进行微调,针对试验性的、Beta 质量级别的选项。
此特性门控用来保护一组质量级别为 Beta 的 CPU 管理器选项。
此特性门控永远不会被升级为稳定版本。
CPUManagerPolicyOptions
:
允许微调 CPU 管理器策略。
CRDValidationRatcheting
:
如果资源更新的冲突部分未发生变化,则启用对自定义资源的更新以包含对 OpenAPI 模式的违规条目。
详情参见验证递进 。
CronJobsScheduledAnnotation
:
将调度作业的时间设置为代表 CronJob 创建的作业上的一个
注解 。
CrossNamespaceVolumeDataSource
:
启用跨名字空间卷数据源,以允许你在 PersistentVolumeClaim
的 dataSourceRef
字段中指定一个源名字空间。
CSIMigrationPortworx
:
启用封装和转换逻辑,将卷操作从 Portworx 内嵌插件路由到
Portworx CSI 插件。需要在集群中安装并配置 Portworx CSI 插件.
CSIVolumeHealth
:
启用对节点上的 CSI 卷运行状况监控的支持。
CustomCPUCFSQuotaPeriod
:
使节点能够更改
kubelet 配置
中的 cpuCFSQuotaPeriod
。
CustomResourceFieldSelectors
:
在 CustomResourceDefinition API 中启用
selectableFields
,以针对 list 、watch 和 deletecollection 请求过滤自定义资源。
DefaultHostNetworkHostPortsInPodTemplates
:
此特性门控将控制何时为使用 hostNetwork: true
的 Pod 设置
.spec.containers[*].ports[*].hostPort
默认值。
启用此特性意味着默认值甚至会分配给嵌入式
PodTemplate (例如,Deployment)
的 .spec
,这是 Kubernetes 旧版本的工作方式。
你应该迁移你的代码,使其不再依赖于原先的行为。
DevicePluginCDIDevices
:
启用设备插件
API 对 CDI 设备 ID 的支持。
DisableAllocatorDualWrite
:
你可以启用 MultiCIDRServiceAllocator
特性门控。API 服务器支持从旧的位图
ClusterIP 分配器迁移到新的 IPAddress 分配器。
API 服务器会在两个分配器上执行双重写入。此特性门控用于禁用对 ClusterIP
分配器的多余写入;如果你已经完成了机制迁移的重要阶段,可以启用此特性门控。
DisableCloudProviders
:
启用此特性门控会取消新激活 kube-apiserver
、kube-controller-manager
和 kubelet
中与
--cloud-provider
命令行参数相关的功能。
在 Kubernetes v1.31 及更高版本中,--cloud-provider
的唯一有效值为空字符串(没有云驱动集成组件)或 "external"(通过独立的 cloud-controller-manager 进行集成)。
DisableKubeletCloudCredentialProviders
:
启用此特性门控将停用 kubelet 中旧版的树内功能,
该功能原本允许 kubelet 对云提供商的容器仓库进行身份验证以拉取容器镜像。
DisableNodeKubeProxyVersion
:
禁止设置 Node 的 kubeProxyVersion
字段。
DRAControlPlaneController
:
允许资源使用自定义参数,具有独立于 Pod 的生命周期。
资源的分配由资源驱动的控制平面控制器处理。
DynamicResourceAllocation
:
启用对具有自定义参数和独立于 Pod 生命周期的资源的支持。
资源的分配由 Kubernetes 调度器根据“结构化参数”进行处理。
EfficientWatchResumption
:
允许将存储发起的书签(进度通知)事件传递给用户。这仅适用于 watch(监视)操作。
ElasticIndexedJob
:
允许通过同时改变 spec.completions
和 spec.parallelism
使得 spec.completions == spec.parallelism
来对带索引的 Job 执行扩容或缩容。
更多细节请参阅弹性索引 Job 文档。
EventedPLEG
:
启用此特性后,kubelet 能够通过
CRI
扩展从容器运行时 接收容器生命周期事件。
(PLEG 是 “Pod lifecycle event generator” 的缩写,即 Pod 生命周期事件生成器)。
要使用此特性,你还需要在集群中运行的每个容器运行时中启用对容器生命周期事件的支持。
如果容器运行时未宣布支持容器生命周期事件,即使你已启用了此特性门控,
kubelet 也会自动切换到原有的通用 PLEG 机制。
ExecProbeTimeout
:
确保 kubelet 会遵从 exec 探针的超时值设置。
此特性门控的主要目的是方便你处理现有的、依赖于已被修复的缺陷的工作负载;
该缺陷导致 Kubernetes 会忽略 exec 探针的超时值设置。
参阅就绪态探针 .
GracefulNodeShutdown
:
在 kubelet 中启用体面地关闭节点的支持。
在系统关闭时,kubelet 会尝试监测该事件并体面地终止节点上运行的 Pod。
参阅体面地关闭节点 以了解更多细节。
GracefulNodeShutdownBasedOnPodPriority
:
允许 kubelet 在体面终止节点时检查 Pod 的优先级。
HonorPVReclaimPolicy
:
无论 PV 和 PVC 的删除顺序如何,当持久卷回收策略为 Delete
时都要遵守该策略。更多细节参阅
PersistentVolume 删除保护终结器 文档。
HPAContainerMetrics
:
允许 HorizontalPodAutoscalers
基于目标 Pod 中单个容器的指标进行扩缩。
HPAScaleToZero
:
使用自定义指标或外部指标时,可将 HorizontalPodAutoscaler
资源的 minReplicas
设置为 0。
ImageMaximumGCAge
:
启用 kubelet 配置字段 imageMaximumGCAge
,允许管理员指定多久之后镜像将被垃圾收集。
ImageVolume
:
允许在 Pod 中使用 image
卷源。
这个卷源允许你将容器镜像挂载为只读卷。
InPlacePodVerticalScaling
:
启用就地 Pod 垂直扩缩。
InTreePluginPortworxUnregister
:
在 kubelet 和卷控制器上关闭注册 Portworx 内嵌插件。
JobBackoffLimitPerIndex
:
允许在索引作业中指定每个索引的最大 Pod 重试次数。
JobManagedBy
:
允许将 Job 对象的调和委托给外部控制器。
JobPodFailurePolicy
:
允许用户根据容器退出码和 Pod 状况来指定 Pod 失效的处理方法。
JobPodReplacementPolicy
:
允许你在 Job 中为终止的 Pod 指定替代 Pod。
JobSuccessPolicy
:
允许用户基于一组成功的 Pod 来声明这组 Pod 所属的 Job 为成功。
KMSv1
:
启用 KMS v1 API 以实现静态加密。
详情参见使用 KMS 驱动进行数据加密 。
KMSv2
:
启用 KMS v2 API 以实现静态加密。
详情参见使用 KMS 驱动进行数据加密 。
KMSv2KDF
:
启用 KMS v2 以生成一次性数据加密密钥。
详情参见使用 KMS 驱动进行数据加密 。
如果 KMSv2
特性门控在你的集群未被启用,则 KMSv2KDF
特性门控的值不会产生任何影响。
KubeletCgroupDriverFromCRI
:
启用检测来自 CRI
的 kubelet cgroup 驱动配置选项。你可以在支持该特性门控的 kubelet 节点上使用此特性门控,
也可以在支持 RuntimeConfig
CRI 调用的 CRI 容器运行时所在节点上使用此特性门控。
如果 CRI 和 kubelet 都支持此特性,kubelet 将忽略 cgroupDriver
配置设置(或已弃用的 --cgroup-driver
命令行参数)。
如果你启用此特性门控但容器运行时不支持它,则 kubelet 将回退到使用通过 cgroupDriver
配置设置进行配置的驱动。
详情参见配置 cgroup 驱动 。
KubeletInUserNamespace
:
支持在用户名字空间 里运行 kubelet。
请参见以非 root 用户身份运行 Kubernetes 节点组件 。
KubeletPodResourcesDynamicResources
:
扩展 kubelet 的 Pod 资源 gRPC 端点以包括通过
DynamicResourceAllocation
API 在 ResourceClaims
中分配的资源。
详情参见资源分配报告 。
包含有关可分配资源的信息,使客户端能够正确跟踪节点上的可用计算资源。
KubeletPodResourcesGet
:
在 kubelet 上为 Pod 资源启用 Get
gRPC 端点。
此 API 增强了资源分配报告 。
KubeletSeparateDiskGC
:
分离镜像文件系统特性使 kubelet 能够对部署在不同文件系统上的镜像(只读层)和/或容器(可写层)执行垃圾回收。
KubeletTracing
:
新增在 kubelet 中对分布式追踪的支持。
启用时,kubelet CRI 接口和经身份验证的 http 服务器被插桩以生成 OpenTelemetry 追踪 span。
详情参见追踪 Kubernetes 系统组件 。
KubeProxyDrainingTerminatingNodes
:
为 externalTrafficPolicy: Cluster
服务实现终止节点的连接排空。
LegacyServiceAccountTokenCleanUp
:
当服务账号令牌在指定时间内(默认为一年)未被使用时,
允许基于 Secret 清理服务账号令牌 。
LoadBalancerIPMode
:
当 Service 的 type
为 LoadBalancer
时,可设置该 Service 的 ipMode
。
更多细节请参阅指定负载均衡器状态的 IPMode 。
LocalStorageCapacityIsolationFSQuotaMonitoring
:
如果本地临时存储 启用了
LocalStorageCapacityIsolation
,并且
emptyDir 卷 所使用的文件系统支持项目配额,
并且已启用 UserNamespacesSupport
,
系统将使用项目配额来监控 emptyDir 卷的存储使用情况,而不是通过文件系统遍历来实现,
从而确保更好的性能和准确性。
LogarithmicScaleDown
:
启用 Pod 的半随机选择,控制器将根据 Pod 时间戳的对数桶按比例缩小来驱逐 Pod。
LoggingAlphaOptions
:
允许微调实验性的、Alpha 级别的日志选项。
LoggingBetaOptions
:
允许微调实验性的、Beta 级别的日志选项。
MatchLabelKeysInPodAffinity
:
为 Pod(反)亲和性 启用
matchLabelKeys
和 mismatchLabelKeys
字段。
MatchLabelKeysInPodTopologySpread
:
为 Pod 拓扑分布约束 启用
matchLabelKeys
字段。
MaxUnavailableStatefulSet
:
允许为 StatefulSet 的滚动更新策略 设置
maxUnavailable
字段。此字段指定更新过程中不可用 Pod 个数的上限。
MemoryManager
:
允许基于 NUMA 拓扑为容器设置内存亲和性。
MemoryQoS
:
使用 cgroup v2 内存控制器为 Pod 或容器启用内存保护和使用限制。
MinDomainsInPodTopologySpread
:
在 Pod 拓扑分布约束 中启用 minDomains
。
MultiCIDRServiceAllocator
:
使用 IPAddress 对象跟踪为 Service 的集群 IP 分配的 IP 地址。
MutatingAdmissionPolicy
:
在 Kubernetes 1.31 中,此特性门控没有效果。
Kubernetes 的未来版本可能会使用此特性门控在准入链中启用 MutatingAdmissionPolicy。
NewVolumeManagerReconstruction
:
在 kubelet 启动期间启用改进的挂载卷的发现。由于关联的代码已经进行了重大重构,
Kubernetes v1.25 到 v1.29 允许你不采用这一逻辑,以免 kubelet 在启动时被卡住,或者未能为已终止的 Pod 卸载卷。
请注意,此重构是作为 Kubernetes 1.25 中的 SELinuxMountReadWriteOncePod
Alpha 特性门控的一部分完成的。
在 Kubernetes v1.25 和 v1.26 中,此重构行为是 SELinuxMountReadWriteOncePod
特性门控的一部分。
NFTablesProxyMode
:
允许在
nftables 模式 下运行 kube-proxy。
NodeInclusionPolicyInPodTopologySpread
:
在计算 Pod 拓扑分布偏差时允许在
Pod 拓扑分布约束 中使用
nodeAffinityPolicy
和 nodeTaintsPolicy
。
NodeLogQuery
:
允许使用 /logs
端点来查询节点服务的日志。
NodeOutOfServiceVolumeDetach
:
当使用 node.kubernetes.io/out-of-service
污点将节点标记为无法提供服务时,节点上不能容忍这个污点的 Pod 将被强制删除,
并且针对此节点上被终止的 Pod 将立即执行解除卷挂接操作。
被删除的 Pod 可以很快在不同的节点上恢复。
NodeSwap
:
允许 kubelet 为节点上的 Kubernetes 工作负载分配交换内存。
必须将 KubeletConfiguration.failSwapOn
设置为 false 才能使用此能力。
更多细节请参见交换内存 。
OpenAPIEnums
:
允许在从 API 服务器返回的 spec 中填充 OpenAPI 模式的 "enum" 字段。
PDBUnhealthyPodEvictionPolicy
:
启用 PodDisruptionBudget
的 unhealthyPodEvictionPolicy
字段。
此字段指定何时应考虑驱逐不健康的 Pod。
更多细节请参阅不健康 Pod 驱逐策略 。
PersistentVolumeLastPhaseTransitionTime
:
为 PersistentVolume 添加一个新字段,用于保存卷上一次转换阶段的时间戳。
PodAndContainerStatsFromCRI
:
将 kubelet 配置为从 CRI 容器运行时收集容器和 Pod 的统计信息,而不是从 cAdvisor 收集统计信息。
从 1.26 版本开始,这还包括从 CRI 收集指标并通过 /metrics/cadvisor
进行发布(而不是直接由 cAdvisor 发布)。
PodDeletionCost
:
启用 Pod 删除开销 特性,
允许用户影响 ReplicaSet 的缩容顺序。
PodDisruptionConditions
:
启用支持追加一个专用的 Pod 状况,以表示 Pod 由于某个干扰正在被删除。
PodHostIPs
:
为 Pod 和 downward API
启用 status.hostIPs
字段。此字段允许你将主机 IP 地址暴露给工作负载。
PodIndexLabel
:
在创建新的 Pod 时允许 Job 控制器和 StatefulSet 控制器将 Pod 索引添加为标签。
详情参见 Job 完成模式文档 和
StatefulSet Pod 索引标签文档 。
PodLifecycleSleepAction
:
在 Container 生命周期钩子中启用 sleep
操作。
PodReadyToStartContainersCondition
:
使得 kubelet 能在 Pod 上标记
PodReadyToStartContainers 状况。
此特性门控先前称为 PodHasNetworkCondition
,关联的状况称为 PodHasNetwork
。
PodSchedulingReadiness
:
允许设置 schedulingGates
字段以控制 Pod
的调度就绪状态 。
PortForwardWebsockets
:
允许从请求 v2 子协议(v2.portforward.k8s.io
)的客户端通过 portforward 子协议
(port-forward
)执行 WebSocket 流式传输。
ProcMountType
:
允许容器通过设置 Pod 的 securityContext
的 procMount
字段来控制对
proc 类型的挂载方式。
QOSReserved
:
允许在 QoS 层面预留资源,避免低 QoS 级别的 Pod 占用高 QoS 级别所请求的资源(当前只适用于内存)。
RecoverVolumeExpansionFailure
:
允许用户编辑自己的 PVC 来缩容,以便从之前卷扩容引发的失败中恢复。
更多细节可参见处理扩充卷过程中的失败 。
RecursiveReadOnlyMounts
:
启用对递归只读挂载的支持。
更多细节参阅只读挂载 。
RelaxedEnvironmentVariableValidation
:
允许在环境变量中使用几乎所有可打印的 ASCII 字符。
ReloadKubeletServerCertificateFile
:
允许 kubelet TLS 服务器在指定的证书文件发生变化时更新其证书。
此特性在 kubelet 配置中指定了 tlsCertFile
和 tlsPrivateKeyFile
时非常有用。
对于其他情况,例如使用 TLS 引导启动时,此特性门控无效。
RemainingItemCount
:
允许 API 服务器在分块列表请求
的响应中显示剩余条目的个数。
ResilientWatchCacheInitialization
:
启用弹性的监视缓存(WatchCache)初始化,以避免控制平面的过载。
ResourceHealthStatus
:
在 Pod 的 .status
中启用 allocatedResourcesStatus
字段。
此字段报告 Pod 中每个容器的额外细节,包括分配给 Pod 的每个设备的健康信息。有关更多细节,
请参见设备插件与不健康设备 。
RetryGenerateName
:
当 API 服务器 要生成名称 时,
允许重试对象创建。当此特性被启用时,如果控制平面检测到与某个现有对象存在名称冲突,
则使用 generateName
的请求将被自动重试,最多重试 8 次。
RotateKubeletServerCertificate
:
启用 kubelet 上服务器 TLS 证书的轮换。
更多细节参阅 kubelet 配置 。
RuntimeClassInImageCriApi
:
允许基于 Pod 所引用的运行时类 来拉取镜像。
SchedulerQueueingHints
:
启用调度器的排队提示 增强功能 ,
有助于减少无效的重新排队。
调度器会在集群中发生可能导致 Pod 被重新调度的变化时,尝试重新进行 Pod 的调度。
排队提示是一些内部信号,
用于帮助调度器基于先前的调度尝试来筛选集群中与未调度的 Pod 相关的变化。
SELinuxMount
:
允许 kubelet 直接使用正确的 SELinux 标签为 Pod 挂载卷,而不是以递归方式更改卷上的每个文件,进而加快容器的启动速度。
这一变更拓宽了针对 SELinuxMountReadWriteOncePod
特性门控所作的性能改进,将其对应的实现扩展到覆盖所有卷。
想要启用 SELinuxMount
特性门控,需先启用 SELinuxMountReadWriteOncePod
特性门控。
SELinuxMountReadWriteOncePod
:
通过允许 kubelet 直接用正确的 SELinux
标签为 Pod 挂载卷而不是以递归方式更改这些卷上的每个文件来加速容器启动。
最初的实现侧重 ReadWriteOncePod 卷。
SeparateTaintEvictionController
:
允许运行 TaintEvictionController
,该控制器可在 NodeLifecycleController
之外执行基于污点的驱逐 。
此特性启用时,用户可以在 kube-controller-manager
上设置 --controllers=-taint-eviction-controller
标志,
可选择禁用基于污点的驱逐。
ServerSideApply
:
在 API 服务器上启用服务器端应用(SSA) 。
ServerSideFieldValidation
:
启用服务器端字段验证。这意味着资源模式的验证发生在 API 服务器端而不是客户端
(例如,kubectl create
或 kubectl apply
命令行)。
ServiceAccountTokenJTI
:
控制是否将 JTI(UUID)嵌入到生成的服务账号令牌中,
以及对于这些令牌未来的请求,是否将这些 JTI 记录到 Kubernetes 审计日志中。
ServiceAccountTokenNodeBinding
:
控制 API 服务器是否允许将服务账号令牌绑定到 Node 对象。
ServiceAccountTokenNodeBindingValidation
:
控制 API 服务器是否会验证服务账号令牌中的 Node 引用。
ServiceAccountTokenPodNodeInfo
:
控制 API 服务器在颁发绑定到 Pod 对象的服务账号令牌时,
是否嵌入关联 Node 的名称和 uid
。
ServiceTrafficDistribution
:
允许在 Service 中使用可选的 spec.trafficDistribution
字段。
此字段提供了一种对 Service 端点进行流量分发的偏好的表达方式。
SidecarContainers
:
允许将 Init 容器的 restartPolicy
设置为 Always
,
以便该容器成为一个边车容器(可重启的 Init 容器)。
详情参见边车容器和 restartPolicy 。
SizeMemoryBackedVolumes
:
允许 kubelet 检查基于内存制备的卷的尺寸约束(目前主要针对 emptyDir
卷)。
StableLoadBalancerNodeSet
:
允许服务控制器(KCCM)减少根据节点状态变化来对负载均衡器作重新配置的操作。
StatefulSetAutoDeletePVC
:
允许使用可选字段 .spec.persistentVolumeClaimRetentionPolicy
,
以便根据 StatefulSet 的生命周期来控制 PVC 的删除。
详情参见 PersistentVolumeClaim 保留 。
StatefulSetStartOrdinal
:
允许在 StatefulSet 中配置起始序号。
详情参见起始序号 。
StorageVersionAPI
:
启用存储版本 API 。
StorageVersionHash
:
允许 API 服务器在版本发现中公开存储版本的哈希值。
StorageVersionMigrator
:
启用存储版本迁移机制。
有关细节参阅使用存储版本迁移功能来迁移 Kubernetes 对象 。
StrictCostEnforcementForVAP
:
对 ValidatingAdmissionPolicy 应用严格的 CEL 开销验证。
StrictCostEnforcementForWebhooks
:
在准入 Webhook 内对 matchConditions
应用严格的 CEL 开销验证。
StructuredAuthenticationConfiguration
:
为 API 服务器启用结构化身份验证配置 。
StructuredAuthorizationConfiguration
:
启用结构化授权配置,以便集群管理员可以在 API
服务器处理程序链中指定多个授权 Webhook 。
SupplementalGroupsPolicy
:
启用对细粒度 SupplementalGroups 控制的支持。
有关细节请参见为 Pod 配置细粒度 SupplementalGroups 控制 。
TopologyAwareHints
:
在 EndpointSlice 中启用基于拓扑提示的拓扑感知路由。
更多细节参见拓扑感知路由 。
TopologyManagerPolicyAlphaOptions
:
启用拓扑管理器策略的微调 。
允许微调拓扑管理器策略的实验性的、Alpha 质量的选项。
此特性门控守护一组 质量级别为 Alpha 的拓扑管理器选项。
此特性门控绝对不会进阶至 Beta 或稳定版。
TopologyManagerPolicyBetaOptions
:
允许微调拓扑管理器策略的实验性的、Beta 质量的选项。
此特性门控守护一组 质量级别为 Beta 的拓扑管理器选项。
此特性门控绝对不会进阶至稳定版。
TopologyManagerPolicyOptions
:
启用拓扑管理器策略的微调 。
TranslateStreamCloseWebsocketRequests
:
允许从请求 v5 子协议版本的客户端处通过 WebSocket 流式传输远程命令子协议(exec
、cp
、attach
)。
UnauthenticatedHTTP2DOSMitigation
:
启用了针对未认证客户端的 HTTP/2 拒绝服务(DoS)防护措施。
Kubernetes v1.28.0 至 v1.28.2 版本并未包括这项特性门控。
UnknownVersionInteroperabilityProxy
:
当存在多个不同版本的 kube-apiserver 时,将资源请求代理到正确的对等 kube-apiserver。
更多信息请参见混合版本代理 。
UserNamespacesPodSecurityStandards
:
启用 Pod 安全标准策略的放宽措施,适用于在命名空间中运行的 Pod。
你需要在集群的所有节点上统一设置此特性门控,并且必须启用 UserNamespacesSupport
才能使用此功能。
UserNamespacesSupport
:
为 Pod 启用用户命名空间支持。
ValidatingAdmissionPolicy
:
在准入控制中启用
ValidatingAdmissionPolicy
以支持 CEL 合法性检查。
VolumeAttributesClass
:
启用对 VolumeAttributesClasses 的支持。
更多细节参见卷属性类 。
VolumeCapacityPriority
:
启用基于可用 PV 容量对不同拓扑域下节点进行优先级排序的支持。
WatchBookmark
:
启用对监听书签事件的支持。
WatchCacheInitializationPostStartHook
:
启用监视缓存(WatchCache)初始化的 post-start-hook,使之成为就绪态端点(readyz)的考察条件(带超时)。
WatchFromStorageWithoutResourceVersion
:
允许在没有 resourceVersion
的情况下基于存储提供监视服务。
WatchList
:
启用对监听请求中流式传输对象初始状态 的支持。
WindowsHostNetwork
:
启用对 Windows 容器接入主机网络名字空间的支持。
WinDSR
:
允许 kube-proxy 为 Windows 创建 DSR(Direct Server Return,直接服务器返回)负载均衡器。
WinOverlay
:
允许 kube-proxy 以覆盖模式在 Windows 上运行。
ZeroLimitedNominalConcurrencyShares
:
允许 API 服务器中的优先级和公平性 使用
limited
部分的 nominalConcurrencyShares
字段的零值作为优先级。
接下来
Kubernetes 的弃用策略 介绍了项目针对已移除特性和组件的处理方法。
从 Kubernetes 1.24 开始,默认不启用新的 Beta API。
启用 Beta 功能时,还需要启用所有关联的 API 资源。
例如:要启用一个特定资源,如 storage.k8s.io/v1beta1/csistoragecapacities
,
请设置 --runtime-config=storage.k8s.io/v1beta1/csistoragecapacities
。
有关命令行标志的更多详细信息,请参阅 API 版本控制 。
13.2 - 特性门控(已移除)
本页包含了已移除的特性门控的列表。本页的信息仅供参考。
已移除的特性门控不同于正式发布(GA)或废弃的特性门控,因为已移除的特性门控将不再被视为有效的特性门控。
然而,正式发布或废弃的特性门控仍然能被对应的 Kubernetes 组件识别,这些特性门控在集群中不会造成任何行为差异。
有关 Kubernetes 组件仍可识别的特性门控,请参阅
Alpha 和 Beta 状态的特性门控 或
已毕业和已废弃的特性门控 。
已移除的特性门控
在下表中,
“开始(From)” 列包含了引入某个特性或其发布状态发生变更时的 Kubernetes 版本。
“结束(To)” 列(如果不为空)包含你仍然可以使用某个特性门控的最后一个 Kubernetes 版本。
如果对应特性处于 “废弃” 或 “GA” 状态,则 “结束(To)” 列是该特性被移除时的 Kubernetes 版本。
已移除的特性门控
特性
默认值
阶段
从
到
Accelerators
false
Alpha
1.6
1.10
Accelerators
–
已弃用
1.11
1.11
AdvancedAuditing
false
Alpha
1.7
1.7
AdvancedAuditing
true
Beta
1.8
1.11
AdvancedAuditing
true
GA
1.12
1.27
AffinityInAnnotations
false
Alpha
1.6
1.7
AffinityInAnnotations
–
已弃用
1.8
1.8
AllowExtTrafficLocalEndpoints
false
Beta
1.4
1.6
AllowExtTrafficLocalEndpoints
true
GA
1.7
1.9
AllowInsecureBackendProxy
true
Beta
1.17
1.20
AllowInsecureBackendProxy
true
GA
1.21
1.25
APIPriorityAndFairness
false
Alpha
1.18
1.19
APIPriorityAndFairness
true
Beta
1.20
1.28
APIPriorityAndFairness
true
GA
1.29
1.30
APISelfSubjectReview
false
Alpha
1.26
1.26
APISelfSubjectReview
true
Beta
1.27
1.27
APISelfSubjectReview
true
GA
1.28
1.29
AttachVolumeLimit
false
Alpha
1.11
1.11
AttachVolumeLimit
true
Beta
1.12
1.16
AttachVolumeLimit
true
GA
1.17
1.21
BalanceAttachedNodeVolumes
false
Alpha
1.11
1.21
BalanceAttachedNodeVolumes
false
已弃用
1.22
1.22
BlockVolume
false
Alpha
1.9
1.12
BlockVolume
true
Beta
1.13
1.17
BlockVolume
true
GA
1.18
1.21
BoundServiceAccountTokenVolume
false
Alpha
1.13
1.20
BoundServiceAccountTokenVolume
true
Beta
1.21
1.21
BoundServiceAccountTokenVolume
true
GA
1.22
1.23
ConfigurableFSGroupPolicy
false
Alpha
1.18
1.19
ConfigurableFSGroupPolicy
true
Beta
1.20
1.22
ConfigurableFSGroupPolicy
true
GA
1.23
1.25
ConsistentHTTPGetHandlers
true
GA
1.25
1.30
ControllerManagerLeaderMigration
false
Alpha
1.21
1.21
ControllerManagerLeaderMigration
true
Beta
1.22
1.23
ControllerManagerLeaderMigration
true
GA
1.24
1.26
CRIContainerLogRotation
false
Alpha
1.10
1.10
CRIContainerLogRotation
true
Beta
1.11
1.20
CRIContainerLogRotation
true
GA
1.21
1.22
CronJobControllerV2
false
Alpha
1.20
1.20
CronJobControllerV2
true
Beta
1.21
1.21
CronJobControllerV2
true
GA
1.22
1.23
CronJobTimeZone
false
Alpha
1.24
1.24
CronJobTimeZone
true
Beta
1.25
1.26
CronJobTimeZone
true
GA
1.27
1.28
CSIBlockVolume
false
Alpha
1.11
1.13
CSIBlockVolume
true
Beta
1.14
1.17
CSIBlockVolume
true
GA
1.18
1.21
CSIDriverRegistry
false
Alpha
1.12
1.13
CSIDriverRegistry
true
Beta
1.14
1.17
CSIDriverRegistry
true
GA
1.18
1.21
CSIInlineVolume
false
Alpha
1.15
1.15
CSIInlineVolume
true
Beta
1.16
1.24
CSIInlineVolume
true
GA
1.25
1.26
CSIMigration
false
Alpha
1.14
1.16
CSIMigration
true
Beta
1.17
1.24
CSIMigration
true
GA
1.25
1.26
CSIMigrationAWS
false
Alpha
1.14
1.16
CSIMigrationAWS
false
Beta
1.17
1.22
CSIMigrationAWS
true
Beta
1.23
1.24
CSIMigrationAWS
true
GA
1.25
1.26
CSIMigrationAWSComplete
false
Alpha
1.17
1.20
CSIMigrationAWSComplete
–
已弃用
1.21
1.21
CSIMigrationAzureDisk
false
Alpha
1.15
1.18
CSIMigrationAzureDisk
false
Beta
1.19
1.22
CSIMigrationAzureDisk
true
Beta
1.23
1.23
CSIMigrationAzureDisk
true
GA
1.24
1.26
CSIMigrationAzureDiskComplete
false
Alpha
1.17
1.20
CSIMigrationAzureDiskComplete
–
已弃用
1.21
1.21
CSIMigrationAzureFile
false
Alpha
1.15
1.20
CSIMigrationAzureFile
false
Beta
1.21
1.23
CSIMigrationAzureFile
true
Beta
1.24
1.25
CSIMigrationAzureFile
true
GA
1.26
1.29
CSIMigrationAzureFileComplete
false
Alpha
1.17
1.20
CSIMigrationAzureFileComplete
–
已弃用
1.21
1.21
CSIMigrationGCE
false
Alpha
1.14
1.16
CSIMigrationGCE
false
Beta
1.17
1.22
CSIMigrationGCE
true
Beta
1.23
1.24
CSIMigrationGCE
true
GA
1.25
1.27
CSIMigrationGCEComplete
false
Alpha
1.17
1.20
CSIMigrationGCEComplete
–
已弃用
1.21
1.21
CSIMigrationOpenStack
false
Alpha
1.14
1.17
CSIMigrationOpenStack
true
Beta
1.18
1.23
CSIMigrationOpenStack
true
GA
1.24
1.25
CSIMigrationOpenStackComplete
false
Alpha
1.17
1.20
CSIMigrationOpenStackComplete
–
已弃用
1.21
1.21
CSIMigrationRBD
false
Alpha
1.23
1.27
CSIMigrationRBD
false
已弃用
1.28
1.30
CSIMigrationvSphere
false
Alpha
1.18
1.18
CSIMigrationvSphere
false
Beta
1.19
1.24
CSIMigrationvSphere
true
Beta
1.25
1.25
CSIMigrationvSphere
true
GA
1.26
1.28
CSIMigrationvSphereComplete
false
Beta
1.19
1.21
CSIMigrationvSphereComplete
–
已弃用
1.22
1.22
CSINodeExpandSecret
false
Alpha
1.25
1.26
CSINodeExpandSecret
true
Beta
1.27
1.28
CSINodeExpandSecret
–
GA
1.29
1.30
CSINodeInfo
false
Alpha
1.12
1.13
CSINodeInfo
true
Beta
1.14
1.16
CSINodeInfo
true
GA
1.17
1.22
CSIPersistentVolume
false
Alpha
1.9
1.9
CSIPersistentVolume
true
Beta
1.10
1.12
CSIPersistentVolume
true
GA
1.13
1.16
CSIServiceAccountToken
false
Alpha
1.20
1.20
CSIServiceAccountToken
true
Beta
1.21
1.21
CSIServiceAccountToken
true
GA
1.22
1.24
CSIStorageCapacity
false
Alpha
1.19
1.20
CSIStorageCapacity
true
Beta
1.21
1.23
CSIStorageCapacity
true
GA
1.24
1.27
CSIVolumeFSGroupPolicy
false
Alpha
1.19
1.19
CSIVolumeFSGroupPolicy
true
Beta
1.20
1.22
CSIVolumeFSGroupPolicy
true
GA
1.23
1.25
CSRDuration
true
Beta
1.22
1.23
CSRDuration
true
GA
1.24
1.25
CustomPodDNS
false
Alpha
1.9
1.9
CustomPodDNS
true
Beta
1.10
1.13
CustomPodDNS
true
GA
1.14
1.16
CustomResourceDefaulting
false
Alpha
1.15
1.15
CustomResourceDefaulting
true
Beta
1.16
1.16
CustomResourceDefaulting
true
GA
1.17
1.18
CustomResourcePublishOpenAPI
false
Alpha
1.14
1.14
CustomResourcePublishOpenAPI
true
Beta
1.15
1.15
CustomResourcePublishOpenAPI
true
GA
1.16
1.18
CustomResourceSubresources
false
Alpha
1.10
1.10
CustomResourceSubresources
true
Beta
1.11
1.15
CustomResourceSubresources
true
GA
1.16
1.18
CustomResourceValidation
false
Alpha
1.8
1.8
CustomResourceValidation
true
Beta
1.9
1.15
CustomResourceValidation
true
GA
1.16
1.18
CustomResourceValidationExpressions
false
Alpha
1.23
1.24
CustomResourceValidationExpressions
true
Beta
1.25
1.28
CustomResourceValidationExpressions
true
GA
1.29
1.30
CustomResourceWebhookConversion
false
Alpha
1.13
1.14
CustomResourceWebhookConversion
true
Beta
1.15
1.15
CustomResourceWebhookConversion
true
GA
1.16
1.18
DaemonSetUpdateSurge
false
Alpha
1.21
1.21
DaemonSetUpdateSurge
true
Beta
1.22
1.24
DaemonSetUpdateSurge
true
GA
1.25
1.28
DefaultPodTopologySpread
false
Alpha
1.19
1.19
DefaultPodTopologySpread
true
Beta
1.20
1.23
DefaultPodTopologySpread
true
GA
1.24
1.25
DelegateFSGroupToCSIDriver
false
Alpha
1.22
1.22
DelegateFSGroupToCSIDriver
true
Beta
1.23
1.25
DelegateFSGroupToCSIDriver
true
GA
1.26
1.27
DevicePlugins
false
Alpha
1.8
1.9
DevicePlugins
true
Beta
1.10
1.25
DevicePlugins
true
GA
1.26
1.27
DisableAcceleratorUsageMetrics
false
Alpha
1.19
1.19
DisableAcceleratorUsageMetrics
true
Beta
1.20
1.24
DisableAcceleratorUsageMetrics
true
GA
1.25
1.27
DownwardAPIHugePages
false
Alpha
1.20
1.20
DownwardAPIHugePages
false
Beta
1.21
1.21
DownwardAPIHugePages
true
Beta
1.22
1.26
DownwardAPIHugePages
true
GA
1.27
1.28
DryRun
false
Alpha
1.12
1.12
DryRun
true
Beta
1.13
1.18
DryRun
true
GA
1.19
1.27
DynamicAuditing
false
Alpha
1.13
1.18
DynamicAuditing
–
已弃用
1.19
1.19
DynamicKubeletConfig
false
Alpha
1.4
1.10
DynamicKubeletConfig
true
Beta
1.11
1.21
DynamicKubeletConfig
false
已弃用
1.22
1.25
DynamicProvisioningScheduling
false
Alpha
1.11
1.11
DynamicProvisioningScheduling
–
已弃用
1.12
–
DynamicVolumeProvisioning
true
Alpha
1.3
1.7
DynamicVolumeProvisioning
true
GA
1.8
1.12
EnableAggregatedDiscoveryTimeout
true
已弃用
1.16
1.17
EnableEquivalenceClassCache
false
Alpha
1.8
1.12
EnableEquivalenceClassCache
–
已弃用
1.13
1.23
EndpointSlice
false
Alpha
1.16
1.16
EndpointSlice
false
Beta
1.17
1.17
EndpointSlice
true
Beta
1.18
1.20
EndpointSlice
true
GA
1.21
1.24
EndpointSliceNodeName
false
Alpha
1.20
1.20
EndpointSliceNodeName
true
GA
1.21
1.24
EndpointSliceProxying
false
Alpha
1.18
1.18
EndpointSliceProxying
true
Beta
1.19
1.21
EndpointSliceProxying
true
GA
1.22
1.24
EndpointSliceTerminatingCondition
false
Alpha
1.20
1.21
EndpointSliceTerminatingCondition
true
Beta
1.22
1.25
EndpointSliceTerminatingCondition
true
GA
1.26
1.27
EphemeralContainers
false
Alpha
1.16
1.22
EphemeralContainers
true
Beta
1.23
1.24
EphemeralContainers
true
GA
1.25
1.26
EvenPodsSpread
false
Alpha
1.16
1.17
EvenPodsSpread
true
Beta
1.18
1.18
EvenPodsSpread
true
GA
1.19
1.21
ExpandCSIVolumes
false
Alpha
1.14
1.15
ExpandCSIVolumes
true
Beta
1.16
1.23
ExpandCSIVolumes
true
GA
1.24
1.26
ExpandedDNSConfig
false
Alpha
1.22
1.25
ExpandedDNSConfig
true
Beta
1.26
1.27
ExpandedDNSConfig
true
GA
1.28
1.29
ExpandInUsePersistentVolumes
false
Alpha
1.11
1.14
ExpandInUsePersistentVolumes
true
Beta
1.15
1.23
ExpandInUsePersistentVolumes
true
GA
1.24
1.26
ExpandPersistentVolumes
false
Alpha
1.8
1.10
ExpandPersistentVolumes
true
Beta
1.11
1.23
ExpandPersistentVolumes
true
GA
1.24
1.26
ExperimentalCriticalPodAnnotation
false
Alpha
1.5
1.12
ExperimentalCriticalPodAnnotation
false
已弃用
1.13
1.16
ExperimentalHostUserNamespaceDefaulting
false
Beta
1.5
1.27
ExperimentalHostUserNamespaceDefaulting
false
已弃用
1.28
1.29
ExternalPolicyForExternalIP
true
GA
1.18
1.22
GCERegionalPersistentDisk
true
Beta
1.10
1.12
GCERegionalPersistentDisk
true
GA
1.13
1.16
GenericEphemeralVolume
false
Alpha
1.19
1.20
GenericEphemeralVolume
true
Beta
1.21
1.22
GenericEphemeralVolume
true
GA
1.23
1.24
GRPCContainerProbe
false
Alpha
1.23
1.23
GRPCContainerProbe
true
Beta
1.24
1.26
GRPCContainerProbe
true
GA
1.27
1.28
HugePages
false
Alpha
1.8
1.9
HugePages
true
Beta
1.10
1.13
HugePages
true
GA
1.14
1.16
HugePageStorageMediumSize
false
Alpha
1.18
1.18
HugePageStorageMediumSize
true
Beta
1.19
1.21
HugePageStorageMediumSize
true
GA
1.22
1.24
HyperVContainer
false
Alpha
1.10
1.19
HyperVContainer
false
已弃用
1.20
1.20
IdentifyPodOS
false
Alpha
1.23
1.23
IdentifyPodOS
true
Beta
1.24
1.24
IdentifyPodOS
true
GA
1.25
1.26
ImmutableEphemeralVolumes
false
Alpha
1.18
1.18
ImmutableEphemeralVolumes
true
Beta
1.19
1.20
ImmutableEphemeralVolumes
true
GA
1.21
1.24
IndexedJob
false
Alpha
1.21
1.21
IndexedJob
true
Beta
1.22
1.23
IndexedJob
true
GA
1.24
1.25
IngressClassNamespacedParams
false
Alpha
1.21
1.21
IngressClassNamespacedParams
true
Beta
1.22
1.22
IngressClassNamespacedParams
true
GA
1.23
1.24
Initializers
false
Alpha
1.7
1.13
Initializers
–
已弃用
1.14
1.14
InTreePluginAWSUnregister
false
Alpha
1.21
1.30
InTreePluginAzureDiskUnregister
false
Alpha
1.21
1.30
InTreePluginAzureFileUnregister
false
Alpha
1.21
1.30
InTreePluginGCEUnregister
false
Alpha
1.21
1.30
InTreePluginOpenStackUnregister
false
Alpha
1.21
1.30
InTreePluginRBDUnregister
false
Alpha
1.23
1.27
InTreePluginRBDUnregister
false
已弃用
1.28
1.30
InTreePluginvSphereUnregister
false
Alpha
1.21
1.30
IPTablesOwnershipCleanup
false
Alpha
1.25
1.26
IPTablesOwnershipCleanup
true
Beta
1.27
1.27
IPTablesOwnershipCleanup
true
GA
1.28
1.29
IPv6DualStack
false
Alpha
1.15
1.20
IPv6DualStack
true
Beta
1.21
1.22
IPv6DualStack
true
GA
1.23
1.24
JobMutableNodeSchedulingDirectives
true
Beta
1.23
1.26
JobMutableNodeSchedulingDirectives
true
GA
1.27
1.28
JobReadyPods
false
Alpha
1.23
1.23
JobReadyPods
true
Beta
1.24
1.28
JobReadyPods
true
GA
1.29
1.30
JobTrackingWithFinalizers
false
Alpha
1.22
1.22
JobTrackingWithFinalizers
false
Beta
1.23
1.24
JobTrackingWithFinalizers
true
Beta
1.25
1.25
JobTrackingWithFinalizers
true
GA
1.26
1.28
KubeletConfigFile
false
Alpha
1.8
1.9
KubeletConfigFile
–
已弃用
1.10
1.10
KubeletCredentialProviders
false
Alpha
1.20
1.23
KubeletCredentialProviders
true
Beta
1.24
1.25
KubeletCredentialProviders
true
GA
1.26
1.28
KubeletPluginsWatcher
false
Alpha
1.11
1.11
KubeletPluginsWatcher
true
Beta
1.12
1.12
KubeletPluginsWatcher
true
GA
1.13
1.16
KubeletPodResources
false
Alpha
1.13
1.14
KubeletPodResources
true
Beta
1.15
1.27
KubeletPodResources
true
GA
1.28
1.29
KubeletPodResourcesGetAllocatable
false
Alpha
1.21
1.22
KubeletPodResourcesGetAllocatable
true
Beta
1.23
1.27
KubeletPodResourcesGetAllocatable
true
GA
1.28
1.29
LegacyNodeRoleBehavior
false
Alpha
1.16
1.18
LegacyNodeRoleBehavior
true
Beta
1.19
1.20
LegacyNodeRoleBehavior
false
GA
1.21
1.22
LegacyServiceAccountTokenNoAutoGeneration
true
Beta
1.24
1.25
LegacyServiceAccountTokenNoAutoGeneration
true
GA
1.26
1.28
LegacyServiceAccountTokenTracking
false
Alpha
1.26
1.26
LegacyServiceAccountTokenTracking
true
Beta
1.27
1.27
LegacyServiceAccountTokenTracking
true
GA
1.28
1.29
LocalStorageCapacityIsolation
false
Alpha
1.7
1.9
LocalStorageCapacityIsolation
true
Beta
1.10
1.24
LocalStorageCapacityIsolation
true
GA
1.25
1.26
MinimizeIPTablesRestore
false
Alpha
1.26
1.26
MinimizeIPTablesRestore
true
Beta
1.27
1.27
MinimizeIPTablesRestore
true
GA
1.28
1.29
MixedProtocolLBService
false
Alpha
1.20
1.23
MixedProtocolLBService
true
Beta
1.24
1.25
MixedProtocolLBService
true
GA
1.26
1.27
MountContainers
false
Alpha
1.9
1.16
MountContainers
false
已弃用
1.17
1.17
MountPropagation
false
Alpha
1.8
1.9
MountPropagation
true
Beta
1.10
1.11
MountPropagation
true
GA
1.12
1.14
MultiCIDRRangeAllocator
false
Alpha
1.25
1.28
NamespaceDefaultLabelName
true
Beta
1.21
1.21
NamespaceDefaultLabelName
true
GA
1.22
1.23
NetworkPolicyEndPort
false
Alpha
1.21
1.21
NetworkPolicyEndPort
true
Beta
1.22
1.24
NetworkPolicyEndPort
true
GA
1.25
1.26
NetworkPolicyStatus
false
Alpha
1.24
1.27
NodeDisruptionExclusion
false
Alpha
1.16
1.18
NodeDisruptionExclusion
true
Beta
1.19
1.20
NodeDisruptionExclusion
true
GA
1.21
1.22
NodeLease
false
Alpha
1.12
1.13
NodeLease
true
Beta
1.14
1.16
NodeLease
true
GA
1.17
1.23
NonPreemptingPriority
false
Alpha
1.15
1.18
NonPreemptingPriority
true
Beta
1.19
1.23
NonPreemptingPriority
true
GA
1.24
1.25
OpenAPIV3
false
Alpha
1.23
1.23
OpenAPIV3
true
Beta
1.24
1.26
OpenAPIV3
true
GA
1.27
1.28
PersistentLocalVolumes
false
Alpha
1.7
1.9
PersistentLocalVolumes
true
Beta
1.10
1.13
PersistentLocalVolumes
true
GA
1.14
1.16
PodAffinityNamespaceSelector
false
Alpha
1.21
1.21
PodAffinityNamespaceSelector
true
Beta
1.22
1.23
PodAffinityNamespaceSelector
true
GA
1.24
1.25
PodDisruptionBudget
false
Alpha
1.3
1.4
PodDisruptionBudget
true
Beta
1.5
1.20
PodDisruptionBudget
true
GA
1.21
1.25
PodHasNetworkCondition
false
Alpha
1.25
1.27
PodOverhead
false
Alpha
1.16
1.17
PodOverhead
true
Beta
1.18
1.23
PodOverhead
true
GA
1.24
1.25
PodPriority
false
Alpha
1.8
1.10
PodPriority
true
Beta
1.11
1.13
PodPriority
true
GA
1.14
1.18
PodReadinessGates
false
Alpha
1.11
1.11
PodReadinessGates
true
Beta
1.12
1.13
PodReadinessGates
true
GA
1.14
1.16
PodSecurity
false
Alpha
1.22
1.22
PodSecurity
true
Beta
1.23
1.24
PodSecurity
true
GA
1.25
1.27
PodShareProcessNamespace
false
Alpha
1.10
1.11
PodShareProcessNamespace
true
Beta
1.12
1.16
PodShareProcessNamespace
true
GA
1.17
1.19
PreferNominatedNode
false
Alpha
1.21
1.21
PreferNominatedNode
true
Beta
1.22
1.23
PreferNominatedNode
true
GA
1.24
1.25
ProbeTerminationGracePeriod
false
Alpha
1.21
1.21
ProbeTerminationGracePeriod
false
Beta
1.22
1.24
ProbeTerminationGracePeriod
true
Beta
1.25
1.27
ProbeTerminationGracePeriod
true
GA
1.28
1.28
ProxyTerminatingEndpoints
false
Alpha
1.22
1.25
ProxyTerminatingEndpoints
true
Beta
1.26
1.27
ProxyTerminatingEndpoints
true
GA
1.28
1.29
PVCProtection
false
Alpha
1.9
1.9
PVCProtection
–
已弃用
1.10
1.10
ReadOnlyAPIDataVolumes
true
Beta
1.8
1.9
ReadOnlyAPIDataVolumes
–
GA
1.10
1.10
ReadWriteOncePod
false
Alpha
1.22
1.26
ReadWriteOncePod
true
Beta
1.27
1.28
ReadWriteOncePod
true
GA
1.29
1.30
RemoveSelfLink
false
Alpha
1.16
1.19
RemoveSelfLink
true
Beta
1.20
1.23
RemoveSelfLink
true
GA
1.24
1.29
RequestManagement
false
Alpha
1.15
1.16
RequestManagement
–
已弃用
1.17
1.17
ResourceLimitsPriorityFunction
false
Alpha
1.9
1.18
ResourceLimitsPriorityFunction
–
已弃用
1.19
1.19
ResourceQuotaScopeSelectors
false
Alpha
1.11
1.11
ResourceQuotaScopeSelectors
true
Beta
1.12
1.16
ResourceQuotaScopeSelectors
true
GA
1.17
1.18
RetroactiveDefaultStorageClass
false
Alpha
1.25
1.25
RetroactiveDefaultStorageClass
true
Beta
1.26
1.27
RetroactiveDefaultStorageClass
true
GA
1.28
1.28
RootCAConfigMap
false
Alpha
1.13
1.19
RootCAConfigMap
true
Beta
1.20
1.20
RootCAConfigMap
true
GA
1.21
1.22
RotateKubeletClientCertificate
true
Beta
1.8
1.18
RotateKubeletClientCertificate
true
GA
1.19
1.21
RunAsGroup
true
Beta
1.14
1.20
RunAsGroup
true
GA
1.21
1.22
RuntimeClass
false
Alpha
1.12
1.13
RuntimeClass
true
Beta
1.14
1.19
RuntimeClass
true
GA
1.20
1.24
ScheduleDaemonSetPods
false
Alpha
1.11
1.11
ScheduleDaemonSetPods
true
Beta
1.12
1.16
ScheduleDaemonSetPods
true
GA
1.17
1.18
SCTPSupport
false
Alpha
1.12
1.18
SCTPSupport
true
Beta
1.19
1.19
SCTPSupport
true
GA
1.20
1.22
SeccompDefault
false
Alpha
1.22
1.24
SeccompDefault
true
Beta
1.25
1.26
SeccompDefault
true
GA
1.27
1.28
SecurityContextDeny
false
Alpha
1.27
1.29
SelectorIndex
false
Alpha
1.18
1.18
SelectorIndex
true
Beta
1.19
1.19
SelectorIndex
true
GA
1.20
1.25
ServiceAccountIssuerDiscovery
false
Alpha
1.18
1.19
ServiceAccountIssuerDiscovery
true
Beta
1.20
1.20
ServiceAccountIssuerDiscovery
true
GA
1.21
1.23
ServiceAppProtocol
false
Alpha
1.18
1.18
ServiceAppProtocol
true
Beta
1.19
1.19
ServiceAppProtocol
true
GA
1.20
1.22
ServiceInternalTrafficPolicy
false
Alpha
1.21
1.21
ServiceInternalTrafficPolicy
true
Beta
1.22
1.25
ServiceInternalTrafficPolicy
true
GA
1.26
1.27
ServiceIPStaticSubrange
false
Alpha
1.24
1.24
ServiceIPStaticSubrange
true
Beta
1.25
1.25
ServiceIPStaticSubrange
true
GA
1.26
1.27
ServiceLBNodePortControl
false
Alpha
1.20
1.21
ServiceLBNodePortControl
true
Beta
1.22
1.23
ServiceLBNodePortControl
true
GA
1.24
1.25
ServiceLoadBalancerClass
false
Alpha
1.21
1.21
ServiceLoadBalancerClass
true
Beta
1.22
1.23
ServiceLoadBalancerClass
true
GA
1.24
1.25
ServiceLoadBalancerFinalizer
false
Alpha
1.15
1.15
ServiceLoadBalancerFinalizer
true
Beta
1.16
1.16
ServiceLoadBalancerFinalizer
true
GA
1.17
1.20
ServiceNodeExclusion
false
Alpha
1.8
1.18
ServiceNodeExclusion
true
Beta
1.19
1.20
ServiceNodeExclusion
true
GA
1.21
1.22
ServiceNodePortStaticSubrange
false
Alpha
1.27
1.27
ServiceNodePortStaticSubrange
true
Beta
1.28
1.28
ServiceNodePortStaticSubrange
true
GA
1.29
1.30
ServiceTopology
false
Alpha
1.17
1.19
ServiceTopology
false
已弃用
1.20
1.22
SetHostnameAsFQDN
false
Alpha
1.19
1.19
SetHostnameAsFQDN
true
Beta
1.20
1.21
SetHostnameAsFQDN
true
GA
1.22
1.24
SkipReadOnlyValidationGCE
false
Alpha
1.28
1.28
SkipReadOnlyValidationGCE
true
已弃用
1.29
1.30
StartupProbe
false
Alpha
1.16
1.17
StartupProbe
true
Beta
1.18
1.19
StartupProbe
true
GA
1.20
1.23
StatefulSetMinReadySeconds
false
Alpha
1.22
1.22
StatefulSetMinReadySeconds
true
Beta
1.23
1.24
StatefulSetMinReadySeconds
true
GA
1.25
1.26
StorageObjectInUseProtection
true
Beta
1.10
1.10
StorageObjectInUseProtection
true
GA
1.11
1.24
StreamingProxyRedirects
false
Beta
1.5
1.5
StreamingProxyRedirects
true
Beta
1.6
1.17
StreamingProxyRedirects
true
已弃用
1.18
1.21
StreamingProxyRedirects
false
已弃用
1.22
1.24
SupportIPVSProxyMode
false
Alpha
1.8
1.8
SupportIPVSProxyMode
false
Beta
1.9
1.9
SupportIPVSProxyMode
true
Beta
1.10
1.10
SupportIPVSProxyMode
true
GA
1.11
1.20
SupportNodePidsLimit
false
Alpha
1.14
1.14
SupportNodePidsLimit
true
Beta
1.15
1.19
SupportNodePidsLimit
true
GA
1.20
1.23
SupportPodPidsLimit
false
Alpha
1.10
1.13
SupportPodPidsLimit
true
Beta
1.14
1.19
SupportPodPidsLimit
true
GA
1.20
1.23
SuspendJob
false
Alpha
1.21
1.21
SuspendJob
true
Beta
1.22
1.23
SuspendJob
true
GA
1.24
1.25
Sysctls
true
Beta
1.11
1.20
Sysctls
true
GA
1.21
1.22
TaintBasedEvictions
false
Alpha
1.6
1.12
TaintBasedEvictions
true
Beta
1.13
1.17
TaintBasedEvictions
true
GA
1.18
1.20
TaintNodesByCondition
false
Alpha
1.8
1.11
TaintNodesByCondition
true
Beta
1.12
1.16
TaintNodesByCondition
true
GA
1.17
1.18
TokenRequest
false
Alpha
1.10
1.11
TokenRequest
true
Beta
1.12
1.19
TokenRequest
true
GA
1.20
1.21
TokenRequestProjection
false
Alpha
1.11
1.11
TokenRequestProjection
true
Beta
1.12
1.19
TokenRequestProjection
true
GA
1.20
1.21
TopologyManager
false
Alpha
1.16
1.17
TopologyManager
true
Beta
1.18
1.26
TopologyManager
true
GA
1.27
1.28
TTLAfterFinished
false
Alpha
1.12
1.20
TTLAfterFinished
true
Beta
1.21
1.22
TTLAfterFinished
true
GA
1.23
1.24
UserNamespacesStatelessPodsSupport
false
Alpha
1.25
1.27
ValidateProxyRedirects
false
Alpha
1.12
1.13
ValidateProxyRedirects
true
Beta
1.14
1.21
ValidateProxyRedirects
true
已弃用
1.22
1.24
VolumePVCDataSource
false
Alpha
1.15
1.15
VolumePVCDataSource
true
Beta
1.16
1.17
VolumePVCDataSource
true
GA
1.18
1.21
VolumeScheduling
false
Alpha
1.9
1.9
VolumeScheduling
true
Beta
1.10
1.12
VolumeScheduling
true
GA
1.13
1.16
VolumeSnapshotDataSource
false
Alpha
1.12
1.16
VolumeSnapshotDataSource
true
Beta
1.17
1.19
VolumeSnapshotDataSource
true
GA
1.20
1.22
VolumeSubpath
true
GA
1.10
1.24
VolumeSubpathEnvExpansion
false
Alpha
1.14
1.14
VolumeSubpathEnvExpansion
true
Beta
1.15
1.16
VolumeSubpathEnvExpansion
true
GA
1.17
1.24
WarningHeaders
true
Beta
1.19
1.21
WarningHeaders
true
GA
1.22
1.24
WindowsEndpointSliceProxying
false
Alpha
1.19
1.20
WindowsEndpointSliceProxying
true
Beta
1.21
1.21
WindowsEndpointSliceProxying
true
GA
1.22
1.24
WindowsGMSA
false
Alpha
1.14
1.15
WindowsGMSA
true
Beta
1.16
1.17
WindowsGMSA
true
GA
1.18
1.20
WindowsHostProcessContainers
false
Alpha
1.22
1.22
WindowsHostProcessContainers
true
Beta
1.23
1.25
WindowsHostProcessContainers
true
GA
1.26
1.27
WindowsRunAsUserName
false
Alpha
1.16
1.16
WindowsRunAsUserName
true
Beta
1.17
1.17
WindowsRunAsUserName
true
GA
1.18
1.20
已移除的特性门控的说明
Accelerators
:
使用 Docker Engine 时启用 Nvidia GPU 支持。这一特性不再提供。
关于替代方案,请参阅设备插件 。
AdvancedAuditing
:
启用高级审计 。
AffinityInAnnotations
:
启用
Pod 亲和性或反亲和性 设置。
AllowExtTrafficLocalEndpoints
:
允许服务将外部请求路由到节点本地端点。
AllowInsecureBackendProxy
:
允许用户在请求 Pod 日志时跳过 kubelet 的 TLS 验证。
APIPriorityAndFairness
:
在每个服务器上启用优先级和公平性来管理请求的并发度(由 RequestManagement
重命名而来)。
APISelfSubjectReview
:
激活 SelfSubjectReview
API,允许用户查看请求主体的身份认证信息。
更多细节请参阅 API 访问客户端的身份认证信息 。
AttachVolumeLimit
:
启用卷插件用于报告可连接到节点的卷数限制。
更多细节参阅动态卷限制 。
BalanceAttachedNodeVolumes
:
在调度时考虑节点上的卷数量,以实现平衡资源分配。
调度器在决策时会优先考虑 CPU、内存利用率和卷数更近的节点。
BlockVolume
:
启用在 Pod 中定义和使用原始块设备。
更多详情请参见原始块卷支持 。
BoundServiceAccountTokenVolume
:
将 ServiceAccount 卷迁移到使用由
ServiceAccountTokenVolumeProjection 组成的投射卷。集群管理员可以使用
serviceaccount_stale_tokens_total
指标来监控依赖于扩展令牌的工作负载。
如果没有这样的工作负载,你可以在启动 kube-apiserver
时添加
--service-account-extend-token-expiration=false
标志来关闭扩展令牌。
更多详情请参见绑定服务账号令牌 。
ConfigurableFSGroupPolicy
:
在 Pod 中挂载卷时,允许用户为 fsGroup 配置卷访问权限和属主变更策略。
请参见为 Pod 配置卷访问权限和属主变更策略 。
ConsistentHTTPGetHandlers
:
使用探测器为生命周期处理程序规范化 HTTP get URL 和标头传递。
ControllerManagerLeaderMigration
:
为 kube-controller-manager
和 cloud-controller-manager
启用 Leader 迁移,它允许集群管理者在没有停机的高可用集群环境下,实时把 kube-controller-manager
迁移到外部的 controller-manager (例如 cloud-controller-manager) 中。
CRIContainerLogRotation
:
为 CRI 容器运行时启用容器日志轮换。日志文件的默认最大大小为 10MB,
缺省情况下,一个容器允许的最大日志文件数为 5。这些值可以在 kubelet 配置中配置。
更多细节请参见日志架构 。
CronJobControllerV2
:
使用 CronJob
控制器的一种替代实现。否则,系统会选择同一控制器的 v1 版本。
CronJobTimeZone
:
允许在 CronJobs
中使用 timeZone
可选字段。
CSIBlockVolume
:
启用外部 CSI 卷驱动程序用于支持块存储。有关更多详细信息,请参见
csi
原始块卷支持 。
CSIDriverRegistry
:
在 csi.storage.k8s.io
中启用与 CSIDriver API 对象有关的所有逻辑。
CSIInlineVolume
:
为 Pod 启用 CSI 内联卷支持。
CSIMigration
:
启用封装和转换逻辑,将卷操作从内嵌插件路由到对应的预安装 CSI 插件。
CSIMigrationAWS
:
启用封装和转换逻辑,将卷操作从 AWS-EBS 内嵌插件路由到 EBS CSI 插件。
如果节点禁用了此特性门控或者未安装和配置 EBS CSI 插件,支持回退到内嵌 EBS 插件来执行卷挂载操作。
不支持回退到这些插件来执行卷制备操作,因为需要安装并配置 CSI 插件
CSIMigrationAWSComplete
:
停止在 kubelet 和卷控制器中注册 EBS 内嵌插件,
并启用封装和转换逻辑,将卷操作从 AWS-EBS 内嵌插件路由到 EBS CSI 插件。
这需要启用 CSIMigration 和 CSIMigrationAWS 特性标志,并在集群中的所有节点上安装和配置
EBS CSI 插件。该特性标志已被废弃,取而代之的是 InTreePluginAWSUnregister
,
后者会阻止注册 EBS 内嵌插件。
CSIMigrationAzureDisk
:
启用封装和转换逻辑,将卷操作从 AzureDisk 内嵌插件路由到 Azure 磁盘 CSI 插件。
对于禁用了此特性的节点或者没有安装并配置 AzureDisk CSI 插件的节点,
支持回退到内嵌(in-tree)AzureDisk 插件来执行磁盘挂载操作。
不支持回退到内嵌插件来执行磁盘制备操作,因为对应的 CSI 插件必须已安装且正确配置。
此特性需要启用 CSIMigration 特性标志。
CSIMigrationAzureDiskComplete
:
停止在 kubelet 和卷控制器中注册 Azure 磁盘内嵌插件,
并启用封装和转换逻辑,将卷操作从 Azure 磁盘内嵌插件路由到 AzureDisk CSI 插件。
这需要启用 CSIMigration 和 CSIMigrationAzureDisk 特性标志,
并在集群中的所有节点上安装和配置 AzureDisk CSI 插件。该特性标志已被废弃,
取而代之的是能防止注册内嵌 AzureDisk 插件的 InTreePluginAzureDiskUnregister
特性标志。
CSIMigrationAzureFile
:
启用封装和转换逻辑,将卷操作从 AzureFile 内嵌插件路由到
AzureFile CSI 插件。对于禁用了此特性的节点或者没有安装并配置 AzureFile CSI
插件的节点,支持回退到内嵌(in-tree)AzureFile 插件来执行卷挂载操作。
不支持回退到内嵌插件来执行卷制备操作,因为对应的 CSI 插件必须已安装且正确配置。
此特性需要启用 CSIMigration 特性标志。
CSIMigrationAzureFileComplete
:
停止在 kubelet 和卷控制器中注册 Azure-File 内嵌插件,
并启用封装和转换逻辑,将卷操作从 Azure-File 内嵌插件路由到 AzureFile CSI 插件。
这需要启用 CSIMigration 和 CSIMigrationAzureFile 特性标志,
并在集群中的所有节点上安装和配置 AzureFile CSI 插件。该特性标志已被废弃,
取而代之的是能防止注册内嵌 AzureDisk 插件的 InTreePluginAzureFileUnregister
特性标志。
CSIMigrationGCE
:
启用封装和转换逻辑,将卷操作从 GCE-PD 内嵌插件路由到 PD CSI 插件。
对于禁用了此特性的节点或者没有安装并配置 PD CSI 插件的节点,
支持回退到内嵌GCE 插件来执行卷挂载操作。
不支持回退到内嵌插件来执行卷制备操作,因为对应的 CSI 插件必须已安装且正确配置。
此特性需要启用 CSIMigration 特性标志。
CSIMigrationGCEComplete
:
停止在 kubelet 和卷控制器中注册 GCE-PD 内嵌插件,
并启用封装和转换逻辑,将卷操作从 GCE-PD 内嵌插件路由到 PD CSI 插件。
这需要启用 CSIMigration 和 CSIMigrationGCE 特性标志,并在集群中的所有节点上安装和配置
PD CSI 插件。该特性标志已被废弃,取而代之的是能防止注册内嵌 GCE PD 插件的
InTreePluginGCEUnregister
特性标志。
CSIMigrationOpenStack
:
启用封装和转换逻辑,将卷操作从 Cinder 内嵌插件路由到 Cinder CSI 插件。
对于禁用了此特性的节点或者没有安装并配置 Cinder CSI 插件的节点,
支持回退到内嵌 Cinder 插件来执行挂载操作。
不支持回退到内嵌插件来执行制备操作,因为对应的 CSI 插件必须已安装且正确配置。
此特性需要启用 CSIMigration 特性标志。
CSIMigrationOpenStackComplete
:
停止在 kubelet 和卷控制器中注册 Cinder 内嵌插件,
并启用封装和转换逻辑,将卷操作从 Cinder 内嵌插件路由到 Cinder CSI 插件。
这需要启用 CSIMigration 和 CSIMigrationOpenStack 特性标志,
并在集群中的所有节点上安装和配置 Cinder CSI 插件。
该特性标志已被弃用,取而代之的是能防止注册内嵌 OpenStack Cinder 插件的
InTreePluginOpenStackUnregister
特性标志。
CSIMigrationRBD
:
启用封装和转换逻辑,将卷操作从 RBD 的内嵌插件路由到 Ceph RBD CSI 插件。
此特性要求 CSIMigration 和 csiMigrationRBD 特性标志均被启用,
且集群中安装并配置了 Ceph CSI 插件。
此特性门控已被弃用,以鼓励使用 InTreePluginRBDUnregister
特性门控。
后者会禁止注册内嵌的 RBD 插件。
CSIMigrationvSphere
:
启用封装和转换逻辑,将卷操作从 vSphere 内嵌插件路由到 vSphere CSI 插件。
如果节点禁用了此特性门控或者未安装和配置 vSphere CSI 插件,
则支持回退到 vSphere 内嵌插件来执行挂载操作。
不支持回退到内嵌插件来执行制备操作,因为对应的 CSI 插件必须已安装且正确配置。
这需要启用 CSIMigration 特性标志。
CSIMigrationvSphereComplete
:
停止在 kubelet 和卷控制器中注册 vSphere 内嵌插件,
并启用封装和转换逻辑,将卷操作从 vSphere 内嵌插件路由到 vSphere CSI 插件。
这需要启用 CSIMigration 和 CSIMigrationvSphere 特性标志,
并在集群中的所有节点上安装和配置 vSphere CSI 插件。
该特性标志已被废弃,取而代之的是能防止注册内嵌 vSphere 插件的
InTreePluginvSphereUnregister
特性标志。
CSINodeExpandSecret
:
允许在 NodeExpandVolume
CSI 操作期间,
将保密的身份验证数据传递到 CSI 驱动以供后者使用。
CSINodeInfo
:
在 csi.storage.k8s.io
中启用与 CSINodeInfo API 对象有关的所有逻辑。
CSIPersistentVolume
:
启用发现和挂载通过
CSI(容器存储接口)
兼容卷插件配置的卷。
CSIServiceAccountToken
:
允许 CSI 驱动接收挂载卷目标 Pods 的服务账号令牌。
参阅令牌请求(Token Requests) 。
CSIStorageCapacity
:
启用 CSI 驱动发布存储容量信息,
以及 Kubernetes 调度器在调度 Pods 时使用该信息。
详情见存储容量 。
更多详情请参阅 csi
卷类型 文档。
CSIVolumeFSGroupPolicy
:
允许 CSIDriver 使用 fsGroupPolicy
字段。
该字段能控制由 CSIDriver 创建的卷在挂载这些卷时是否支持卷所有权和权限修改。
CSRDuration
:
允许客户端为通过 Kubernetes CSR API 签署的证书申请有效期限。
CustomPodDNS
:
允许使用 Pod 的 dnsConfig
属性自定义其 DNS 设置。
更多详细信息,请参见
Pod 的 DNS 配置 。
CustomResourceDefaulting
:
为 CRD 启用在其 OpenAPI v3 验证模式中提供默认值的支持。
CustomResourcePublishOpenAPI
:
启用 CustomResourceDefinition OpenAPI 规范的发布。
CustomResourceSubresources
:
对于用
CustomResourceDefinition
创建的资源启用其 /status
和 /scale
子资源。
CustomResourceValidation
:
对于用
CustomResourceDefinition
创建的资源启用基于模式的验证。
CustomResourceValidationExpressions
:
启用 CRD 中的表达式语言合法性检查,
基于 x-kubernetes-validations
扩展中所书写的合法性检查规则来验证定制资源。
CustomResourceWebhookConversion
:
对于用
CustomResourceDefinition
创建的资源启用基于 Webhook 的转换。
DaemonSetUpdateSurge
:
使 DaemonSet 工作负载在每个节点的更新期间保持可用性。
参阅对 DaemonSet 执行滚动更新 。
DefaultPodTopologySpread
:
启用 PodTopologySpread
调度插件以执行
默认分布 。
DelegateFSGroupToCSIDriver
:
如果 CSI 驱动程序支持,则通过 NodeStageVolume
和 NodePublishVolume CSI 调用传递 fsGroup
,
委托驱动来应用 Pod 的 securityContext
中的 fsGroup
。
DevicePlugins
:
在节点上启用基于设备插件 的资源制备。
DisableAcceleratorUsageMetrics
:
禁用 kubelet 收集的加速器指标 。
DownwardAPIHugePages
:
允许在下行(Downward)API
中使用巨页信息。
DryRun
:
启用在服务器端对请求进行
试运行(Dry Run) ,
以便在不提交的情况下测试验证、合并和变更。
DynamicAuditing
:
在 v1.19 版本前用于启用动态审计。
DynamicKubeletConfig
:
启用 kubelet 的动态配置。
除偏差策略场景外,不再支持该功能。
该特性门控在 kubelet 1.24 版本中已被移除。
DynamicProvisioningScheduling
:
扩展默认调度器以了解卷拓扑并处理 PV 制备。
此特性已在 v1.12 中完全被 VolumeScheduling
特性取代。
DynamicVolumeProvisioning
:
启用持久化卷到 Pod
的动态制备 。
EnableAggregatedDiscoveryTimeout
:
对聚合的发现调用启用五秒钟超时设置。
EnableEquivalenceClassCache
:
调度 Pod 时,使调度器缓存节点的等效项。
EndpointSlice
:
启用 EndpointSlice 以实现可扩缩性和可扩展性更好的网络端点。
参阅启用 EndpointSlice 。
EndpointSliceNodeName
:
启用 EndpointSlice 的 nodeName
字段。
EndpointSliceProxying
:
启用此特性门控时,Linux 上运行的 kube-proxy 会使用
EndpointSlice 而不是 Endpoints 作为其主要数据源,
从而使得可扩缩性和性能提升成为可能。
参阅启用 EndpointSlice 。
EndpointSliceTerminatingCondition
:
启用 EndpointSlice 的 terminating
和 serving
状况字段。
EphemeralContainers
:
启用添加临时容器 到正在运行的
Pod 的特性。
EvenPodsSpread
:
使 Pod 能够在拓扑域之间平衡调度。请参阅
Pod 拓扑扩展约束 。
ExpandCSIVolumes
:
启用 CSI 卷的扩展。
ExpandedDNSConfig
:
在 kubelet 和 kube-apiserver 上启用后,
允许使用更多的 DNS 搜索域和搜索域列表。此功能特性需要容器运行时
(containerd v1.5.6 或更高,CRI-O v1.22 或更高)的支持。
参阅扩展 DNS 配置 .
ExpandInUsePersistentVolumes
:
启用扩充使用中的 PVC 的大小。
请查阅调整使用中的 PersistentVolumeClaim 的大小 。
ExpandPersistentVolumes
:
允许扩展持久卷。
请查阅扩展持久卷申领 。
ExperimentalCriticalPodAnnotation
:
启用将特定 Pod 注解为 关键负载(Critical) 的方式,
用于确保其被调度 。
从 v1.13 开始已弃用此特性,转而使用 Pod 优先级和抢占功能。
ExperimentalHostUserNamespaceDefaulting
:
启用主机默认的用户名字空间。
这适用于使用其他主机名字空间、主机安装的容器,或具有特权或使用特定的非名字空间功能
(例如 MKNODE
、SYS_MODULE
等)的容器。
如果在 Docker 守护程序中启用了用户名字空间重新映射,则启用此选项。
ExternalPolicyForExternalIP
:
修复一个缺陷,该缺陷会导致 ExternalTrafficPolicy
不会应用到 Service 的外部 IP。
GCERegionalPersistentDisk
:
在 GCE 上启用带地理区域信息的 PD 特性。
GenericEphemeralVolume
:
启用支持临时的内联卷,这些卷支持普通卷的所有特性
(可以由第三方存储供应商提供,支持存储容量跟踪、从快照还原等等)。
请参见临时卷 。
GRPCContainerProbe
:
为活跃态、就绪态和启动探针启用 gRPC 探针。
参阅配置活跃态、就绪态和启动探针 。
HugePages
:
启用预分配的巨页资源 的分配和使用。
HugePageStorageMediumSize
:
启用对多种大小的预分配巨页资源 的支持。
HyperVContainer
:
为 Windows 容器启用 Hyper-V 隔离 。
IdentifyPodOS
:
允许设置 Pod 的 os
字段。这有助于在 API 服务器准入时确定性地辨识 Pod 的 OS。
ImmutableEphemeralVolumes
:
允许将各个 Secret 和 ConfigMap 标记为不可变更的,以提高安全性和性能。
IndexedJob
:
允许 Job
控制器根据完成索引来管理 Pod 完成。
IngressClassNamespacedParams
:
允许在 IngressClass
资源中使用名字空间范围的参数引用。
此特性为 IngressClass.spec.parameters
添加了两个字段:scope
和 namespace
。
Initializers
:
允许使用 Intializer 准入插件来异步协调对象创建操作。
InTreePluginAWSUnregister
:
在 kubelet 和卷控制器上关闭注册 aws-ebs 内嵌插件。
InTreePluginAzureDiskUnregister
:
在 kubelet 和卷控制器上关闭注册 azuredisk 内嵌插件。
InTreePluginAzureFileUnregister
:
在 kubelet 和卷控制器上关闭注册 azurefile 内嵌插件。
InTreePluginGCEUnregister
:
在 kubelet 和卷控制器上关闭注册 gce-pd 内嵌插件。
InTreePluginOpenStackUnregister
:
在 kubelet 和卷控制器上关闭注册 OpenStack cinder 内嵌插件。
InTreePluginRBDUnregister
:
在 kubelet 和卷控制器上关闭注册 RBD 内嵌插件。
InTreePluginvSphereUnregister
:
在 kubelet 和卷控制器上关闭注册 vSphere 内嵌插件。
IPTablesOwnershipCleanup
:
这使得 kubelet 不再创建传统的 iptables 规则。
IPv6DualStack
:
启用双协议栈 以支持 IPv6。
JobMutableNodeSchedulingDirectives
:
允许更新在 Job
的 Pod 模板中的节点调度指令。
JobReadyPods
:
允许跟踪状况 为
Ready
的 Pod 的个数。Ready
的 Pod 记录在
Job 对象的
status 字段中。
JobTrackingWithFinalizers
:
启用跟踪 Job
完成情况,而非总是从集群剩余 Pod 获取信息来判断完成情况。
Job 控制器使用 Pod 终结器(finalizers)和 Job 状态中的一个字段
来跟踪已完成的 Pod 以计算完成度。
KubeletConfigFile
:
允许从使用配置文件指定的文件中加载 kubelet 配置。
详情参见通过配置文件设置 kubelet 参数 。
KubeletCredentialProviders
:
启用 kubelet exec 凭据提供程序以获取镜像拉取凭据。
KubeletPluginsWatcher
:
启用基于探针的插件监视程序,使 kubelet 能够发现
CSI 卷驱动程序 这类插件。
KubeletPodResources
:
启用 kubelet 上 Pod 资源 gRPC 端点。
详情参见支持设备监控 。
KubeletPodResourcesGetAllocatable
:
启用 kubelet 的 Pod 资源的 GetAllocatableResources
功能。
此 API 增强了资源分配报告 。
LegacyNodeRoleBehavior
:
禁用此门控时,服务负载均衡器中和节点干扰中的原先行为会忽略
node-role.kubernetes.io/master
标签,将使用 NodeDisruptionExclusion
和
ServiceNodeExclusion
对应特性所提供的标签。
LegacyServiceAccountTokenNoAutoGeneration
:
停止基于 Secret
自动生成服务账号令牌 。
LegacyServiceAccountTokenTracking
:
跟踪基于 Secret
的服务账号令牌 的使用情况。
LocalStorageCapacityIsolation
:
允许使用本地临时存储 以及
emptyDir 卷 的 sizeLimit
属性。
MinimizeIPTablesRestore
:
启用 kube-proxy iptables 模式中的性能改进逻辑。
MixedProtocolLBService
:
允许在同一 LoadBalancer
类型的 Service 实例中使用不同的协议。
MountContainers
:
允许使用主机上的工具容器作为卷挂载程序。
MountPropagation
:
允许将一个容器上挂载的卷共享到其他容器或 Pod。
更多详细信息,请参见挂载传播 。
MultiCIDRRangeAllocator
:
启用 MultiCIDR 网段分配机制。
NamespaceDefaultLabelName
:
配置 API 服务器以在所有名字空间上设置一个不可变的标签
kubernetes.io/metadata.name
,取值为名字空间的名称。
NetworkPolicyEndPort
:
允许你在 NetworkPolicy
规则中将端口设置为一个端口号范围。
NetworkPolicyStatus
:
为 NetworkPolicy 对象启用 status
子资源。
NodeDisruptionExclusion
:
启用节点标签 node.kubernetes.io/exclude-disruption
,
以防止在可用区发生故障期间驱逐节点。
NodeLease
:
启用新的 Lease API 以报告节点心跳,节点心跳可用作节点运行状况信号。
NonPreemptingPriority
:
为 PriorityClass 和 Pod 启用 preemptionPolicy
字段。
OpenAPIV3
:
允许 API 服务器发布 OpenAPI V3。
PersistentLocalVolumes
:
允许在 Pod 中使用 local
卷类型。
如果请求 local
卷,则必须指定 Pod 亲和性属性。
PodAffinityNamespaceSelector
:
启用 Pod 亲和性名字空间选择算符 和
CrossNamespacePodAffinity
资源配额特性。
PodDisruptionBudget
:
启用 PodDisruptionBudget 特性。
PodHasNetworkCondition
:
使得 kubelet 能够对 Pod 标记
PodHasNetwork 状况。
此特性在 1.28 中重命名为 PodReadyToStartContainersCondition
。
PodOverhead
:
启用 PodOverhead
特性以计算 Pod 开销。
PodPriority
:
允许根据优先级 取消调度和抢占 Pod。
PodReadinessGates
:
允许设置 podReadinessGate
字段以扩展 Pod 就绪状态评估。更多细节请参见
Pod 就绪状态判别 。
PodSecurity
:
启用 PodSecurity
准入插件。
PodShareProcessNamespace
:
在 Pod 中启用 shareProcessNamespace
的设置,
以便在 Pod 中运行的容器之间共享同一进程名字空间。
更多细节请参见在 Pod 中的容器间共享同一进程名字空间 。
PreferNominatedNode
:
这个标志告诉调度器在循环遍历集群中的所有其他节点之前是否先检查指定的节点。
ProbeTerminationGracePeriod
:
在 Pod 上启用设置探针级别 terminationGracePeriodSeconds
。
更多细节请参见增强提案 。
ProxyTerminatingEndpoints
:
当 ExternalTrafficPolicy=Local
时,允许 kube-proxy 处理终止过程中的端点。
PVCProtection
:
启用后,可预防仍然有 Pod 正使用的 PersistentVolumeClaim (PVC) 被删除。
ReadOnlyAPIDataVolumes
:
请参阅以只读方式挂载的 configMap
、
secret
、
downwardAPI
和 projected
卷。
自 Kubernetes v1.10 起,这些卷类型始终是只读的,无法选择其它模式。
ReadWriteOncePod
:
允许使用 ReadWriteOncePod
访问模式的 PersistentVolume。
RemoveSelfLink
:
为所有对象和集合将 .metadata.selfLink
字段设置为空(空字符串)。
此字段自 Kubernetes v1.16 版本以来已被弃用。
当此特性被启用时,.metadata.selfLink
字段仍然是 Kubernetes API 的一部分,但始终不设置。
RequestManagement
:
允许在每个 API 服务器上通过优先级和公平性来管理请求并发性。
自 1.17 以来已被 APIPriorityAndFairness
替代。
ResourceLimitsPriorityFunction
:
启用某调度器优先级函数,此函数将最低得分 1 指派给至少满足输入 Pod 的 CPU 和内存限制之一的节点,
目的是打破得分相同的节点之间的关联。
ResourceQuotaScopeSelectors
:
启用资源配额范围选择算符。
RetroactiveDefaultStorageClass
:
允许通过反射机制为未绑定的 PVC 设置 StorageClass。
RootCAConfigMap
:
配置 kube-controller-manager
以向每个命名空间发布名为 kube-root-ca.crt
的
ConfigMap 。
这个 ConfigMap 包含一个 CA 证书包,用于验证与 kube-apiserver 的连接。
更多细节参阅绑定的服务账户令牌 。
RotateKubeletClientCertificate
:
启用 kubelet 上客户端 TLS 证书的轮换。
更多细节参阅 kubelet 配置 。
RunAsGroup
:
允许控制在容器初始化进程上设置的主组 ID。
RuntimeClass
:
启用 RuntimeClass 特性,
用于选择容器运行时配置。
ScheduleDaemonSetPods
:
启用 DaemonSet Pod 由默认调度器而不是 DaemonSet 控制器进行调度。
SCTPSupport
:
在 Pod、Service、Endpoints、NetworkPolicy 定义中允许将 SCTP
用作 protocol
值。
SeccompDefault
:
启用 RuntimeDefault
作为所有工作负载的默认 seccomp 配置文件。
此 seccomp 配置文件在 Pod 和/或 Container 的 securityContext
中被指定。
SecurityContextDeny
:
此门控表示 SecurityContextDeny
准入控制器已弃用。
SelectorIndex
:
允许使用 API 服务器的 watch 缓存中基于标签和字段的索引来加速 list 操作。
ServiceAccountIssuerDiscovery
:
在 API 服务器中为服务账号颁发者启用 OIDC 发现端点(颁发者和 JWKS URL)。
详情参见为 Pod 配置服务账号 。
ServiceAppProtocol
:
为 Service 和 Endpoints 启用 appProtocol
字段。
ServiceInternalTrafficPolicy
:
为 Service 启用 internalTrafficPolicy
字段。
ServiceIPStaticSubrange
:
启用 Service 的 ClusterIP 分配策略,从而细分 ClusterIP 范围。
动态分配的 ClusterIP 地址将优先从较高范围分配,
以允许用户从较低范围分配静态 ClusterIP,进而降低发生冲突的风险。
更多详细信息请参阅避免冲突 。
ServiceLBNodePortControl
:
为 Service 启用 allocateLoadBalancerNodePorts
字段。
ServiceLoadBalancerClass
:
为 Service 启用 loadBalancerClass
字段。
有关更多信息,请参见设置负载均衡器实现的类别 。
ServiceLoadBalancerFinalizer
:
为 Service 负载均衡器启用终结器(finalizers)保护。
ServiceNodeExclusion
:
允许从云提供商创建的负载均衡器中排除节点。
如果节点标记有 node.kubernetes.io/exclude-from-external-load-balancers
标签,
则可以排除该节点。
ServiceNodePortStaticSubrange
:
允许对 NodePort Service 使用不同的端口分配策略。
有关更多详细信息,
请参阅保留 NodePort 范围以避免冲突 。
ServiceTopology
:
允许 Service 基于集群的节点拓扑进行流量路由。
SetHostnameAsFQDN
:
启用将全限定域名(FQDN)设置为 Pod 主机名的功能。
请参见 Pod 的 setHostnameAsFQDN
字段 。
SkipReadOnlyValidationGCE
:
跳过对 GCE PersistentDisk 卷处于只读模式的验证。
StartupProbe
:
在 kubelet 中启用启动探针 。
StatefulSetMinReadySeconds
:
允许 StatefulSet 控制器遵守 minReadySeconds
。
StorageObjectInUseProtection
:
如果仍在使用 PersistentVolume 或 PersistentVolumeClaim 对象,
则将其删除操作推迟。
StreamingProxyRedirects
:
指示 API 服务器拦截(并跟踪)后端(kubelet)的重定向以处理流请求。
流请求的例子包括 exec
、attach
和 port-forward
请求。
SupportIPVSProxyMode
:
启用使用 IPVS 提供集群内服务负载平衡。
详情参见服务代理 。
SupportNodePidsLimit
:
允许限制 Node 上的 PID 用量。
--system-reserved
和 --kube-reserved
中的参数 pid=<数值>
可以分别用来设定为整个系统所预留的进程 ID 个数,
和为 Kubernetes 系统守护进程预留的进程 ID 个数。
SupportPodPidsLimit
:
允许限制 Pod 中的 PID 用量。
SuspendJob
:
启用对挂起和恢复 Job 的支持。详情参见
Job 文档 。
Sysctls
:
允许为每个 Pod 设置受命名空间约束的内核参数(sysctl)。详情参见
sysctl 。
TaintBasedEvictions
:
根据节点上的污点和 Pod 上的容忍度启用从节点驱逐 Pod 的特性。
更多细节参见污点和容忍度 。
TaintNodesByCondition
:
根据节点状况 启用自动为节点标记污点。
TokenRequest
:
在服务账号资源上启用 TokenRequest
端点。
TokenRequestProjection
:
启用通过
projected
卷 将服务账号令牌注入到
Pod 中的特性。
TopologyManager
:
启用一种机制来协调 Kubernetes 不同组件的细粒度硬件资源分配。
详见控制节点上的拓扑管理策略 。
TTLAfterFinished
:
允许
TTL 控制器 在资源执行完毕后清理资源。
UserNamespacesStatelessPodsSupport
:
为无状态 Pod 启用用户命名空间支持。此特性在 Kubernetes v1.28 版本中被 UserNamespacesSupport
特性取代。
ValidateProxyRedirects
:
这个标志控制 API 服务器是否检查重定向仅指向相同主机。
仅在启用 StreamingProxyRedirects
标志时被使用。
VolumePVCDataSource
:
启用对将现有 PVC 设置为数据源的支持。
VolumeScheduling
:
启用卷拓扑感知调度,并使 PersistentVolumeClaim(PVC)
绑定能够了解调度决策;当与 PersistentLocalVolumes 特性门控一起使用时,
还允许使用 local
卷类型。
VolumeSnapshotDataSource
:
启用卷快照数据源支持。
VolumeSubpath
:
允许在容器中挂载卷的子路径。
VolumeSubpathEnvExpansion
:
启用 subPathExpr
字段用于在 subPath
中展开环境变量。
WarningHeaders
:
允许在 API 响应中发送警告头。
WindowsEndpointSliceProxying
:
启用后,运行在 Windows 上的 kube-proxy
将使用 EndpointSlice 而不是 Endpoints 作为主要数据源,从而实现可伸缩性和性能改进。
详情请参见启用端点切片 。
WindowsGMSA
:
允许从 Pod 传递 GMSA 凭据规范到容器运行时。
WindowsHostProcessContainers
:
启用对 Windows HostProcess 容器的支持。
WindowsRunAsUserName
:
启用在 Windows 容器中以非默认用户身份运行应用程序的支持。
详情请参见配置 RunAsUserName 。
13.3 - kubelet
简介
kubelet 是在每个节点上运行的主要 “节点代理”。它可以使用以下方式之一向 API 服务器注册:
主机名(hostname);
覆盖主机名的参数;
特定于某云驱动的逻辑。
kubelet 是基于 PodSpec 来工作的。每个 PodSpec 是一个描述 Pod 的 YAML 或 JSON 对象。
kubelet 接受通过各种机制(主要是通过 apiserver)提供的一组 PodSpec,并确保这些
PodSpec 中描述的容器处于运行状态且运行状况良好。
kubelet 不管理不是由 Kubernetes 创建的容器。
除了来自 API 服务器的 PodSpec 之外,还可以通过以下两种方式将容器清单(manifest)提供给 kubelet。
文件(File):利用命令行参数传递路径。kubelet 周期性地监视此路径下的文件是否有更新。
监视周期默认为 20s,且可通过参数进行配置。
HTTP 端点(HTTP endpoint):利用命令行参数指定 HTTP 端点。
此端点的监视周期默认为 20 秒,也可以使用参数进行配置。
kubelet [flags]
选项
--address string 默认值:0.0.0.0
kubelet 用来提供服务的 IP 地址(设置为 0.0.0.0
或 ::
表示监听所有接口和 IP 地址族)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--allowed-unsafe-sysctls strings
用逗号分隔的字符串序列设置允许使用的非安全的 sysctls 或 sysctl 模式(以 *
结尾)。
使用此参数时风险自担。(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--anonymous-auth 默认值:true
设置为 true 表示 kubelet 服务器可以接受匿名请求。未被任何认证组件拒绝的请求将被视为匿名请求。
匿名请求的用户名为 system:anonymous
,用户组为 system:unauthenticated
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--authentication-token-webhook
使用 TokenReview
API 对持有者令牌进行身份认证。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--authentication-token-webhook-cache-ttl duration 默认值:2m0s
对 Webhook 令牌认证组件所返回的响应的缓存时间。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--authorization-mode string 默认值: AlwaysAllow
kubelet 服务器的鉴权模式。可选值包括:AlwaysAllow、Webhook。
Webhook 模式使用 SubjectAccessReview API 鉴权。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--authorization-webhook-cache-authorized-ttl duration 默认值:5m0s
对 Webhook 认证组件所返回的 “Authorized(已授权)” 应答的缓存时间。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--authorization-webhook-cache-unauthorized-ttl duration 默认值:30s
对 Webhook 认证组件所返回的 “Unauthorized(未授权)” 应答的缓存时间。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--bootstrap-kubeconfig string
某 kubeconfig 文件的路径,该文件将用于获取 kubelet 的客户端证书。
如果 --kubeconfig
所指定的文件不存在,则使用引导所用 kubeconfig
从 API 服务器请求客户端证书。成功后,将引用生成的客户端证书和密钥的 kubeconfig
写入 --kubeconfig 所指定的路径。客户端证书和密钥文件将存储在 --cert-dir
所指的目录。
--cert-dir string 默认值:/var/lib/kubelet/pki
TLS 证书所在的目录。如果设置了 --tls-cert-file
和 --tls-private-key-file
,
则此标志将被忽略。
--cgroup-driver string 默认值:cgroupfs
kubelet 用来操作本机 cgroup 时使用的驱动程序。支持的选项包括 cgroupfs
和 systemd
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cgroup-root string 默认值:""
可选的选项,为 Pod 设置根 cgroup。容器运行时会尽可能使用此配置。
默认值 ""
意味着将使用容器运行时的默认设置。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cgroups-per-qos 默认值:true
启用创建 QoS cgroup 层次结构。此值为 true 时 kubelet 为 QoS 和 Pod 创建顶级的 cgroup。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--client-ca-file string
如果设置了此参数,则使用对应文件中机构之一检查请求中所携带的客户端证书。
若客户端证书通过身份认证,则其对应身份为其证书中所设置的 CommonName
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cloud-config string
云驱动配置文件的路径。空字符串表示没有配置文件。
已弃用:将在 1.25 或更高版本中移除,以便于从 kubelet 中去除云驱动代码。
--cloud-provider string
云服务的提供者。设置为空字符串表示在没有云驱动的情况下运行,
设置为 'external' 表示使用外部云驱动。
如果设置了此标志,则云驱动负责确定节点的名称(参考云提供商文档以确定是否以及如何使用主机名)。
--cluster-dns strings
DNS 服务器的 IP 地址,以逗号分隔。此标志值用于 Pod 中设置了 “dnsPolicy: ClusterFirst
”
时为容器提供 DNS 服务。注意: :列表中出现的所有 DNS 服务器必须包含相同的记录组,
否则集群中的名称解析可能无法正常工作。至于名称解析过程中会牵涉到哪些 DNS 服务器,
这一点无法保证。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cluster-domain string
集群的域名。如果设置了此值,kubelet 除了将主机的搜索域配置到所有容器之外,还会为其
配置所搜这里指定的域名。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--config string
kubelet 将从此标志所指的文件中加载其初始配置。此路径可以是绝对路径,也可以是相对路径。
相对路径按 kubelet 的当前工作目录起计。省略此参数时 kubelet 会使用内置的默认配置值。
命令行参数会覆盖此文件中的配置。
--config-dir string Default: ''
用于指定插件的目录路径,允许用户通过指定其他配置来覆盖默认值以及 `--config` 标志中指定的内容。
注意 :设置 "KUBELET_CONFIG_DROPIN_DIR_ALPHA
" 环境变量以指定目录。
--container-log-max-files int32 默认值:5
【警告:Beta 特性】设置容器的日志文件个数上限。此值必须大于等于 2。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--container-log-max-size string 默认值:10Mi
【警告:Beta 特性】设置容器日志文件在轮换生成新文件时之前的最大值(例如,10Mi
)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--container-runtime string 默认值:remote
要使用的容器运行时。目前支持 docker、
remote
。
(已弃用:将会在 1.27 版本中移除,因为合法值只有 “remote”)
--container-runtime-endpoint string Default: "unix:///run/containerd/containerd.sock"
远程运行时服务的端点。目前支持 Linux 系统上的 UNIX 套接字和
Windows 系统上的 npipe 和 TCP 端点。例如:
unix:///path/to/runtime.sock
、
npipe:////./pipe/runtime
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--contention-profiling
当启用了性能分析时,启用锁竞争分析。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cpu-cfs-quota 默认值:true
为设置了 CPU 限制的容器启用 CPU CFS 配额保障。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cpu-cfs-quota-period duration 默认值:100ms
设置 CPU CFS 配额周期 cpu.cfs_period_us
。默认使用 Linux 内核所设置的默认值。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cpu-manager-policy string 默认值:none
要使用的 CPU 管理器策略。可选值包括:none
和 static
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cpu-manager-policy-options string
一组用于微调 CPU 管理器策略行为的 key=value 选项。如果未提供,保留默认行为。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--cpu-manager-reconcile-period duration 默认值:10s
【警告:Alpha 特性】设置 CPU 管理器的调和时间。例如:10s
或者 1m
。
如果未设置,默认使用节点状态更新频率。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--enable-controller-attach-detach 默认值:true
启用 Attach/Detach 控制器来挂接和摘除调度到该节点的卷,同时禁用 kubelet 执行挂接和摘除操作。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--enable-debugging-handlers 默认值:true
启用服务器上用于日志收集和在本地运行容器和命令的端点。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--enable-server 默认值:true
启用 kubelet 服务器。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--enforce-node-allocatable strings 默认值:pods
用逗号分隔的列表,包含由 kubelet 强制执行的节点可分配资源级别。
可选配置为:none
、pods
、system-reserved
和 kube-reserved
。
在设置 system-reserved
和 kube-reserved
这两个值时,同时要求设置
--system-reserved-cgroup
和 --kube-reserved-cgroup
这两个参数。
如果设置为 none
,则不需要设置其他参数。
有关更多详细信息,请参阅官方文档。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--event-burst int32 默认值:100
事件记录的个数的突发峰值上限,在遵从 --event-qps
阈值约束的前提下
临时允许事件记录达到此数目。该数字必须大于等于 0。如果为 0,则使用默认突发值(100)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--event-qps int32 默认值:50
QPS 用于限制事件创建的速率。该数字必须大于等于 0。如果为 0,则使用默认 QPS 值(50)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--eviction-hard strings 默认值:imagefs.available<15%,memory.available<100Mi,nodefs.available<10%
触发 Pod 驱逐操作的一组硬性门限(例如:memory.available<1Gi
(内存可用值小于 1G)设置。在 Linux 节点上,默认值还包括
nodefs.inodesFree<5%
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--eviction-max-pod-grace-period int32
响应满足软性驱逐阈值(Soft Eviction Threshold)而终止 Pod 时使用的最长宽限期(以秒为单位)。
如果设置为负数,则遵循 Pod 的指定值。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--eviction-minimum-reclaim strings
当某资源压力过大时,kubelet 将执行 Pod 驱逐操作。
此参数设置软性驱逐操作需要回收的资源的最小数量(例如:imagefs.available=2Gi
)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--eviction-pressure-transition-period duration 默认值:5m0s
kubelet 在驱逐压力状况解除之前的最长等待时间。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--eviction-soft strings
设置一组驱逐阈值(例如:memory.available<1.5Gi
)。
如果在相应的宽限期内达到该阈值,则会触发 Pod 驱逐操作。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--eviction-soft-grace-period strings
设置一组驱逐宽限期(例如,memory.available=1m30s
),对应于触发软性 Pod
驱逐操作之前软性驱逐阈值所需持续的时间长短。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--exit-on-lock-contention
设置为 true 表示当发生锁文件竞争时 kubelet 可以退出。
--experimental-allocatable-ignore-eviction 默认值:false
设置为 true
表示在计算节点可分配资源数量时忽略硬性逐出阈值设置。
参考
相关文档 。
已弃用:将在 1.25 或更高版本中移除。
--experimental-mounter-path string 默认值:mount
[实验性特性] 卷挂载器(mounter)的可执行文件的路径。设置为空表示使用默认挂载器 mount
。
已弃用:将在 1.24 或更高版本移除以支持 CSI。
--fail-swap-on 默认值:true
设置为 true 表示如果主机启用了交换分区,kubelet 将直接失败。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--feature-gates <一个由 “key=true/false” 组成的对偶>
用于 alpha 实验性特性的特性开关组,每个开关以 key=value 形式表示。当前可用开关包括:
APIResponseCompression=true|false (BETA - 默认值为 true)
APISelfSubjectReview=true|false (BETA - 默认值为 true)
APIServerIdentity=true|false (BETA - 默认值为 true)
APIServerTracing=true|false (BETA - 默认值为 true)
APIServingWithRoutine=true|false (BETA - 默认值为 true)
AllAlpha=true|false (ALPHA - 默认值为 false)
AllBeta=true|false (BETA - 默认值为 false)
AnyVolumeDataSource=true|false (BETA - 默认值为 true)
AppArmor=true|false (BETA - 默认值为 true)
AppArmorFields=true|false (BETA - 默认值为 true)
CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
CPUManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
CPUManagerPolicyOptions=true|false (BETA - 默认值为 true)
CRDValidationRatcheting=true|false (BETA - 默认值为 true)
CSIMigrationPortworx=true|false (BETA - 默认值为 false)
CSIVolumeHealth=true|false (ALPHA - 默认值为 false)
CloudControllerManagerWebhook=true|false (ALPHA - 默认值为 false)
ClusterTrustBundle=true|false (ALPHA - 默认值为 false)
ClusterTrustBundleProjection=true|false (ALPHA - 默认值为 false)
ComponentSLIs=true|false (BETA - 默认值为 true)
ConsistentListFromCache=true|false (ALPHA - 默认值为 false)
ContainerCheckpoint=true|false (BETA - 默认值为 true)
ContextualLogging=true|false (BETA - 默认值为 true)
CronJobsScheduledAnnotation=true|false (BETA - 默认值为 true)
CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值为 false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值为 false)
CustomResourceFieldSelectors=true|false (ALPHA - 默认值为 false)
DevicePluginCDIDevices=true|false (BETA - 默认值为 true)
DisableCloudProviders=true|false (BETA - 默认值为 true)
DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值为 true)
DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值为 false)
DynamicResourceAllocation=true|false (ALPHA - 默认值为 false)
ElasticIndexedJob=true|false (BETA - 默认值为 true)
EventedPLEG=true|false (ALPHA - 默认值为 false)
GracefulNodeShutdown=true|false (BETA - 默认值为 true)
GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值为 true)
HPAScaleToZero=true|false (ALPHA - 默认值为 false)
HonorPVReclaimPolicy=true|false (ALPHA - 默认值为 false)
ImageMaximumGCAge=true|false (BETA - 默认值为 true)
InPlacePodVerticalScaling=true|false (ALPHA - 默认值为 false)
InTreePluginAWSUnregister=true|false (ALPHA - 默认值为 false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值为 false)
InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值为 false)
InTreePluginGCEUnregister=true|false (ALPHA - 默认值为 false)
InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值为 false)
InTreePluginPortworxUnregister=true|false (ALPHA - 默认值为 false)
InTreePluginvSphereUnregister=true|false (ALPHA - 默认值为 false)
InformerResourceVersion=true|false (ALPHA - 默认值为 false)
JobBackoffLimitPerIndex=true|false (BETA - 默认值为 true)
JobManagedBy=true|false (ALPHA - 默认值为 false)
JobPodFailurePolicy=true|false (BETA - 默认值为 true)
JobPodReplacementPolicy=true|false (BETA - 默认值为 true)
JobSuccessPolicy=true|false (ALPHA - 默认值为 false)
KubeProxyDrainingTerminatingNodes=true|false (BETA - 默认值为 true)
KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值为 false)
KubeletInUserNamespace=true|false (ALPHA - 默认值为 false)
KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值为 false)
KubeletPodResourcesGet=true|false (ALPHA - 默认值为 false)
KubeletSeparateDiskGC=true|false (ALPHA - 默认值为 false)
KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值为 true)
KubeletTracing=true|false (BETA - 默认值为 true)
LoadBalancerIPMode=true|false (BETA - 默认值为 true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值为 false)
LogarithmicScaleDown=true|false (BETA - 默认值为 true)
LoggingAlphaOptions=true|false (ALPHA - 默认值为 false)
LoggingBetaOptions=true|false (BETA - 默认值为 true)
MatchLabelKeysInPodAffinity=true|false (ALPHA - 默认值为 false)
MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值为 true)
MaxUnavailableStatefulSet=true|false (ALPHA - 默认值为 false)
MemoryManager=true|false (BETA - 默认值为 true)
MemoryQoS=true|false (ALPHA - 默认值为 false)
MultiCIDRServiceAllocator=true|false (ALPHA - 默认值为 false)
MutatingAdmissionPolicy=true|false (ALPHA - 默认值为 false)
NFTablesProxyMode=true|false (ALPHA - 默认值为 false)
NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值为 true)
NodeLogQuery=true|false (BETA - 默认值为 false)
NodeSwap=true|false (BETA - 默认值为 true)
OpenAPIEnums=true|false (BETA - 默认值为 true)
PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值为 true)
PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值为 true)
PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值为 false)
PodDeletionCost=true|false (BETA - 默认值为 true)
PodDisruptionConditions=true|false (BETA - 默认值为 true)
PodIndexLabel=true|false (BETA - 默认值为 true)
PodLifecycleSleepAction=true|false (BETA - 默认值为 true)
PodReadyToStartContainersCondition=true|false (BETA - 默认值为 true)
PortForwardWebsockets=true|false (ALPHA - 默认值为 false)
ProcMountType=true|false (ALPHA - 默认值为 false)
QOSReserved=true|false (ALPHA - 默认值为 false)
RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值为 false)
RecursiveReadOnlyMounts=true|false (ALPHA - 默认值为 false)
RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值为 false)
RetryGenerateName=true|false (ALPHA - 默认值为 false)
RotateKubeletServerCertificate=true|false (BETA - 默认值为 true)
RuntimeClassInImageCriApi=true|false (ALPHA - 默认值为 false)
SELinuxMount=true|false (ALPHA - 默认值为 false)
SELinuxMountReadWriteOncePod=true|false (BETA - 默认值为 true)
SchedulerQueueingHints=true|false (BETA - 默认值为 false)
SeparateCacheWatchRPC=true|false (BETA - 默认值为 true)
SeparateTaintEvictionController=true|false (BETA - 默认值为 true)
ServiceAccountTokenJTI=true|false (BETA - 默认值为 true)
ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值为 false)
ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值为 true)
ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值为 true)
ServiceTrafficDistribution=true|false (ALPHA - 默认值为 false)
SidecarContainers=true|false (BETA - default=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值为 true)
StatefulSetAutoDeletePVC=true|false (BETA - 默认值为 true)
StatefulSetStartOrdinal=true|false (BETA - 默认值为 true)
StorageNamespaceIndex=true|false (BETA - 默认值为 true)
StorageVersionAPI=true|false (ALPHA - 默认值为 false)
StorageVersionHash=true|false (BETA - 默认值为 true)
StorageVersionMigrator=true|false (ALPHA - 默认值为 false)
StructuredAuthenticationConfiguration=true|false (BETA - 默认值为 true)
StructuredAuthorizationConfiguration=true|false (BETA - 默认值为 true)
TopologyAwareHints=true|false (BETA - 默认值为 true)
TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
TopologyManagerPolicyOptions=true|false (BETA - 默认值为 true)
TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值为 true)
UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值为 true)
UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值为 false)
UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值为 false)
UserNamespacesSupport=true|false (BETA - 默认值为 false)
VolumeAttributesClass=true|false (ALPHA - 默认值为 false)
VolumeCapacityPriority=true|false (ALPHA - 默认值为 false)
WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值为 false)
WatchList=true|false (ALPHA - 默认值为 false)
WatchListClient=true|false (BETA - 默认值为 false)
WinDSR=true|false (ALPHA - 默认值为 false)
WinOverlay=true|false (BETA - 默认值为 true)
WindowsHostNetwork=true|false (ALPHA - 默认值为 true)
已弃用: 应在 --config
所给的配置文件中进行设置。
(进一步了解 )
--file-check-frequency duration 默认值:20s
检查配置文件中新数据的时间间隔。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--hairpin-mode string 默认值:promiscuous-bridge
设置 kubelet 执行发夹模式(hairpin)网络地址转译的方式。
该模式允许后端端点对其自身服务的访问能够再次经由负载均衡转发回自身。
可选项包括 promiscuous-bridge
、hairpin-veth
和 none
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--healthz-bind-address string 默认值:127.0.0.1
healthz 服务器提供服务所使用的 IP 地址(设置为 0.0.0.0
或 ::
表示监听所有接口和 IP 协议族。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--healthz-port int32 默认值:10248
本地 healthz 端点使用的端口(设置为 0 表示禁用)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
-h, --help
kubelet 操作的帮助命令
--hostname-override string
如果为非空,将使用此字符串而不是实际的主机名作为节点标识。如果设置了
--cloud-provider
,则云驱动将确定节点的名称
(请查阅云服务商文档以确定是否以及如何使用主机名)。
--http-check-frequency duration 默认值:20s
HTTP 服务以获取新数据的时间间隔。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--image-credential-provider-bin-dir string
指向凭据提供组件可执行文件所在目录的路径。
--image-credential-provider-config string
指向凭据提供插件配置文件所在目录的路径。
--image-gc-high-threshold int32 默认值:85
镜像垃圾回收上限。磁盘使用空间达到该百分比时,镜像垃圾回收将持续工作。
值必须在 [0,100] 范围内。要禁用镜像垃圾回收,请设置为 100。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--image-gc-low-threshold int32 默认值:80
镜像垃圾回收下限。磁盘使用空间在达到该百分比之前,镜像垃圾回收操作不会运行。
值必须在 [0,100] 范围内,并且不得大于 --image-gc-high-threshold
的值。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--image-service-endpoint string
远程镜像服务的端点。若未设定则默认情况下使用 --container-runtime-endpoint
的值。目前支持的类型包括在 Linux 系统上的 UNIX 套接字端点和 Windows 系统上的 npipe 和 TCP 端点。
例如:unix:///var/run/dockershim.sock
、npipe:////./pipe/dockershim
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--iptables-masquerade-bit int32 默认值:14
标记数据包将进行 SNAT 的 fwmark 空间位设置。必须在 [0,31] 范围内。
请将此参数与 kube-proxy
中的相应参数匹配。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--keep-terminated-pod-volumes
设置为 true 表示 Pod 终止后仍然保留之前挂载过的卷,常用于调试与卷有关的问题。
已弃用:将未来版本中移除。
--kernel-memcg-notification
若启用,则 kubelet 将与内核中的 memcg 通知机制集成,不再使用轮询的方式来判定
是否 Pod 达到内存驱逐阈值。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--kube-api-burst int32 默认值:100
每秒发送到 API 服务器 的突发请求数量上限。
该数字必须大于或等于 0。如果为 0,则使用默认的突发值(100)。
不包括事件和节点心跳 API,其速率限制由一组不同的标志控制。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--kube-api-content-type string 默认值:application/vnd.kubernetes.protobuf
发送到 apiserver 的请求的内容类型。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--kube-api-qps int32 默认值:50
与 apiserver 通信的每秒查询个数(QPS)。
此值必须 >= 0。如果为 0,则使用默认 QPS(50)。
不包含事件和节点心跳 API,它们的速率限制是由一组不同的标志所控制。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--kube-reserved strings 默认值:<None>
kubernetes 系统预留的资源配置,以一组 <资源名称>=<资源数量>
格式表示。
(例如:cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100'
)。
当前支持 cpu
、memory
和用于根文件系统的 ephemeral-storage
。
请参阅这里 获取更多信息。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--kube-reserved-cgroup string 默认值:""
给出某个顶层 cgroup 绝对名称,该 cgroup 用于管理通过标志 --kube-reserved
为 kubernetes 组件所预留的计算资源。例如:"/kube-reserved"
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--log-text-info-buffer-size string Default: '0'
[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。
默认值零字节表示禁用缓冲机制。
大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。
启用 LoggingAlphaOptions
特性门控来使用它。
(已弃用:应通过 kubelet 的 --config
标志指定的配置文件来设置此参数。
请参阅 kubelet-config-file 了解更多信息。)
--log-text-split-stream
[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。
默认是将单个流写入标准输出。
启用 LoggingAlphaOptions
特性门控以使用它。
(已弃用:应通过 kubelet 的 --config
标志指定的配置文件来设置此参数。
请参阅 kubelet-config-file 了解更多信息。)
--kubeconfig string
kubeconfig 配置文件的路径,指定如何连接到 API 服务器。
提供 --kubeconfig
将启用 API 服务器模式,而省略 --kubeconfig
将启用独立模式。
--kubelet-cgroups string
用于创建和运行 kubelet 的 cgroup 的绝对名称。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--local-storage-capacity-isolation> Default: true
如果此值为 true,将启用本地临时存储隔离。
否则,本地存储隔离功能特性将被禁用。
(已弃用:这个参数应该通过 kubelet 的 --config
标志指定的配置文件来设置。
有关详细信息,请参阅 kubelet-config-file )。
--lock-file string
【警告:Alpha 特性】kubelet 用作锁文件的文件路径。
--log-flush-frequency duration 默认值:5s
两次日志刷新之间的最大秒数(默认值为 5s)。
--log-json-info-buffer-size string 默认值:'0'
[Alpha 特性]在具有拆分输出流的 JSON 格式中,可以将信息消息缓冲一段时间以提高性能。
零字节的默认值禁用缓冲。大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki) 或这些(3M、4G、5Mi、6Gi)的幂。
启用 LoggingAlphaOptions
特性门控来使用此功能。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--log-json-split-stream
[Alpha 特性]以 JSON 格式,将错误消息写入 stderr,将 info 消息写入 stdout。
启用 LoggingAlphaOptions
特性门控来使用此功能。
默认是将单个流写入标准输出。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--logging-format string 默认值:"text"
设置日志格式。允许的格式:json
(由 LoggingBetaOptions
、text
控制)。
(已弃用:此参数应通过 kubelet 的 --config
标志指定的配置文件设置。
请参阅 kubelet-config-file 了解更多信息。)
--make-iptables-util-chains 默认值:true
设置为 true 表示 kubelet 将确保 iptables
规则在主机上存在。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--manifest-url string
用于访问要运行的其他 Pod 规范的 URL。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--manifest-url-header strings
取值为由 HTTP 头部组成的逗号分隔列表,在访问 --manifest-url
所给出的 URL 时使用。
名称相同的多个头部将按所列的顺序添加。该参数可以多次使用。例如:
--manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful'
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--master-service-namespace string 默认值:default
kubelet 向 Pod 注入 Kubernetes 主控服务信息时使用的命名空间。
已弃用:此标志将在未来的版本中删除。
--max-open-files int 默认值:1000000
kubelet 进程可以打开的最大文件数量。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--max-pods int32 默认值:110
此 kubelet 能运行的 Pod 最大数量。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--maximum-dead-containers int32 默认值:-1
设置全局可保留的已停止容器实例个数上限。
每个实例会占用一些磁盘空间。要禁用,可设置为负数。
已弃用:改用 --eviction-hard
或 --eviction-soft
。
此标志将在未来的版本中删除。
--maximum-dead-containers-per-container int32 默认值:1
每个已停止容器可以保留的的最大实例数量。每个容器占用一些磁盘空间。
已弃用:改用 --eviction-hard
或 --eviction-soft
。
此标志将在未来的版本中删除。
--memory-manager-policy string 默认值:None
内存管理器策略使用。可选值:None
、Static
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--minimum-container-ttl-duration duration
已结束的容器在被垃圾回收清理之前的最少存活时间。
例如:300ms
、10s
或者 2h45m
。
已弃用:请改用 --eviction-hard
或者 --eviction-soft
。
此标志将在未来的版本中删除。
--minimum-image-ttl-duration duration 默认值:2m0s
已结束的容器在被垃圾回收清理之前的最少存活时间。
例如:300ms
、10s
或者 2h45m
。
已弃用:这个参数应该通过 kubelet 的 --config
标志指定的配置文件来设置。
(进一步了解 )
--node-ip string
节点的 IP 地址(或逗号分隔的双栈 IP 地址)。
如果未设置,kubelet 将使用节点的默认 IPv4 地址(如果有)或默认 IPv6 地址(如果它没有 IPv4 地址)。
你可以传值 ::
使其偏向于默认的 IPv6 地址而不是默认的 IPv4 地址。
--node-labels <key=value pairs>
【警告:Alpha 特性】kubelet 在集群中注册本节点时设置的标签。标签以
key=value
的格式表示,多个标签以逗号分隔。名字空间 kubernetes.io
中的标签必须以 kubelet.kubernetes.io
或 node.kubernetes.io
为前缀,
或者在以下明确允许范围内:
beta.kubernetes.io/arch
, beta.kubernetes.io/instance-type
,
beta.kubernetes.io/os
, failure-domain.beta.kubernetes.io/region
,
failure-domain.beta.kubernetes.io/zone
, kubernetes.io/arch
,
kubernetes.io/hostname
, kubernetes.io/os
,
node.kubernetes.io/instance-type
, topology.kubernetes.io/region
,
topology.kubernetes.io/zone
。
--node-status-max-images int32 默认值:50
在 node.status.images
中可以报告的最大镜像数量。如果指定为 -1,则不设上限。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--node-status-update-frequency duration 默认值:10s
指定 kubelet 向主控节点汇报节点状态的时间间隔。注意:更改此常量时请务必谨慎,
它必须与节点控制器中的 nodeMonitorGracePeriod
一起使用。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--oom-score-adj int32 默认值:-999
kubelet 进程的 oom-score-adj 参数值。有效范围为 [-1000,1000]
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--pod-cidr string
用于给 Pod 分配 IP 地址的 CIDR 地址池,仅在独立运行模式下使用。
在集群模式下,CIDR 设置是从主服务器获取的。对于 IPv6,分配的 IP 的最大数量为 65536。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--pod-infra-container-image string
默认值: registry.k8s.io/pause:3.9
所指定的镜像不会被镜像垃圾收集器删除。
CRI 实现有自己的配置来设置此镜像。
(已弃用:将在 1.27 中删除,镜像垃圾收集器将从 CRI 获取沙箱镜像信息。)
--pod-manifest-path string
设置包含要运行的静态 Pod 的文件的路径,或单个静态 Pod 文件的路径。以点(.
)
开头的文件将被忽略。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--pod-max-pids int 默认值:-1
设置每个 Pod 中的最大进程数目。如果为 -1,则 kubelet 使用节点可分配的 PID 容量作为默认值。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--pods-per-core int32
kubelet 在每个处理器核上可运行的 Pod 数量。此 kubelet 上的 Pod 总数不能超过
--max-pods
标志值。因此,如果此计算结果导致在 kubelet
上允许更多数量的 Pod,则使用 --max-pods
值。值为 0 表示不作限制。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--port int32 默认值:10250
kubelet 服务监听的本机端口号。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--protect-kernel-defaults
设置 kubelet 的默认内核调整行为。如果已设置该参数,当任何内核可调参数与
kubelet 默认值不同时,kubelet 都会出错。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--provider-id string
设置主机数据库(即,云驱动)中用来标识节点的唯一标识。
--qos-reserved string
【警告:Alpha 特性】设置在指定的 QoS 级别预留的 Pod 资源请求,以一组
"资源名称=百分比"
的形式进行设置,例如 memory=50%
。
当前仅支持内存(memory)。要求启用 QOSReserved
特性门控。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--read-only-port int32 默认值:10255
kubelet 可以在没有身份验证/鉴权的情况下提供只读服务的端口(设置为 0 表示禁用)。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--register-node 默认值:true
向 API 服务器注册节点,如果未提供 --kubeconfig
,此标志无关紧要,
因为 kubelet 没有 API 服务器可注册。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--register-schedulable 默认值:true
注册本节点为可调度的节点。当 --register-node
标志为 false 时此设置无效。
已弃用:此参数将在未来的版本中删除。
--register-with-taints string
设置本节点的污点标记,格式为 <key>=<value>:<effect>
,
以逗号分隔。当 --register-node
为 false 时此标志无效。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--registry-burst int32 默认值:10
设置突发性镜像拉取的个数上限,在不超过 --registration-qps
设置值的前提下
暂时允许此参数所给的镜像拉取个数。仅在 --registry-qps
大于 0 时使用。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--registry-qps int32 默认值:5
如此值大于 0,可用来限制镜像仓库的 QPS 上限。设置为 0,表示不受限制。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--reserved-cpus string
用逗号分隔的一组 CPU 或 CPU 范围列表,给出为系统和 Kubernetes 保留使用的 CPU。
此列表所给出的设置优先于通过 --system-reserved
和
--kube-reskube-reserved
所保留的 CPU 个数配置。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--reserved-memory string
以逗号分隔的 NUMA 节点内存预留列表。(例如 --reserved-memory 0:memory=1Gi,hugepages-1M=2Gi --reserved-memory 1:memory=2Gi
)。
每种内存类型的总和应该等于--kube-reserved
、--system-reserved
和--eviction-threshold之和 代码>。
了解更多详细信息。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--resolv-conf string 默认值:/etc/resolv.conf
名字解析服务的配置文件名,用作容器 DNS 解析配置的基础。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--root-dir string 默认值:/var/lib/kubelet
设置用于管理 kubelet 文件的根目录(例如挂载卷的相关文件等)。
--rotate-certificates
设置当客户端证书即将过期时 kubelet 自动从
kube-apiserver
请求新的证书进行轮换。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--rotate-server-certificates
当 kubelet 的服务证书即将过期时自动从 kube-apiserver 请求新的证书进行轮换。
要求启用 RotateKubeletServerCertificate
特性门控,以及对提交的
CertificateSigningRequest
对象进行批复(Approve)操作。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--runonce
设置为 true
表示从本地清单或远程 URL 创建完 Pod 后立即退出 kubelet 进程。
与 --enable-server
标志互斥。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--runtime-cgroups string
设置用于创建和运行容器运行时的 cgroup 的绝对名称。
--runtime-request-timeout duration 默认值:2m0s
设置除了长时间运行的请求(包括 pull
、logs
、exec
和 attach
等操作)之外的其他运行时请求的超时时间。
到达超时时间时,请求会被取消,抛出一个错误并会等待重试。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--seccomp-default
启用 RuntimeDefault
作为所有工作负载的默认 seccomp 配置文件。
--serialize-image-pulls 默认值:true
逐一拉取镜像。建议 *不要* 在 docker 守护进程版本低于 1.9 或启用了 Aufs 存储后端的节点上
更改默认值。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--streaming-connection-idle-timeout duration 默认值:4h0m0s
设置流连接在自动关闭之前可以空闲的最长时间。0 表示没有超时限制。
例如:5m
。
注意:与 kubelet 服务器的所有连接最长持续时间为 4 小时。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--sync-frequency duration 默认值:1m0s
在运行中的容器与其配置之间执行同步操作的最长时间间隔。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--system-cgroups string
此标志值为一个 cgroup 的绝对名称,用于所有尚未放置在根目录下某 cgroup 内的非内核进程。
空值表示不指定 cgroup。回滚该参数需要重启机器。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--system-reserved string 默认值:无
系统预留的资源配置,以一组 资源名称=资源数量
的格式表示,
(例如:cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100'
)。
目前仅支持 cpu
和 memory
的设置。
更多细节可参考
相关文档 。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--system-reserved-cgroup string 默认值:""
此标志给出一个顶层 cgroup 绝对名称,该 cgroup 用于管理非 kubernetes 组件,
这些组件的计算资源通过 --system-reserved
标志进行预留。
例如 "/system-reserved"
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--tls-cert-file string
包含 x509 证书的文件路径,用于 HTTPS 认证。
如果有中间证书,则中间证书要串接在在服务器证书之后。
如果未提供 --tls-cert-file
和 --tls-private-key-file
,
kubelet 会为公开地址生成自签名证书和密钥,并将其保存到通过
--cert-dir
指定的目录中。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--tls-cipher-suites string
服务器端加密算法列表,以逗号分隔。如果不设置,则使用 Go 语言加密包的默认算法列表。
首选算法:
TLS_AES_128_GCM_SHA256
, TLS_AES_256_GCM_SHA384
, TLS_CHACHA20_POLY1305_SHA256
, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
, TLS_RSA_WITH_AES_128_CBC_SHA
, TLS_RSA_WITH_AES_128_GCM_SHA256
, TLS_RSA_WITH_AES_256_CBC_SHA
, TLS_RSA_WITH_AES_256_GCM_SHA384
不安全算法:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
, TLS_ECDHE_RSA_WITH_RC4_128_SHA
, TLS_RSA_WITH_3DES_EDE_CBC_SHA
, TLS_RSA_WITH_AES_128_CBC_SHA256
, TLS_RSA_WITH_RC4_128_SHA
.
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--tls-min-version string
设置支持的最小 TLS 版本号,可选的版本号包括:VersionTLS10
、
VersionTLS11
、VersionTLS12
和 VersionTLS13
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--tls-private-key-file string
包含与 --tls-cert-file
对应的 x509 私钥文件路径。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--topology-manager-policy string 默认值: 'none'
要使用的拓扑管理器策略,用于微调它们的行为。
可能的取值有:'none'
、'best-effort'
、'restricted'
、'single-numa-node'
。
(已弃用:此参数应通过 kubelet 的 --config
标志指定的配置文件设置。请参阅
kubelet-config-file 了解更多信息。)
--topology-manager-policy-options string
设置拓扑管理策略(Topology Manager policy)。可选值包括:none
、
best-effort
、restricted
和 single-numa-node
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--topology-manager-scope string 默认值:container
拓扑提示信息使用范围。拓扑管理器从提示提供者(Hints Providers)处收集提示信息,
并将其应用到所定义的范围以确保 Pod 准入。
可选值包括:container
(默认)、pod
。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
-v, --v Level
设置 kubelet 日志级别详细程度的数值。
--version version[=true]
打印 kubelet 版本信息并退出;--version=vX.Y.Z...
设置报告的版本。
--vmodule <一个 “pattern=N” 格式的字符串列表>
以逗号分隔的 pattern=N
设置列表,用于文件过滤的日志记录(仅适用于文本日志格式)。
--volume-plugin-dir string 默认值:/usr/libexec/kubernetes/kubelet-plugins/volume/exec/
用来搜索第三方存储卷插件的目录。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
--volume-stats-agg-period duration 默认值:1m0s
指定 kubelet 计算和缓存所有 Pod 和卷的磁盘用量总值的时间间隔。要禁用磁盘用量计算,
可设置为负数。
(已弃用:应在 --config
所给的配置文件中进行设置。
请参阅 kubelet-config-file 了解更多信息。)
13.4 - kube-apiserver
简介
Kubernetes API 服务器验证并配置 API 对象的数据,
这些对象包括 pods、services、replicationcontrollers 等。
API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端,
所有其他组件都通过该前端进行交互。
kube-apiserver [flags]
选项
--admission-control-config-file string
包含准入控制配置的文件。
--advertise-address string
向集群成员通知 apiserver 消息的 IP 地址。
这个地址必须能够被集群中其他成员访问。
如果 IP 地址为空,将会使用 --bind-address,
如果未指定 --bind-address,将会使用主机的默认接口地址。
--aggregator-reject-forwarding-redirect 默认值:true
聚合器拒绝将重定向响应转发回客户端。
--allow-metric-labels stringToString 默认值:[]
允许使用的指标标签到指标值的映射列表。键的格式为 <MetricName>,<LabelName>.
值的格式为 <allowed_value>,<allowed_value>...。
例如:metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'
。
--allow-metric-labels-manifest string
包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels
相同。
请注意,--allow-metric-labels
标志将覆盖清单文件。
--allow-privileged
如果为 true,将允许特权容器。[默认值=false]
--anonymous-auth 默认值:true
启用针对 API 服务器的安全端口的匿名请求。
未被其他身份认证方法拒绝的请求被当做匿名请求。
匿名请求的用户名为 system:anonymous
,
用户组名为 system:unauthenticated。
--api-audiences strings
API 的标识符。
服务帐户令牌验证者将验证针对 API 使用的令牌是否已绑定到这些受众中的至少一个。
如果配置了 --service-account-issuer
标志,但未配置此标志,
则此字段默认为包含发布者 URL 的单个元素列表。
--audit-log-batch-buffer-size int 默认值:10000
批处理和写入事件之前用于缓存事件的缓冲区大小。
仅在批处理模式下使用。
--audit-log-batch-max-size int 默认值:1
每个批次的最大大小。仅在批处理模式下使用。
--audit-log-batch-max-wait duration
强制写入尚未达到最大大小的批次之前要等待的时间。
仅在批处理模式下使用。
--audit-log-batch-throttle-burst int
如果之前未使用 ThrottleQPS,则为同时发送的最大请求数。
仅在批处理模式下使用。
--audit-log-batch-throttle-enable
是否启用了批量限制。仅在批处理模式下使用。
--audit-log-batch-throttle-qps float
每秒的最大平均批次数。仅在批处理模式下使用。
--audit-log-compress
若设置了此标志,则被轮换的日志文件会使用 gzip 压缩。
--audit-log-format string 默认值:"json"
所保存的审计格式。
"legacy" 表示每行一个事件的文本格式。"json" 表示结构化的 JSON 格式。
已知格式为 legacy,json。
--audit-log-maxage int
根据文件名中编码的时间戳保留旧审计日志文件的最大天数。
--audit-log-maxbackup int
要保留的旧的审计日志文件个数上限。
将值设置为 0 表示对文件个数没有限制。
--audit-log-maxsize int
轮换之前,审计日志文件的最大大小(以兆字节为单位)。
--audit-log-mode string 默认值:"blocking"
用来发送审计事件的策略。
阻塞(blocking)表示发送事件应阻止服务器响应。
批处理(batch)会导致后端异步缓冲和写入事件。
已知的模式是批处理(batch),阻塞(blocking),严格阻塞(blocking-strict)。
--audit-log-path string
如果设置,则所有到达 API 服务器的请求都将记录到该文件中。
"-" 表示标准输出。
--audit-log-truncate-enabled
是否启用事件和批次截断。
--audit-log-truncate-max-batch-size int 默认值:10485760
发送到下层后端的每批次的最大数据量。
实际的序列化大小可能会增加数百个字节。
如果一个批次超出此限制,则将其分成几个较小的批次。
--audit-log-truncate-max-event-size int 默认值:102400
发送到下层后端的每批次的最大数据量。
如果事件的大小大于此数字,则将删除第一个请求和响应;
如果这样做没有减小足够大的程度,则将丢弃事件。
--audit-log-version string 默认值:"audit.k8s.io/v1"
用于对写入日志的审计事件执行序列化的 API 组和版本。
--audit-policy-file string
定义审计策略配置的文件的路径。
--audit-webhook-batch-buffer-size int 默认值:10000
划分批次和写入之前用于存储事件的缓冲区大小。
仅在批处理模式下使用。
--audit-webhook-batch-max-size int 默认值:400
批次的最大大小。
仅在批处理模式下使用。
--audit-webhook-batch-max-wait duration 默认值:30s
强制写入尚未达到最大大小的批处理之前要等待的时间。
仅在批处理模式下使用。
--audit-webhook-batch-throttle-burst int 默认值:15
如果之前未使用 ThrottleQPS,同时发送的最大请求数。
仅在批处理模式下使用。
--audit-webhook-batch-throttle-enable 默认值:true
是否启用了批量限制。仅在批处理模式下使用。
--audit-webhook-batch-throttle-qps float32 默认值:10
每秒的最大平均批次数。仅在批处理模式下使用。
--audit-webhook-config-file string
定义审计 webhook 配置的 kubeconfig 格式文件的路径。
--audit-webhook-initial-backoff duration 默认值:10s
重试第一个失败的请求之前要等待的时间。
--audit-webhook-mode string 默认值:"batch"
发送审计事件的策略。
阻止(Blocking)表示发送事件应阻止服务器响应。
批处理(Batch)导致后端异步缓冲和写入事件。
已知的模式是批处理(batch),阻塞(blocking),严格阻塞(blocking-strict)。
--audit-webhook-truncate-enabled
是否启用事件和批处理截断。
--audit-webhook-truncate-max-batch-size int 默认值:10485760
发送到下层后端的批次的最大数据量。
实际的序列化大小可能会增加数百个字节。
如果一个批次超出此限制,则将其分成几个较小的批次。
--audit-webhook-truncate-max-event-size int 默认值:102400
发送到下层后端的批次的最大数据量。
如果事件的大小大于此数字,则将删除第一个请求和响应;
如果事件和事件的大小没有减小到一定幅度,则将丢弃事件。
--audit-webhook-version string 默认值:"audit.k8s.io/v1"
用于序列化写入 Webhook 的审计事件的 API 组和版本。
--authentication-config string
用于配置 JWT 令牌身份认证模块或匿名身份认证模块的身份认证配置文件。注意:此特性自 v1.29 起处于 Alpha 阶段。
需要设置 --feature-gate=StructuredAuthenticationConfiguration=true
才能启用此特性。
此特性与 oidc-*
标志互斥。要配置匿名身份认证模块,
你需要启用 --feature-gate=AnonymousAuthConfigurableEndpoints
。
如果在身份认证配置文件中配置了匿名身份认证模块,就不能使用 --anonymous-auth
标志。
--authentication-token-webhook-cache-ttl duration 2m0s
对来自 Webhook 令牌身份认证模块的响应的缓存时间。
--authentication-token-webhook-config-file string
包含 Webhook 配置的 kubeconfig 格式文件,用于进行令牌认证。
API 服务器将查询远程服务,以对持有者令牌进行身份认证。
--authentication-token-webhook-version string 默认值:"v1beta1"
与 Webhook 之间交换 authentication.k8s.io TokenReview 时使用的 API 版本。
--authorization-config string
用于配置鉴权链的鉴权配置文件。注意:此特性自 v1.29 起处于 Alpha 阶段。
需要将 --feature-gate=StructuredAuthorizationConfiguration=true
特性标志设置为 true 才能启用此特性。
此特性与其他 --authorization-mode和--authorization-webhook-*
标志互斥。
--authorization-mode strings 默认值:"AlwaysAllow"
在安全端口上进行鉴权的插件的顺序列表。
逗号分隔的列表:AlwaysAllow、AlwaysDeny、ABAC、Webhook、RBAC、Node。
--authorization-policy-file string
包含鉴权策略的文件,其内容为分行 JSON 格式,
在安全端口上与 --authorization-mode=ABAC 一起使用。
--authorization-webhook-cache-authorized-ttl duration 默认值:5m0s
对来自 Webhook 鉴权组件的 “授权(authorized)” 响应的缓存时间。
--authorization-webhook-cache-unauthorized-ttl duration 默认值:30s
对来自 Webhook 鉴权模块的 “未授权(unauthorized)” 响应的缓存时间。
--authorization-webhook-config-file string
包含 Webhook 配置的文件,其格式为 kubeconfig,
与 --authorization-mode=Webhook 一起使用。
API 服务器将查询远程服务,以对 API 服务器的安全端口的访问执行鉴权。
--authorization-webhook-version string 默认值:"v1beta1"
与 Webhook 之间交换 authorization.k8s.io SubjectAccessReview 时使用的 API 版本。
--bind-address string 默认值:"0.0.0.0"
用来监听 --secure-port
端口的 IP 地址。
集群的其余部分以及 CLI/web 客户端必须可以访问所关联的接口。
如果为空白或未指定地址(0.0.0.0 或 :: ),则将使用所有接口和 IP 地址簇。
--cert-dir string 默认值:"/var/run/kubernetes"
TLS 证书所在的目录。
如果提供了 --tls-cert-file
和 --tls-private-key-file
标志值,则将忽略此标志。
--client-ca-file string
如果已设置,则使用与客户端证书的 CommonName 对应的标识对任何出示由
client-ca 文件中的授权机构之一签名的客户端证书的请求进行身份认证。
--contention-profiling
如果启用了性能分析,则启用阻塞分析。
--cors-allowed-origins strings
CORS 允许的来源清单,以逗号分隔。
允许的来源可以是支持子域匹配的正则表达式。
如果此列表为空,则不会启用 CORS。
请确保每个表达式与整个主机名相匹配,方法是用'^'锚定开始或包括'//'前缀,同时用'$'锚定结束或包括':'端口分隔符后缀。
有效表达式的例子是'//example.com(:|$)'和'^https://example.com(:|$)'。
--debug-socket-path string
使用位于给定路径的、未受保护的(无身份认证或鉴权的)UNIX 域套接字执行性能分析。
--default-not-ready-toleration-seconds int 默认值:300
对污点 NotReady:NoExecute 的容忍时长(以秒计)。
默认情况下这一容忍度会被添加到尚未具有此容忍度的每个 pod 中。
--default-unreachable-toleration-seconds int 默认值:300
对污点 Unreachable:NoExecute 的容忍时长(以秒计)
默认情况下这一容忍度会被添加到尚未具有此容忍度的每个 pod 中。
--delete-collection-workers int 默认值:1
为 DeleteCollection 调用而产生的工作线程数。
这些用于加速名字空间清理。
--disable-admission-plugins strings
尽管位于默认启用的插件列表中,仍须被禁用的准入插件(NamespaceLifecycle、LimitRanger、
ServiceAccount、TaintNodesByCondition、PodSecurity、Priority、DefaultTolerationSeconds、
DefaultStorageClass、StorageObjectInUseProtection、PersistentVolumeClaimResize、
RuntimeClass、CertificateApproval、CertificateSigning、ClusterTrustBundleAttest、
CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、
ValidatingAdmissionPolicy、ValidatingAdmissionWebhook、ResourceQuota)。
取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、
CertificateSigning、CertificateSubjectRestriction、ClusterTrustBundleAttest、
DefaultIngressClass、DefaultStorageClass、DefaultTolerationSeconds、DenyServiceExternalIPs、
EventRateLimit、ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、
LimitRanger、MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、
NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、
PodNodeSelector、PodSecurity、PodTolerationRestriction、Priority、ResourceQuota、RuntimeClass、ServiceAccount、
StorageObjectInUseProtection、TaintNodesByCondition、ValidatingAdmissionPolicy、ValidatingAdmissionWebhook。
该标志中插件的顺序无关紧要。
--disable-http2-serving
如果为 true,HTTP2 服务将被禁用 [默认值=false]
--disabled-metrics strings
此标志为行为不正确的度量指标提供一种处理方案。
你必须提供完全限定的指标名称才能将其禁止。
声明:禁用度量值的行为优先于显示已隐藏的度量值。
--egress-selector-config-file string
带有 API 服务器出站选择器配置的文件。
--emulated-version strings
不同组件所模拟的能力(API、特性等)的版本。
如果设置了该选项,组件将模拟此版本的行为,而不是下层可执行文件版本的行为。
版本格式只能是 major.minor,例如 “--emulated-version=wardle=1.2,kube=1.31”。
选项包括: kube=1.31..1.31(默认值=1.31)。如果组件未被指定,默认为 “kube”。
--enable-admission-plugins strings
除了默认启用的插件(NamespaceLifecycle、LimitRanger、ServiceAccount、TaintNodesByCondition、
PodSecurity、Priority、DefaultTolerationSeconds、DefaultStorageClass、StorageObjectInUseProtection、
PersistentVolumeClaimResize、RuntimeClass、CertificateApproval、CertificateSigning、ClusterTrustBundleAttest、
CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、ValidatingAdmissionPolicy、
ValidatingAdmissionWebhook、ResourceQuota)之外要启用的准入插件。
取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、
CertificateSigning、CertificateSubjectRestriction、ClusterTrustBundleAttest、DefaultIngressClass、
DefaultStorageClass、DefaultTolerationSeconds、DenyServiceExternalIPs、EventRateLimit、
ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、LimitRanger、
MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、
NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、
PodNodeSelector、PodSecurity、PodTolerationRestriction、Priority、
ResourceQuota、RuntimeClass、ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、
ValidatingAdmissionPolicy、ValidatingAdmissionWebhook。该标志中插件的顺序无关紧要。
--enable-aggregator-routing
允许聚合器将请求路由到端点 IP 而非集群 IP。
--enable-bootstrap-token-auth
启用以允许将 "kube-system" 名字空间中类型为 "bootstrap.kubernetes.io/token"
的 Secret 用于 TLS 引导身份认证。
--enable-garbage-collector 默认值:true
启用通用垃圾收集器。必须与 kube-controller-manager 的相应标志同步。
--enable-priority-and-fairness 默认值:true
如果为 true,则使用增强的处理程序替换 max-in-flight 处理程序,
以便根据优先级和公平性完成排队和调度。
--encryption-provider-config string
包含加密提供程序配置信息的文件,用在 etcd 中所存储的 Secret 上。
--encryption-provider-config-automatic-reload
确定由 --encryption-provider-config 设置的文件是否应在磁盘内容更改时自动重新加载。
将此标志设置为 true 将禁用通过 API 服务器 healthz 端点来唯一地标识不同 KMS 插件的能力。
--endpoint-reconciler-type string 默认值:"lease"
使用端点协调器(master-count
、lease
或 none
)。
master-count
已弃用,并将在未来版本中删除。
--etcd-cafile string
用于保护 etcd 通信的 SSL 证书颁发机构文件。
--etcd-certfile string
用于保护 etcd 通信的 SSL 证书文件。
--etcd-compaction-interval duration 默认值:5m0s
压缩请求的间隔。
如果为0,则禁用来自 API 服务器的压缩请求。
--etcd-count-metric-poll-period duration 默认值:1m0s
针对每种类型的资源数量轮询 etcd 的频率。
0 值表示禁用度量值收集。
--etcd-db-metric-poll-interval duration 默认值:30s
轮询 etcd 和更新度量值的请求间隔。0 值表示禁用度量值收集。
--etcd-healthcheck-timeout duration
检查 etcd 健康状况时使用的超时时长。
--etcd-keyfile string
用于保护 etcd 通信的 SSL 密钥文件。
--etcd-prefix string 默认值:"/registry"
要在 etcd 中所有资源路径之前添加的前缀。
--etcd-readycheck-timeout 时长 默认值: 2s
检查 etcd 是否就绪时使用的超时
--etcd-servers strings
要连接的 etcd 服务器列表(scheme://ip:port
),以逗号分隔。
--etcd-servers-overrides strings
etcd 服务器针对每个资源的重载设置,以逗号分隔。
单个替代格式:组/资源#服务器(group/resource#servers),
其中服务器是 URL,以分号分隔。
注意,此选项仅适用于编译进此服务器二进制文件的资源。
--event-ttl duration 默认值:1h0m0s
事件的保留时长。
--external-hostname string
为此主机生成外部化 UR L时要使用的主机名(例如 Swagger API 文档或 OpenID 发现)。
--feature-gates <
逗号分隔的 'key=True|False' 键值对>
--feature-gates colonSeparatedMultimapStringString
逗号分隔的组件列表,这些 key=value 对用来描述不同组件测试性/试验性特性的特性门控。
如果组件未被指定,默认值为“kube”。此标志可以被重复调用。例如:
--feature-gates 'wardle:featureA=true,wardle:featureB=false' --feature-gates 'kube:featureC=true'
可选项为:
kube:APIResponseCompression=true|false (BETA - 默认值=true)
kube:APIServerIdentity=true|false (BETA - 默认值=true)
kube:APIServerTracing=true|false (BETA - 默认值=true)
kube:APIServingWithRoutine=true|false (ALPHA - 默认值=false)
kube:AllAlpha=true|false (ALPHA - 默认值=false)
kube:AllBeta=true|false (BETA - 默认值=false)
kube:AnonymousAuthConfigurableEndpoints=true|false (ALPHA - 默认值=false)
kube:AnyVolumeDataSource=true|false (BETA - 默认值=true)
kube:AuthorizeNodeWithSelectors=true|false (ALPHA - 默认值=false)
kube:AuthorizeWithSelectors=true|false (ALPHA - 默认值=false)
kube:CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
kube:CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
kube:CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
kube:CRDValidationRatcheting=true|false (BETA - 默认值=true)
kube:CSIMigrationPortworx=true|false (BETA - 默认值=true)
kube:CSIVolumeHealth=true|false (ALPHA - 默认值=false)
kube:CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
kube:ClusterTrustBundle=true|false (ALPHA - 默认值=false)
kube:ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
kube:ComponentSLIs=true|false (BETA - 默认值=true)
kube:ConcurrentWatchObjectDecode=true|false (BETA - 默认值=false)
kube:ConsistentListFromCache=true|false (BETA - 默认值=true)
kube:ContainerCheckpoint=true|false (BETA - 默认值=true)
kube:ContextualLogging=true|false (BETA - 默认值=true)
kube:CoordinatedLeaderElection=true|false (ALPHA - 默认值=false)
kube:CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
kube:CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
kube:CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
kube:CustomResourceFieldSelectors=true|false (BETA - 默认值=true)
kube:DRAControlPlaneController=true|false (ALPHA - 默认值=false)
kube:DisableAllocatorDualWrite=true|false (ALPHA - 默认值=false)
kube:DisableNodeKubeProxyVersion=true|false (BETA - 默认值=true)
kube:DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
kube:EventedPLEG=true|false (ALPHA - 默认值=false)
kube:GracefulNodeShutdown=true|false (BETA - 默认值=true)
kube:GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
kube:HPAScaleToZero=true|false (ALPHA - 默认值=false)
kube:HonorPVReclaimPolicy=true|false (BETA - 默认值=true)
kube:ImageMaximumGCAge=true|false (BETA - 默认值=true)
kube:ImageVolume=true|false (ALPHA - 默认值=false)
kube:InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
kube:InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
kube:InformerResourceVersion=true|false (ALPHA - 默认值=false)
kube:JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
kube:JobManagedBy=true|false (ALPHA - 默认值=false)
kube:JobPodReplacementPolicy=true|false (BETA - 默认值=true)
kube:JobSuccessPolicy=true|false (BETA - 默认值=true)
kube:KubeletCgroupDriverFromCRI=true|false (BETA - 默认值=true)
kube:KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
kube:KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
kube:KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
kube:KubeletSeparateDiskGC=true|false (BETA - 默认值=true)
kube:KubeletTracing=true|false (BETA - 默认值=true)
kube:LoadBalancerIPMode=true|false (BETA - 默认值=true)
kube:LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (BETA - 默认值=false)
kube:LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
kube:LoggingBetaOptions=true|false (BETA - 默认值=true)
kube:MatchLabelKeysInPodAffinity=true|false (BETA - 默认值=true)
kube:MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
kube:MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
kube:MemoryManager=true|false (BETA - 默认值=true)
kube:MemoryQoS=true|false (ALPHA - 默认值=false)
kube:MultiCIDRServiceAllocator=true|false (BETA - 默认值=false)
kube:MutatingAdmissionPolicy=true|false (ALPHA - 默认值=false)
kube:NFTablesProxyMode=true|false (BETA - 默认值=true)
kube:NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
kube:NodeLogQuery=true|false (BETA - 默认值=false)
kube:NodeSwap=true|false (BETA - 默认值=true)
kube:OpenAPIEnums=true|false (BETA - 默认值=true)
kube:PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
kube:PodDeletionCost=true|false (BETA - 默认值=true)
kube:PodIndexLabel=true|false (BETA - 默认值=true)
kube:PodLifecycleSleepAction=true|false (BETA - 默认值=true)
kube:PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
kube:PortForwardWebsockets=true|false (BETA - 默认值=true)
kube:ProcMountType=true|false (BETA - 默认值=false)
kube:QOSReserved=true|false (ALPHA - 默认值=false)
kube:RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
kube:RecursiveReadOnlyMounts=true|false (BETA - 默认值=true)
kube:RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值=false)
kube:ReloadKubeletServerCertificateFile=true|false (BETA - 默认值=true)
kube:ResilientWatchCacheInitialization=true|false (BETA - 默认值=true)
kube:ResourceHealthStatus=true|false (ALPHA - 默认值=false)
kube:RetryGenerateName=true|false (BETA - 默认值=true)
kube:RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
kube:RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
kube:SELinuxMount=true|false (ALPHA - 默认值=false)
kube:SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
kube:SchedulerQueueingHints=true|false (BETA - 默认值=false)
kube:SeparateCacheWatchRPC=true|false (BETA - 默认值=true)
kube:SeparateTaintEvictionController=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenJTI=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenNodeBinding=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值=true)
kube:ServiceTrafficDistribution=true|false (BETA - 默认值=true)
kube:SidecarContainers=true|false (BETA - 默认值=true)
kube:SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
kube:StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
kube:StorageNamespaceIndex=true|false (BETA - 默认值=true)
kube:StorageVersionAPI=true|false (ALPHA - 默认值=false)
kube:StorageVersionHash=true|false (BETA - 默认值=true)
kube:StorageVersionMigrator=true|false (ALPHA - 默认值=false)
kube:StrictCostEnforcementForVAP=true|false (BETA - 默认值=false)
kube:StrictCostEnforcementForWebhooks=true|false (BETA - 默认值=false)
kube:StructuredAuthenticationConfiguration=true|false (BETA - 默认值=true)
kube:StructuredAuthorizationConfiguration=true|false (BETA - 默认值=true)
kube:SupplementalGroupsPolicy=true|false (ALPHA - 默认值=false)
kube:TopologyAwareHints=true|false (BETA - 默认值=true)
kube:TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
kube:TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
kube:TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
kube:TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值=true)
kube:UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
kube:UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
kube:UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
kube:UserNamespacesSupport=true|false (BETA - 默认值=false)
kube:VolumeAttributesClass=true|false (BETA - 默认值=false)
kube:VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
kube:WatchCacheInitializationPostStartHook=true|false (BETA - 默认值=false)
kube:WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值=false)
kube:WatchList=true|false (ALPHA - 默认值=false)
kube:WatchListClient=true|false (BETA - 默认值=false)
kube:WinDSR=true|false (ALPHA - 默认值=false)
kube:WinOverlay=true|false (BETA - 默认值=true)
kube:WindowsHostNetwork=true|false (ALPHA - 默认值=true)
--goaway-chance float
为防止 HTTP/2 客户端卡在单个 API 服务器上,随机关闭某连接(GOAWAY)。
客户端的其他运行中请求不会受到影响。被关闭的客户端将重新连接,
重新被负载均衡后可能会与其他 API 服务器开始通信。
此参数设置将被发送 GOAWAY 指令的请求的比例。
只有一个 API 服务器或不使用负载均衡器的集群不应启用此特性。
最小值为 0(关闭),最大值为 .02(1/50 请求);建议使用 .001(1/1000)。
-h, --help
kube-apiserver 的帮助命令
--http2-max-streams-per-connection int
服务器为客户端提供的 HTTP/2 连接中最大流数的限制。
零表示使用 GoLang 的默认值。
--kubelet-certificate-authority string
证书颁发机构的证书文件的路径。
--kubelet-client-certificate string
TLS 的客户端证书文件的路径。
--kubelet-client-key string
TLS 客户端密钥文件的路径。
--kubelet-preferred-address-types strings 默认值:Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP
用于 kubelet 连接的首选 NodeAddressTypes 列表。
--kubelet-timeout duration 默认值:5s
kubelet 操作超时时间。
--kubernetes-service-node-port int
如果非零,那么 Kubernetes 主服务(由 apiserver 创建/维护)将是 NodePort 类型,
使用此字段值作为端口值。
如果为零,则 Kubernetes 主服务将为 ClusterIP 类型。
--lease-reuse-duration-seconds int 默认值:60
每个租约被重用的时长。
如果此值比较低,可以避免大量对象重用此租约。
注意,如果此值过小,可能导致存储层出现性能问题。
--livez-grace-period duration
此选项代表 API 服务器完成启动序列并生效所需的最长时间。
从 API 服务器的启动时间到这段时间为止,
/livez 将假定未完成的启动后钩子将成功完成,因此返回 true。
--log-flush-frequency duration 默认值:5s
两次日志刷新之间的最大秒数。
--log-text-info-buffer-size quantity
[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。
默认值零字节表示禁用缓冲区机制。
大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。
启用 LoggingAlphaOptions 特性门控以使用此功能。
--log-text-split-stream
[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。
默认是将单个流写入标准输出。
启用 LoggingAlphaOptions 特性门控以使用它。
--logging-format string 默认值:"text"
设置日志格式。允许的格式:"text"。
--master-service-namespace string 默认值:"default"
已废弃:应该从其中将 Kubernetes 主服务注入到 Pod 中的名字空间。
--max-connection-bytes-per-sec int
如果不为零,则将每个用户连接的带宽限制为此数值(字节数/秒)。
当前仅适用于长时间运行的请求。
--max-mutating-requests-inflight int 默认值:200
如果 --enable-priority-and-fairness 为 true,那么此值和 --max-requests-inflight
的和将确定服务器的总并发限制(必须是正数)。
否则,该值限制同时运行的变更类型的请求的个数上限。0 表示无限制。
--max-requests-inflight int 默认值:400
如果 --enable-priority-and-fairness 为 true,那么此值和 --max-mutating-requests-inflight
的和将确定服务器的总并发限制(必须是正数)。
否则,该值限制进行中非变更类型请求的最大个数,零表示无限制。
--min-request-timeout int 默认值:1800
可选字段,表示处理程序在请求超时前,必须保持连接处于打开状态的最小秒数。
当前只对监听(Watch)请求的处理程序有效。
Watch 请求的处理程序会基于这个值选择一个随机数作为连接超时值,
以达到分散负载的目的。
--oidc-ca-file string
如果设置该值,将会使用 oidc-ca-file 中的机构之一对 OpenID 服务的证书进行验证,
否则将会使用主机的根 CA 对其进行验证。
--oidc-client-id string
OpenID 连接客户端的要使用的客户 ID,如果设置了 oidc-issuer-url,则必须设置这个值。
--oidc-groups-claim string
如果提供该值,这个自定义 OpenID 连接声明将被用来设定用户组。
该声明值需要是一个字符串或字符串数组。
此标志为实验性的,请查阅身份认证相关文档进一步了解详细信息。
--oidc-groups-prefix string
如果提供了此值,则所有组都将以该值作为前缀,以防止与其他身份认证策略冲突。
--oidc-issuer-url string
OpenID 颁发者 URL,只接受 HTTPS 方案。
如果设置该值,它将被用于验证 OIDC JSON Web Token(JWT)。
--oidc-required-claim <逗号分隔的 'key=value' 键值对列表>
描述 ID 令牌中必需声明的键值对。
如果设置此值,则会验证 ID 令牌中存在与该声明匹配的值。
重复此标志以指定多个声明。
--oidc-signing-algs strings 默认值:RS256
允许的 JOSE 非对称签名算法的逗号分隔列表。
具有收支持 "alg" 标头值的 JWTs 有:RS256、RS384、RS512、ES256、ES384、ES512、PS256、PS384、PS512。
取值依据 RFC 7518 https://tools.ietf.org/html/rfc7518#section-3.1 定义。
--oidc-username-claim string 默认值:"sub"
要用作用户名的 OpenID 声明。
请注意,除默认声明("sub")以外的其他声明不能保证是唯一且不可变的。
此标志是实验性的,请参阅身份认证文档以获取更多详细信息。
--oidc-username-prefix string
如果提供,则所有用户名都将以该值作为前缀。
如果未提供,则除 "email" 之外的用户名声明都会添加颁发者 URL 作为前缀,以避免冲突。
要略过添加前缀处理,请设置值为 "-"。
--peer-advertise-ip string
如果设置并启用了 UnknownVersionInteroperabilityProxy 特性门控,
当请求由于 kube-apiservers 之间的版本偏差而无法被处理时,
此 IP 将由对等 kube-apiserver 用于代理请求到该 kube-apiserver。
此标志仅被用于配置了多个 kube-apiserver 以实现高可用性的集群中。
--peer-advertise-port string
如果设置并且启用了 UnknownVersionInteroperabilityProxy 特性门控,
当请求由于 kube-apiservers 之间的版本偏差导致对等方无法被处理时,
此端口将由对等 kube-apiserver 用于代理请求到该 kube-apiserver。
此标志仅被用于配置了多个 kube-apiserver 以实现高可用性的集群中。
--peer-ca-file string
如果设置并启用了 UnknownVersionInteroperabilityProxy 特性门控,
此文件将被用于验证对等 kube-apiserver 的服务证书。
此标志仅被用于配置了多个 kube-apiserver 以实现高可用性的集群中。
--permit-address-sharing
若此标志为 true,则使用 SO_REUSEADDR 来绑定端口。
这样设置可以同时绑定到用通配符表示的类似 0.0.0.0 这种 IP 地址,
以及特定的 IP 地址。也可以避免等待内核释放 TIME_WAIT 状态的套接字。[默认值=false]
--permit-port-sharing
如果为 true,则在绑定端口时将使用 SO_REUSEPORT ,
这样多个实例可以绑定到同一地址和端口上。[默认值=false]
--profiling 默认值:true
通过 Web 接口 host:port/debug/pprof/
启用性能分析。
--proxy-client-cert-file string
当必须调用外部程序以处理请求时,用于证明聚合器或者 kube-apiserver 的身份的客户端证书。
包括代理转发到用户 api-server 的请求和调用 Webhook 准入控制插件的请求。
Kubernetes 期望此证书包含来自于 --requestheader-client-ca-file 标志中所给 CA 的签名。
该 CA 在 kube-system 命名空间的 "extension-apiserver-authentication" ConfigMap 中公开。
从 kube-aggregator 收到调用的组件应该使用该 CA 进行各自的双向 TLS 验证。
--proxy-client-key-file string
当必须调用外部程序来处理请求时,用来证明聚合器或者 kube-apiserver 的身份的客户端私钥。
这包括代理转发给用户 api-server 的请求和调用 Webhook 准入控制插件的请求。
--request-timeout duration 默认值:1m0s
可选字段,指示处理程序在超时之前必须保持打开请求的持续时间。
这是请求的默认请求超时,但对于特定类型的请求,可能会被
--min-request-timeout
等标志覆盖。
--requestheader-allowed-names strings
此值为客户端证书通用名称(Common Name)的列表;表中所列的表项可以用来提供用户名,
方式是使用 --requestheader-username-headers
所指定的头部。
如果为空,能够通过 --requestheader-client-ca-file
中机构
认证的客户端证书都是被允许的。
--requestheader-client-ca-file string
在信任请求头中以 --requestheader-username-headers
指示的用户名之前,
用于验证接入请求中客户端证书的根证书包。
警告:一般不要假定传入请求已被授权。
--requestheader-extra-headers-prefix strings
用于查验请求头部的前缀列表。建议使用 X-Remote-Extra-
。
--requestheader-group-headers strings
用于查验用户组的请求头部列表。建议使用 X-Remote-Group
。
--requestheader-username-headers strings
用于查验用户名的请求头部字段列表。建议使用 X-Remote-User
。
--runtime-config <逗号分隔的 'key=value' 对列表>
一组启用或禁用内置 API 的键值对。支持的选项包括:
v1=true|false(针对核心 API 组)
<group>/<version>=true|false(针对特定 API 组和版本,例如:apps/v1=true)
api/all=true|false 控制所有 API 版本
api/ga=true|false 控制所有 v[0-9]+ API 版本
api/beta=true|false 控制所有 v[0-9]+beta[0-9]+ API 版本
api/alpha=true|false 控制所有 v[0-9]+alpha[0-9]+ API 版本
api/legacy 已弃用,并将在以后的版本中删除
--secure-port int 默认值:6443
带身份认证和鉴权机制的 HTTPS 服务端口。
不能用 0 关闭。
--service-account-extend-token-expiration 默认值:true
在生成令牌时,启用投射服务帐户到期时间扩展,
这有助于从旧版令牌安全地过渡到绑定的服务帐户令牌功能。
如果启用此标志,则准入插件注入的令牌的过期时间将延长至 1 年,以防止过渡期间发生意外故障,
并忽略 service-account-max-token-expiration 的值。
--service-account-issuer strings
服务帐号令牌颁发者的标识符。
颁发者将在已颁发令牌的 "iss" 声明中检查此标识符。
此值为字符串或 URI。
如果根据 OpenID Discovery 1.0 规范检查此选项不是有效的 URI,则即使特性门控设置为 true,
ServiceAccountIssuerDiscovery 功能也将保持禁用状态。
强烈建议该值符合 OpenID 规范: https://openid.net/specs/openid-connect-discovery-1_0.html 。
实践中,这意味着 service-account-issuer 取值必须是 HTTPS URL。
还强烈建议此 URL 能够在 {service-account-issuer}/.well-known/openid-configuration
处提供 OpenID 发现文档。
当此值被多次指定时,第一次的值用于生成令牌,所有的值用于确定接受哪些发行人。
--service-account-jwks-uri string
覆盖 /.well-known/openid-configuration
提供的发现文档中 JSON Web 密钥集的 URI。
如果发现文档和密钥集是通过 API 服务器外部
(而非自动检测到或被外部主机名覆盖)之外的 URL 提供给依赖方的,则此标志很有用。
--service-account-key-file strings
包含 PEM 编码的 x509 RSA 或 ECDSA 私钥或公钥的文件,用于验证 ServiceAccount 令牌。
指定的文件可以包含多个键,并且可以使用不同的文件多次指定标志。
如果未指定,则使用 --tls-private-key-file
。
提供 --service-account-signing-key-file
时必须指定。
--service-account-lookup 默认值:true
如果为 true,则在身份认证时验证 etcd 中是否存在 ServiceAccount 令牌。
--service-account-max-token-expiration duration
服务帐户令牌发布者创建的令牌的最长有效期。
如果请求有效期大于此值的有效令牌请求,将使用此值的有效期颁发令牌。
--service-account-signing-key-file string
包含服务帐户令牌颁发者当前私钥的文件的路径。
颁发者将使用此私钥签署所颁发的 ID 令牌。
--service-cluster-ip-range string
CIDR 表示的 IP 范围用来为服务分配集群 IP。
此地址不得与指定给节点或 Pod 的任何 IP 范围重叠。
最多允许两个双栈 CIDR。
--service-node-port-range <形式为 'N1-N2' 的字符串> 默认值:30000-32767
保留给具有 NodePort 可见性的服务的端口范围。
不得与节点上的临时端口范围重叠。
例如:"30000-32767"。范围的两端都包括在内。
--show-hidden-metrics-for-version string
你要显示隐藏指标的先前版本。仅先前的次要版本有意义,不允许其他值。
格式为 <major>.<minor>,例如:"1.16"。
这种格式的目的是确保你有机会注意到下一个版本是否隐藏了其他指标,
而不是在此之后将它们从发行版中永久删除时感到惊讶。
--shutdown-delay-duration duration
延迟终止时间。在此期间,服务器将继续正常处理请求。
端点 /healthz 和 /livez 将返回成功,但是 /readyz 立即返回失败。
在此延迟过去之后,将开始正常终止。
这可用于允许负载均衡器停止向该服务器发送流量。
--shutdown-send-retry-after
值为 true 表示 HTTP 服务器将继续监听直到耗尽所有非长时间运行的请求,
在此期间,所有传入请求将被拒绝,状态码为 429,响应头为 "Retry-After",
此外,设置 "Connection: close" 响应头是为了在空闲时断开 TCP 链接。
--shutdown-watch-termination-grace-period duration
此选项如果被设置了,则表示 API 服务器体面关闭服务器窗口内,等待活跃的监听请求耗尽的最长宽限期。
--storage-backend string
持久化存储后端。选项:"etcd3"(默认)。
--storage-initialization-timeout duration Default: 1m0s
声明 apiserver 就绪之前等待存储初始化的最长时间。默认值为 1m。
--storage-media-type string 默认值:"application/vnd.kubernetes.protobuf"
用于在存储中存储对象的媒体类型。某些资源或存储后端可能仅支持特定的媒体类型,并且将忽略此设置。
支持的媒体类型:[application/json, application/yaml, application/vnd.kubernetes.protobuf]
--strict-transport-security-directives strings
为 HSTS 所设置的指令列表,用逗号分隔。
如果此列表为空,则不会添加 HSTS 指令。
例如:'max-age=31536000,includeSubDomains,preload'
--tls-cert-file string
包含用于 HTTPS 的默认 x509 证书的文件。(CA 证书(如果有)在服务器证书之后并置)。
如果启用了 HTTPS 服务,并且未提供 --tls-cert-file
和
--tls-private-key-file
,
为公共地址生成一个自签名证书和密钥,并将其保存到 --cert-dir
指定的目录中。
--tls-cipher-suites strings
服务器的密码套件的列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
首选值:
TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。
不安全的值有:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_RC4_128_SHA。
--tls-min-version string
支持的最低 TLS 版本。可能的值:VersionTLS10,VersionTLS11,VersionTLS12,VersionTLS13
--tls-private-key-file string
包含匹配 --tls-cert-file
的 x509 证书私钥的文件。
--tls-sni-cert-key string 默认值:[]
一对 x509 证书和私钥文件路径,(可选)后缀为全限定域名的域名模式列表,可以使用带有通配符的前缀。
域模式也允许使用 IP 地址,但仅当 apiserver 对客户端请求的IP地址具有可见性时,才应使用 IP。
如果未提供域模式,则提取证书的名称。
非通配符匹配优先于通配符匹配,显式域模式优先于提取出的名称。
对于多个密钥/证书对,请多次使用 --tls-sni-cert-key
。
示例:"example.crt,example.key" 或 "foo.crt,foo.key:\*.foo.com,foo.com"。
--token-auth-file string
如果设置该值,这个文件将被用于通过令牌认证来保护 API 服务的安全端口。
--tracing-config-file string
包含 API 服务器跟踪配置的文件。
-v, --v int
日志级别详细程度的数字。
--version version[=true]
--version, --version=raw 打印版本信息并退出;
--version=vX.Y.Z... 设置报告的版本
--vmodule pattern=N,...
以逗号分隔的 pattern=N
设置列表,用于文件过滤的日志记录(仅适用于 text 日志格式)。
--watch-cache 默认值:true
在 API 服务器中启用监视缓存。
--watch-cache-sizes strings
某些资源(Pod、Node 等)的监视缓存大小设置,以逗号分隔。
每个资源对应的设置格式:resource[.group]#size
,其中
resource
为小写复数(无版本),
对于 apiVersion v1(旧版核心 API)的资源要省略 group
,
对其它资源要给出 group
;size 为一个数字
。
此选项仅对 API 服务器中的内置资源生效,对 CRD 定义的资源或从外部服务器接入的资源无效。
启用 watch-cache
时仅查询此选项。
这里能生效的 size 设置只有 0,意味着禁用关联资源的 watch-cache
。
所有的非零值都等效,意味着不禁用该资源的watch-cache
。
13.5 - kube-controller-manager
简介
Kubernetes 控制器管理器是一个守护进程,内嵌随 Kubernetes 一起发布的核心控制回路。
在机器人和自动化的应用中,控制回路是一个永不休止的循环,用于调节系统状态。
在 Kubernetes 中,每个控制器是一个控制回路,通过 API 服务器监视集群的共享状态,
并尝试进行更改以将当前状态转为期望状态。
目前,Kubernetes 自带的控制器例子包括副本控制器、节点控制器、命名空间控制器和服务账号控制器等。
kube-controller-manager [flags]
选项
--allocate-node-cidrs
基于云驱动来为 Pod 分配和设置子网掩码。
--allow-metric-labels stringToString 默认值:[]
从度量值标签到准许值列表的映射。键名的格式为<MetricName>,<LabelName>。
准许值的格式为<allowed_value>,<allowed_value>...。
例如,metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3',
metric2,label='v1,v2,v3'
。
--allow-metric-labels-manifest string
包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels
标志相同。
请注意,--allow-metric-labels
标志将覆盖此清单文件。
--attach-detach-reconcile-sync-period duration 默认值:1m0s
协调器(reconciler)在相邻两次对存储卷进行挂载和解除挂载操作之间的等待时间。
此时长必须长于 1 秒钟。此值设置为大于默认值时,可能导致存储卷无法与 Pod 匹配。
--authentication-kubeconfig string
此标志值为一个 kubeconfig 文件的路径名。该文件中包含与某 Kubernetes “核心”
服务器相关的信息,并支持足够的权限以创建 tokenreviews.authentication.k8s.io。
此选项是可选的。如果设置为空值,则所有令牌请求都会被认作匿名请求,
Kubernetes 也不再在集群中查找客户端的 CA 证书信息。
--authentication-skip-lookup
此值为 false 时,通过 authentication-kubeconfig
参数所指定的文件会被用来检索集群中缺失的身份认证配置信息。
--authentication-token-webhook-cache-ttl duration 默认值:10s
对 Webhook 令牌认证设施返回结果的缓存时长。
--authentication-tolerate-lookup-failure
此值为 true 时,即使无法从集群中检索到缺失的身份认证配置信息也无大碍。
需要注意的是,这样设置可能导致所有请求都被视作匿名请求。
--authorization-always-allow-paths strings 默认值:"/healthz,/readyz,/livez"
鉴权过程中会忽略的一个 HTTP 路径列表。
换言之,控制器管理器会对列表中路径的访问进行授权,并且无须征得
Kubernetes “核心” 服务器同意。
--authorization-kubeconfig string
包含 Kubernetes “核心” 服务器信息的 kubeconfig 文件路径,
所包含信息具有创建 subjectaccessreviews.authorization.k8s.io 的足够权限。
此参数是可选的。如果配置为空字符串,未被鉴权模块所忽略的请求都会被禁止。
--authorization-webhook-cache-authorized-ttl duration 默认值:10s
对 Webhook 形式鉴权组件所返回的“已授权(Authorized)”响应的缓存时长。
--authorization-webhook-cache-unauthorized-ttl duration 默认值:10s
对 Webhook 形式鉴权组件所返回的“未授权(Unauthorized)”响应的缓存时长。
--bind-address string 默认值:0.0.0.0
针对 --secure-port
端口上请求执行监听操作的 IP 地址。
所对应的网络接口必须从集群中其它位置可访问(含命令行及 Web 客户端)。
如果此值为空或者设定为非特定地址(0.0.0.0
或 ::
),
意味着所有网络接口和 IP 地址簇都在监听范围。
--cert-dir string
TLS 证书所在的目录。如果提供了 --tls-cert-file
和
--tls-private-key-file
,此标志会被忽略。
--cidr-allocator-type string 默认值:"RangeAllocator"
要使用的 CIDR 分配器类型。
--client-ca-file string
如果设置了此标志,对于所有能够提供客户端证书的请求,若该证书由
--client-ca-file
中所给机构之一签署,
则该请求会被成功认证为客户端证书中 CommonName 所标识的实体。
--cloud-config string
云驱动程序配置文件的路径。空字符串表示没有配置文件。
--cloud-provider string
云服务的提供者。空字符串表示没有对应的提供者(驱动)。
--cluster-cidr string
集群中 Pod 的 CIDR 范围。要求 --allocate-node-cidrs
标志为 true。
--cluster-name string 默认值:"kubernetes"
集群实例的前缀。
--cluster-signing-cert-file string
包含 PEM 编码格式的 X509 CA 证书的文件名。该证书用来发放集群范围的证书。
如果设置了此标志,则不能指定更具体的 --cluster-signing-*
标志。
--cluster-signing-duration duration 默认值:8760h0m0s
所签名证书的有效期限。每个 CSR 可以通过设置 spec.expirationSeconds
来请求更短的证书。
--cluster-signing-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名。该私钥用来对集群范围证书签名。
若指定了此选项,则不可再设置 --cluster-signing-*
参数。
--cluster-signing-kube-apiserver-client-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名,
该证书用于为 kubernetes.io/kube-apiserver-client 签署者颁发证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--cluster-signing-kube-apiserver-client-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名,
该私钥用于为 kubernetes.io/kube-apiserver-client 签署者签名证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--cluster-signing-kubelet-client-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名,
该证书用于为 kubernetes.io/kube-apiserver-client-kubelet 签署者颁发证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--cluster-signing-kubelet-client-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名,
该私钥用于为 kubernetes.io/kube-apiserver-client-kubelet 签署者签名证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--cluster-signing-kubelet-serving-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名,
该证书用于为 kubernetes.io/kubelet-serving 签署者颁发证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file。
--cluster-signing-kubelet-serving-key-file string
包含 PEM 编码的 RSA或ECDSA 私钥的文件名,
该私钥用于对 kubernetes.io/kubelet-serving 签署者的证书进行签名。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--cluster-signing-legacy-unknown-cert-file string
包含 PEM 编码的 X509 CA 证书的文件名,
用于为 kubernetes.io/legacy-unknown 签署者颁发证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--cluster-signing-legacy-unknown-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名,
用于为 kubernetes.io/legacy-unknown 签署者签名证书。
如果指定,则不得设置 --cluster-signing-{cert,key}-file
。
--concurrent-cron-job-syncs int32 默认值:5
可以并发同步的 CronJob 对象个数。数值越大意味着对 CronJob 的响应越及时,
同时也意味着更大的 CPU(和网络带宽)压力。
--concurrent-deployment-syncs int32 默认值:5
可以并发同步的 Deployment 对象个数。数值越大意味着对 Deployment 的响应越及时,
同时也意味着更大的 CPU(和网络带宽)压力。
--concurrent-endpoint-syncs int32 默认值:5
可以并发执行的 Endpoints 同步操作个数。数值越大意味着更快的 Endpoints 更新操作,
同时也意味着更大的 CPU (和网络)压力。
--concurrent-ephemeralvolume-syncs int32 默认值:5
可以并发执行的 EphemeralVolume 同步操作个数。数值越大意味着更快的 EphemeralVolume 更新操作,
同时也意味着更大的 CPU (和网络)压力。
--concurrent-gc-syncs int32 默认值:20
可以并发同步的垃圾收集工作线程个数。
--concurrent-horizontal-pod-autoscaler-syncs int32 默认值:5
允许并发执行的、对水平 Pod 自动扩缩器对象进行同步的数量。
更大的数字 = 响应更快的水平 Pod 自动缩放器对象处理,但需要更高的 CPU(和网络)负载。
--concurrent-job-syncs int32 默认值:5
可以并发同步的 Job 对象个数。较大的数值意味着更快的 Job 终结操作,
不过也意味着更多的 CPU (和网络)占用。
--concurrent-namespace-syncs int32 默认值:10
可以并发同步的 Namespace 对象个数。较大的数值意味着更快的名字空间终结操作,
不过也意味着更多的 CPU (和网络)占用。
--concurrent-rc-syncs int32 默认值:5
可以并发同步的副本控制器对象个数。较大的数值意味着更快的副本管理操作,
不过也意味着更多的 CPU (和网络)占用。
--concurrent-replicaset-syncs int32 默认值:5
可以并发同步的 ReplicaSet 个数。数值越大意味着副本管理的响应速度越快,
同时也意味着更多的 CPU (和网络)占用。
--concurrent-resource-quota-syncs int32 默认值:5
可以并发同步的 ResourceQuota 对象个数。数值越大,配额管理的响应速度越快,
不过对 CPU (和网络)的占用也越高。
--concurrent-service-endpoint-syncs int32 默认值:5
可以并发执行的服务端点同步操作个数。数值越大,端点片段(Endpoint Slice)
的更新速度越快,不过对 CPU (和网络)的占用也越高。默认值为 5。
--concurrent-service-syncs int32 默认值:1
可以并发同步的 Service 对象个数。数值越大,服务管理的响应速度越快,
不过对 CPU (和网络)的占用也越高。
--concurrent-serviceaccount-token-syncs int32 默认值:5
可以并发同步的服务账号令牌对象个数。数值越大,令牌生成的速度越快,
不过对 CPU (和网络)的占用也越高。
--concurrent-statefulset-syncs int32 默认值:5
可以并发同步的 StatefulSet 对象个数。数值越大,StatefulSet 管理的响应速度越快,
不过对 CPU (和网络)的占用也越高。
--concurrent-ttl-after-finished-syncs int32 默认值:5
可以并发同步的 ttl-after-finished-controller 线程个数。
--concurrent-validating-admission-policy-status-syncs int32 默认值:5
可以并发同步的 ValidatingAdmissionPolicyStatusController 线程个数。
--configure-cloud-routes 默认值:true
决定是否由 --allocate-node-cidrs
所分配的 CIDR 要通过云驱动程序来配置。
--contention-profiling
在启用了性能分析(profiling)时,也启用锁竞争情况分析。
--controller-start-interval duration
在两次启动控制器管理器之间的时间间隔。
--controllers strings 默认值:*
要启用的控制器列表。*
表示启用所有默认启用的控制器;
foo
启用名为 foo 的控制器;
-foo
表示禁用名为 foo 的控制器。
控制器的全集:bootstrap-signer-controller、certificatesigningrequest-approving-controller、
certificatesigningrequest-cleaner-controller、certificatesigningrequest-signing-controller、
cloud-node-lifecycle-controller、clusterrole-aggregation-controller、cronjob-controller、
daemonset-controller、deployment-controller、disruption-controller、endpoints-controller、
endpointslice-controller、endpointslice-mirroring-controller、ephemeral-volume-controller、
garbage-collector-controller、horizontal-pod-autoscaler-controller、job-controller、
legacy-serviceaccount-token-cleaner-controller、namespace-controller、node-ipam-controller、
node-lifecycle-controller、node-route-controller、persistentvolume-attach-detach-controller、
persistentvolume-binder-controller、persistentvolume-expander-controller、
persistentvolume-protection-controller、persistentvolumeclaim-protection-controller、
pod-garbage-collector-controller、replicaset-controller、replicationcontroller-controller、
resourceclaim-controller、resourcequota-controller、root-ca-certificate-publisher-controller、
service-cidr-controller、service-lb-controller、serviceaccount-controller、serviceaccount-token-controller、
statefulset-controller、storage-version-migrator-controller、storageversion-garbage-collector-controller、
taint-eviction-controller、token-cleaner-controller、ttl-after-finished-controller、ttl-controller、
validatingadmissionpolicy-status-controller
默认禁用的控制器有: bootstrap-signer-controller、token-cleaner-controller。
--disable-attach-detach-reconcile-sync
禁用卷挂接/解挂调节器的同步。禁用此同步可能导致卷存储与 Pod 之间出现错位。
请小心使用。
--disable-force-detach-on-timeout
基于最长卸载时间和节点状态防止强制解除挂接卷。
如果将此标志设置为 true,则必须使用非体面节点关闭特性来从节点故障中恢复。
参阅 https://k8s.io/zh-cn/docs/storage-disable-force-detach-on-timeout/
--disable-http2-serving
如果为 true,HTTP2 服务将被禁用 [默认值=false]
--disabled-metrics strings
此标志提供对行为异常的度量值的防控措施。你必须提供度量值的完全限定名称才能将其禁用。
声明 :禁用度量值的操作比显示隐藏度量值的操作优先级高。
--emulated-version strings
不同组件所模拟的能力(API、特性等)的版本。
如果设置了该选项,组件将模拟此版本的行为,而不是下层可执行文件版本的行为。
版本格式只能是 major.minor,例如 “--emulated-version=wardle=1.2,kube=1.31”。
选项包括: kube=1.31..1.31(默认值=1.31)。如果组件未被指定,默认为 “kube”。
--enable-dynamic-provisioning 默认值:true
在环境允许的情况下启用动态卷制备。
--enable-garbage-collector 默认值:true
启用通用垃圾收集器。必须与 kube-apiserver 中对应的标志一致。
--enable-hostpath-provisioner
在没有云驱动程序的情况下,启用 HostPath 持久卷的制备。
此参数便于对卷供应功能进行开发和测试。HostPath 卷的制备并非受支持的功能特性,
在多节点的集群中也无法工作,因此除了开发和测试环境中不应使用 HostPath 卷的制备。
--enable-leader-migration
此标志决定是否启用控制器领导者迁移。
--endpoint-updates-batch-period duration
端点(Endpoint)批量更新周期时长。对 Pod 变更的处理会被延迟,
以便将其与即将到来的更新操作合并,从而减少端点更新操作次数。
较大的数值意味着端点更新的迟滞时间会增长,也意味着所生成的端点版本个数会变少。
--endpointslice-updates-batch-period duration
端点片段(Endpoint Slice)批量更新周期时长。对 Pod 变更的处理会被延迟,
以便将其与即将到来的更新操作合并,从而减少端点更新操作次数。
较大的数值意味着端点更新的迟滞时间会增长,也意味着所生成的端点版本个数会变少。
--external-cloud-volume-plugin string
当云驱动程序设置为 external 时要使用的插件名称。此字符串可以为空。
只能在云驱动程序为 external 时设置。
目前用来保证 node-ipam-controller、persistentvolume-binder-controller、persistentvolume-expander-controller
和 attach-detach-controller 能够在三种云驱动上正常工作。
--feature-gates colonSeparatedMultimapStringString
逗号分隔的组件列表,这些 key=value 对用来描述不同组件测试性/试验性特性的特性门控。
如果组件未被指定,默认值为“kube”。此标志可以被重复调用。例如:
--feature-gates 'wardle:featureA=true,wardle:featureB=false' --feature-gates 'kube:featureC=true'
可选项为:
kube:APIResponseCompression=true|false (BETA - 默认值=true)
kube:APIServerIdentity=true|false (BETA - 默认值=true)
kube:APIServerTracing=true|false (BETA - 默认值=true)
kube:APIServingWithRoutine=true|false (ALPHA - 默认值=false)
kube:AllAlpha=true|false (ALPHA - 默认值=false)
kube:AllBeta=true|false (BETA - 默认值=false)
kube:AnonymousAuthConfigurableEndpoints=true|false (ALPHA - 默认值=false)
kube:AnyVolumeDataSource=true|false (BETA - 默认值=true)
kube:AuthorizeNodeWithSelectors=true|false (ALPHA - 默认值=false)
kube:AuthorizeWithSelectors=true|false (ALPHA - 默认值=false)
kube:CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
kube:CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
kube:CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
kube:CRDValidationRatcheting=true|false (BETA - 默认值=true)
kube:CSIMigrationPortworx=true|false (BETA - 默认值=true)
kube:CSIVolumeHealth=true|false (ALPHA - 默认值=false)
kube:CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
kube:ClusterTrustBundle=true|false (ALPHA - 默认值=false)
kube:ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
kube:ComponentSLIs=true|false (BETA - 默认值=true)
kube:ConcurrentWatchObjectDecode=true|false (BETA - 默认值=false)
kube:ConsistentListFromCache=true|false (BETA - 默认值=true)
kube:ContainerCheckpoint=true|false (BETA - 默认值=true)
kube:ContextualLogging=true|false (BETA - 默认值=true)
kube:CoordinatedLeaderElection=true|false (ALPHA - 默认值=false)
kube:CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
kube:CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
kube:CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
kube:CustomResourceFieldSelectors=true|false (BETA - 默认值=true)
kube:DRAControlPlaneController=true|false (ALPHA - 默认值=false)
kube:DisableAllocatorDualWrite=true|false (ALPHA - 默认值=false)
kube:DisableNodeKubeProxyVersion=true|false (BETA - 默认值=true)
kube:DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
kube:EventedPLEG=true|false (ALPHA - 默认值=false)
kube:GracefulNodeShutdown=true|false (BETA - 默认值=true)
kube:GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
kube:HPAScaleToZero=true|false (ALPHA - 默认值=false)
kube:HonorPVReclaimPolicy=true|false (BETA - 默认值=true)
kube:ImageMaximumGCAge=true|false (BETA - 默认值=true)
kube:ImageVolume=true|false (ALPHA - 默认值=false)
kube:InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
kube:InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
kube:InformerResourceVersion=true|false (ALPHA - 默认值=false)
kube:JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
kube:JobManagedBy=true|false (ALPHA - 默认值=false)
kube:JobPodReplacementPolicy=true|false (BETA - 默认值=true)
kube:JobSuccessPolicy=true|false (BETA - 默认值=true)
kube:KubeletCgroupDriverFromCRI=true|false (BETA - 默认值=true)
kube:KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
kube:KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
kube:KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
kube:KubeletSeparateDiskGC=true|false (BETA - 默认值=true)
kube:KubeletTracing=true|false (BETA - 默认值=true)
kube:LoadBalancerIPMode=true|false (BETA - 默认值=true)
kube:LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (BETA - 默认值=false)
kube:LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
kube:LoggingBetaOptions=true|false (BETA - 默认值=true)
kube:MatchLabelKeysInPodAffinity=true|false (BETA - 默认值=true)
kube:MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
kube:MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
kube:MemoryManager=true|false (BETA - 默认值=true)
kube:MemoryQoS=true|false (ALPHA - 默认值=false)
kube:MultiCIDRServiceAllocator=true|false (BETA - 默认值=false)
kube:MutatingAdmissionPolicy=true|false (ALPHA - 默认值=false)
kube:NFTablesProxyMode=true|false (BETA - 默认值=true)
kube:NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
kube:NodeLogQuery=true|false (BETA - 默认值=false)
kube:NodeSwap=true|false (BETA - 默认值=true)
kube:OpenAPIEnums=true|false (BETA - 默认值=true)
kube:PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
kube:PodDeletionCost=true|false (BETA - 默认值=true)
kube:PodIndexLabel=true|false (BETA - 默认值=true)
kube:PodLifecycleSleepAction=true|false (BETA - 默认值=true)
kube:PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
kube:PortForwardWebsockets=true|false (BETA - 默认值=true)
kube:ProcMountType=true|false (BETA - 默认值=false)
kube:QOSReserved=true|false (ALPHA - 默认值=false)
kube:RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
kube:RecursiveReadOnlyMounts=true|false (BETA - 默认值=true)
kube:RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值=false)
kube:ReloadKubeletServerCertificateFile=true|false (BETA - 默认值=true)
kube:ResilientWatchCacheInitialization=true|false (BETA - 默认值=true)
kube:ResourceHealthStatus=true|false (ALPHA - 默认值=false)
kube:RetryGenerateName=true|false (BETA - 默认值=true)
kube:RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
kube:RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
kube:SELinuxMount=true|false (ALPHA - 默认值=false)
kube:SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
kube:SchedulerQueueingHints=true|false (BETA - 默认值=false)
kube:SeparateCacheWatchRPC=true|false (BETA - 默认值=true)
kube:SeparateTaintEvictionController=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenJTI=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenNodeBinding=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值=true)
kube:ServiceTrafficDistribution=true|false (BETA - 默认值=true)
kube:SidecarContainers=true|false (BETA - 默认值=true)
kube:SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
kube:StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
kube:StorageNamespaceIndex=true|false (BETA - 默认值=true)
kube:StorageVersionAPI=true|false (ALPHA - 默认值=false)
kube:StorageVersionHash=true|false (BETA - 默认值=true)
kube:StorageVersionMigrator=true|false (ALPHA - 默认值=false)
kube:StrictCostEnforcementForVAP=true|false (BETA - 默认值=false)
kube:StrictCostEnforcementForWebhooks=true|false (BETA - 默认值=false)
kube:StructuredAuthenticationConfiguration=true|false (BETA - 默认值=true)
kube:StructuredAuthorizationConfiguration=true|false (BETA - 默认值=true)
kube:SupplementalGroupsPolicy=true|false (ALPHA - 默认值=false)
kube:TopologyAwareHints=true|false (BETA - 默认值=true)
kube:TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
kube:TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
kube:TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
kube:TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值=true)
kube:UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
kube:UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
kube:UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
kube:UserNamespacesSupport=true|false (BETA - 默认值=false)
kube:VolumeAttributesClass=true|false (BETA - 默认值=false)
kube:VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
kube:WatchCacheInitializationPostStartHook=true|false (BETA - 默认值=false)
kube:WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值=false)
kube:WatchList=true|false (ALPHA - 默认值=false)
kube:WatchListClient=true|false (BETA - 默认值=false)
kube:WinDSR=true|false (ALPHA - 默认值=false)
kube:WinOverlay=true|false (BETA - 默认值=true)
kube:WindowsHostNetwork=true|false (ALPHA - 默认值=true)
--flex-volume-plugin-dir string 默认值:"/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
FlexVolume 插件要搜索第三方卷插件的目录路径全名。
-h, --help
kube-controller-manager 的帮助信息。
--horizontal-pod-autoscaler-cpu-initialization-period duration 默认值:5m0s
Pod 启动之后可以忽略 CPU 采样值的时长。
--horizontal-pod-autoscaler-downscale-stabilization duration 默认值:5m0s
自动扩缩程序的回溯时长。
自动扩缩程序不会基于在给定的时长内所建议的规模对负载执行缩容操作。
--horizontal-pod-autoscaler-initial-readiness-delay duration 默认值:30s
Pod 启动之后,在此值所给定的时长内,就绪状态的变化都不会作为初始的就绪状态。
--horizontal-pod-autoscaler-sync-period duration 默认值:15s
水平 Pod 扩缩器对 Pod 数目执行同步操作的周期。
--horizontal-pod-autoscaler-tolerance float 默认值:0.1
此值为目标值与实际值的比值与 1.0 的差值。只有超过此标志所设的阈值时,
HPA 才会考虑执行缩放操作。
--http2-max-streams-per-connection int
服务器为客户端所设置的 HTTP/2 连接中流式连接个数上限。
此值为 0 表示采用 Go 语言库所设置的默认值。
--kube-api-burst int32 默认值:30
与 Kubernetes API 服务器通信时突发峰值请求个数上限。
--kube-api-content-type string 默认值:"application/vnd.kubernetes.protobuf"
向 API 服务器发送请求时使用的内容类型(Content-Type)。
--kube-api-qps float 默认值:20
与 API 服务器通信时每秒请求数(QPS)限制。
--kubeconfig string
指向 kubeconfig 文件的路径。该文件中包含主控节点位置以及鉴权凭据信息。
--large-cluster-size-threshold int32 默认值:50
node-lifecycle-controller 在执行 Pod 驱逐操作逻辑时,
基于此标志所设置的节点个数阈值来判断所在集群是否为大规模集群。
当集群规模小于等于此规模时,
--secondary-node-eviction-rate
会被隐式重设为 0。
注意:如果节点位于多个区域中,则此阈值将被每个区域视为区域节点大小阈值,以独立确定节点驱逐率。
--leader-elect 默认值:true
在执行主循环之前,启动领导选举(Leader Election)客户端,并尝试获得领导者身份。
在运行多副本组件时启用此标志有助于提高可用性。
--leader-elect-lease-duration duration 默认值:15s
对于未获得领导者身份的节点,
在探测到领导者身份需要更迭时需要等待此标志所设置的时长,
才能尝试去获得曾经是领导者但尚未续约的席位。本质上,
这个时长也是现有领导者节点在被其他候选节点替代之前可以停止的最长时长。
只有集群启用了领导者选举机制时,此标志才起作用。
--leader-elect-renew-deadline duration 默认值:10s
当前执行领导者角色的节点在被停止履行领导职责之前可多次尝试续约领导者身份;
此标志给出相邻两次尝试之间的间歇时长。
此值必须小于租期时长(Lease Duration)。
仅在集群启用了领导者选举时有效。
--leader-elect-resource-lock string 默认值:"leases"
在领导者选举期间用于锁定的资源对象的类型。 支持的选项为
leases
、endpointsleases
和 configmapsleases
。
--leader-elect-resource-name string 默认值:"kube-controller-manager"
在领导者选举期间,用来执行锁操作的资源对象名称。
--leader-elect-resource-namespace string 默认值:"kube-system"
在领导者选举期间,用来执行锁操作的资源对象的名字空间。
--leader-elect-retry-period duration 默认值:2s
尝试获得领导者身份时,客户端在相邻两次尝试之间要等待的时长。
此标志仅在启用了领导者选举的集群中起作用。
--leader-migration-config string
控制器领导者迁移所用的配置文件路径。
此值为空意味着使用控制器管理器的默认配置。
配置文件应该是 controllermanager.config.k8s.io
组、
v1alpha1
版本的 LeaderMigrationConfiguration
结构。
--legacy-service-account-token-clean-up-period duration 默认值:8760h0m0s
从最近一次使用某个旧的服务账号令牌计起,到该令牌在可以删除之前的时长。
--log-flush-frequency duration 默认值:5s
将内存中日志数据清除到日志文件中时,相邻两次清除操作之间最大间隔秒数。
--log-text-info-buffer-size quantity
[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。
默认值零字节表示禁用缓冲区机制。
大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。
启用 LoggingAlphaOptions 特性门控以使用此功能。
--log-text-split-stream
[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。
默认是将单个流写入标准输出。
启用 LoggingAlphaOptions 特性门控以使用此功能。
--logging-format string 默认值:"text"
设置日志格式。允许的格式:"text"。
--master string
Kubernetes API 服务器的地址。此值会覆盖 kubeconfig 文件中所给的地址。
--max-endpoints-per-slice int32 默认值:100
每个 EndpointSlice 中可以添加的端点个数上限。每个片段中端点个数越多,
得到的片段个数越少,但是片段的规模会变得更大。默认值为 100。
--min-resync-period duration 默认值:12h0m0s
自省程序的重新同步时隔下限。实际时隔长度会在 min-resync-period
和
2 * min-resync-period
之间。
--mirroring-concurrent-service-endpoint-syncs int32 默认值:5
endpointslice-mirroring-controller 将同时执行的服务端点同步操作数。
较大的数量 = 更快的端点切片更新,但 CPU(和网络)负载更多。 默认为 5。
--mirroring-endpointslice-updates-batch-period duration
EndpointSlice 的长度会更新 endpointslice-mirroring-controller 的批处理周期。
EndpointSlice 更改的处理将延迟此持续时间,
以使它们与潜在的即将进行的更新结合在一起,并减少 EndpointSlice 更新的总数。
较大的数量 = 较高的端点编程延迟,但是生成的端点修订版本数量较少
--mirroring-max-endpoints-per-subset int32 默认值:1000
endpointslice-mirroring-controller 可添加到某 EndpointSlice 的端点个数上限。
每个分片的端点越多,端点分片越少,但资源越大。默认为 100。
--namespace-sync-period duration 默认值:5m0s
对名字空间对象进行同步的周期。
--node-cidr-mask-size int32
集群中节点 CIDR 的掩码长度。对 IPv4 而言默认为 24;对 IPv6 而言默认为 64。
--node-cidr-mask-size-ipv4 int32
在双堆栈(同时支持 IPv4 和 IPv6)的集群中,节点 IPV4 CIDR 掩码长度。默认为 24。
--node-cidr-mask-size-ipv6 int32
在双堆栈(同时支持 IPv4 和 IPv6)的集群中,节点 IPv6 CIDR 掩码长度。默认为 64。
--node-eviction-rate float 默认值:0.1
当某区域健康时,在节点故障的情况下每秒删除 Pods 的节点数。
请参阅 --unhealthy-zone-threshold
以了解“健康”的判定标准。
这里的区域(zone)在集群并不跨多个区域时指的是整个集群。
--node-monitor-grace-period duration 默认值:40s
在将一个 Node 标记为不健康之前允许其无响应的时长上限。
必须比 kubelet 的 nodeStatusUpdateFrequency 大 N 倍;
这里 N 指的是 kubelet 发送节点状态的重试次数。
--node-monitor-period duration 默认值:5s
cloud-node-lifecycle-controller 对节点状态进行同步的周期。
--node-startup-grace-period duration 默认值:1m0s
在节点启动期间,节点可以处于无响应状态;
但超出此标志所设置的时长仍然无响应则该节点被标记为不健康。
--permit-address-sharing
如果此标志为 true,则在绑定端口时使用 SO_REUSEADDR
。
这就意味着可以同时绑定到 0.0.0.0
和特定的 IP 地址,
并且避免等待内核释放处于 TIME_WAITE
状态的套接字。[默认值=false]。
--permit-port-sharing
如果为 true,则在绑定端口时将使用 SO_REUSEPORT
,
这允许多个实例在同一地址和端口上进行绑定。[默认值=false]。
--profiling 默认值:true
通过位于 host:port/debug/pprof/
的 Web 接口启用性能分析。
--pv-recycler-increment-timeout-nfs int32 默认值:30
NFS 清洗 Pod 在清洗用过的卷时,根据此标志所设置的秒数,
为每清洗 1 GiB 数据增加对应超时时长,作为 activeDeadlineSeconds。
--pv-recycler-minimum-timeout-hostpath int32 默认值:60
对于 HostPath 回收器 Pod,设置其 activeDeadlineSeconds 参数下限。
此参数仅用于开发和测试目的,不适合在多节点集群中使用。
--pv-recycler-minimum-timeout-nfs int32 默认值:300
NFS 回收器 Pod 要使用的 activeDeadlineSeconds 参数下限。
--pv-recycler-pod-template-filepath-hostpath string
对 HostPath 持久卷进行回收利用时,用作模板的 Pod 定义文件所在路径。
此标志仅用于开发和测试目的,不适合多节点集群中使用。
--pv-recycler-pod-template-filepath-nfs string
对 NFS 卷执行回收利用时,用作模板的 Pod 定义文件所在路径。
--pv-recycler-timeout-increment-hostpath int32 默认值:30
HostPath 清洗器 Pod 在清洗对应类型持久卷时,为每 GiB 数据增加此标志所设置的秒数,
作为其 activeDeadlineSeconds 参数。此标志仅用于开发和测试环境,不适合多节点集群环境。
--pvclaimbinder-sync-period duration 默认值:15s
持久卷(PV)和持久卷申领(PVC)对象的同步周期。
--requestheader-allowed-names strings
标志值是客户端证书中的 Common Names 列表。其中所列的名称可以通过
--requestheader-username-headers
所设置的 HTTP 头部来提供用户名。
如果此标志值为空表,则被 --requestheader-client-ca-file
中机构所验证过的所有客户端证书都是允许的。
--requestheader-client-ca-file string
根证书包文件名。在信任通过 --requestheader-username-headers
所指定的任何用户名之前,要使用这里的证书来检查请求中的客户证书。
警告:一般不要依赖对请求所作的鉴权结果。
--requestheader-extra-headers-prefix strings 默认值:"x-remote-extra-"
要插入的请求头部前缀。建议使用 X-Remote-Exra-
。
--requestheader-group-headers strings 默认值:"x-remote-group"
用来检查用户组名的请求头部名称列表。建议使用 X-Remote-Group
。
--requestheader-username-headers strings 默认值:"x-remote-user"
用来检查用户名的请求头部名称列表。建议使用 X-Remote-User
。
--resource-quota-sync-period duration 默认值:5m0s
对系统中配额用量信息进行同步的周期。
--root-ca-file string
如果此标志非空,则在服务账号的令牌 Secret 中会包含此根证书机构。
所指定标志值必须是一个合法的 PEM 编码的 CA 证书包。
--route-reconciliation-period duration 默认值:10s
对云驱动为节点所创建的路由信息进行调解的周期。
--secondary-node-eviction-rate float32 默认值:0.01
当一个区域不健康造成节点失效时,每秒钟从此标志所给的节点上删除 Pod 的节点个数。
参见 --unhealthy-zone-threshold
以了解“健康与否”的判定标准。
在只有一个区域的集群中,区域指的是整个集群。如果集群规模小于
--large-cluster-size-threshold
所设置的节点个数时,
此值被隐式地重设为 0。
--secure-port int 默认值:10257
在此端口上提供 HTTPS 身份认证和鉴权操作。若此标志值为 0,则不提供 HTTPS 服务。
--service-account-private-key-file string
包含 PEM 编码的 RSA 或 ECDSA 私钥数据的文件名,这些私钥用来对服务账号令牌签名。
--service-cluster-ip-range string
集群中 Service 对象的 CIDR 范围。要求 --allocate-node-cidrs
标志为 true。
--show-hidden-metrics-for-version string
你希望展示隐藏度量值的上一个版本。只有上一个次版本号有意义,其他值都是不允许的。
字符串格式为 "<major>.<minor>"。例如:"1.16"。
此格式的目的是确保你能够有机会注意到下一个版本隐藏了一些额外的度量值,
而不是在更新版本中某些度量值被彻底删除时措手不及。
--terminated-pod-gc-threshold int32 默认值:12500
在已终止 Pod 垃圾收集器删除已终止 Pod 之前,可以保留的已终止 Pod 的个数上限。
若此值小于等于 0,则相当于禁止垃圾回收已终止的 Pod。
--tls-cert-file string
包含 HTTPS 所用的默认 X509 证书的文件。如果有 CA 证书,会被串接在服务器证书之后。
若启用了 HTTPS 服务且 --tls-cert-file
和 --tls-private-key-file
标志未设置,
则为节点的公开地址生成自签名的证书和密钥,并保存到 --cert-dir
所给的目录中。
--tls-cipher-suites strings
供服务器使用的加密包的逗号分隔列表。若忽略此标志,则使用 Go 语言默认的加密包。
可选值包括:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。
不安全的值:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、
TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、
TLS_RSA_WITH_RC4_128_SHA。
--tls-min-version string
可支持的最低 TLS 版本。可选值包括:
“VersionTLS10”、“VersionTLS11”、“VersionTLS12”、“VersionTLS13”。
--tls-private-key-file string
包含与 --tls-cert-file
对应的默认 X509 私钥的文件。
--tls-sni-cert-key string
X509 证书和私钥文件路径的耦对。作为可选项,可以添加域名模式的列表,
其中每个域名模式都是可以带通配片段前缀的全限定域名(FQDN)。
域名模式也可以使用 IP 地址字符串,
不过只有 API 服务器在所给 IP 地址上对客户端可见时才可以使用 IP 地址。
在未提供域名模式时,从证书中提取域名。
如果有非通配方式的匹配,则优先于通配方式的匹配;显式的域名模式优先于提取的域名。
当存在多个密钥/证书耦对时,可以多次使用 --tls-sni-cert-key
标志。
例如:example.crt,example.key
或 foo.crt,foo.key:\*.foo.com,foo.com
。
--unhealthy-zone-threshold float32 默认值:0.55
仅当给定区域中处于非就绪状态的节点(最少 3 个)的占比高于此值时,
才将该区域视为不健康。
--use-service-account-credentials
当此标志为 true 时,为每个控制器单独使用服务账号凭据。
-v, --v int
日志级别详细程度取值。
--version version[=true]
--version, --version=raw 打印版本信息之后退出;
--version=vX.Y.Z... 设置报告的版本。
--vmodule pattern=N,...
由逗号分隔的列表,每一项都是 pattern=N 格式,用来执行根据文件过滤的日志行为(仅适用于 text 日志格式)。
13.6 - kube-proxy
简介
Kubernetes 网络代理在每个节点上运行。网络代理反映了每个节点上 Kubernetes API
中定义的服务,并且可以执行简单的 TCP、UDP 和 SCTP 流转发,或者在一组后端进行
循环 TCP、UDP 和 SCTP 转发。
当前可通过 Docker-links-compatible 环境变量找到服务集群 IP 和端口,
这些环境变量指定了服务代理打开的端口。
有一个可选的插件,可以为这些集群 IP 提供集群 DNS。
用户必须使用 apiserver API 创建服务才能配置代理。
kube-proxy [flags]
选项
--add_dir_header
如果为 true,将文件目录添加到日志消息的头部
--alsologtostderr
设置为 true 表示将日志输出到文件的同时输出到 stderr(当 --logtostderr=true
时不生效)
--bind-address string 默认值:0.0.0.0
重写 kube-proxy 对其节点主要 IP 的理解。请注意,此名称是一个历史遗留字段,
并且 kube-proxy 实际上并没有将任何套接字绑定到此 IP。
如果配置文件由 --config
指定,则忽略此参数。
--cleanup
如果为 true,清理 iptables 和 ipvs 规则并退出。
--cluster-cidr string
集群中 Pod 的 CIDR 范围。对于双协议栈集群,这可以是逗号分隔的双协议栈 CIDR 范围对。
当 --detect-local-mode
设置为 ClusterCIDR 时,
kube-proxy 会将源 IP 在此范围内的流量视为本地流量。否则不使用此字段。
如果配置文件由 --config
指定,则忽略此参数。
--config string
配置文件的路径。
--config-sync-period duration 默认值:15m0s
来自 apiserver 的配置的刷新频率。必须大于 0。
--conntrack-max-per-core int32 默认值:32768
每个 CPU 核跟踪的最大 NAT 连接数(0 表示保留当前限制并忽略 conntrack-min 设置)。
--conntrack-min int32 默认值:131072
无论 conntrack-max-per-core
多少,要分配的 conntrack
条目的最小数量(将 conntrack-max-per-core
设置为 0 即可
保持当前的限制)。
--conntrack-tcp-be-liberal
通过将 nf_conntrack_tcp_be_liberal
设置为 1,启用宽松模式以跟踪 TCP 数据包。
--conntrack-tcp-timeout-close-wait duration 默认值:1h0m0s
处于 CLOSE_WAIT
状态的 TCP 连接的 NAT 超时。
--conntrack-tcp-timeout-established duration 默认值:24h0m0s
已建立的 TCP 连接的空闲超时(0 保持当前设置)。
--conntrack-udp-timeout duration
UNREPLIED UDP 连接的空闲超时(0 保持当前设置)。
--conntrack-udp-timeout-stream duration
ASSURED UDP 连接的空闲超时(0 保持当前设置)。
--detect-local-mode LocalMode
用于检测本地流量的模式。
如果配置文件由 --config
指定,则忽略此参数。
--feature-gates <逗号分隔的 'key=True|False' 对>
一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
APIResponseCompression=true|false (BETA - 默认值=true)
APIServerIdentity=true|false (BETA - 默认值=true)
APIServerTracing=true|false (BETA - 默认值=true)
APIServingWithRoutine=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AnonymousAuthConfigurableEndpoints=true|false (ALPHA - 默认值=false)
AnyVolumeDataSource=true|false (BETA - 默认值=true)
AuthorizeNodeWithSelectors=true|false (ALPHA - 默认值=false)
AuthorizeWithSelectors=true|false (ALPHA - 默认值=false)
CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
CRDValidationRatcheting=true|false (BETA - 默认值=true)
CSIMigrationPortworx=true|false (BETA - 默认值=true)
CSIVolumeHealth=true|false (ALPHA - 默认值=false)
CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
ClusterTrustBundle=true|false (ALPHA - 默认值=false)
ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
ComponentSLIs=true|false (BETA - 默认值=true)
ConcurrentWatchObjectDecode=true|false (BETA - 默认值=false)
ConsistentListFromCache=true|false (BETA - 默认值=true)
ContainerCheckpoint=true|false (BETA - 默认值=true)
ContextualLogging=true|false (BETA - 默认值=true)
CoordinatedLeaderElection=true|false (ALPHA - 默认值=false)
CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
CustomResourceFieldSelectors=true|false (BETA - 默认值=true)
DRAControlPlaneController=true|false (ALPHA - 默认值=false)
DisableAllocatorDualWrite=true|false (ALPHA - 默认值=false)
DisableNodeKubeProxyVersion=true|false (BETA - 默认值=true)
DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
EventedPLEG=true|false (ALPHA - 默认值=false)
GracefulNodeShutdown=true|false (BETA - 默认值=true)
GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HonorPVReclaimPolicy=true|false (BETA - 默认值=true)
ImageMaximumGCAge=true|false (BETA - 默认值=true)
ImageVolume=true|false (ALPHA - 默认值=false)
InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
InformerResourceVersion=true|false (ALPHA - 默认值=false)
JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
JobManagedBy=true|false (ALPHA - 默认值=false)
JobPodReplacementPolicy=true|false (BETA - 默认值=true)
JobSuccessPolicy=true|false (BETA - 默认值=true)
KubeletCgroupDriverFromCRI=true|false (BETA - 默认值=true)
KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
KubeletSeparateDiskGC=true|false (BETA - 默认值=true)
KubeletTracing=true|false (BETA - 默认值=true)
LoadBalancerIPMode=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (BETA - 默认值=false)
LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
LoggingBetaOptions=true|false (BETA - 默认值=true)
MatchLabelKeysInPodAffinity=true|false (BETA - 默认值=true)
MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
MemoryManager=true|false (BETA - 默认值=true)
MemoryQoS=true|false (ALPHA - 默认值=false)
MultiCIDRServiceAllocator=true|false (BETA - 默认值=false)
MutatingAdmissionPolicy=true|false (ALPHA - 默认值=false)
NFTablesProxyMode=true|false (BETA - 默认值=true)
NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
NodeLogQuery=true|false (BETA - 默认值=false)
NodeSwap=true|false (BETA - 默认值=true)
OpenAPIEnums=true|false (BETA - 默认值=true)
PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
PodDeletionCost=true|false (BETA - 默认值=true)
PodIndexLabel=true|false (BETA - 默认值=true)
PodLifecycleSleepAction=true|false (BETA - 默认值=true)
PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
PortForwardWebsockets=true|false (BETA - 默认值=true)
ProcMountType=true|false (BETA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
RecursiveReadOnlyMounts=true|false (BETA - 默认值=true)
RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值=false)
ReloadKubeletServerCertificateFile=true|false (BETA - 默认值=true)
ResilientWatchCacheInitialization=true|false (BETA - 默认值=true)
ResourceHealthStatus=true|false (ALPHA - 默认值=false)
RetryGenerateName=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
SELinuxMount=true|false (ALPHA - 默认值=false)
SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
SchedulerQueueingHints=true|false (BETA - 默认值=false)
SeparateCacheWatchRPC=true|false (BETA - 默认值=true)
SeparateTaintEvictionController=true|false (BETA - 默认值=true)
ServiceAccountTokenJTI=true|false (BETA - 默认值=true)
ServiceAccountTokenNodeBinding=true|false (BETA - 默认值=true)
ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值=true)
ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值=true)
ServiceTrafficDistribution=true|false (BETA - 默认值=true)
SidecarContainers=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
StorageNamespaceIndex=true|false (BETA - 默认值=true)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
StorageVersionMigrator=true|false (ALPHA - 默认值=false)
StrictCostEnforcementForVAP=true|false (BETA - 默认值=false)
StrictCostEnforcementForWebhooks=true|false (BETA - 默认值=false)
StructuredAuthenticationConfiguration=true|false (BETA - 默认值=true)
StructuredAuthorizationConfiguration=true|false (BETA - 默认值=true)
SupplementalGroupsPolicy=true|false (ALPHA - 默认值=false)
TopologyAwareHints=true|false (BETA - 默认值=true)
TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值=true)
UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
UserNamespacesSupport=true|false (BETA - 默认值=false)
VolumeAttributesClass=true|false (BETA - 默认值=false)
VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
WatchCacheInitializationPostStartHook=true|false (BETA - 默认值=false)
WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值=false)
WatchList=true|false (ALPHA - 默认值=false)
WatchListClient=true|false (BETA - 默认值=false)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
WindowsHostNetwork=true|false (ALPHA - 默认值=true)
如果配置文件由 --config
指定,则忽略此参数。
--healthz-bind-address ipport 默认值:0.0.0.0:10256
服务健康状态检查的 IP 地址和端口,默认为 “0.0.0.0:10256”。
如果配置文件由 --config
指定,则忽略此参数。
-h, --help
kube-proxy 操作的帮助命令。
--hostname-override string
如果非空,将使用此字符串而不是实际的主机名作为标识。
如果不设置,节点名称假定为与节点的主机名相同。
--init-only
如果设置为 true,则执行需要完整 root 权限才能执行的所有初始化步骤,然后退出。
完成此操作后,你可以仅使用 CAP_NET_ADMIN 权能再次运行 kube-proxy。
--iptables-localhost-nodeports 默认值:true
如果设为 false,Kube-proxy 将禁用允许通过本地主机访问 NodePort 服务的传统行为,
这仅适用于 iptables 模式和 ipv4。本地主机的 NodePort 在其他代理模式或 IPv6 下是不允许的。
--iptables-masquerade-bit int32 默认值:14
在使用 iptables 或 ipvs 代理模式时,用来设置 fwmark 空间的 bit,标记需要
SNAT 的数据包。必须在 [0,31] 范围内。
--iptables-min-sync-period duration 默认值:1s
iptables 规则重新同步之间的最小间隔(例如 '5s'、'1m'、'2h22m')。
值为 0 表示每次 Service 或 EndpointSlice 更改都会立即进行 iptables 重新同步。
--iptables-sync-period duration 默认值:30s
表示各种重新同步和清理操作执行频率的时间间隔(例如 '5s'、'1m'、'2h22m')。必须大于 0。
--ipvs-exclude-cidrs strings
逗号分隔的 CIDR 列表,ipvs 代理在清理 IPVS 规则时不会此列表中的地址范围。
--ipvs-min-sync-period duration 默认值:1s
ipvs 规则重新同步之间的最小间隔(例如 '5s'、'1m'、'2h22m')。
值为 0 表示每次 Service 或 EndpointSlice 更改都会立即进行 ipvs 重新同步。
--ipvs-scheduler string
代理模式为 ipvs 时所选的 ipvs 调度器类型。
--ipvs-strict-arp
通过将 arp_ignore
设置为 1 并将 arp_announce
设置为 2 启用严格的 ARP。
--ipvs-sync-period duration 默认值:30s
表示各种重新同步和清理操作执行频率的时间间隔(例如 '5s'、'1m'、'2h22m')。必须大于 0。
--ipvs-tcp-timeout duration
空闲 IPVS TCP 连接的超时时间,0 保持连接(例如 '5s'、'1m'、'2h22m')。
--ipvs-tcpfin-timeout duration
收到 FIN 数据包后,IPVS TCP 连接的超时,0 保持当前设置不变。(例如 '5s'、'1m'、'2h22m')。
--ipvs-udp-timeout duration
IPVS UDP 数据包的超时,0 保持当前设置不变。(例如 '5s'、'1m'、'2h22m')。
--kube-api-burst int32 默认值:10
与 kubernetes apiserver 通信的突发数量。
--kube-api-content-type string 默认值:"application/vnd.kubernetes.protobuf"
发送到 apiserver 的请求的内容类型。
--kube-api-qps float32 默认值:5
与 kubernetes apiserver 交互时使用的 QPS。
--kubeconfig string
包含鉴权信息的 kubeconfig 文件的路径(主控节点位置由 master 标志设置)。
--log-flush-frequency duration 默认值:5s
日志清洗之间的最大秒数
--log-text-info-buffer-size quantity
[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。
默认值零字节表示禁用缓冲机制。
大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。
启用 LoggingAlphaOptions 特性门控以使用此功能。
--log-text-split-stream
[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。
默认是将单个流写入标准输出。
启用 LoggingAlphaOptions 特性门控以使用它。
--log_backtrace_at <“file:N” 格式的字符串> 默认值:0
当日志命中 file:N,触发一次堆栈追踪
--log_dir string
如果非空,则在此目录中写入日志文件(当 --logtostderr=true
时不生效)
--log_file string
如果非空,使用此日志文件(当 --logtostderr=true
时不生效)
--log_file_max_size uint 默认值:1800
定义日志文件可以增长到的最大大小(当 --logtostderr=true
时不生效)。
单位是兆字节。如果值为 0,则最大文件大小不受限制。
--logging-format string 默认值:"text"
设置日志格式。允许的格式为:"text"。
--logtostderr 默认值:true
日志输出到 stderr 而不是文件。
--masquerade-all
对通过 Service 集群 IP 发送的所有流量进行 SNAT。
这对某些 CNI 插件可能是必需的。仅支持 Linux。
--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的相关值)。
--metrics-bind-address ipport 默认值:127.0.0.1:10249
metrics 服务器要使用的 IP 地址和端口。
如果 --bind-address
未设置或设置为 IPv4,则默认为 "127.0.0.1:10249"。
设置为 "0.0.0.0:10249" / "[::]:10249" 可以在所有接口上进行绑定。
设置为空则禁用。如果配置文件由 --config
指定,则忽略此参数。
--nodeport-addresses strings
一个包含有效节点 IP 的 CIDR 范围列表,或者单个字符串 “primary”。
如果设置为 CIDR 列表,则仅在某所给范围内的节点 IP 上接受对 NodePort 服务的连接。
如果设置为 “primary”,则将根据 Node 对象仅在其主 IP 上接受对 NodePort 服务的连接。
如果不设置,则 NodePort 连接将在所有本地 IP 上被接受。
如果配置文件由 --config
指定,则忽略此参数。
--one_output
如果为 true,则仅将日志写入其本身的严重性级别
(而不是写入每个较低的严重性级别;当 --logtostderr=true
时不生效)。
--oom-score-adj int32 默认值:-999
kube-proxy 进程中的 oom-score-adj 值,必须在 [-1000,1000] 范围内。
如果配置文件由 --config
指定,则忽略此参数。
--pod-bridge-interface string
一个桥接接口名称。当 --detect-local-mode
设置为 BridgeInterface 时,
kube-proxy 会将源自此桥接的流量视为本地流量。
--pod-interface-name-prefix string
一个接口名称前缀。当 --detect-local-mode
设置为 InterfaceNamePrefix 时,
kube-proxy 会将源自名称以该前缀开头的所有接口的流量视为本地流量。
--profiling
如果为 true,则通过 Web 接口 /debug/pprof
启用性能分析。
如果配置文件由 --config
指定,则忽略此参数。
--proxy-mode ProxyMode
使用哪种代理模式:在 Linux 上可以是 'iptables'(默认)或 'ipvs'。
在 Windows 上唯一支持的值是 'kernelspace'。
如果配置文件由 --config
指定,则忽略此参数。
--show-hidden-metrics-for-version string
要显示隐藏指标的先前版本。
仅先前的次要版本有意义,不允许其他值。
格式为 <major>.<minor>,例如 '1.16'。
这种格式的目的是确保你有机会注意到下一个发行版是否隐藏了其他指标,
而不是在之后将其永久删除时感到惊讶。
如果配置文件由 --config
指定,则忽略此参数。
--skip_headers
如果为 true,则避免在日志消息中使用头部前缀。
--skip_log_headers
如果为 true,则在打开日志文件时避免使用头部(当 --logtostderr=true
时不生效)
--stderrthreshold int 默认值:2
当写入到文件或 stderr 时设置严重程度达到或超过此阈值的日志输出到 stderr
(当 --logtostderr=true
或 --alsologtostderr=true
时不生效)。
-v, --v int
设置日志级别详细程度的数值。
--version version[=true]
--version, --version=raw 打印版本信息并退出;
--version=vX.Y.Z... 设置报告的版本。
--vmodule pattern=N,...
以逗号分割的 pattern=N 设置的列表,用于文件过滤日志(仅适用于文本日志格式)
--write-config-to string
如果设置,将默认配置信息写入此文件并退出。
13.7 - kube-scheduler
简介
Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。
调度器基于约束和可用资源为调度队列中每个 Pod 确定其可合法放置的节点。
调度器之后对所有合法的节点进行排序,将 Pod 绑定到一个合适的节点。
在同一个集群中可以使用多个不同的调度器;kube-scheduler 是其参考实现。
参阅调度 以获得关于调度和
kube-scheduler 组件的更多信息。
kube-scheduler [flags]
选项
--allow-metric-labels stringToString
默认值:[]
这个键值映射表设置度量标签所允许设置的值。
其中键的格式是 <MetricName>,<LabelName>。
值的格式是 <allowed_value>,<allowed_value>。
例如:metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'。
--allow-metric-labels-manifest string
包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels
标志相同。
请注意,--allow-metric-labels
标志将覆盖此清单文件。
--authentication-kubeconfig string
指向具有足够权限以创建 tokenaccessreviews.authentication.k8s.io
的
Kubernetes 核心服务器的 kubeconfig 文件。
这是可选的。如果为空,则所有令牌请求均被视为匿名请求,并且不会在集群中查找任何客户端 CA。
--authentication-skip-lookup
如果为 false,则 authentication-kubeconfig 将用于从集群中查找缺少的身份验证配置。
--authentication-token-webhook-cache-ttl duration 默认值:10s
缓存来自 Webhook 令牌身份验证器的响应的持续时间。
--authentication-tolerate-lookup-failure 默认值:true
如果为 true,则无法从集群中查找缺少的身份验证配置是致命的。
请注意,这可能导致身份验证将所有请求视为匿名。
--authorization-always-allow-paths strings 默认值:"/healthz,/readyz,/livez"
在授权过程中跳过的 HTTP 路径列表,即在不联系 “core” kubernetes 服务器的情况下被授权的 HTTP 路径。
--authorization-kubeconfig string
指向具有足够权限以创建 subjectaccessreviews.authorization.k8s.io 的
Kubernetes 核心服务器的 kubeconfig 文件。这是可选的。
如果为空,则所有未被鉴权机制略过的请求都会被禁止。
--authorization-webhook-cache-authorized-ttl duration 默认值:10s
缓存来自 Webhook 授权者的 “authorized” 响应的持续时间。
--authorization-webhook-cache-unauthorized-ttl duration 默认值:10s
缓存来自 Webhook 授权者的 “unauthorized” 响应的持续时间。
--bind-address string 默认值:0.0.0.0
监听 --secure-port 端口的 IP 地址。
集群的其余部分以及 CLI/ Web 客户端必须可以访问关联的接口。
如果为空,将使用所有接口(0.0.0.0 表示使用所有 IPv4 接口,“::” 表示使用所有 IPv6 接口)。
如果为空或未指定地址 (0.0.0.0 或 ::),所有接口和 IP 地址簇将被使用。
--cert-dir string
TLS 证书所在的目录。如果提供了--tls-cert-file 和 --tls private-key-file,
则将忽略此参数。
--client-ca-file string
如果已设置,由 client-ca-file 中的证书机构签名的客户端证书的任何请求都将使用
与客户端证书的 CommonName 对应的身份进行身份验证。
--config string
配置文件的路径。
--contention-profiling 默认值:true
已弃用: 如果启用了性能分析,则启用锁竞争分析。
如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--disable-http2-serving
如果为 true,HTTP2 服务将被禁用 [默认值=false]
--disabled-metrics strings
这个标志提供了一个规避不良指标的选项。你必须提供完整的指标名称才能禁用它。
免责声明:禁用指标的优先级比显示隐藏的指标更高。
--emulated-version strings
不同组件所模拟的能力(API、特性等)的版本。
如果设置了该选项,组件将模拟此版本的行为,而不是下层可执行文件版本的行为。
版本格式只能是 major.minor,例如 “--emulated-version=wardle=1.2,kube=1.31”。
选项包括: kube=1.31..1.31(默认值=1.31)。如果组件未被指定,默认为 “kube”。
--feature-gates colonSeparatedMultimapStringString
逗号分隔的组件列表,这些 key=value 对用来描述不同组件测试性/试验性特性的特性门控。
如果组件未被指定,默认值为 “kube”。此标志可以被重复调用。例如:
--feature-gates 'wardle:featureA=true,wardle:featureB=false' --feature-gates 'kube:featureC=true'
可选项为:
kube:APIResponseCompression=true|false (BETA - 默认值=true)
kube:APIServerIdentity=true|false (BETA - 默认值=true)
kube:APIServerTracing=true|false (BETA - 默认值=true)
kube:APIServingWithRoutine=true|false (ALPHA - 默认值=false)
kube:AllAlpha=true|false (ALPHA - 默认值=false)
kube:AllBeta=true|false (BETA - 默认值=false)
kube:AnonymousAuthConfigurableEndpoints=true|false (ALPHA - 默认值=false)
kube:AnyVolumeDataSource=true|false (BETA - 默认值=true)
kube:AuthorizeNodeWithSelectors=true|false (ALPHA - 默认值=false)
kube:AuthorizeWithSelectors=true|false (ALPHA - 默认值=false)
kube:CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
kube:CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
kube:CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
kube:CRDValidationRatcheting=true|false (BETA - 默认值=true)
kube:CSIMigrationPortworx=true|false (BETA - 默认值=true)
kube:CSIVolumeHealth=true|false (ALPHA - 默认值=false)
kube:CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
kube:ClusterTrustBundle=true|false (ALPHA - 默认值=false)
kube:ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
kube:ComponentSLIs=true|false (BETA - 默认值=true)
kube:ConcurrentWatchObjectDecode=true|false (BETA - 默认值=false)
kube:ConsistentListFromCache=true|false (BETA - 默认值=true)
kube:ContainerCheckpoint=true|false (BETA - 默认值=true)
kube:ContextualLogging=true|false (BETA - 默认值=true)
kube:CoordinatedLeaderElection=true|false (ALPHA - 默认值=false)
kube:CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
kube:CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
kube:CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
kube:CustomResourceFieldSelectors=true|false (BETA - 默认值=true)
kube:DRAControlPlaneController=true|false (ALPHA - 默认值=false)
kube:DisableAllocatorDualWrite=true|false (ALPHA - 默认值=false)
kube:DisableNodeKubeProxyVersion=true|false (BETA - 默认值=true)
kube:DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
kube:EventedPLEG=true|false (ALPHA - 默认值=false)
kube:GracefulNodeShutdown=true|false (BETA - 默认值=true)
kube:GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
kube:HPAScaleToZero=true|false (ALPHA - 默认值=false)
kube:HonorPVReclaimPolicy=true|false (BETA - 默认值=true)
kube:ImageMaximumGCAge=true|false (BETA - 默认值=true)
kube:ImageVolume=true|false (ALPHA - 默认值=false)
kube:InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
kube:InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
kube:InformerResourceVersion=true|false (ALPHA - 默认值=false)
kube:JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
kube:JobManagedBy=true|false (ALPHA - 默认值=false)
kube:JobPodReplacementPolicy=true|false (BETA - 默认值=true)
kube:JobSuccessPolicy=true|false (BETA - 默认值=true)
kube:KubeletCgroupDriverFromCRI=true|false (BETA - 默认值=true)
kube:KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
kube:KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
kube:KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
kube:KubeletSeparateDiskGC=true|false (BETA - 默认值=true)
kube:KubeletTracing=true|false (BETA - 默认值=true)
kube:LoadBalancerIPMode=true|false (BETA - 默认值=true)
kube:LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (BETA - 默认值=false)
kube:LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
kube:LoggingBetaOptions=true|false (BETA - 默认值=true)
kube:MatchLabelKeysInPodAffinity=true|false (BETA - 默认值=true)
kube:MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
kube:MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
kube:MemoryManager=true|false (BETA - 默认值=true)
kube:MemoryQoS=true|false (ALPHA - 默认值=false)
kube:MultiCIDRServiceAllocator=true|false (BETA - 默认值=false)
kube:MutatingAdmissionPolicy=true|false (ALPHA - 默认值=false)
kube:NFTablesProxyMode=true|false (BETA - 默认值=true)
kube:NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
kube:NodeLogQuery=true|false (BETA - 默认值=false)
kube:NodeSwap=true|false (BETA - 默认值=true)
kube:OpenAPIEnums=true|false (BETA - 默认值=true)
kube:PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
kube:PodDeletionCost=true|false (BETA - 默认值=true)
kube:PodIndexLabel=true|false (BETA - 默认值=true)
kube:PodLifecycleSleepAction=true|false (BETA - 默认值=true)
kube:PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
kube:PortForwardWebsockets=true|false (BETA - 默认值=true)
kube:ProcMountType=true|false (BETA - 默认值=false)
kube:QOSReserved=true|false (ALPHA - 默认值=false)
kube:RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
kube:RecursiveReadOnlyMounts=true|false (BETA - 默认值=true)
kube:RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值=false)
kube:ReloadKubeletServerCertificateFile=true|false (BETA - 默认值=true)
kube:ResilientWatchCacheInitialization=true|false (BETA - 默认值=true)
kube:ResourceHealthStatus=true|false (ALPHA - 默认值=false)
kube:RetryGenerateName=true|false (BETA - 默认值=true)
kube:RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
kube:RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
kube:SELinuxMount=true|false (ALPHA - 默认值=false)
kube:SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
kube:SchedulerQueueingHints=true|false (BETA - 默认值=false)
kube:SeparateCacheWatchRPC=true|false (BETA - 默认值=true)
kube:SeparateTaintEvictionController=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenJTI=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenNodeBinding=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值=true)
kube:ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值=true)
kube:ServiceTrafficDistribution=true|false (BETA - 默认值=true)
kube:SidecarContainers=true|false (BETA - 默认值=true)
kube:SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
kube:StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
kube:StorageNamespaceIndex=true|false (BETA - 默认值=true)
kube:StorageVersionAPI=true|false (ALPHA - 默认值=false)
kube:StorageVersionHash=true|false (BETA - 默认值=true)
kube:StorageVersionMigrator=true|false (ALPHA - 默认值=false)
kube:StrictCostEnforcementForVAP=true|false (BETA - 默认值=false)
kube:StrictCostEnforcementForWebhooks=true|false (BETA - 默认值=false)
kube:StructuredAuthenticationConfiguration=true|false (BETA - 默认值=true)
kube:StructuredAuthorizationConfiguration=true|false (BETA - 默认值=true)
kube:SupplementalGroupsPolicy=true|false (ALPHA - 默认值=false)
kube:TopologyAwareHints=true|false (BETA - 默认值=true)
kube:TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
kube:TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
kube:TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
kube:TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值=true)
kube:UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
kube:UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
kube:UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
kube:UserNamespacesSupport=true|false (BETA - 默认值=false)
kube:VolumeAttributesClass=true|false (BETA - 默认值=false)
kube:VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
kube:WatchCacheInitializationPostStartHook=true|false (BETA - 默认值=false)
kube:WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值=false)
kube:WatchList=true|false (ALPHA - 默认值=false)
kube:WatchListClient=true|false (BETA - 默认值=false)
kube:WinDSR=true|false (ALPHA - 默认值=false)
kube:WinOverlay=true|false (BETA - 默认值=true)
kube:WindowsHostNetwork=true|false (ALPHA - 默认值=true)
-h, --help
kube-scheduler 帮助命令
--http2-max-streams-per-connection int
服务器为客户端提供的 HTTP/2 连接最大限制。零表示使用 Golang 的默认值。
--kube-api-burst int32 默认值:100
已弃用: 与 kubernetes API 通信时使用的突发请求个数限值。
如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--kube-api-content-type string 默认值:"application/vnd.kubernetes.protobuf"
已弃用: 发送到 API 服务器的请求的内容类型。
如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--kube-api-qps float 默认值:50
已弃用: 与 kubernetes apiserver 通信时要使用的 QPS
如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--kubeconfig string
已弃用: 包含鉴权和主节点位置信息的 kubeconfig 文件的路径。
如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--leader-elect 默认值:true
在执行主循环之前,开始领导者选举并选出领导者。
使用多副本来实现高可用性时,可启用此标志。
--leader-elect-lease-duration duration 默认值:15s
非领导者候选人在观察到领导者更新后将等待直到试图获得领导但未更新的领导者职位的等待时间。
这实际上是领导者在被另一位候选人替代之前可以停止的最大持续时间。
该情况仅在启用了领导者选举的情况下才适用。
--leader-elect-renew-deadline duration 默认值:10s
领导者尝试在停止领导之前更新领导职位的间隔时间。该时间必须小于租赁期限。
仅在启用了领导者选举的情况下才适用。
--leader-elect-resource-lock string 默认值:"leases"
在领导者选举期间用于锁定的资源对象的类型。支持的选项有 `leases`、`endpointleases` 和 `configmapsleases`。
--leader-elect-resource-name string 默认值:"kube-scheduler"
在领导者选举期间用于锁定的资源对象的名称。
--leader-elect-resource-namespace string 默认值:"kube-system"
在领导者选举期间用于锁定的资源对象的命名空间。
--leader-elect-retry-period duration 默认值:2s
客户应在尝试获取和更新领导之间等待的时间。仅在启用了领导者选举的情况下才适用。
--log-flush-frequency duration 默认值:5s
两次日志刷新之间的最大秒数。
--log-text-info-buffer-size quantity
[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。
默认值零字节表示禁用缓冲区机制。
大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。
启用 LoggingAlphaOptions 特性门控以使用此功能。
--log-text-split-stream
[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。
默认是将单个流写入标准输出。
启用 LoggingAlphaOptions 特性门控以使用此功能。
--logging-format string 默认值:“text”
设置日志格式。可选格式:“text”。
--logtostderr 默认值:true
日志记录到标准错误输出而不是文件。
--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)。
--permit-address-sharing
如果为 true,在绑定端口时将使用 SO_REUSEADDR。
这将允许同时绑定诸如 0.0.0.0 这类通配符 IP和特定 IP,
并且它避免等待内核释放处于 TIME_WAIT 状态的套接字。
默认值:false
--permit-port-sharing
如果此标志为 true,在绑定端口时会使用 SO_REUSEPORT,从而允许不止一个
实例绑定到同一地址和端口。
默认值:false
--pod-max-in-unschedulable-pods-duration duration 默认值:5m0s
已弃用:Pod 可以在 unschedulablePods 中停留的最长时间。
如果 Pod 在 unschedulablePods 中停留的时间超过此值,则该 pod 将被从
unschedulablePods 移动到 backoffQ 或 activeQ。
此标志已弃用,将在后续版本中移除。
--profiling 默认值:true
已弃用: 通过 Web 界面主机启用配置文件:host:port/debug/pprof/
。
如果 --config 指定了一个配置文件,这个参数将被忽略。
--requestheader-allowed-names stringSlice
客户端证书通用名称列表,允许在 --requestheader-username-headers
指定的头部中提供用户名。如果为空,则允许任何由
--requestheader-client-ca-file
中证书机构验证的客户端证书。
--requestheader-client-ca-file string
在信任 --requestheader-username-headers
指定的头部中的用户名之前
用于验证传入请求上的客户端证书的根证书包。
警告:通常不应假定传入请求已经完成鉴权。
--requestheader-extra-headers-prefix strings
默认值:"x-remote-extra-"
要检查请求头部前缀列表。建议使用 X-Remote-Extra-
。
--requestheader-group-headers strings
默认值:"x-remote-group"
用于检查组的请求头部列表。建议使用 X-Remote-Group
。
--requestheader-username-headers strings
默认值:"x-remote-user"
用于检查用户名的请求头部列表。X-Remote-User
很常用。
--secure-port int 默认值:10259
通过身份验证和授权为 HTTPS 服务的端口。如果为 0,则根本不提供 HTTPS。
--show-hidden-metrics-for-version string
你希望显式隐藏指标的老版本号。只有较早的此版本号有意义,其它值都是不允许的。
格式为 <主版本>.<此版本>,例如:'1.16'。
此格式的目的是确保你有机会注意到是否下一个发行版本中隐藏了一些额外的指标,
而不是当某些指标在该版本之后被彻底移除时感到震惊。
--tls-cert-file string
包含默认的 HTTPS x509 证书的文件。(如果有 CA 证书,在服务器证书之后并置)。
如果启用了 HTTPS 服务,并且未提供 --tls-cert-file
和
--tls-private-key-file
,则会为公共地址生成一个自签名证书和密钥,
并将其保存到 --cert-dir
指定的目录中。
--tls-cipher-suites strings
服务器的密码套件列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
优先考虑的值:
TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。
不安全的值:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、
TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、
TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_RC4_128_SHA。
--tls-min-version string
支持的最低 TLS 版本。可能的值:VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13
--tls-private-key-file string
包含与 --tls-cert-file 匹配的默认 x509 私钥的文件。
--tls-sni-cert-key string
一对 x509 证书和私钥文件路径,也可以包含由全限定域名构成的域名模式列表作为后缀,
并可能带有前缀的通配符段。域名匹配还允许是 IP 地址,
但是只有当 apiserver 对客户端请求的 IP 地址可见时,才能使用 IP。
如果未提供域名匹配模式,则提取证书名称。
非通配符匹配优先于通配符匹配,显式域名匹配优先于提取而来的名称。
若有多个密钥/证书对,可多次使用 --tls-sni-cert-key
。
例如: "example.crt,example.key" 或者 "foo.crt,foo.key:*.foo.com,foo.com"。
-v, --v int
设置日志级别详细程度的数字
--version version[=true]
--version, --version=raw 打印版本信息并推出;
--version=vX.Y.Z... 设置报告的版本。
--vmodule pattern=N,...
以逗号分隔的 “pattern=N” 设置列表,用于文件过滤的日志记录(仅适用于文本日志格式)。
--write-config-to string
如果设置此参数,将配置值写入此文件并退出。
14 - 配置 API
14.1 - Event Rate Limit Configuration (v1alpha1)
资源类型
Configuration
Configuration 为 EventRateLimit 准入控制器提供配置数据。
字段 描述
apiVersion
stringeventratelimit.admission.k8s.io/v1alpha1
kind
stringConfiguration
limits
[Required]
[]Limit
limits 是为所接收到的事件查询设置的限制。可以针对服务器端接收到的事件设置限制,
按逐个名字空间、逐个用户、或逐个来源+对象组合的方式均可以。
至少需要设置一种限制。
Limit
出现在:
Limit 是为特定限制类型提供的配置数据。
字段 描述
type
[必需]
LimitType
type 是此配置所适用的限制的类型。
qps
[必需]
int32
qps 是针对此类型的限制每秒钟所允许的事件查询次数。qps 和 burst
字段一起用来确定是否特定的事件查询会被接受。qps 确定的是当超出查询数量的
burst 值时可以接受的查询个数。
burst
[必需]
int32
burst 是针对此类型限制的突发事件查询数量。qps 和 burst 字段一起使用可用来确定特定的事件查询是否被接受。
burst 字段确定针对特定的事件桶(bucket)可以接受的规模上限。
例如,如果 burst 是 10,qps 是 3,那么准入控制器会在接收 10 个查询之后阻塞所有查询。
每秒钟可以额外允许 3 个查询。如果这一限额未被用尽,则剩余的限额会被顺延到下一秒钟,
直到再次达到 10 个限额的上限。
cacheSize
int32
cacheSize 是此类型限制的 LRU 缓存的规模。如果某个事件桶(bucket)被从缓存中剔除,
该事件桶所对应的限额也会被重置。如果后来再次收到针对某个已被剔除的事件桶的查询,
则该事件桶会重新以干净的状态进入缓存,因而获得全量的突发查询配额。
默认的缓存大小是 4096。
如果 limitType 是 “server”,则 cacheSize 设置会被忽略。
LimitType
(string
类型的别名)
出现在:
LimitType 是限制类型(例如:per-namespace)。
14.2 - Image Policy API (v1alpha1)
资源类型
ImageReview
ImageReview 检查某个 Pod 中是否可以使用某些镜像。
字段 描述
apiVersion
stringimagepolicy.k8s.io/v1alpha1
kind
stringImageReview
metadata
meta/v1.ObjectMeta
标准的对象元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
参阅 Kubernetes API 文档了解 metadata
字段的内容。
spec
[必需]
ImageReviewSpec
spec 中包含与被评估的 Pod 相关的信息。
status
ImageReviewStatus
status 由后台负责填充,用来标明 Pod 是否会被准入。
ImageReviewContainerSpec
出现在:
ImageReviewContainerSpec 是对 Pod 创建请求中的某容器的描述。
字段 描述
image
string
此字段的格式可以是 image:tag 或 image@SHA:012345679abcdef。
ImageReviewSpec
出现在:
ImageReviewSpec 是对 Pod 创建请求的描述。
字段 描述
containers
[]ImageReviewContainerSpec
containers 是一个列表,其中包含正被创建的 Pod 中各容器的信息子集。
annotations
map[string]string
annotations 是一个键值对列表,内容抽取自 Pod 的注解(annotations)。
其中仅包含与模式 *.image-policy.k8s.io/*
匹配的键。
每个 Webhook 后端要负责决定如何解释这些注解(如果有的话)。
namespace
string
namespace 是 Pod 创建所针对的名字空间。
ImageReviewStatus
出现在:
ImageReviewStatus 是针对 Pod 创建请求所作的评估结果。
字段 描述
allowed
[必需]
bool
allowed 表明所有镜像都可以被运行。
reason
string
若 allowed
不是 false,reason
应该为空。
否则其中应包含出错信息的简短描述。Kubernetes 在向用户展示此信息时可能会截断过长的错误文字。
auditAnnotations
map[string]string
auditAnnotations 会被通过 AddAnnotation
添加到准入控制器的 attributes 对象上。
注解键应该不含前缀,换言之,准入控制器会添加合适的前缀。
14.3 - kube 配置 (v1)
资源类型
Config
Config 保存以给定用户身份构建连接到远程 Kubernetes 集群所需的信息
字段 描述
apiVersion
string/v1
kind
stringConfig
kind
string
来自 pkg/api/types.go TypeMeta 的遗留字段。
apiVersion
string
来自 pkg/api/types.go TypeMeta 的遗留字段。
preferences
[必需]
Preferences
preferences
保存用于 CLI 交互的一般信息。
clusters
[必需]
[]NamedCluster
clusters
是从可引用名称到集群配置的映射。
users
[必需]
[]NamedAuthInfo
users
是一个从可引用名称到用户配置的映射。
contexts
[必需]
[]NamedContext
contexts
是从可引用名称到上下文配置的映射。
current-context
[必需]
string
current-context
是默认情况下你想使用的上下文的名称。
extensions
[]NamedExtension
extensions
保存额外信息。这对于扩展程序是有用的,目的是使读写操作不会破解未知字段。
AuthInfo
出现在:
AuthInfo 包含描述身份信息的信息。这一信息用来告诉 kubernetes 集群你是谁。
字段 描述
client-certificate
string
client-certificate
是 TLS 客户端证书文件的路径。
client-certificate-data
[]byte
client-certificate-data
包含用于 TLS 连接的、来自客户端证书的 PEM 编码的数据。
此字段值会覆盖 client-certificate
内容。
client-key
string
client-key
是用于 TLS 连接的客户端密钥文件的路径。
client-key-data
[]byte
client-key-data
包含用于 TLS 连接的、来自客户端密钥文件的
PEM 编码数据。此数据会覆盖 client-key
的内容。
token
string
token
是用于向 kubernetes 集群进行身份验证的持有者令牌。
tokenFile
string
tokenFile
是一个指针,指向包含有持有者令牌(如上所述)的文件。
如果 token
和 tokenFile
都存在,token
优先。
as
string
as
是要冒充的用户名。名字与命令行标志相匹配。
as-uid
string
as-uid
是要冒充的 UID。
as-groups
[]string
as-groups
是要冒充的用户组。
as-user-extra
map[string][]string
as-user-extra
包含与要冒充的用户相关的额外信息。
username
string
username
是向 Kubernetes 集群进行基本认证的用户名。
password
string
password
是向 Kubernetes 集群进行基本认证的密码。
auth-provider
AuthProviderConfig
auth-provider
给出用于给定 Kubernetes 集群的自定义身份验证插件。
exec
ExecConfig
exec
指定了针对某 Kubernetes 集群的基于 exec
的自定义身份认证插件。
extensions
[]NamedExtension
extensions
保存一些额外信息。这些信息对于扩展程序是有用的,目的是确保读写操作不会破坏未知字段。
AuthProviderConfig
出现在:
AuthProviderConfig 保存特定于某认证提供机制的配置。
字段 描述
name
[必需]
string
配置选项名称。
config
[必需]
map[string]string
配置选项取值映射。
Cluster
出现在:
Cluster 包含有关如何与 Kubernetes 集群通信的信息。
字段 描述
server
[必需]
string
server
是 Kubernetes 集群的地址(形式为 https://hostname:port)。
tls-server-name
string
tls-server-name
用于检查服务器证书。如果 tls-server-name
是空的,则使用用于联系服务器的主机名。
insecure-skip-tls-verify
bool
insecure-skip-tls-verify
跳过服务器证书的有效性检查。
这样做将使你的 HTTPS 连接不安全。
certificate-authority
string
certificate-authority
是证书机构的证书文件的路径。
certificate-authority-data
[]byte
certificate-authority-data
包含 PEM 编码的证书机构证书。
覆盖 certificate-authority
的设置值。
proxy-url
string
proxy-url
是代理的 URL,该代理用于此客户端的所有请求。
带有 "http"、"https" 和 "socks5" 的 URL 是被支持的。
如果未提供此配置或为空字符串,客户端尝试使用 http_proxy
和
https_proxy
环境变量构建代理配置。
如果这些环境变量也没有设置, 客户端不会尝试代理请求。
socks5
代理当前不支持 SPDY 流式端点
(exec
、attach
、port-forward
)。
disable-compression
bool
disable-compression
允许客户端选择不对发往服务器的所有请求进行响应压缩。
当客户端与服务器之间的网络带宽充足时,这对于加快请求(尤其是 list 操作)非常有用,
能够节省进行(服务器端)压缩和(客户端)解压缩的时间。参见
https://github.com/kubernetes/kubernetes/issues/112296。
extensions
[]NamedExtension
extensions
保存一些额外信息。
这些信息对于扩展程序是有用的,目的是确保读写操作不会破坏未知字段。
Context
出现在:
Context 是一个元组,包含对集群 (我如何与某 Kubernetes 集群通信)、用户 (我如何标识自己)
和名字空间(我想要使用哪些资源子集)的引用。
字段 描述
cluster
[必需]
string
cluster
是此上下文中的集群名称。
user
[必需]
string
user
是此上下文的 authInfo 名称。
namespace
string
namespace
是在请求中未明确指定时使用的默认名字空间。
extensions
[]NamedExtension
extensions
保存一些额外信息。
这些信息对于扩展程序是有用的,目的是确保读写操作不会破坏未知字段。
ExecConfig
出现在:
ExecConfig
指定提供客户端凭证的命令。这个命令被执行(以 exec 方式)
并输出结构化的标准输出(stdout
),其中包含了凭据。
查看 client.authentication.k8s.io
API
组以获取输入和输出的确切格式规范。
字段 描述
command
[必需]
string
command 是要执行的命令。
args
[]string
args
是执行命令时要传递的参数。
env
[]ExecEnvVar
env
定义了要暴露给进程的额外的环境变量。这些与主机的环境变量以及
client-go
使用的变量一起,用于传递参数给插件。
apiVersion
[必需]
string
ExecInfo
的首选输入版本。返回的 ExecCredentials
必须使用与输入相同的编码版本。
installHint
[必需]
string
当似乎找不到可执行文件时,将向用户显示此文本。
例如,对于在 Mac OS 系统上安装 foo-cli
插件而言,
brew install foo-cli
这可能是不错的 installHint。
provideClusterInfo
[必需]
bool
ProvideClusterInfo
决定是否提供集群信息。
这些信息可能包含非常大的 CA 数据,用来作为 KUBERNETES_EXEC_INFO
环境变量的一部分提供给这个 exec 插件。
默认情况下,它被设置为 false
。
k8s.io/client-go/tools/auth/exec
包提供了用于读取这个环境变量的辅助方法。
interactiveMode
ExecInteractiveMode
interactiveMode
确定此插件与标准输入之间的关系。有效值为:
"Never":这个 exec
插件从不使用标准输入;
"IfAvailable":这个 exec
插件希望使用标准输入,如果可用的话;
"Always":这个 exec
插件需要标准输入以正常运行。
查看 ExecInteractiveMode
值以了解更多详情。
如果 apiVersion
是 client.authentication.k8s.io/v1alpha1
或 client.authentication.k8s.io/v1beta1
, 则此字段是可选的,
且当未设置时默认为 "IfAvailable"。否则,此字段是必需的。
ExecEnvVar
出现在:
ExecEnvVar
用于在执行基于 exec
的凭据插件时要设置的环境变量。
字段 描述
name
[必需]
string
环境变量名称。
value
[必需]
string
环境变量取值。
ExecInteractiveMode
(string
的别名)
出现在:
ExecInteractiveMode 是一个描述 exec 插件与标准输入间关系的字符串。
NamedAuthInfo
出现在:
NamedAuthInfo
将昵称与身份认证信息关联起来。
字段 描述
name
[必需]
string
name
是该 AuthInfo
的昵称。
user
[必需]
AuthInfo
user
保存身份认证信息。
NamedCluster
出现在:
NamedCluster
将昵称与集群信息关联起来。
字段 描述
name
[必需]
string
name
是此集群的昵称。
cluster
[必需]
Cluster
cluster
保存集群的信息。
NamedContext
出现在:
NamedContext
将昵称与上下文信息关联起来。
字段 描述
name
[必需]
string
name
是此上下文的昵称。
context
[必需]
Context
context
保存上下文信息。
NamedExtension
出现在:
NamedExtension 将昵称与扩展信息关联起来。
Preferences
出现在:
字段 描述
colors
bool
是否采用彩色字符编码。
extensions
[]NamedExtension
extensions
保存一些额外信息。
这些信息对于扩展程序是有用的,目的是确保读写操作不会破坏未知字段。
14.4 - kube-apiserver Admission (v1)
资源类型
AdmissionReview
AdmissionReview
描述准入评审请求/响应。
AdmissionRequest
出现在:
AdmissionRequest
描述准入请求的 admission.Attributes。
字段 描述
uid
[必需]
k8s.io/apimachinery/pkg/types.UID
uid
是用于标识单个请求/响应的标识符。它允许我们区分在其他情况下完全相同的请求实例(并行请求、在先前请求未修改时的请求等)。
uid
的目的是跟踪 KAS(Kubernetes Admission Server)和 WebHook 之间的轮询(请求/响应),而不是用户请求。
它适用于在 WebHook 和 API 服务器之间建立日志条目上的关联,从而服务于审计或调试目的。
kind
[必需]
meta/v1.GroupVersionKind
kind
是正被提交的对象的全限定类别名称(例如 v1.Pod 或 autoscaling.v1.Scale)。
resource
[必需]
meta/v1.GroupVersionResource
resource
是正被请求的资源的全限定名称(例如 v1.pods)。
subResource
string
subResource
是正被请求的子资源——如果存在的话(例如 "status" 或 "scale")。
requestKind
meta/v1.GroupVersionKind
requestKind
是原始 API 请求的完全限定类别名称(例如 v1.Pod 或 autoscaling.v1.Scale)。
如果此字段被指定且不同于 "kind" 中的值,则执行等效的匹配和转换。
例如,如果 Deployment 可以通过 apps/v1 和 apps/v1beta1 进行修改,并且 Webhook 注册了
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
和 matchPolicy: Equivalent
的规则,那么指向 apps/v1beta1 Deployment 的 API 请求将被转换并发送到 Webhook,
其中 kind: {group:"apps", version:"v1", kind:"Deployment"}
(与 Webhook 注册的规则匹配)并且 requestKind: {group:"apps", version:"v1beta1", kind:"Deployment"}
(指示原始 API 请求的类别)。
参阅文档了解 Webhook 配置类型中 "matchPolicy" 字段的更多细节。
requestResource
meta/v1.GroupVersionResource
requestResource
是原始 API 请求的全限定资源名称(例如 v1.pods)。
如果此字段被指定且不同于 "resource" 中的值,则执行等效的匹配和转换。
例如,如果 Deployment 可以通过 apps/v1 和 apps/v1beta1 修改,并且 Webhook 注册了
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
和
matchPolicy: Equivalent
的规则,那么指向 apps/v1beta1 Deployment 的 API 请求将被转换并发送到 Webhook,
其中 resource: {group:"apps", version:"v1", resource:"deployments"}
(与 Webhook 注册的资源匹配)以及 requestResource: {group:"apps", version:"v1beta1", resource:"deployments"}
(指示原始 API 请求的资源)。
参阅文档了解 Webhook 配置类型中 "matchPolicy" 字段的更多细节。
requestSubResource
string
requestSubResource
是可能存在的、原始 API 所请求的子资源(例如 "status" 或 "scale")。
如果此字段被指定且不同于 "subResource" 中的值,则执行等效的匹配和转换。
参阅文档了解 Webhook 配置类型中的 "matchPolicy" 字段。
name
string
name
是出现在请求中的对象的名称。客户端在执行 CREATE 操作时,可以忽略此命令并依赖服务器生成此名称。
如果是这种情况,此字段将包含一个空白字符串。
namespace
string
namespace
是与请求(如果有的话)关联的命名空间。
operation
[必需]
Operation
operation
是正在执行的操作。这可能不同于请求的操作,
例如 patch 可以造成 CREATE 或 UPDATE 操作。
userInfo
[必需]
authentication/v1.UserInfo
userInfo
是发出请求的用户的相关信息。
object
k8s.io/apimachinery/pkg/runtime.RawExtension
object
是来自传入请求的对象。
oldObject
k8s.io/apimachinery/pkg/runtime.RawExtension
oldObject
是现有的对象。只有 DELETE 和 UPDATE 请求中此字段会有值。
dryRun
bool
dryRun
表示此请求的修改绝对不会被持久化。默认为 false。
options
k8s.io/apimachinery/pkg/runtime.RawExtension
options
是正在执行的操作的操作选项结构。
例如 meta.k8s.io/v1.DeleteOptions
或 meta.k8s.io/v1.CreateOptions
。
所设置的值可能不同于调用方所提供的选项。例如 patch 请求执行的操作可能是 CREATE,那这种情况下即使调用方提供了
meta.k8s.io/v1.PatchOptions
,options
也将是 meta.k8s.io/v1.CreateOptions
。
AdmissionResponse
出现在:
AdmissionResponse
描述准入响应。
字段 描述
uid
[必需]
k8s.io/apimachinery/pkg/types.UID
uid
是标识单独请求/响应的标识符。
它必须从相应的 AdmissionRequest 复制过来。
allowed
[必需]
bool
allowed
表示准入请求是否被允许。
status
meta/v1.Status
status
包含为什么准入请求被拒绝的额外细节。
如果 "Allowed" 的值为 "true",则不会以任何方式使用此字段。
patch
[]byte
patch
操作的主体。目前 Kubernetes 仅支持实现了 RFC 6902 的 "JSONPatch"。
patchType
PatchType
patch
的类型。目前 Kubernetes 仅允许 "JSONPatch"。
auditAnnotations
map[string]string
auditAnnotations
是由远程准入控制器设置的非结构化键值映射(例如 error=image-blacklisted)。
MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 准入控制器将在键前缀中使用准入 Webhook 名称
(例如 imagepolicy.example.com/error=image-blacklisted)。auditAnnotations
将由准入
Webhook 提供,向此请求的审计日志添加额外的上下文。
warnings
[]string
warnings
是警告消息的列表,返回给发出请求的 API 客户端。
这些警告消息描述客户端在进行 API 请求时应该纠正或注意的问题。
如果可能的话,将 warnings
限制在 120 个字符以内。
如果 warnings
中的消息超过 256 个字符,或 warnings
数量过多,可能会被截断。
Operation
(string
的别名)
出现在:
Operation
是正在检查准入控制时资源操作的类型。
PatchType
(string
的别名)
出现在:
PatchType
是用于表示所变更对象的补丁类型。
14.5 - kube-apiserver Audit 配置(v1)
资源类型
Event
出现在:
Event 结构包含可出现在 API 审计日志中的所有信息。
字段 描述
apiVersion
stringaudit.k8s.io/v1
kind
stringEvent
level
[必需]
Level
生成事件所对应的审计级别。
auditID
[必需]
k8s.io/apimachinery/pkg/types.UID
为每个请求所生成的唯一审计 ID。
stage
[必需]
Stage
生成此事件时请求的处理阶段。
requestURI
[必需]
string
requestURI 是客户端发送到服务器端的请求 URI。
verb
[必需]
string
verb 是与请求对应的 Kubernetes 动词。对于非资源请求,此字段为 HTTP 方法的小写形式。
user
[必需]
authentication/v1.UserInfo
关于认证用户的信息。
impersonatedUser
authentication/v1.UserInfo
关于所伪装(impersonated)的用户的信息。
sourceIPs
[]string
发起请求和中间代理的源 IP 地址。
源 IP 从以下(按顺序)列出:
X-Forwarded-For 请求标头 IP
X-Real-Ip 标头,如果 X-Forwarded-For 列表中不存在
连接的远程地址,如果它无法与此处列表中的最后一个 IP(X-Forwarded-For 或 X-Real-Ip)匹配。
注意:除最后一个 IP 外的所有 IP 均可由客户端任意设置。
userAgent
string
userAgent 中记录客户端所报告的用户代理(User Agent)字符串。
注意 userAgent 信息是由客户端提供的,一定不要信任。
objectRef
ObjectReference
此请求所指向的对象引用。对于 List 类型的请求或者非资源请求,此字段可忽略。
responseStatus
meta/v1.Status
响应的状态,当 responseObject 不是 Status 类型时被赋值。
对于成功的请求,此字段仅包含 code 和 statusSuccess。
对于非 Status 类型的错误响应,此字段会被自动赋值为出错信息。
requestObject
k8s.io/apimachinery/pkg/runtime.Unknown
来自请求的 API 对象,以 JSON 格式呈现。requestObject 在请求中按原样记录
(可能会采用 JSON 重新编码),之后会进入版本转换、默认值填充、准入控制以及配置信息合并等阶段。
此对象为外部版本化的对象类型,甚至其自身可能并不是一个合法的对象。对于非资源请求,此字段被忽略。
只有当审计级别为 Request 或更高的时候才会记录。
responseObject
k8s.io/apimachinery/pkg/runtime.Unknown
响应中包含的 API 对象,以 JSON 格式呈现。responseObject 是在被转换为外部类型并序列化为
JSON 格式之后才被记录的。对于非资源请求,此字段会被忽略。
只有审计级别为 Response 时才会记录。
requestReceivedTimestamp
meta/v1.MicroTime
请求到达 API 服务器时的时间。
stageTimestamp
meta/v1.MicroTime
请求到达当前审计阶段时的时间。
annotations
map[string]string
annotations 是一个无结构的键-值映射,其中保存的是一个审计事件。
该事件可以由请求处理链路上的插件来设置,包括身份认证插件、鉴权插件以及准入控制插件等。
注意这些注解是针对审计事件本身的,与所提交的对象中的 metadata.annotations
之间不存在对应关系。
映射中的键名应该唯一性地标识生成该事件的组件,从而避免名字上的冲突
(例如 podsecuritypolicy.admission.k8s.io/policy)。
映射中的键值应该比较简洁。
当审计级别为 Metadata 时会包含 annotations 字段。
EventList
EventList 是审计事件(Event)的列表。
字段 描述
apiVersion
stringaudit.k8s.io/v1
kind
stringEventList
metadata
meta/v1.ListMeta
列表结构元数据
items
[必需]
[]Event
事件对象列表
Policy
出现在:
Policy 定义的是审计日志的配置以及不同类型请求的日志记录规则。
字段 描述
apiVersion
stringaudit.k8s.io/v1
kind
stringPolicy
metadata
meta/v1.ObjectMeta
包含 metadata
字段是为了便于与 API 基础设施之间实现互操作。
参考 Kubernetes API 文档了解 metadata
字段的详细信息。
rules
[必需]
[]PolicyRule
字段 rules 设置请求要被记录的审计级别(level)。
每个请求可能会与多条规则相匹配;发生这种状况时遵从第一条匹配规则。
默认的审计级别是 None,不过可以在列表的末尾使用一条全抓(catch-all)规则重载其设置。
列表中的规则(PolicyRule)是严格有序的。
omitStages
[]Stage
字段 omitStages 是一个阶段(Stage)列表,其中包含无须生成事件的阶段。
注意这一选项也可以通过每条规则来设置。
审计组件最终会忽略出现在 omitStages 中阶段,也会忽略规则中的阶段。
omitManagedFields
bool
omitManagedFields 标明将请求和响应主体写入 API 审计日志时,是否省略其托管字段。
此字段值用作全局默认值 - 'true' 值将省略托管字段,否则托管字段将包含在 API 审计日志中。
请注意,也可以按规则指定此值,在这种情况下,规则中指定的值将覆盖全局默认值。
PolicyList
PolicyList 是由审计策略(Policy)组成的列表。
字段 描述
apiVersion
stringaudit.k8s.io/v1
kind
stringPolicyList
metadata
meta/v1.ListMeta
列表结构元数据。
items
[必需]
[]Policy
策略(Policy)对象列表。
GroupResources
出现在:
GroupResources 代表的是某 API 组中的资源类别。
字段 描述
group
string
字段 group 给出包含资源的 API 组的名称。
空字符串代表 core
API 组。
resources
[]string
resources
是此规则所适用的资源的列表。
例如:
pods
匹配 Pod。
pods/log
匹配 Pod 的 log 子资源。
* 匹配所有资源及其子资源。
pods/*
匹配 Pod 的所有子资源。
*/scale
匹配所有的 scale 子资源。
如果存在通配符,则合法性检查逻辑会确保 resources 中的条目不会彼此重叠。
空的列表意味着规则适用于该 API 组中的所有资源及其子资源。
resourceNames
[]string
字段 resourceNames 是策略将匹配的资源实例名称列表。
使用此字段时,resources
必须指定。
空的 resourceNames 列表意味着资源的所有实例都会匹配到此策略。
Level
string
数据类型的别名。
出现在:
Level 定义的是审计过程中在日志内记录的信息量。
ObjectReference
出现在:
ObjectReference 包含的是用来检查或修改所引用对象时将需要的全部信息。
字段 描述
resource
string
资源类别。
namespace
string
资源对象所在名字空间。
name
string
资源对象名称。
uid
k8s.io/apimachinery/pkg/types.UID
资源对象的唯一标识(UID)。
apiGroup
string
字段 apiGroup 给出包含所引用对象的 API 组的名称。
空字符串代表 core
API 组。
apiVersion
string
字段 apiVersion 是包含所引用对象的 API 组的版本。
resourceVersion
string
资源对象自身的版本值。
subresource
string
子资源的类别。
PolicyRule
出现在:
PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别。
请求必须与每个字段所定义的规则都匹配(即 rules 的交集)才被视为匹配。
字段 描述
level
[必需]
Level
与此规则匹配的请求所对应的日志记录级别(Level)。
users
[]string
根据身份认证所确定的用户名的列表,给出此规则所适用的用户。
空列表意味着适用于所有用户。
userGroups
[]string
此规则所适用的用户组的列表。如果用户是所列用户组中任一用户组的成员,则视为匹配。
空列表意味着适用于所有用户组。
verbs
[]string
此规则所适用的动词(verb)列表。
空列表意味着适用于所有动词。
resources
[]GroupResources
此规则所适用的资源类别列表。
空列表意味着适用于 API 组中的所有资源类别。
namespaces
[]string
此规则所适用的名字空间列表。
空字符串("")意味着适用于非名字空间作用域的资源。
空列表意味着适用于所有名字空间。
nonResourceURLs
[]string
nonResourceURLs
是一组需要被审计的 URL 路径。
允许使用 *,但只能作为路径中最后一个完整分段。
例如:
"/metrics" - 记录对 API 服务器度量值(metrics)的所有请求;
"/healthz*" - 记录所有健康检查。
omitStages
[]Stage
字段 omitStages 是一个阶段(Stage)列表,针对所列的阶段服务器不会生成审计事件。
注意这一选项也可以在策略(Policy)级别指定。服务器审计组件会忽略
omitStages 中给出的阶段,也会忽略策略中给出的阶段。
空列表意味着不对阶段作任何限制。
omitManagedFields
bool
omitManagedFields
决定将请求和响应主体写入 API 审计日志时,是否省略其托管字段。
值为 'true' 将从 API 审计日志中删除托管字段
值为 'false' 表示托管字段应包含在 API 审计日志中
请注意,如果指定此规则中的值将覆盖全局默认值。
如果未指定,则使用 policy.omitManagedFields 中指定的全局默认值。
Stage
string
数据类型的别名。
出现在:
Stage 定义在请求处理过程中可以生成审计事件的阶段。
14.6 - kube-apiserver 配置 (v1)
v1 包中包含 API 的 v1 版本。
资源类型
AdmissionConfiguration
AdmissionConfiguration 为准入控制器提供版本化的配置。
EncryptionConfiguration
EncryptionConfiguration 存储加密驱动的完整配置。它还允许使用通配符来指定应该被加密的资源。
使用 “*.<group>” 以加密组内的所有资源,或使用 “*.*” 以加密所有资源。
“*.” 可用于加密核心组中的所有资源。“*.*” 将加密所有资源,包括在 API 服务器启动后添加的自定义资源。
由于部分配置可能无效,所以不允许在同一资源列表中或跨多个条目使用重叠的通配符。
资源列表被按顺序处理,会优先处理较早的列表。
示例:
kind: EncryptionConfiguration
apiVersion: apiserver.config.k8s.io/v1
resources:
- resources:
- events
providers:
- identity: {} # 即使以下 *.* 被指定,也不会对事件加密
- resources:
- secrets
- configmaps
- pandas.awesome.bears.example
providers:
- aescbc:
keys:
- name: key1
secret: c2VjcmV0IGlzIHNlY3VyZQ==
- resources:
- '*.apps'
providers:
- aescbc:
keys:
- name: key2
secret: c2VjcmV0IGlzIHNlY3VyZSwgb3IgaXMgaXQ/Cg==
- resources:
- '*.*'
providers:
- aescbc:
keys:
- name: key3
secret: c2VjcmV0IGlzIHNlY3VyZSwgSSB0aGluaw==
字段 描述
apiVersion
stringapiserver.config.k8s.io/v1
kind
stringEncryptionConfiguration
resources
[必需]
[]ResourceConfiguration
resources 是一个包含资源及其对应加密驱动的列表。
AESConfiguration
出现在:
AESConfiguration 包含针对 AES 转换器的 API 配置。
字段 描述
keys
[必需]
[]Key
keys 是一个用于创建 AES 转换器的密钥列表。
对于 AES-CBC,每个密钥的长度必须是 32 字节;
对于 AES-GCM,每个密钥的长度可以是 16、24 或 32 字节。
AdmissionPluginConfiguration
出现在:
AdmissionPluginConfiguration 为某个插件提供配置信息。
字段 描述
name
[必需]
string
name
是准入控制器的名称。它必须与所注册的准入插件名称匹配。
path
string
path
是指向包含插件配置信息的配置文件的路径。
configuration
k8s.io/apimachinery/pkg/runtime.Unknown
configuration
是一个内嵌的配置对象,用来保存插件的配置信息。
如果存在,则使用这里的配置信息而不是指向配置文件的路径。
IdentityConfiguration
出现在:
IdentityConfiguration 是一个空结构体,允许在驱动配置中使用身份转换器。
KMSConfiguration
出现在:
KMSConfiguration 包含 KMS 型信封转换器所用的配置文件的名称、缓存大小和路径。
字段 描述
apiVersion
string
KeyManagementService 的 apiVersion
name
[必需]
string
name 是要使用的 KMS 插件的名称。
cachesize
int32
cachesize 是内存中缓存的最大 Secret 数量。默认值为 1000。
设置为负值将禁用缓存。此字段仅允许用于 KMS v1 驱动。
endpoint
[必需]
string
endpoint 是 gRPC 服务器的监听地址,例如 "unix:///var/run/kms-provider.sock"。
timeout
meta/v1.Duration
timeout 是 gRPC 调用到 KMS 插件的超时时间(例如 5s)。默认值为 3 秒。
Key
出现在:
Key 包含为转换器所提供的密钥的名称和 Secret。
字段 描述
name
[必需]
string
name 是在将数据存储到磁盘时所使用的密钥名称。
secret
[必需]
string
secret 是实际的密钥,以 base64 编码。
ProviderConfiguration
出现在:
ProviderConfiguration 存储为加密驱动提供的配置。
ResourceConfiguration
出现在:
ResourceConfiguration 存储每个资源的配置。
字段 描述
resources
[必需]
[]string
resources 是一个需要加密的 Kubernetes 资源列表。
资源名称来源于组/版本/资源的 “resource
” 或 “resource.group
”。
例如,pandas.awesome.bears.example 是一个自定义资源,其 “group” 为 awesome.bears.example,
“resource” 为 pandas。使用 “*.*” 以加密所有资源,使用 “*.<group>” 以加密特定组中的所有资源。
例如,“*.awesome.bears.example” 将加密 “awesome.bears.example” 组中的所有资源。
再比如,“*.” 将加密核心组中的所有资源(如 Pod、ConfigMap 等)。
providers
[必需]
[]ProviderConfiguration
providers 是从磁盘读取资源和写入资源到磁盘要使用的转换器的列表。
例如:aesgcm、aescbc、secretbox、identity、kms。
SecretboxConfiguration
出现在:
SecretboxConfiguration 包含 Secretbox 转换器的 API 配置。
字段 描述
keys
[必需]
[]Key
keys 是一个用于创建 Secretbox 转换器的密钥列表。每个密钥的长度必须为 32 字节。
14.7 - kube-apiserver 配置 (v1alpha1)
包 v1alpha1 包含 API 的 v1alpha1 版本。
资源类型
TracingConfiguration
出现在:
TracingConfiguration 为 OpenTelemetry 跟踪客户端提供了不同版本的配置。
字段 描述
endpoint
string
采集器的端点,此组件将向其报告跟踪信息。
连接不安全,目前不支持 TLS。
推荐不设置,端点为 otlp grpc 默认值 localhost:4317。
samplingRatePerMillion
int32
SamplingRatePerMillion 是每百万 span 中采集的样本数。
推荐不设置。如果不设置,采集器将继承其父级 span 的采样率,否则不进行采样。
AdmissionConfiguration
AdmissionConfiguration 为准入控制器提供版本化的配置信息。
AuthenticationConfiguration
AuthenticationConfiguration 为身份认证提供版本化的配置。
字段 描述
apiVersion
stringapiserver.k8s.io/v1alpha1
kind
stringAuthenticationConfiguration
jwt
[必需]
[]JWTAuthenticator
jwt 是一个身份认证器列表,用于对使用符合 JWT 的令牌的 Kubernetes 用户进行身份认证。
身份认证器将尝试解析原始 ID 令牌,验证其是否由配置的发放者签名。用于验证签名的公钥是通过
OIDC 发现从颁发者的公开端点获取的。对于传入的令牌,将按照此列表中指定的顺序尝试每个 JWT
身份认证器。但是请注意,其他身份认证器可能会在 JWT 身份认证器之前或之后运行。JWT
身份认证器相对于其他身份认证器的具体位置在不同版本中既未定义也不稳定。由于每个 JWT
身份认证器必须具有唯一的颁发者 URL,因此最多只有一个 JWT 身份认证器会尝试基于密码学方法对对令牌进行合法性检查。
最小有效 JWT 负载必须包含以下声明:
{
"iss": "https://issuer.example.com",
"aud": ["audience"],
"exp": 1234567890,
"<username claim>": "username"
}
anonymous
[必需]
AnonymousAuthConfig
如果设置了此字段,则不得设置 --anonymous-auth
。
AuthorizationConfiguration
字段 描述
apiVersion
stringapiserver.k8s.io/v1alpha1
kind
stringAuthorizationConfiguration
authorizers
[必需]
[]AuthorizerConfiguration
authorizers 是一个有序的鉴权器列表,用于对请求进行鉴权。
这类似于 kube-apiserver --authorization-modes
标志。
此列表不能为空。
EgressSelectorConfiguration
EgressSelectorConfiguration 为 Egress 选择算符客户端提供版本化的配置选项。
字段 描述
apiVersion
stringapiserver.k8s.io/v1alpha1
kind
stringEgressSelectorConfiguration
egressSelections
[必需]
[]EgressSelection
connectionServices
包含一组 Egress 选择算符客户端配置选项。
TracingConfiguration
TracingConfiguration 为跟踪客户端提供版本化的配置信息。
字段 描述
apiVersion
stringapiserver.k8s.io/v1alpha1
kind
stringTracingConfiguration
TracingConfiguration
[必需]
TracingConfiguration
(TracingConfiguration
的成员嵌入到这种类型中。)
嵌入组件配置中的跟踪配置结构体。
AdmissionPluginConfiguration
出现在:
AdmissionPluginConfiguration 为某个插件提供配置信息。
字段 描述
name
[必需]
string
name
是准入控制器的名称。此名称必须与所注册的准入插件名称匹配。
path
string
path
为指向包含插件配置数据的配置文件的路径。
configuration
k8s.io/apimachinery/pkg/runtime.Unknown
configuration
是一个嵌入的配置对象,用作插件的配置数据来源。
如果设置了此字段,则使用此字段而不是指向配置文件的路径。
AnonymousAuthCondition
出现在:
AnonymousAuthCondition 描述了应启用匿名身份认证的条件。
字段 描述
path
[必需]
string
启用匿名身份认证的路径。
AnonymousAuthConfig
出现在:
AnonymousAuthConfig 为匿名身份认证器提供配置信息。
AudienceMatchPolicyType
(string
类型的别名)
出现在:
AudienceMatchPolicyType 是 issuer.audienceMatchPolicy 合法值的集合
AuthorizerConfiguration
出现在:
字段 描述
type
[必需]
string
type 指的是鉴权器的类型。
通用 API 服务器支持 "Webhook"。
其他 API 服务器可能支持其他授权者类型,如 Node、RBAC、ABAC 等。
name
[必需]
string
name 是用于描述 webhook 的名称。
此字段专为监控机制中的指标提供。
注意:name 值必须是 DNS1123 标签,如 myauthorizername
,
或子域名,如 myauthorizer.example.domain
。
必需,没有默认值。
webhook
[必需]
WebhookConfiguration
webhook 定义 Webhook 鉴权器的配置。
当 type=Webhook 时必须定义。
当 type!=Webhook 时不得定义。
ClaimMappings
出现在:
ClaimMappings 为声明映射提供配置信息
字段 描述
username
[必需]
PrefixedClaimOrExpression
username 表示用户名属性的一个选项。
声明的值必须是单一字符串。
与 --oidc-username-claim
和 --oidc-username-prefix
标志相同。
如果设置了 username.expression
,则该表达式必须生成一个字符串值。
如果 username.expression
使用 'claims.email',则必须在
username.expression
或 extra[*].valueExpression
或 claimValidationRules[*].expression
中使用 'claims.email_verified'。
这里有一个声明验证规则表达式的示例,当 username.claim 设置为 'email' 时与自动应用的验证所匹配:
'claims.?email_verified.orValue(true)'。
在基于标志的方法中,--oidc-username-claim 和 --oidc-username-prefix
是可选的。如果未设置 --oidc-username-claim,默认值为 "sub"。
对于身份认证配置,声明或前缀都没有默认值。声明和前缀必须显式设置。
对于声明,如果在传统标志方法中未设置 --oidc-username-claim,
请在身份认证配置中配置 username.claim="sub"。
对于前缀:
(1) --oidc-username-prefix="-", 未添加前缀到用户名。要实现相同的行为,请在身份认证配置中设置
username.prefix=""
(2) --oidc-username-prefix="" 并且 --oidc-username-claim != "email",
前缀为 "<--oidc-issuer-url 的值>#"。要实现相同的行为,请在身份认证配置中设置
username.prefix="<issuer.url 的值>#"。
(3) --oidc-username-prefix="<value>"。要实现相同的行为,请在身份认证配置中设置
username.prefix="<value>"。
groups
PrefixedClaimOrExpression
groups 表示 groups 属性的一个选项。
其中 claim 字段的值必须是字符串或字符串数组。
如果设置了 groups.claim,则必须指定 prefix 字段(可以是空字符串)。
如果设置了 groups.expression,则该表达式必须生成一个字符串或字符串数组值。
""、[] 和 null 值被视为不存在组映射。
uid
ClaimOrExpression
uid 表示 uid 属性的一个选项。
其中的 claim 字段必须是一个字符串。
如果设置了 uid.expression,则该表达式必须生成一个字符串值。
extra
[]ExtraMapping
extra 表示 extra 属性的一个选项。
expression 必须生成一个字符串或字符串数组值。
如果值为空,则不会存在 extra 映射。
硬编码的额外 key/value
- key: "foo"
valueExpression: "'bar'"
这将导致一个额外的属性 - foo: ["bar"]
硬编码 key,value 从声明的值复制
- key: "foo"
valueExpression: "claims.some_claim"
结果会是一个 extra 属性 - foo: [some_claim 的值]
硬编码 key,value 从声明的值派生
- key: "admin"
valueExpression: '(has(claims.is_admin) && claims.is_admin) ? "true":""'
这将导致:
如果 is_admin 声明存在且为 true,则添加 extra 属性 - admin: ["true"]
如果 is_admin 声明存在且为 false 或 is_admin 声明不存在,则不会添加 extra 属性
ClaimOrExpression
出现在:
ClaimOrExpression 为单个声明或表达式提供配置信息。
字段 描述
claim
string
claim 是要使用的 JWT 声明。
claim 或 expression 必须设置一个。
与 expression 互斥。
expression
string
expression 表示将由 CEL 求值的表达式。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
与 claim 互斥。
ClaimValidationRule
出现在:
ClaimValidationRule 为单个声明验证规则提供配置信息。
字段 描述
claim
string
claim 是所需要的声明的名称。
与 --oidc-required-claim 标志相同。
仅支持用字符串声明键。
与 expression 和 message 互斥。
requiredValue
string
requiredValue 是声明中必须包含的值。
与 --oidc-required-claim 标志相同。
仅支持用字符串声明值。
如果设置了 claim 而未设置 requiredValue,则 claim 必须存在且值必须设置为空字符串。
与 expression 和 message 互斥。
expression
string
expression 表示将由 CEL 求值的表达式。
必须生成一个布尔值。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
必须返回 true,才有可能通过检查。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
与 claim 和 requiredValue 互斥。
message
string
message 自定义当 expression 返回 false 时的错误消息。
message 是一个文本字符串。
与 claim 和 requiredValue 互斥。
Connection
出现在:
Connection 提供某个出站选择客户端的配置信息。
字段 描述
proxyProtocol
[必需]
ProtocolType
proxyProtocol
是客户端连接到 konnectivity 服务器所使用的协议。
transport
Transport
transport
定义的是传输层的配置。我们使用这个配置来联系 konnectivity 服务器。
当 proxyProtocol
是 HTTPConnect 或 GRPC 时需要设置此字段。
EgressSelection
出现在:
EgressSelection 为某个出站选择客户端提供配置信息。
字段 描述
name
[必需]
string
name
是 Egress 选择器的名称。当前支持的取值有 "controlplane",
"master","etcd" 和 "cluster"。
"master" Egress 选择器已被弃用,推荐使用 "controlplane"。
connection
[必需]
Connection
connection
是用来配置 Egress 选择器的配置信息。
出现在:
ExtraMapping 为单个 extra 映射提供配置信息。
字段 描述
key
[必需]
string
key 是用作 extra 属性键的字符串。
key 必须是域前缀路径(例如 example.org/foo)。第一个 "/" 之前的所有字符必须是符合
RFC 1123 定义的有效子域名。第一个 "/" 之后的所有字符必须是符合 RFC 3986
定义的有效 HTTP 路径字符。
key 必须是小写。必须是唯一的。
valueExpression
[必需]
string
valueExpression 是一个 CEL 表达式,用于提取 extra 中的属性值。
valueExpression 必须生成一个字符串或字符串数组值。
""、[] 和 null 值被视为不存在 extra 映射。
字符串数组中包含的空字符串值将被过滤掉。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
Issuer
出现在:
Issuer 为外部提供者的特定设置提供配置。
字段 描述
url
[必需]
string
url 指向颁发者 URL,格式为 https://url 或 https://url/path。
此 URL 必须与所提供的 JWT 中的 "iss" 声明以及从发现中返回的颁发者匹配。
与 --oidc-issuer-url 标志的值相同。
除非被 discoveryURL 覆盖,否则发现信息将从 "{url}/.well-known/openid-configuration" 获取。
在所有 JWT 身份认证器中必须唯一。
请注意,此网络连接不使用出站流量选择配置。
discoveryURL
string
discoveryURL(如果指定)会覆盖用于获取发现信息的 URL,而不是使用
"{url}/.well-known/openid-configuration"。
使用指定的确切值,因此如果需要,必须在 discoveryURL 中包含
"/.well-known/openid-configuration"。
所获取的发现信息中的 "issuer" 字段必须与 AuthenticationConfiguration
中的 "issuer.url" 字段匹配,并将用于检验所提供的 JWT 中的 "iss" 声明。
这适用于 well-known 和 jwks 端点托管在与颁发者不同的位置(例如在集群中本地托管)的场景。
示例:
发现 URL 是通过 Kubernetes 在命名空间 'oidc-namespace' 中的服务 'oidc' 公布的,
而访问 '/.well-known/openid-configuration' 可以获得发现信息。
discoveryURL: "https://oidc.oidc-namespace/.well-known/openid-configuration"
certificateAuthority 用于验证 TLS 连接,叶证书上的主机名必须设置为 'oidc.oidc-namespace'。
curl https://oidc.oidc-namespace/.well-known/openid-configuration (discoveryURL 字段)
{
issuer: "https://oidc.example.com" (url 字段)
}
discoveryURL 必须与 url 不同。
在所有 JWT 身份认证器中必须唯一。
请注意,此网络连接不使用出站流量选择配置。
certificateAuthority
string
certificateAuthority 包含 PEM 编码的证书颁发机构证书,
用于在获取发现信息时验证连接。
如果未设置,则使用系统验证器。
与 --oidc-ca-file 标志引用的文件内容相同。
audiences
[必需]
[]string
audiences 是 JWT 必须签发给的可接受受众集。
所提供的 JWT 中的 "aud" 声明必须至少与其中一个条目匹配。
与 --oidc-client-id 标志的值相同(尽管此字段支持数组)。
必须为非空。
audienceMatchPolicy
AudienceMatchPolicyType
audienceMatchPolicy 定义了如何使用 "audiences" 字段来匹配所提供的 JWT 中的 "aud" 声明。
允许的值有:
"MatchAny" 当指定多个受众时
空(或未设置)或 "MatchAny" (仅指定单个受众时)
MatchAny:所提供的 JWT 中的 "aud" 声明必须至少与 "audiences"
字段中的一个条目匹配。例如,如果 "audiences" 是 ["foo", "bar"],
则所提供的 JWT 中的 "aud" 声明必须包含 "foo" 或 "bar"(也可以同时包含两者)。
"":当 "audiences" 字段中指定单个受众时,匹配策略可以为空(或未设置)。
所提供的 JWT 中的 "aud" 声明必须包含该单个受众(并且可以包含其他受众)。
对于更精细的受众验证,请使用 claimValidationRules。
示例:claimValidationRule[].expression:
'sets.equivalent(claims.aud, ["bar", "foo", "baz"])'
以要求精确匹配。
JWTAuthenticator
出现在:
JWTAuthenticator 为单个 JWT 身份认证器提供配置信息。
字段 描述
issuer
[必需]
Issuer
issuer 包含基本的 OIDC 提供者连接选项。
claimValidationRules
[]ClaimValidationRule
claimValidationRules 是用于验证令牌声明以认证用户的规则。
claimMappings
[必需]
ClaimMappings
claimMappings 指向要视为用户属性的令牌声明。
userValidationRules
[]UserValidationRule
userValidationRules 是在完成身份认证之前应用于最终用户的规则。
这些规则允许将不变量应用于传入的身份,例如禁止使用 Kubernetes 组件常用的 system:
前缀。
验证规则在逻辑上是 AND 关系,必须全部返回 true 才能通过验证。
PrefixedClaimOrExpression
出现在:
PrefixedClaimOrExpression 为单个带前缀的声明或表达式提供配置。
字段 描述
claim
string
claim 是要使用的 JWT 声明。与 expression 互斥。
prefix
string
prefix 是添加到声明值前面的前缀,以防止与现有名称冲突。
如果设置了 claim,则需要设置 prefix,并且可以是空字符串。
与 expression 互斥。
expression
string
expression 表示将由 CEL 评估的表达式。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
与 claim 和 prefix 互斥。
ProtocolType
(string
类型的别名)
出现在:
ProtocolType 是 connection.protocolType
的合法值集合。
TCPTransport
出现在:
TCPTransport 提供使用 TCP 连接 konnectivity 服务器时需要的信息。
字段 描述
url
[必需]
string
url
是要连接的 konnectivity 服务器的位置。例如 "https://127.0.0.1:8131"。
tlsConfig
TLSConfig
tlsConfig
是使用 TLS 来连接 konnectivity 服务器时需要的信息。
TLSConfig
出现在:
TLSConfig 为连接 konnectivity 服务器提供身份认证信息。仅用于 TCPTransport。
字段 描述
caBundle
string
caBundle
是指向用来确定与 konnectivity 服务器间信任欢喜的 CA 证书包的文件位置。
当 tcpTransport.url
前缀为 "http://" 时必须不设置,或者设置为空。
如果 tcpTransport.url
前缀为 "https://" 并且此字段未设置,则默认使用系统的信任根。
clientKey
string
clientKey
是与 konnectivity 服务器进行 mTLS 握手时使用的客户端秘钥文件位置。
如果 `tcp.url` 前缀为 http://
,必须不指定或者为空;
如果 `tcp.url` 前缀为 https://
,必须设置。
clientCert
string
clientCert
是与 konnectivity 服务器进行 mTLS 握手时使用的客户端证书文件位置。
如果 `tcp.url` 前缀为 http://
,必须不指定或者为空;
如果 `tcp.url` 前缀为 https://
,必须设置。
Transport
出现在:
Transport 定义联系 konnectivity 服务器时要使用的传输层配置。
字段 描述
tcp
TCPTransport
tcp
包含通过 TCP 与 konnectivity 服务器通信时使用的 TCP 配置。
目前使用 TCP 传输时不支持 GRPC 的 proxyProtocol
。
tcp
和 uds
二者至少设置一个。
uds
UDSTransport
uds
包含通过 UDS 与 konnectivity 服务器通信时使用的 UDS 配置。
tcp
和 uds
二者至少设置一个。
UDSTransport
出现在:
UDSTransport 设置通过 UDS 连接 konnectivity 服务器时需要的信息。
字段 描述
udsName
[必需]
string
udsName
是与 konnectivity 服务器连接时使用的 UNIX 域套接字名称。
字段取值不要求包含 unix://
前缀。
(例如:/etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket
)
UserValidationRule
出现在:
UserValidationRule 为单个用户信息验证规则提供配置信息。
字段 描述
expression
[必需]
string
expression 表示将由 CEL 求值的表达式。
验证通过时必须返回 true。
CEL 表达式可以访问 UserInfo 的内容,这些内容被组织成 CEL 变量:
'user' - authentication.k8s.io/v1,Kind=UserInfo 对象
关于 UserInfo 的定义,参阅 https://github.com/kubernetes/api/blob/release-1.28/authentication/v1/types.go#L105-L122。
API 文档:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#userinfo-v1-authentication-k8s-io
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
message
string
message 自定义当规则返回 false 时的错误消息。
message 是一个文本字符串。
WebhookConfiguration
出现在:
字段 描述
authorizedTTL
[必需]
meta/v1.Duration
对来自 Webhook 鉴权组件的 “authorized” 响应的缓存时长。
与设置 --authorization-webhook-cache-authorized-ttl
标志相同。
默认值:5m0s。
unauthorizedTTL
[Required]
meta/v1.Duration
对来自 Webhook 鉴权组件的 “unauthorized” 响应的缓存时长。
与设置 --authorization-webhook-cache-unauthorized-ttl
标志相同。
默认值:30s
timeout
[必需]
meta/v1.Duration
Webhook 请求超时时间。允许的最大时间为 30 秒。
必需,没有默认值。
subjectAccessReviewVersion
[必需]
string
要发送到 Webhook 并期望从 Webhook 获得的 authorization.k8s.io SubjectAccessReview 的 API 版本。
与设置 --authorization-webhook-version
标志相同。
有效值:v1beta1、v1。必需,无默认值
matchConditionSubjectAccessReviewVersion
[必需]
string
matchConditionSubjectAccessReviewVersion 指定对 CEL 表达式求值时使用的 SubjectAccessReview 版本。
有效值:v1。必需,无默认值。
failurePolicy
[必需]
string
控制当 Webhook 请求无法完成或返回格式错误的响应或计算 matchConditions 出现错误时的鉴权决定。
有效值:
NoOpinion:继续执行后续鉴权组件,看其中是否有组件允许该请求;
Deny:拒绝请求而不考虑后续鉴权组件。
必需,没有默认值。
connectionInfo
[必需]
WebhookConnectionInfo
connectionInfo 定义 Webhook 如何与服务器通信。
matchConditions
[必需]
[]WebhookMatchCondition
matchConditions 是将请求发送到此 Webhook 必须满足的条件列表。matchConditions 为空列表表示匹配所有请求。
最多允许 64 个匹配条件。
精确匹配逻辑如下(按顺序):
如果至少一个 matchCondition 计算结果为 FALSE,则跳过 Webhook。
如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。
如果至少一个 matchCondition 计算结果为错误(但没有一个为 FALSE):
如果 FailurePolicy=Deny,则 Webhook 拒绝请求
如果 FailurePolicy=NoOpinion,则忽略错误并跳过 Webhook
WebhookConnectionInfo
出现在:
字段 描述
type
[必需]
string
控制 Webhook 如何与服务器通信。有效值:
KubeConfigFile:使用 kubeConfigFile
中指定的文件来定位服务器。
InClusterConfig:使用集群内配置来调用由 kube-apiserver 托管的
SubjectAccessReview API,kube-apiserver 不允许使用此模式。
kubeConfigFile
[必需]
string
包含连接信息的 KubeConfig 文件的路径。
如果 connectionInfo.type 是 KubeConfig,则为必需项。
WebhookMatchCondition
出现在:
字段 描述
expression
[必需]
string
表达式表示将由 CEL 求值的表达式。求值结果必须为布尔值。
CEL 表达式可以访问 v1 版本中的 SubjectAccessReview 的内容。
如果请求变量中 subjectAccessReviewVersion 指定的版本是 v1beta1,
在计算 CEL 表达式之前,内容将被转换为 v1 版本。
关于 CEL 文档: https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
14.8 - kube-apiserver 配置 (v1beta1)
v1beta1 包是 v1beta1 版本的 API。
资源类型
TracingConfiguration
出现在:
TracingConfiguration 为 OpenTelemetry 跟踪客户端提供版本化的配置。
字段 描述
endpoint
string
采集器的端点,此组件将向其报告跟踪信息。
连接不安全,目前不支持 TLS。
推荐不设置,端点为 otlp grpc 默认值 localhost:4317。
samplingRatePerMillion
int32
samplingRatePerMillion 是每百万 span 中采集的样本数。
推荐不设置。如果不设置,采集器将继承其父级 span 的采样率,否则不进行采样。
AuthenticationConfiguration
AuthenticationConfiguration 为身份认证提供版本化的配置。
字段 描述
apiVersion
stringapiserver.k8s.io/v1beta1
kind
stringAuthenticationConfiguration
jwt
[必需]
[]JWTAuthenticator
jwt 是一个身份认证器列表,用于对使用符合 JWT 的令牌的 Kubernetes 用户进行身份认证。
身份认证器将尝试解析原始 ID 令牌,验证其是否由配置的发放者签名。用于验证签名的公钥是通过
OIDC 发现从颁发者的公开端点获取的。对于传入的令牌,将按照此列表中指定的顺序尝试每个 JWT
身份认证器。但是请注意,其他身份认证器可能会在 JWT 身份认证器之前或之后运行。JWT
身份认证器相对于其他身份认证器的具体位置在不同版本中既未定义也不稳定。由于每个 JWT
身份认证器必须具有唯一的颁发者 URL,因此最多只有一个 JWT 身份认证器会尝试基于密码学方法对令牌进行合法性检查。
最小有效 JWT 负载必须包含以下声明:
{
"iss": "https://issuer.example.com",
"aud": ["audience"],
"exp": 1234567890,
"<username claim>": "username"
}
anonymous
[必需]
AnonymousAuthConfig
如果设置了此字段,则不得设置 --anonymous-auth
。
AuthorizationConfiguration
字段 描述
apiVersion
stringapiserver.k8s.io/v1beta1
kind
stringAuthorizationConfiguration
authorizers
[必需]
[]AuthorizerConfiguration
authorizers 是一个有序的鉴权器列表,用于对请求进行鉴权。
这类似于 kube-apiserver --authorization-modes
标志。
此列表不能为空。
EgressSelectorConfiguration
EgressSelectorConfiguration 为出站流量选择器客户端(Egress Selector Client)提供版本化的配置选项。
字段 描述
apiVersion
stringapiserver.k8s.io/v1beta1
kind
stringEgressSelectorConfiguration
egressSelections
[必需]
[]EgressSelection
connectionServices 包含一组出站流量选择器客户端(Egress Selector Client)配置选项。
TracingConfiguration
TracingConfiguration 为跟踪客户端提供版本化的配置信息。
字段 描述
apiVersion
stringapiserver.k8s.io/v1beta1
kind
stringTracingConfiguration
TracingConfiguration
[必需]
TracingConfiguration
(TracingConfiguration
的成员嵌入到这种类型中。)
嵌入组件配置中的跟踪配置结构体。
AnonymousAuthCondition
出现在:
AnonymousAuthCondition 描述了应启用匿名身份认证的条件。
字段 描述
path
[必需]
string
启用匿名身份认证的路径。
AnonymousAuthConfig
出现在:
AnonymousAuthConfig 为匿名身份认证器提供配置信息。
AudienceMatchPolicyType
(string
类型的别名)
出现在:
AudienceMatchPolicyType 是 issuer.audienceMatchPolicy 合法值的集合
AuthorizerConfiguration
出现在:
字段 描述
type
[必需]
string
type 指的是鉴权器的类型。
通用 API 服务器支持 "Webhook"。
其他 API 服务器可能支持其他鉴权器类型,如 Node、RBAC、ABAC 等。
name
[必需]
string
name 是用于描述 webhook 的名称。
此字段专为监控机制中的指标提供。
注意:name 值必须是 DNS1123 标签,如 myauthorizername
,
或子域名,如 myauthorizer.example.domain
。
必需,没有默认值。
webhook
[必需]
WebhookConfiguration
webhook 定义 Webhook 鉴权器的配置。
当 type=Webhook 时必须定义。
当 type!=Webhook 时不得定义。
ClaimMappings
出现在:
ClaimMappings 为声明映射提供配置信息
字段 描述
username
[必需]
PrefixedClaimOrExpression
username 表示用户名属性的一个选项。
声明的值必须是单一字符串。
与 --oidc-username-claim
和 --oidc-username-prefix
标志相同。
如果设置了 username.expression
,则该表达式必须生成一个字符串值。
如果 username.expression
使用 'claims.email',则必须在
username.expression
或 extra[*].valueExpression
或 claimValidationRules[*].expression
中使用 'claims.email_verified'。
这里有一个声明验证规则表达式的示例,当 username.claim 设置为 'email' 时与自动应用的验证所匹配:
'claims.?email_verified.orValue(true)'。
在基于标志的方法中,--oidc-username-claim 和 --oidc-username-prefix
是可选的。如果未设置 --oidc-username-claim,默认值为 "sub"。
对于身份认证配置,声明或前缀都没有默认值。声明和前缀必须显式设置。
对于声明,如果在传统标志方法中未设置 --oidc-username-claim,
请在身份认证配置中配置 username.claim="sub"。
对于前缀:
(1) --oidc-username-prefix="-", 未添加前缀到用户名。要实现相同的行为,请在身份认证配置中设置
username.prefix=""
(2) --oidc-username-prefix="" 并且 --oidc-username-claim != "email",
前缀为 "<--oidc-issuer-url 的值>#"。要实现相同的行为,请在身份认证配置中设置
username.prefix="<issuer.url 的值>#"。
(3) --oidc-username-prefix="<value>"。要实现相同的行为,请在身份认证配置中设置
username.prefix="<value>"。
groups
PrefixedClaimOrExpression
groups 表示 groups 属性的一个选项。
其中 claim 字段的值必须是字符串或字符串数组。
如果设置了 groups.claim,则必须指定 prefix 字段(可以是空字符串)。
如果设置了 groups.expression,则该表达式必须生成一个字符串或字符串数组值。
""、[] 和 null 值被视为不存在组映射。
uid
ClaimOrExpression
uid 表示 uid 属性的一个选项。
其中的 claim 字段必须是一个字符串。
如果设置了 uid.expression,则该表达式必须生成一个字符串值。
extra
[]ExtraMapping
extra 表示 extra 属性的一个选项。
expression 必须生成一个字符串或字符串数组值。
如果值为空,则不会存在 extra 映射。
硬编码的额外 key/value
- key: "foo"
valueExpression: "'bar'"
这将导致一个额外的属性 - foo: ["bar"]
硬编码 key,value 从声明的值复制
- key: "foo"
valueExpression: "claims.some_claim"
结果会是一个 extra 属性 - foo: [some_claim 的值]
硬编码 key,value 从声明的值派生
- key: "admin"
valueExpression: '(has(claims.is_admin) && claims.is_admin) ? "true":""'
这将导致:
如果 is_admin 声明存在且为 true,则添加 extra 属性 - admin: ["true"]
如果 is_admin 声明存在且为 false 或 is_admin 声明不存在,则不会添加 extra 属性
ClaimOrExpression
出现在:
ClaimOrExpression 为单个声明或表达式提供配置信息。
字段 描述
claim
string
claim 是要使用的 JWT 声明。
claim 或 expression 必须设置一个。
与 expression 互斥。
expression
string
expression 表示将由 CEL 求值的表达式。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
与 claim 互斥。
ClaimValidationRule
出现在:
ClaimValidationRule 为单个声明验证规则提供配置信息。
字段 描述
claim
string
claim 是所需要的声明的名称。
与 --oidc-required-claim 标志相同。
仅支持用字符串声明键。
与 expression 和 message 互斥。
requiredValue
string
requiredValue 是声明中必须包含的值。
与 --oidc-required-claim 标志相同。
仅支持用字符串声明值。
如果设置了 claim 而未设置 requiredValue,则 claim 必须存在且值必须设置为空字符串。
与 expression 和 message 互斥。
expression
string
expression 表示将由 CEL 求值的表达式。
必须生成一个布尔值。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
必须返回 true,才有可能通过检查。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
与 claim 和 requiredValue 互斥。
message
string
message 自定义当 expression 返回 false 时的错误消息。
message 是一个字符串文字。
与 claim 和 requiredValue 互斥。
Connection
出现在:
Connection 提供某个出站流量选择器客户端(Egress Selector Client)的配置信息。
字段 描述
proxyProtocol
[必需]
ProtocolType
proxyProtocol 是客户端连接到 konnectivity 服务器所使用的协议。
transport
Transport
transport 定义的是传输层的配置。我们使用这个配置来联系 konnectivity 服务器。
当 proxyProtocol 是 HTTPConnect 或 GRPC 时需要设置此字段。
EgressSelection
出现在:
EgressSelection 为某个出站流量选择器客户端(Egress Selector Client)提供配置信息。
字段 描述
name
[必需]
string
name 是出站流量选择(egress selection)的名称。当前支持的取值有 "controlplane",
"master","etcd" 和 "cluster"。
"master" 出站流量选择(egress selection)已被弃用,推荐使用 "controlplane"。
connection
[必需]
Connection
connection 是用来配置出站流量选择(egress selection)的确切信息。
出现在:
ExtraMapping 为单个 extra 映射提供配置信息。
字段 描述
key
[必需]
string
key 是用作 extra 属性键的字符串。
key 必须是域前缀路径(例如 example.org/foo)。第一个 "/" 之前的所有字符必须是符合
RFC 1123 定义的有效子域名。第一个 "/" 之后的所有字符必须是符合 RFC 3986
定义的有效 HTTP 路径字符。
key 必须是小写。
必须是唯一的。
valueExpression
[必需]
string
valueExpression 是一个 CEL 表达式,用于提取 extra 中的属性值。
valueExpression 必须生成一个字符串或字符串数组值。
""、[] 和 null 值被视为不存在 extra 映射。
字符串数组中包含的空字符串值将被过滤掉。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
Issuer
出现在:
Issuer 为外部提供者的特定设置提供配置。
字段 描述
url
[必需]
string
url 指向颁发者 URL,格式为 https://url 或 https://url/path。
此 URL 必须与所提供的 JWT 中的 "iss" 声明以及从发现中返回的颁发者匹配。
与 --oidc-issuer-url 标志的值相同。
除非被 discoveryURL 覆盖,否则发现信息将从 "{url}/.well-known/openid-configuration" 获取。
在所有 JWT 身份认证器中必须唯一。
请注意,此网络连接不使用出站流量选择配置。
discoveryURL
string
discoveryURL(如果指定)会覆盖用于获取发现信息的 URL,而不是使用
"{url}/.well-known/openid-configuration"。
使用指定的确切值,因此如果需要,必须在 discoveryURL 中包含
"/.well-known/openid-configuration"。
所获取的发现信息中的 "issuer" 字段必须与 AuthenticationConfiguration
中的 "issuer.url" 字段匹配,并将用于检验所提供的 JWT 中的 "iss" 声明。
这适用于 well-known 和 jwks 端点托管在与颁发者不同的位置(例如在集群中本地托管)的场景。
示例:
发现 URL 是通过 Kubernetes 在命名空间 'oidc-namespace' 中的服务 'oidc' 公布的,
而访问 '/.well-known/openid-configuration' 可以获得发现信息。
discoveryURL: "https://oidc.oidc-namespace/.well-known/openid-configuration"
certificateAuthority 用于验证 TLS 连接,叶证书上的主机名必须设置为 'oidc.oidc-namespace'。
curl https://oidc.oidc-namespace/.well-known/openid-configuration (discoveryURL 字段)
{
issuer: "https://oidc.example.com" (url 字段)
}
discoveryURL 必须与 url 不同。
在所有 JWT 身份认证器中必须唯一。
请注意,此网络连接不使用出站流量选择配置。
certificateAuthority
string
certificateAuthority 包含 PEM 编码的证书颁发机构证书,
用于在获取发现信息时验证连接。
如果未设置,则使用系统验证器。
与 --oidc-ca-file 标志引用的文件内容相同。
audiences
[必需]
[]string
audiences 是 JWT 必须签发给的可接受受众集。
所提供的 JWT 中的 "aud" 声明必须至少与其中一个条目匹配。
与 --oidc-client-id 标志的值相同(尽管此字段支持数组)。
必须为非空。
audienceMatchPolicy
AudienceMatchPolicyType
audienceMatchPolicy 定义了如何使用 "audiences" 字段来匹配所提供的 JWT 中的 "aud" 声明。
允许的值有:
"MatchAny" 当指定多个受众时
空(或未设置)或 "MatchAny" (仅指定单个受众时)
MatchAny:所提供的 JWT 中的 "aud" 声明必须至少与 "audiences"
字段中的一个条目匹配。
例如,如果 "audiences" 是 ["foo", "bar"],则所提供的
JWT 中的 "aud" 声明必须包含 "foo" 或 "bar"(也可以同时包含两者)。
"":当 "audiences" 字段中指定单个受众时,匹配策略可以为空(或未设置)。
所提供的 JWT 中的 "aud" 声明必须包含该单个受众(并且可以包含其他受众)。
对于更精细的受众验证,请使用 claimValidationRules。
示例:claimValidationRule[].expression: 'sets.equivalent(claims.aud, ["bar", "foo", "baz"])'
以要求精确匹配。
JWTAuthenticator
出现在:
JWTAuthenticator 为单个 JWT 身份认证器提供配置信息。
字段 描述
issuer
[必需]
Issuer
issuer 包含基本的 OIDC 提供者连接选项。
claimValidationRules
[]ClaimValidationRule
claimValidationRules 是用于验证令牌声明以认证用户的规则。
claimMappings
[必需]
ClaimMappings
claimMappings 指向要视为用户属性的令牌声明。
userValidationRules
[]UserValidationRule
userValidationRules 是在完成身份认证之前应用于最终用户的规则。
这些规则允许将不变量应用于传入的身份,例如禁止使用 Kubernetes 组件常用的 system:
前缀。
验证规则在逻辑上是 AND 关系,必须全部返回 true 才能通过验证。
PrefixedClaimOrExpression
出现在:
PrefixedClaimOrExpression 为单个带前缀的声明或表达式提供配置。
字段 描述
claim
string
claim 是要使用的 JWT 声明。
与 expression 互斥。
prefix
string
prefix 是添加到声明值前面的前缀,以防止与现有名称冲突。
如果设置了 claim,则需要设置 prefix,并且可以是空字符串。
与 expression 互斥。
expression
string
expression 表示将由 CEL 评估的表达式。
CEL 表达式可以访问令牌声明的内容,这些内容被组织成 CEL 变量:
'claims' 是声明名称到声明值的映射。
例如,一个名为 'sub' 的变量可以通过 'claims.sub' 访问。
嵌套的声明可以使用点表示法访问,例如 'claims.foo.bar'。
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
与 claim 和 prefix 互斥。
ProtocolType
(string
类型的别名)
出现在:
ProtocolType 是 connection.protocolType 的合法值集合。
TCPTransport
出现在:
TCPTransport 提供使用 TCP 连接 konnectivity 服务器时需要的信息。
字段 描述
url
[必需]
string
url 是要连接的 konnectivity 服务器的位置。例如 "https://127.0.0.1:8131"。
tlsConfig
TLSConfig
tlsConfig 是使用 TLS 来连接 konnectivity 服务器时需要的信息。
TLSConfig
出现在:
TLSConfig 为连接 konnectivity 服务器提供身份认证信息。仅用于 TCPTransport。
字段 描述
caBundle
string
caBundle 是指向用来确定与 konnectivity 服务器间信任关系的 CA 证书包的文件位置。
如果 TCPTransport.URL 前缀为 "http://" 时必须不设置,或者设置为空。
如果 TCPTransport.URL 前缀为 "https://" 并且此字段未设置,则默认使用系统的信任根。
clientKey
string
clientKey 是与 konnectivity 服务器进行 mTLS 握手时使用的客户端秘钥文件位置。
如果 TCPTransport.URL 前缀为 http://,必须不指定或者为空;
如果 TCPTransport.URL 前缀为 https://,必须设置。
clientCert
string
clientCert
是与 konnectivity 服务器进行 mTLS 握手时使用的客户端证书文件位置。
如果 TCPTransport.URL 前缀为 http://,必须不指定或者为空;
如果 TCPTransport.URL 前缀为 https://,必须设置。
Transport
出现在:
Transport 定义联系 konnectivity 服务器时要使用的传输层配置。
字段 描述
tcp
TCPTransport
tcp 包含通过 TCP 与 konnectivity 服务器通信时使用的 TCP 配置。
目前使用 TCP 传输时不支持 GRPC 的 proxyProtocol。
tcp 和 uds 二者至少设置一个。
uds
UDSTransport
uds 包含通过 UDS 与 konnectivity 服务器通信时使用的 UDS 配置。
tcp 和 uds 二者至少设置一个。
UDSTransport
出现在:
UDSTransport 设置通过 UDS 连接 konnectivity 服务器时需要的信息。
字段 描述
udsName
[必需]
string
udsName 是与 konnectivity 服务器连接时使用的 UNIX 域套接字名称。
字段取值不要求包含 unix:// 前缀。
(例如:/etc/srv/kubernetes/konnectivity-server/konnectivity-server.socket)
UserValidationRule
出现在:
UserValidationRule 为单个用户信息验证规则提供配置信息。
字段 描述
expression
[必需]
string
expression 表示将由 CEL 求值的表达式。
验证通过时必须返回 true。
CEL 表达式可以访问 UserInfo 的内容,这些内容被组织成 CEL 变量:
'user' - authentication.k8s.io/v1,Kind=UserInfo 对象
关于 UserInfo 的定义,参阅 https://github.com/kubernetes/api/blob/release-1.28/authentication/v1/types.go#L105-L122。
API 文档:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#userinfo-v1-authentication-k8s-io
关于 CEL 的文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
message
string
message 自定义当规则返回 false 时的错误消息。
message 是一个字符串文字。
WebhookConfiguration
出现在:
字段 描述
authorizedTTL
[必需]
meta/v1.Duration
对来自 Webhook 鉴权组件的 “authorized” 响应的缓存时长。
与设置 --authorization-webhook-cache-authorized-ttl
标志相同。
默认值:5m0s。
unauthorizedTTL
[Required]
meta/v1.Duration
对来自 Webhook 鉴权组件的 “unauthorized” 响应的缓存时长。
与设置 --authorization-webhook-cache-unauthorized-ttl
标志相同。
默认值:30s
timeout
[必需]
meta/v1.Duration
Webhook 请求超时时间。
允许的最大时间为 30 秒。
必需,没有默认值。
subjectAccessReviewVersion
[必需]
string
要发送到 Webhook 并期望从 Webhook 获得的 authorization.k8s.io SubjectAccessReview 的 API 版本。
与设置 --authorization-webhook-version
标志相同。
有效值:v1beta1、v1。
必需,无默认值
matchConditionSubjectAccessReviewVersion
[必需]
string
matchConditionSubjectAccessReviewVersion 指定对 CEL 表达式求值时使用的 SubjectAccessReview 版本。
有效值:v1。必需,无默认值。
failurePolicy
[必需]
string
控制当 Webhook 请求无法完成或返回格式错误的响应或计算 matchConditions 出现错误时的鉴权决定。
有效值:
NoOpinion:继续执行后续鉴权组件,看其中是否有组件允许该请求;
Deny:拒绝请求而不考虑后续鉴权组件。
必需,没有默认值。
connectionInfo
[必需]
WebhookConnectionInfo
ConnectionInfo 定义 Webhook 如何与服务器通信。
matchConditions
[必需]
[]WebhookMatchCondition
matchConditions 是将请求发送到此 Webhook 必须满足的条件列表。matchConditions 为空列表表示匹配所有请求。
最多允许 64 个匹配条件。
精确匹配逻辑如下(按顺序):
如果至少一个 matchCondition 计算结果为 FALSE,则跳过 Webhook。
如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。
如果至少一个 matchCondition 计算结果为错误(但没有一个为 FALSE):
如果 FailurePolicy=Deny,则 Webhook 拒绝请求
如果 FailurePolicy=NoOpinion,则忽略错误并跳过 Webhook
WebhookConnectionInfo
出现在:
字段 描述
type
[必需]
string
控制 Webhook 如何与服务器通信。
有效值:
KubeConfigFile:使用 kubeConfigFile
中指定的文件来定位服务器。
InClusterConfig:使用集群内配置来调用由 kube-apiserver 托管的 SubjectAccessReview API,kube-apiserver 不允许使用此模式。
kubeConfigFile
[必需]
string
包含连接信息的 KubeConfig 文件的路径。
如果 connectionInfo.type 是 KubeConfig,则为必需项。
WebhookMatchCondition
出现在:
字段 描述
expression
[必需]
string
expression 表示将由 CEL 求值的表达式。求值结果必须为布尔值。
CEL 表达式可以访问 v1 版本中的 SubjectAccessReview 的内容。
如果请求变量中 subjectAccessReviewVersion 指定的版本是 v1beta1,
在计算 CEL 表达式之前,内容将被转换为 v1 版本。
关于 CEL 文档: https://kubernetes.io/zh-cn/docs/reference/using-api/cel/
14.9 - kube-controller-manager Configuration (v1alpha1)
资源类型
NodeControllerConfiguration
出现在:
NodeControllerConfiguration 包含描述 NodeController 的元素。
字段 描述
ConcurrentNodeSyncs
[必需]
int32
ConcurrentNodeSyncs 是并发执行以进行节点同步的工作程序的数量。
ServiceControllerConfiguration
出现在:
ServiceControllerConfiguration 包含描述 ServiceController 的元素。
字段 描述
ConcurrentServiceSyncs
[必需]
int32
concurrentServiceSyncs 是允许同时同步的服务数。
数量越大表示服务管理响应越快,但 CPU(和网络)负载也越高。
CloudControllerManagerConfiguration
CloudControllerManagerConfiguration 包含描述云控制器管理器的元素。
CloudProviderConfiguration
出现在:
CloudProviderConfiguration 包含有关云提供商的一些基本元素。
字段 描述
Name
[必需]
string
Name 是云服务的提供商。
CloudConfigFile
[必需]
string
cloudConfigFile 是云提供程序配置文件的路径。
KubeCloudSharedConfiguration
出现在:
KubeCloudSharedConfiguration 包含 kube-controller 管理器和云控制器管理器共享的元素,但不包含通用配置。
字段 描述
CloudProvider
[必需]
CloudProviderConfiguration
CloudProviderConfiguration 保存 CloudProvider 相关特性的配置。
ExternalCloudVolumePlugin
[必需]
string
当 cloudProvider 为 "external" 时,externalCloudVolumePlugin 用于指定插件。
它目前被仓库内的云驱动用于处理 KCM 中的节点和卷控制。
UseServiceAccountCredentials
[必需]
bool
useServiceAccountCredentials 指出控制器是否应使用独立的服务帐户凭据运行。
AllowUntaggedCloud
[必需]
bool
使用未标记的云实例运行。
RouteReconciliationPeriod
[必需]
meta/v1.Duration
routeReconciliationPeriod 是云驱动商为节点创建的路由的调和周期。
NodeMonitorPeriod
[必需]
meta/v1.Duration
nodeMonitorPeriod 是 NodeController 同步 NodeStatus 的周期。
ClusterName
[必需]
string
clusterName 是集群的实例前缀。
ClusterCIDR
[必需]
string
clusterCIDR 是集群中 Pod CIDR 的范围。
AllocateNodeCIDRs
[必需]
bool
AllocateNodeCIDRs 允许为 Pod 分配 CIDR,
如果 ConfigureCloudRoutes 为 true,则允许在对云驱动商设置 CIDR。
CIDRAllocatorType
[必需]
string
CIDRAllocatorType 决定使用哪种类型的 Pod CIDR 分配器。
ConfigureCloudRoutes
[必需]
bool
configureCloudRoutes 使通过 allocateNodeCIDRs 分配的 CIDR 能够在云提供商上配置。
NodeSyncPeriod
[必需]
meta/v1.Duration
nodeSyncPeriod 从云平台同步节点的周期。
周期较长时,调用云平台的次数减少,
但向集群添加新节点可能会延迟。
WebhookConfiguration
出现在:
WebhookConfiguration 包含与云控制器管理器托管的 webhook 相关的配置。
字段 描述
Webhooks
[必需]
[]string
Webhooks 是要启用或者禁用的 Webhook 的列表。
'*' 表示"所有默认启用的 webhook ",
'foo' 表示"启用 'foo'",
'-foo' 表示"禁用 'foo'",
特定名称的首个项有效。
LeaderMigrationConfiguration
出现在:
LeaderMigrationConfiguration 为所有迁移中的领导者锁提供了版本化配置。
字段 描述
apiVersion
stringcontrollermanager.config.k8s.io/v1alpha1
kind
stringLeaderMigrationConfiguration
leaderName
[必需]
string
LeaderName 是保护迁移的领导者选举资源的名称,例如:1-20-KCM-to-1-21-CCM。
resourceLock
[必需]
string
ResourceLock 表示将被用于加锁的资源对象类型,
应该是 "leases" 或者是 "endpoints"。
controllerLeaders
[必需]
[]ControllerLeaderConfiguration
ControllerLeaders 包含迁移领导者锁配置列表。
ControllerLeaderConfiguration
出现在:
ControllerLeaderConfiguration 提供迁移中领导者锁的配置。
字段 描述
name
[必需]
string
Name 是正被迁移的控制器的名称,例如:service-controller、route-controller、cloud-node-controller 等等
component
[必需]
string
Component 是控制器运行所处的组件的名称。
例如,kube-controller-manager、cloud-controller-manager 等。
或者 “*” 表示控制器可以在任何正在参与迁移的组件中运行。
GenericControllerManagerConfiguration
出现在:
GenericControllerManagerConfiguration 保存通用控制器管理器的配置。
字段 描述
Port
[必需]
int32
port 是控制器管理器运行 HTTP 服务运行的端口。
Address
[必需]
string
address 是提供服务所用的 IP 地址(所有接口设置为 0.0.0.0)。
MinResyncPeriod
[必需]
meta/v1.Duration
minResyncPeriod 是反射器的重新同步周期;大小是在 minResyncPeriod 和 2*minResyncPeriod 范围内的随机数。
ClientConnection
[必需]
ClientConnectionConfiguration
ClientConnection 指定代理服务器在与 API 服务器通信时使用的 kubeconfig 文件和客户端连接设置。
ControllerStartInterval
[必需]
meta/v1.Duration
两次启动控制器管理器之间的间隔时间。
LeaderElection
[必需]
LeaderElectionConfiguration
leaderElection 定义领导者选举客户端的配置。
Controllers
[必需]
[]string
Controllers 是要启用或者禁用的控制器列表。
'*' 表示"所有默认启用的控制器",
'foo' 表示"启用 'foo'",
'-foo' 表示"禁用 'foo'",
特定名称的首个项有效。
Debugging
[必需]
DebuggingConfiguration
DebuggingConfiguration 保存调试相关特性的配置。
LeaderMigrationEnabled
[必需]
bool
LeaderMigrationEnabled 指示是否应为控制器管理器启用领导者迁移(Leader Migration)。
LeaderMigration
[必需]
LeaderMigrationConfiguration
LeaderMigration 保存领导者迁移的配置。
KubeControllerManagerConfiguration
KubeControllerManagerConfiguration 包含描述 kube-controller 管理器的元素。
AttachDetachControllerConfiguration
出现在:
AttachDetachControllerConfiguration 包含描述 AttachDetachController 的元素。
字段 描述
DisableAttachDetachReconcilerSync
[必需]
bool
Reconciler 运行一个周期性循环,通过触发 attach/detach 操作来协调期望状态与实际状态。
此标志启用或禁用调和操作。默认为 false,即被启用的。
ReconcilerSyncLoopPeriod
[必需]
meta/v1.Duration
ReconcilerSyncLoopPeriod 是调和器在连续执行同步状态的循环间,所等待的时间量。
默认为 60 秒。
disableForceDetachOnTimeout
[必需]
bool
当超过最大卸载时间时,DisableForceDetachOnTimeout 将禁用强制分离。
默认情况下为 false,因此启用卸载时强制分离。
CSRSigningConfiguration
出现在:
CSRSigningConfiguration 保存有关特定 CSR 签名者的信息。
字段 描述
CertFile
[必需]
string
certFile 是包含 PEM 编码的 X509 CA 证书的文件名,用于颁发证书。
KeyFile
[必需]
string
keyFile 是包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名,用于颁发证书。
CSRSigningControllerConfiguration
出现在:
CSRSigningControllerConfiguration 包含描述 CSRSigningController 的元素。
字段 描述
ClusterSigningCertFile
[必需]
string
clusterSigningCertFile 是包含 PEM 编码的 X509 CA 证书的文件名,该证书用于颁发集群范围的证书。
ClusterSigningKeyFile
[必需]
string
clusterSigningCertFile 是包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名,用于颁发集群范围的证书。
KubeletServingSignerConfiguration
[必需]
CSRSigningConfiguration
kubeletServingSignerConfiguration 保存用于为 kubernetes.io/kubelet-serving 签名者颁发证书的证书和密钥。
KubeletClientSignerConfiguration
[必需]
CSRSigningConfiguration
kubeletClientSignerConfiguration 保存用于为 kubernetes.io/kube-apiserver-client-kubelet 颁发证书的证书和密钥。
KubeAPIServerClientSignerConfiguration
[必需]
CSRSigningConfiguration
kubeAPIServerClientSignerConfiguration 保存用于为 kubernetes.io/kube-apiserver-client 颁发证书的证书和密钥。
LegacyUnknownSignerConfiguration
[必需]
CSRSigningConfiguration
legacyUnknownSignerConfiguration 保存用于颁发 kubernetes.io/legacy-unknown 证书的证书和密钥。
ClusterSigningDuration
[必需]
meta/v1.Duration
clusterSigningDuration 是签名证书的最长持续时间。
单个 CSRs 可以通过设置 spec.expirationSeconds 来请求有效期更短的证书。
CronJobControllerConfiguration
出现在:
CronJobControllerConfiguration 包含描述 CrongJob2Controller 的元素。
字段 描述
ConcurrentCronJobSyncs
[必需]
int32
concurrentCronJobSyncs 是允许并发同步的 Job 对象的数量。
数量越大意味着 Job 响应越快,但 CPU(和网络)负载也越高。
DaemonSetControllerConfiguration
出现在:
DaemonSetControllerConfiguration 包含描述 DaemonSetController 的元素。
字段 描述
ConcurrentDaemonSetSyncs
[必需]
int32
concurrentDaemonSetSyncs 是允许并发同步的 DaemonSet 对象的数量。
数目越大意味着 DaemonSet 响应越快,但 CPU(和网络)负载也越高。
DeploymentControllerConfiguration
Appears in:
DeploymentControllerConfiguration 包含描述 DeploymentController 的元素。
字段 描述
ConcurrentDeploymentSyncs
[必需]
int32
concurrentDeploymentSyncs 是允许并发同步的 Deployment 对象的数量。
数量越大意味着 Deployment 响应更越快,但 CPU(和网络)负载也越高。
DeprecatedControllerConfiguration
出现在:
DeprecatedControllerConfiguration 包含被弃用的元素。
EndpointControllerConfiguration
出现在:
EndpointControllerConfiguration 包含描述 EndpointController 的元素。
字段 描述
ConcurrentEndpointSyncs
[必需]
int32
concurrentEndpointSyncs 是将并发执行的 Endpoints 同步操作的数量。
数字越大意味着 Endpoints 更新越快,但 CPU(和网络)负载也越高。
EndpointUpdatesBatchPeriod
[必需]
meta/v1.Duration
EndpointUpdatesBatchPeriod 描述批量更新 Endpoints 的周期长度。
Pod 更改的处理将被延迟相同的时长,以便将它们与即将到来的更新连接起来,并减少 Endpoints 更新的总数。
EndpointSliceControllerConfiguration
出现在:
EndpointSliceControllerConfiguration 包含描述 EndpointSliceController 的元素。
字段 描述
ConcurrentServiceEndpointSyncs
[必需]
int32
concurrentServiceEndpointSyncs 是将并发完成的服务端点同步操作的数量。
数字越大意味着 EndpointSlice 更新越快,但 CPU(和网络)负载也越高。
MaxEndpointsPerSlice
[必需]
int32
maxEndpointsPerSlice 是将添加到 EndpointSlice 的最大端点数。
每个切片的端点越多,端点切片就会更少、更大,但资源消耗就会更多。
EndpointUpdatesBatchPeriod
[必需]
meta/v1.Duration
EndpointUpdatesBatchPeriod 描述批量更新 Endpoints 的周期长度。
Pod 更改的处理将被延迟相同的时长,以便将它们与即将到来的更新连接起来,并减少 Endpoints 更新的总数。
EndpointSliceMirroringControllerConfiguration
出现在:
EndpointSliceMirroringControllerConfiguration 包含描述 EndpointSliceMirroringController 的元素。
字段 描述
MirroringConcurrentServiceEndpointSyncs
[必需]
int32
mirroringConcurrentServiceEndpointSyncs 是将并发完成的服务端点同步操作的数量。
数字越大意味着 EndpointSlice 更新越快,但 CPU(和网络)负载也越高。
MirroringMaxEndpointsPerSubset
[必需]
int32
mirroringMaxEndpointsPerSubset 是把 EndpointSubset 映射到 EndpointSlice 的端点数上限。
MirroringEndpointUpdatesBatchPeriod
[必需]
meta/v1.Duration
mirroringEndpointUpdatesBatchPeriod 可用于批量更新 EndpointSlice。
所有由 EndpointSlice 更改触发的更新可能被延迟,延迟的时间长度上限为 “mirroringEndpointUpdatesBatchPeriod”。
如果同一 Endpoints 资源中的其他地址在此期间发生变化,它们将被合并到同一个 EndpointSlice 更新中以实现批处理。
默认值 0 表示 Endpoints 的每次更新都会触发一次 EndpointSlice 更新。
EphemeralVolumeControllerConfiguration
出现在:
EphemeralVolumeControllerConfiguration 包含描述 EphemeralVolumeController 的元素。
字段 描述
ConcurrentEphemeralVolumeSyncs
[必需]
int32
ConcurrentEphemeralVolumeSyncseSyncs 是并发执行的临时卷同步操作数量。
数字越大意味着临时卷更新越快,但 CPU(和网络)负载也越高。
GarbageCollectorControllerConfiguration
出现在:
GarbageCollectorControllerConfiguration 包含描述 GarbageCollectorController 的元素。
字段 描述
EnableGarbageCollector
[必需]
bool
启用通用垃圾收集器。必须与 kube-apiserver 的相应标志同步。
警告:通用垃圾收集器是一个 Alpha 特性。
ConcurrentGCSyncs
[必需]
int32
concurrentGCSyncs 是允许垃圾收集器并发同步的工作线程的数量。
GCIgnoredResources
[必需]
[]GroupResource
gcIgnoredResources 是垃圾收集应该忽略的 GroupResource 列表。
GroupResource
出现在:
GroupResource 描述组资源。
字段 描述
Group
[必需]
string
group 是 GroupResource 的 group 部分。
Resource
[必需]
string
resource 是 GroupResource 的 resource 部分。
HPAControllerConfiguration
出现在:
HPAControllerConfiguration 包含描述 HPAController 的元素。
字段 描述
ConcurrentHorizontalPodAutoscalerSyncs
[必需]
int32
ConcurrentHorizontalPodAutoscalerSyncs 是允许并发同步的 HPA 对象的数量。
数字越大意味着 HPA 处理响应越快,但 CPU(和网络)负载也越高。
HorizontalPodAutoscalerSyncPeriod
[必需]
meta/v1.Duration
HorizontalPodAutoscalerSyncPeriod 是对 HPA 中 Pod 数量进行同步的周期。
HorizontalPodAutoscalerDownscaleStabilizationWindow
[必需]
meta/v1.Duration
horizontalpodautoscalerdowncalstabilizationwindow 是一个自动缩放器要回顾的时段长度,
在所给时段内,自动缩放器不会按照建议执行任何缩容操作。
HorizontalPodAutoscalerTolerance
[必需]
float64
HorizontalPodAutoscalerTolerance 是当资源用量表明需要扩容/缩容时的容忍度。
HorizontalPodAutoscalerCPUInitializationPeriod
[必需]
meta/v1.Duration
HorizontalPodAutoscalerCPUInitializationPeriod 是 Pod 启动后可以跳过时间段,这段时间内部执行 CPU 采样。
HorizontalPodAutoscalerInitialReadinessDelay
[必需]
meta/v1.Duration
HorizontalPodAutoscalerInitialReadinessDelay 是 Pod 启动后的一段时间,
在此期间,readiness 状态的变更被视为初次设置 readiness 状态。
这样做的唯一影响是,对于在此期间发生 readiness 状态变化但未准备好的 Pod,HPA 将忽略其 CPU 采样值。
JobControllerConfiguration
出现在:
JobControllerConfiguration 包含描述 JobController 的元素。
字段 描述
ConcurrentJobSyncs
[必需]
int32
concurrentJobSyncs 是允许并发同步的 Job 对象的数量。
数字越大意味着 Job 响应越快,但 CPU(和网络)负载也越高。
LegacySATokenCleanerConfiguration
出现在:
LegacySATokenCleanerConfiguration 包含描述 LegacySATokenCleaner 的元素。
字段 描述
CleanUpPeriod
[必需]
meta/v1.Duration
CleanUpPeriod 是自动生成的服务帐户令牌上次被使用以来的时长,超出此时长的令牌可被清理。
NamespaceControllerConfiguration
出现在:
NamespaceControllerConfiguration 包含描述 NamespaceController 的元素。
字段 描述
NamespaceSyncPeriod
[必需]
meta/v1.Duration
namespaceSyncPeriod 是对名字空间生命周期更新进行同步的周期。
ConcurrentNamespaceSyncs
[必需]
int32
concurrentNamespaceSyncs 是允许并发同步的 Namespace 对象的数量。
NodeIPAMControllerConfiguration
出现在:
NodeIPAMControllerConfiguration 包含描述 NodeIpamController 的元素。
字段 描述
ServiceCIDR
[必需]
string
serviceCIDR 为集群中 Service 的 CIDR 范围。
SecondaryServiceCIDR
[必需]
string
SecondaryServiceCIDR 为集群中 Service 的 CIDR 范围。此字段用于双栈集群。
SecondaryServiceCIDR 和 ServiceCIDR 的 IP 族不能相同。
NodeCIDRMaskSize
[必需]
int32
NodeCIDRMaskSize 为集群中节点 CIDR 的掩码大小。
NodeCIDRMaskSizeIPv4
[必需]
int32
NodeCIDRMaskSizeIPv4 为双栈集群中节点 CIDR 的掩码大小。
NodeCIDRMaskSizeIPv6
[必需]
int32
NodeCIDRMaskSizeIPv6 为双栈集群中节点 CIDR 的掩码大小。
NodeLifecycleControllerConfiguration
出现在:
Nodelifecyclecontrolerconfiguration 包含描述 NodeLifecycleController 的元素。
字段 描述
NodeEvictionRate
[必需]
float32
nodeEvictionRate 是在区域健康时,如果节点发生故障,每秒删除 Pod 的节点数。
SecondaryNodeEvictionRate
[必需]
float32
secondaryNodeEvictionRate 是在区域不健康时,如果节点故障,每秒删除 Pod 的节点数。
NodeStartupGracePeriod
[必需]
meta/v1.Duration
nodeStartupGracePeriod 是在将节点标记为不健康之前允许启动节点无响应的时长。
NodeMonitorGracePeriod
[必需]
meta/v1.Duration
nodeMontiorGracePeriod 是在将运行中的节点标记为不健康之前允许其无响应的时长。
必须是 kubelet 的 nodeStatusUpdateFrequency 的 N 倍,其中 N 表示允许 kubelet 发布节点状态的重试次数。
PodEvictionTimeout
[必需]
meta/v1.Duration
podEvictionTimeout 为删除故障节点上的 Pod 的宽限时间。
LargeClusterSizeThreshold
[必需]
int32
对于规模小于或等于 largeClusterSizeThreshold 的集群,secondaryNodeEvictionRate 会被隐式覆盖,取值为 0。
UnhealthyZoneThreshold
[必需]
float32
当区域中至少有 unhealthyZoneThreshold(不少于 3 个)的节点处于 NotReady 状态时,
nodeEvctionRate 和 secondaryNodeEvictionRate 两个属性的判定逻辑会将区域视为不健康。
PersistentVolumeBinderControllerConfiguration
出现在:
PersistentVolumeBinderControllerConfiguration 包含描述 PersistentVolumeBinderController 的元素。
PersistentVolumeRecyclerConfiguration
出现在:
PersistentVolumeRecyclerConfiguration 包含描述持久卷插件的元素。
字段 描述
MaximumRetry
[必需]
int32
maximumRetry 是当 PV 回收失败时,PV 回收器重试的次数。
MinimumTimeoutNFS
[必需]
int32
minimumTimeoutNFS 是用于 NFS 回收器的,用于设置 Pod 的最小 ActiveDeadlineSeconds。
PodTemplateFilePathNFS
[必需]
string
podTemplateFilePathNFS 是一个 Pod 定义文件的路径,该文件将被用作 NFS PV 卷回收模板。
IncrementTimeoutNFS
[必需]
int32
incrementTimeoutNFS 提供给 NFS 清理器 Pod 的设置值,数据卷每增加 1 GiB,
则需要向 Pod 中的 activeDeadlineSeconds 参数增加这里所给的秒数。
PodTemplateFilePathHostPath
[必需]
string
podTemplateFilePathHostPath 是一个 Pod 定义文件的路径,该文件将被作为 HostPath PV 卷回收模板。
此字段仅用于开发和测试场景,在多节点集群中无法正常工作。
MinimumTimeoutHostPath
[必需]
int32
minimumTimeoutHostPath 是用于 HostPath 回收器 Pod 的 activeDeadlineSeconds 属性值下限。
此字段仅用于开发和测试场景,在多节点集群中无法正常工作。
IncrementTimeoutHostPath
[必需]
int32
incrementTimeoutHostPath 是提供给 HostPath 清理器 Pod 的配置值,
HostPath 卷的尺寸每增加 1 GiB,则需要为 Pod 的 activeDeadlineSeconds 属性增加这里所给的秒数。
回收器 Pod 的 activeDeadlineSeconds 属性值下限。
PodGCControllerConfiguration
出现在:
PodGCControllerConfiguration 包含描述 PodGCController 的元素。
字段 描述
TerminatedPodGCThreshold
[必需]
int32
terminatedPodGCThreshold 是提供给回收已终止 Pod 的垃圾收集器的,
所设置的数字是在垃圾收集器开始删除某 Pod 之前可以存在的、已终止 Pod 的个数。
如果 <= 0,则禁用已终止的 Pod 垃圾收集器。
ReplicaSetControllerConfiguration
出现在:
ReplicaSetControllerConfiguration 包含描述 ReplicaSetController 的元素。
字段 描述
ConcurrentRSSyncs
[必需]
int32
concurrentRSSyncs 是允许并发同步的 ReplicaSet 的数量。
数量越大意味着副本管理响应越快,但 CPU(和网络)负载也越高。
ReplicationControllerConfiguration
出现在:
ReplicationControllerConfiguration 包含描述 ReplicationController 的元素。
字段 描述
ConcurrentRCSyncs
[必需]
int32
concurrentRCSyncs 是允许并发同步的 ReplicationController 数量。
数量越大意味着副本管理响应越快,但 CPU(和网络)负载也越高。
ResourceQuotaControllerConfiguration
出现在:
ResourceQuotaControllerConfiguration 包含描述 ResourceQuotaController 的元素。
字段 描述
ResourceQuotaSyncPeriod
[必需]
meta/v1.Duration
resourceQuotaSyncPeriod 是系统中 Quota 使用状态的同步周期。
ConcurrentResourceQuotaSyncs
[必需]
int32
concurrentResourceQuotaSyncs 是允许并发同步的 ResourcQuota 数目。
数量越大意味着配额管理响应越快,但 CPU(和网络)负载也越高。
SAControllerConfiguration
出现在:
SAControllerConfiguration 包含描述 ServiceAccountController 的元素。
字段 描述
ServiceAccountKeyFile
[必需]
string
serviceAccountKeyFile 是包含 PEM 编码的用于签署服务帐户令牌的 RSA 私钥的文件名。
ConcurrentSATokenSyncs
[必需]
int32
concurrentSATokenSyncs 是将并发完成的服务帐户令牌同步操作的数量。
RootCAFile
[必需]
string
rootCAFile 是根证书颁发机构将被包含在 ServiceAccount 的令牌 Secret 中。
所提供的数据必须是一个有效的 PEM 编码的 CA 包。
StatefulSetControllerConfiguration
出现在:
StatefulSetControllerConfiguration 包含描述 StatefulSetController 的元素。
字段 描述
ConcurrentStatefulSetSyncs
[必需]
int32
concurrentStatefulSetSyncs 是允许并发同步的 StatefulSet 对象的数量。
数字越大意味着 StatefulSet 响应越快,但 CPU(和网络)负载也越高。
TTLAfterFinishedControllerConfiguration
出现在:
TTLAfterFinishedControllerConfiguration 包含描述 TTLAfterFinishedController 的元素。
字段 描述
ConcurrentTTLSyncs
[必需]
int32
concurrentTTLSyncs 是允许并发同步的 TTL-after-finished 收集器工作线程的数量。
ValidatingAdmissionPolicyStatusControllerConfiguration
出现在:
ValidatingAdmissionPolicyStatusControllerConfiguration 包含描述 ValidatingAdmissionPolicyStatusController 的元素。
字段 描述
ConcurrentPolicySyncs
[必需]
int32
ConcurrentPolicySyncs 是允许并发同步的策略对象的数量。
数字越大意味着类型检查越快,但 CPU(和网络)负载越高。
默认值为 5。
VolumeConfiguration
出现在:
VolumeConfiguration 包含所有 用于配置各个卷插件的所有参数。
从这个配置中,控制器管理器可执行文件将创建许多 volume.VolumeConfig 的实例。
每个只包含该插件所需的配置,然后将其传递给相应的插件。
控制器管理器可执行文件是代码中唯一知道支持哪些插件以及每个插件对应哪些标志的部分。
字段 描述
EnableHostPathProvisioning
[必需]
bool
enableHostPathProvisioning 在没有云驱动的情况下允许制备 HostPath PV。
此特性用来测试和开发 PV 卷制备特性。HostPath 配置完全不受支持,在多节点集群中无法工作,
除了测试或开发之外不应该用于任何其他用途。
EnableDynamicProvisioning
[必需]
bool
enableDynamicProvisioning 在支持动态配置的环境中运行时允许制备新卷。默认为 true。
PersistentVolumeRecyclerConfiguration
[必需]
PersistentVolumeRecyclerConfiguration
persistentVolumeRecyclerConfiguration 保存持久卷插件的配置。
FlexVolumePluginDir
[必需]
string
volumePluginDir 是一个完整路径,FlexVolume 插件在这一目录中搜索额外的第三方卷插件。
14.10 - kube-proxy 配置 (v1alpha1)
资源类型
ClientConnectionConfiguration
出现在:
ClientConnectionConfiguration 包含构造客户端所需要的细节信息。
字段 描述
kubeconfig
[必需]
string
kubeconfig
字段是指向一个 KubeConfig 文件的路径。
acceptContentTypes
[必需]
string
acceptContentTypes
字段定义客户端在连接到服务器时所发送的 Accept 头部字段。
此设置值会覆盖默认配置 'application/json'。
此字段会控制某特定客户端与指定服务器的所有链接。
contentType
[必需]
string
contentType
字段是从此客户端向服务器发送数据时使用的内容类型(Content Type)。
qps
[必需]
float32
qps
字段控制此连接上每秒钟可以发送的查询请求个数。
burst
[必需]
int32
burst
字段允许客户端超出其速率限制时可以临时累积的额外查询个数。
DebuggingConfiguration
出现在:
DebuggingConfiguration 包含调试相关功能的配置。
字段 描述
enableProfiling
[Required]
bool
enableProfiling
字段通过位于 host:port/debug/pprof/
的 Web 接口启用性能分析。
enableContentionProfiling
[Required]
bool
enableContentionProfiling
字段在 enableProfiling
为 true 时启用阻塞分析。
LeaderElectionConfiguration
出现在:
LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举客户端的配置。
字段 描述
leaderElect
[必需]
bool
leaderElect
字段允许领导者选举客户端在进入主循环执行之前先获得领导者角色。
运行多副本组件时启用此功能有助于提高可用性。
leaseDuration
[必需]
meta/v1.Duration
leaseDuration
字段是非领导角色候选者在观察到需要领导席位更新时要等待的时间;
只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要被刷新的席位。
这里的设置值本质上意味着某个领导者在被另一个候选者替换掉之前可以停止运行的最长时长。
只有当启用了领导者选举时此字段有意义。
renewDeadline
[必需]
meta/v1.Duration
renewDeadline
字段设置的是当前领导者在停止扮演领导角色之前需要刷新领导状态的时间间隔。
此值必须小于或等于租约期限的长度。只有到启用了领导者选举时此字段才有意义。
retryPeriod
[必需]
meta/v1.Duration
retryPeriod
字段是客户端在连续两次尝试获得或者刷新领导状态之间需要等待的时长。
只有当启用了领导者选举时此字段才有意义。
resourceLock
[必需]
string
resourceLock
字段给出在领导者选举期间要作为锁来使用的资源对象类型。
resourceName
[必需]
string
resourceName
字段给出在领导者选举期间要作为锁来使用的资源对象名称。
resourceNamespace
[必需]
string
resourceNamespace
字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
KubeProxyConfiguration
KubeProxyConfiguration 包含用来配置 Kubernetes 代理服务器的所有配置信息。
字段 描述
apiVersion
stringkubeproxy.config.k8s.io/v1alpha1
kind
stringKubeProxyConfiguration
featureGates
[必需]
map[string]bool
featureGates
字段是一个功能特性名称到布尔值的映射表,
用来启用或者禁用测试性质的功能特性。
clientConnection
[必需]
ClientConnectionConfiguration
clientConnection
指定了代理服务器与 apiserver 通信时应使用的 kubeconfig
文件和客户端连接设置。
logging
[必需]
LoggingConfiguration
logging
指定了日志记录的选项。有关更多信息,
请参阅日志选项 。
hostnameOverride
[必需]
string
hostnameOverride
如果不为空,将作为 kube-proxy 所运行节点的名称使用。
如果未设置,则默认使用节点的主机名作为节点名称。
bindAddress
[必需]
string
bindAddress
可以用来指定 kube-proxy 所认为的节点主 IP。请注意,
虽然名称中有绑定的意思,但实际上 kube-proxy 并不会将任何套接字绑定到这个 IP 地址上。
healthzBindAddress
[必需]
string
healthzBindAddress
是健康检查服务器的 IP 地址和端口,默认情况下,
如果 bindAddress 未设置或为 IPv4,则为 "0.0.0.0:10256";如果 bindAddress 为 IPv6,
则为 "[::]:10256"。
metricsBindAddress
[必需]
string
metricsBindAddress
是指标服务器监听的 IP 地址和端口,默认情况下,
如果 bindAddress 未设置或为 IPv4,则为 "127.0.0.1:10249";
如果 bindAddress 为 IPv6,则为 "[::1]:10249"。
(设置为 "0.0.0.0:10249" / "[::]:10249" 以绑定到所有接口。)。
bindAddressHardFail
[必需]
bool
bindAddressHardFail
字段设置为 true 时,
kube-proxy 将无法绑定到某端口这类问题视为致命错误并直接退出。
enableProfiling
[必需]
bool
enableProfiling
字段通过 '/debug/pprof' 处理程序在 Web 界面上启用性能分析。
性能分析处理程序将由指标服务器执行。
showHiddenMetricsForVersion
[必需]
string
showHiddenMetricsForVersion
用于指定要显示隐藏指标的版本。
mode
[必需]
ProxyMode
mode
指定要使用的代理模式。
iptables
[必需]
KubeProxyIPTablesConfiguration
iptables
字段字段包含与 iptables 相关的配置选项。
ipvs
[必需]
KubeProxyIPVSConfiguration
ipvs
字段中包含与 ipvs 相关的配置选项。
nftables
[必需]
KubeProxyNFTablesConfiguration
nftables
包含与 nftables 相关的配置选项。
winkernel
[必需]
KubeProxyWinkernelConfiguration
winkernel
包含与 winkernel 相关的配置选项。
detectLocalMode
[必需]
LocalMode
detectLocalMode
确定用于检测本地流量的模式,默认为 ClusterCIDR。
detectLocal
[必需]
DetectLocalConfiguration
detectLocal
包含与 DetectLocalMode 相关的可选配置设置。
clusterCIDR
[必需]
string
clusterCIDR
指定集群中 Pod 的 CIDR 范围。
(对于双栈集群,这个参数可以是一个用逗号分隔的双栈 CIDR 范围对。)
当 DetectLocalMode 设置为 LocalModeClusterCIDR 时,如果流量的源 IP 在这个范围内,
kube-proxy 会将其视为本地流量。(否则不会使用此设置。)
nodePortAddresses
[必需]
[]string
nodePortAddresses
是一个包含有效节点 IP 的 CIDR 范围列表或单个字符串 `primary`。
如果设置为 CIDR 范围列表,只有来自这些范围内的节点 IP 的 NodePort 服务连接才会被接受。
如果设置为 `primary`,则根据 Node 对象,NodePort 服务将仅在节点的主 IPv4 和/或 IPv6 地址上被接受。
如果未设置,将接受所有本地 IP 的 NodePort 连接。
oomScoreAdj
[必需]
int32
oomScoreAdj
是 kube-proxy 进程的 OOM 评分调整值。该值必须在 [-1000, 1000] 范围内。
conntrack
[必需]
KubeProxyConntrackConfiguration
conntrack
包含与 conntrack 相关的配置选项。
configSyncPeriod
[必需]
meta/v1.Duration
configSyncPeriod
指定从 apiserver 刷新配置的频率,必须大于 0。
portRange
[必需]
string
portRange
之前用于配置用户空间代理,但现在已不再使用。
windowsRunAsService
[Required]
bool
如果为 windowsRunAsService
为 True,则启用 Windows 服务控制管理器 API 集成。
DetectLocalConfiguration
出现在:
DetectLocalConfiguration 包含与 DetectLocalMode 选项相关的可选设置。
字段 描述
bridgeInterface
[必需]
string
bridgeInterface
指的是桥接接口的名称。
当 DetectLocalMode 设置为 LocalModeBridgeInterface 时,
如果流量来自这个桥接接口,kube-proxy 会将其视为本地流量。
interfaceNamePrefix
[必需]
string
interfaceNamePrefix
是接口名称的前缀。
当 DetectLocalMode 设置为 LocalModeInterfaceNamePrefix 时,
如果流量来自任何名称以该前缀开头的接口,kube-proxy 会将其视为本地流量。
KubeProxyConntrackConfiguration
出现在:
KubeProxyConntrackConfiguration 包含为 Kubernetes 代理服务器提供的 conntrack 设置。
字段 描述
maxPerCore
[必需]
int32
maxPerCore
字段是每个 CPU 核所跟踪的 NAT 链接个数上限
(0 意味着保留当前上限限制并忽略 min 字段设置值)。
min
[必需]
int32
min
字段给出要分配的链接跟踪记录个数下限。
设置此值时会忽略 maxPerCore 的值(将 maxPerCore 设置为 0 时不会调整上限值)。
tcpEstablishedTimeout
[必需]
meta/v1.Duration
tcpEstablishedTimeout
字段给出空闲 TCP 连接的保留时间(例如,'2s')。
此值必须大于 0。
tcpCloseWaitTimeout
[必需]
meta/v1.Duration
tcpCloseWaitTimeout
字段用来设置空闲的、处于 CLOSE_WAIT 状态的 conntrack 条目
保留在 conntrack 表中的时间长度(例如,'60s')。
此设置值必须大于 0。
tcpBeLiberal
[必需]
bool
tcpBeLiberal
如果设置为 true,
kube-proxy 将配置 conntrack 以宽松模式运行,
对于 TCP 连接和超出窗口序列号的报文不会被标记为 INVALID。
udpTimeout
[必需]
meta/v1.Duration
udpTimeout
指定处于 UNREPLIED 状态的空闲 UDP conntrack 条目在 conntrack 表中保留的时间
(例如 '30s')。该值必须大于 0。
udpStreamTimeout
[必需]
meta/v1.Duration
udpStreamTimeout
指定处于 ASSURED 状态的空闲 UDP conntrack 条目在 conntrack 表中保留的时间
(例如 '300s')。该值必须大于 0。
KubeProxyIPTablesConfiguration
出现在:
KubeProxyIPTablesConfiguration 包含用于 Kubernetes 代理服务器的、与 iptables 相关的配置细节。
字段 描述
masqueradeBit
[必需]
int32
masqueradeBit
字段是 iptables fwmark 空间中的具体一位,
用来在 iptables 或 ipvs 代理模式下设置 SNAT。此值必须介于 [0, 31](含边界值)。
masqueradeAll
[必需]
bool
masqueradeAll
字段用来通知 kube-proxy
在使用 iptables 或 ipvs 代理模式时对所有流量执行 SNAT 操作。这在某些 CNI 插件中可能是必需的。
localhostNodePorts
[必需]
bool
localhostNodePorts
如果设置为 false,
则会通知 kube-proxy 禁用通过本地主机访问 NodePort 服务的旧有行为。
(仅适用于 iptables 模式和 IPv4;在其他代理模式或 IPv6 下,不允许本地主机访问 NodePort 服务。)
syncPeriod
[必需]
meta/v1.Duration
syncPeriod
是时间间隔(例如 '5s'、'1m'、'2h22m'),
指示各种重新同步和清理操作的执行频率。该值必须大于 0。
minSyncPeriod
[必需]
meta/v1.Duration
minSyncPeriod
是 iptables 规则重新同步的最小时间间隔(例如 '5s'、'1m'、'2h22m')。
如果值为 0,表示每次服务或 EndpointSlice 发生变化时都会立即重新同步 iptables。
KubeProxyIPVSConfiguration
出现在:
KubeProxyIPVSConfiguration 包含用于 Kubernetes 代理服务器的、与 ipvs 相关的配置细节。
字段 描述
syncPeriod
[必需]
meta/v1.Duration
syncPeriod
是各种重新同步和清理操作执行频率的时间间隔(例如 '5s', '1m', '2h22m')。
该值必须大于 0
minSyncPeriod
[必需]
meta/v1.Duration
minSyncPeriod
是 IPVS 规则重新同步之间的最小时间间隔(例如 '5s', '1m', '2h22m')。
值为 0 表示每次服务或 EndpointSlice 发生变化时都会立即触发 IPVS 重新同步。
scheduler
[必需]
string
scheduler
是用于 IPVS 的调度器。
excludeCIDRs
[必需]
[]string
excludeCIDRs
字段取值为一个 CIDR 列表,ipvs 代理程序在清理 IPVS 服务时不应触碰这些 IP 地址。
strictARP
[必需]
bool
strictARP
字段用来配置 arp_ignore 和 arp_announce,以避免(错误地)响应来自 kube-ipvs0 接口的
ARP 查询请求。
tcpTimeout
[必需]
meta/v1.Duration
tcpTimeout
字段是用于设置空闲 IPVS TCP 会话的超时值。
默认值为 0,意味着使用系统上当前的超时值设置。
tcpFinTimeout
[必需]
meta/v1.Duration
tcpFinTimeout
字段用来设置 IPVS TCP 会话在收到 FIN 之后的超时值。
默认值为 0,意味着使用系统上当前的超时值设置。
udpTimeout
[必需]
meta/v1.Duration
udpTimeout
字段用来设置 IPVS UDP 包的超时值。
默认值为 0,意味着使用系统上当前的超时值设置。
KubeProxyNFTablesConfiguration
出现在:
KubeProxyNFTablesConfiguration 包含 Kubernetes 代理服务器的 nftables 相关配置详细信息。
Field Description
masqueradeBit
[必需]
int32
masqueradeBit
字段是 iptables fwmark 空间中的具体一位,
用来在 nftables 代理模式下设置 SNAT。此值必须介于 [0, 31](含边界值)。
masqueradeAll
[必需]
bool
masqueradeAll
通知 kube-proxy 在使用 nftables 模式时,
对发送到服务集群 IP 的所有流量执行 SNAT。这在某些 CNI 插件中可能是必需的。
syncPeriod
[必需]
meta/v1.Duration
syncPeriod
表示各种重新同步和清理操作执行频率的时间间隔(例如 '5s', '1m', '2h22m')。
该值必须大于 0。
minSyncPeriod
[必需]
meta/v1.Duration
minSyncPeriod
是 iptables 规则重新同步之间的最小时间间隔(例如 '5s', '1m', '2h22m')。
值为 0 时,表示每次服务或 EndpointSlice 发生变化时都会立即重新同步 iptables。
KubeProxyWinkernelConfiguration
出现在:
KubeProxyWinkernelConfiguration 包含 Kubernetes 代理服务器的 Windows/HNS 设置。
字段 描述
networkName
[必需]
string
networkName
字段是 kube-proxy 用来创建端点和策略的网络名称。
sourceVip
[必需]
string
sourceVip
字段是执行负载均衡时进行 NAT 转换所使用的源端 VIP 端点 IP 地址。
enableDSR
[必需]
bool
enableDSR
字段通知 kube-proxy 是否使用 DSR 来创建 HNS 策略。
rootHnsEndpointName
[必需]
string
rootHnsEndpointName
字段是附加到用于根网络命名空间二层桥接的 hnsendpoint 的名称。
forwardHealthCheckVip
[必需]
bool
forwardHealthCheckVip
字段为 Windows 上的健康检查端口转发服务 VIP。
LocalMode
(string
类型的别名)
出现在:
LocalMode 代表的是对节点上本地流量进行检测的模式。
ProxyMode
(string
类型的别名)
出现在:
ProxyMode 表示的是 Kubernetes 代理服务器所使用的模式。
目前 Linux 平台上有两种可用的代理模式:'iptables' 和 'ipvs'。
在 Windows 平台上可用的一种代理模式是:'kernelspace'。
如果代理模式未被指定,将使用最佳可用的代理模式(目前在 Linux 上是 iptables
,在 Windows 上是 kernelspace
)。
如果不能使用选定的代理模式(由于缺少内核支持、缺少用户空间组件等),则 kube-proxy 将出错并退出。
14.11 - kube-scheduler 配置 (v1)
资源类型
ClientConnectionConfiguration
出现在:
ClientConnectionConfiguration 中包含用来构造客户端所需的细节。
字段 描述
kubeconfig
[必需]
string
kubeconfig
字段为指向 KubeConfig 文件的路径。
acceptContentTypes
[必需]
string
acceptContentTypes
定义的是客户端与服务器建立连接时要发送的 Accept 头部,
这里的设置值会覆盖默认值 "application/json"。此字段会影响某特定客户端与服务器的所有连接。
contentType
[必需]
string
contentType
包含的是此客户端向服务器发送数据时使用的内容类型(Content Type)。
qps
[必需]
float32
qps
控制此连接允许的每秒查询次数。
burst
[必需]
int32
burst
允许在客户端超出其速率限制时可以累积的额外查询个数。
DebuggingConfiguration
出现在:
DebuggingConfiguration 包含与调试功能相关的配置。
字段 描述
enableProfiling
[必需]
bool
enableProfiling
字段允许通过 Web 接口 host:port/debug/pprof/ 执行性能分析。
enableContentionProfiling
[必需]
bool
enableContentionProfiling
字段在
enableProfiling
为 true 时启用阻塞分析。
LeaderElectionConfiguration
出现在:
LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举客户端的配置。
字段 描述
leaderElect
[必需]
bool
leaderElect
允许领导者选举客户端在进入主循环执行之前先获得领导者角色。
运行多副本组件时启用此功能有助于提高可用性。
leaseDuration
[必需]
meta/v1.Duration
leaseDuration
是非领导角色候选者在观察到需要领导席位更新时要等待的时间;
只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要被刷新的席位。
这里的设置值本质上意味着某个领导者在被另一个候选者替换掉之前可以停止运行的最长时长。
只有当启用了领导者选举时此字段有意义。
renewDeadline
[必需]
meta/v1.Duration
renewDeadline
设置的是当前领导者在停止扮演领导角色之前需要刷新领导状态的时间间隔。
此值必须小于或等于租约期限的长度。只有到启用了领导者选举时此字段才有意义。
retryPeriod
[Required[必需]
meta/v1.Duration
retryPeriod
是客户端在连续两次尝试获得或者刷新领导状态之间需要等待的时长。
只有当启用了领导者选举时此字段才有意义。
resourceLock
[必需]
string
resourceLock
字段给出在领导者选举期间要作为锁来使用的资源对象类型。
resourceName
[必需]
string
resourceName
字段给出在领导者选举期间要作为锁来使用的资源对象名称。
resourceNamespace
[必需]
string
resourceNamespace
字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
DefaultPreemptionArgs
DefaultPreemptionArgs 包含用来配置 DefaultPreemption 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringDefaultPreemptionArgs
minCandidateNodesPercentage
[必需]
int32
minCandidateNodesPercentage
字段为试运行抢占时 shortlist 中候选节点数的下限,
数值为节点数的百分比。字段值必须介于 [0, 100] 之间。未指定时默认值为整个集群规模的 10%。
minCandidateNodesAbsolute
[必需]
int32
minCandidateNodesAbsolute
字段设置 shortlist 中候选节点的绝对下限。
用于试运行抢占而列举的候选节点个数近似于通过下面的公式计算的:
候选节点数 = max(节点数 * minCandidateNodesPercentage, minCandidateNodesAbsolute)
之所以说是"近似于"是因为存在一些类似于 PDB 违例这种因素,
会影响到进入 shortlist 中候选节点的个数。
取值至少为 0 节点。若未设置默认为 100 节点。
InterPodAffinityArgs
InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringInterPodAffinityArgs
hardPodAffinityWeight
[必需]
int32
hardPodAffinityWeight
字段是一个计分权重值。针对新增的 Pod,要对现存的、
带有与新 Pod 匹配的硬性亲和性设置的 Pods 计算亲和性得分。
ignorePreferredTermsOfExistingPods
[必需]
bool
ignorePreferredTermsOfExistingPods 配置调度器在为候选节点评分时忽略现有 Pod 的优选亲和性规则,
除非传入的 Pod 具有 Pod 间的亲和性。
KubeSchedulerConfiguration
KubeSchedulerConfiguration 用来配置调度器。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringKubeSchedulerConfiguration
parallelism
[必需]
int32
parallelism
字段设置为调度 Pod 而执行算法时的并发度。此值必须大于 0。默认值为 16。
leaderElection
[必需]
LeaderElectionConfiguration
LeaderElection 字段用来定义领导者选举客户端的配置。
clientConnection
[必需]
ClientConnectionConfiguration
clientConnection
字段为与 API 服务器通信时使用的代理服务器设置 kubeconfig 文件和客户端连接配置。
DebuggingConfiguration
[必需]
DebuggingConfiguration
(DebuggingConfiguration
的成员被内嵌到此类型中)
DebuggingConfiguration
字段设置与调试相关功能特性的配置。
TODO:我们可能想把它做成一个子结构,像调试 component-base/config/v1alpha1.DebuggingConfiguration 一样。
percentageOfNodesToScore
[必需]
int32
percentageOfNodesToScore
字段为所有节点的百分比,一旦调度器找到所设置比例的、能够运行 Pod 的节点,
则停止在集群中继续寻找更合适的节点。这一配置有助于提高调度器的性能。
调度器总会尝试寻找至少 "minFeasibleNodesToFind" 个可行节点,无论此字段的取值如何。
例如:当集群规模为 500 个节点,而此字段的取值为 30,
则调度器在找到 150 个合适的节点后会停止继续寻找合适的节点。当此值为 0 时,
调度器会使用默认节点数百分比(基于集群规模确定的值,在 5% 到 50% 之间)来执行打分操作。
它可被配置文件级别的 PercentageOfNodesToScore 覆盖。
podInitialBackoffSeconds
[必需]
int64
podInitialBackoffSeconds
字段设置不可调度 Pod 的初始回退秒数。
如果设置了此字段,其取值必须大于零。若此值为 null,则使用默认值(1s)。
podMaxBackoffSeconds
[必需]
int64
podMaxBackoffSeconds
字段设置不可调度的 Pod 的最大回退秒数。
如果设置了此字段,则其值必须大于 podInitialBackoffSeconds 字段值。
如果此值设置为 null,则使用默认值(10s)。
profiles
[必需]
[]KubeSchedulerProfile
profiles
字段为 kube-scheduler 所支持的方案(profiles)。
Pod 可以通过设置其对应的调度器名称来选择使用特定的方案。
未指定调度器名称的 Pod 会使用 "default-scheduler" 方案来调度,如果存在的话。
extenders
[必需]
[]Extender
extenders
字段为调度器扩展模块(Extender)的列表,每个元素包含如何与某扩展模块通信的配置信息。
所有调度器方案会共享此扩展模块列表。
delayCacheUntilActive
[Required]
bool
DelayCacheUntilActive 指定何时开始缓存。如果字段设置为 true 并且启用了领导者选举,
则调度程序将等待填充通知者缓存,直到它成为领导者,这样做会减慢故障转移速度,
并在等待成为领导者时降低内存开销。
默认为 false。
NodeAffinityArgs
NodeAffinityArgs 中包含配置 NodeAffinity 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringNodeAffinityArgs
addedAffinity
core/v1.NodeAffinity
addedAffinity
会作为附加的亲和性属性添加到所有 Pod 的规约中指定的 NodeAffinity 中。
换言之,节点需要同时满足 addedAffinity 和 .spec.nodeAffinity。
默认情况下,addedAffinity 为空(与所有节点匹配)。使用了 addedAffinity 时,
某些带有已经能够与某特定节点匹配的亲和性需求的 Pod (例如 DaemonSet Pod)可能会继续呈现不可调度状态。
NodeResourcesBalancedAllocationArgs
NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllocation 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringNodeResourcesBalancedAllocationArgs
resources
[必需]
[]ResourceSpec
要管理的资源;如果未设置,则默认值为 "cpu" 和 "memory"。
NodeResourcesFitArgs
NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringNodeResourcesFitArgs
ignoredResources
[必需]
[]string
ignoredResources
字段为 NodeResources 匹配过滤器要忽略的资源列表。此列表不影响节点打分。
ignoredResourceGroups
[必需]
[]string
ignoredResourceGroups
字段定义 NodeResources 匹配过滤器要忽略的资源组列表。
例如,如果配置值为 ["example.com"],
则以 "example.com" 开头的资源名
(如"example.com/aaa" 和 "example.com/bbb")都会被忽略。
资源组名称中不可以包含 '/'。此设置不影响节点的打分。
scoringStrategy
[必需]
ScoringStrategy
scoringStrategy
用来选择节点资源打分策略。默认的策略为 LeastAllocated,
且 "cpu" 和 "memory" 的权重相同。
PodTopologySpreadArgs
PodTopologySpreadArgs 包含用来配置 PodTopologySpread 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringPodTopologySpreadArgs
defaultConstraints
[]core/v1.TopologySpreadConstraint
defaultConstraints
字段针对未定义 .spec.topologySpreadConstraints
的 Pod,
为其提供拓扑分布约束。.defaultConstraints[∗].labelSelectors
必须为空,
因为这一信息要从 Pod 所属的 Service、ReplicationController、ReplicaSet 或 StatefulSet 来推导。
此字段不为空时,.defaultingType
必须为 "List"。
defaultingType
PodTopologySpreadConstraintsDefaulting
defaultingType
决定如何推导 .defaultConstraints
。
可选值为 "System" 或 "List"。
"System":使用 Kubernetes 定义的约束,将 Pod 分布到不同节点和可用区;
"List":使用 .defaultConstraints
中定义的约束。
默认值为 "System"。
VolumeBindingArgs
VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
字段 描述
apiVersion
stringkubescheduler.config.k8s.io/v1
kind
stringVolumeBindingArgs
bindTimeoutSeconds
[必需]
int64
bindTimeoutSeconds
字段设置卷绑定操作的超时秒数。字段值必须是非负数。
取值为 0 意味着不等待。如果此值为 null,则使用默认值(600)。
shape
[]UtilizationShapePoint
shape
用来设置打分函数曲线所使用的计分点,
这些计分点用来基于静态制备的 PV 卷的利用率为节点打分。
卷的利用率是计算得来的,
将 Pod 所请求的总的存储空间大小除以每个节点上可用的总的卷容量。
每个计分点包含利用率(范围从 0 到 100)和其对应的得分(范围从 0 到 10)。
你可以通过为不同的使用率值设置不同的得分来反转优先级:
默认的曲线计分点为:
利用率为 0 时得分为 0;
利用率为 100 时得分为 10。
所有计分点必须按利用率值的升序来排序。
Extender
出现在:
Extender 包含与扩展模块(Extender)通信所用的参数。
如果未指定 verb 或者 verb 为空,则假定对应的扩展模块选择不提供该扩展功能。
字段 描述
urlPrefix
[必需]
string
用来访问扩展模块的 URL 前缀。
filterVerb
[必需]
string
filter 调用所使用的动词,如果不支持过滤操作则为空。
此动词会在向扩展模块发送 filter 调用时追加到 urlPrefix 后面。
preemptVerb
[必需]
string
preempt 调用所使用的动词,如果不支持 preempt 操作则为空。
此动词会在向扩展模块发送 preempt 调用时追加到 urlPrefix 后面。
prioritizeVerb
[必需]
string
prioritize 调用所使用的动词,如果不支持 prioritize 操作则为空。
此动词会在向扩展模块发送 prioritize 调用时追加到 urlPrefix 后面。
weight
[必需]
int64
针对 prioritize 调用所生成的节点分数要使用的数值系数。
weight 值必须是正整数。
bindVerb
[必需]
string
bind 调用所使用的动词,如果不支持 bind 操作则为空。
此动词会在向扩展模块发送 bind 调用时追加到 urlPrefix 后面。
如果扩展模块实现了此方法,扩展模块要负责将 Pod 绑定到 API 服务器。
只有一个扩展模块可以实现此函数。
enableHTTPS
[必需]
bool
enableHTTPS
字段设置是否需要使用 HTTPS 来与扩展模块通信。
tlsConfig
[Required]
ExtenderTLSConfig
tlsConfig
字段设置传输层安全性(TLS)配置。
httpTimeout
[必需]
meta/v1.Duration
httpTimeout
给出扩展模块功能调用的超时值。filter 操作超时会导致 Pod 无法被调度。
prioritize 操作超时会被忽略,
Kubernetes 或者其他扩展模块所给出的优先级值会被用来选择节点。
nodeCacheCapable
[必需]
bool
nodeCacheCapable
指示扩展模块可以缓存节点信息,从而调度器应该发送关于可选节点的最少信息,
假定扩展模块已经缓存了集群中所有节点的全部详细信息。
managedResources
[]ExtenderManagedResource
managedResources
是一个由此扩展模块所管理的扩展资源的列表。
如果某 Pod 请求了此列表中的至少一个扩展资源,则 Pod 会在 filter、
prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发送到该扩展模块。
如果某资源上设置了 ignoredByScheduler
为 true,则 kube-scheduler
会在断言阶段略过对该资源的检查。
ignorable
[必需]
bool
ignorable
用来设置扩展模块是否是可忽略的。
换言之,当扩展模块返回错误或者完全不可达时,调度操作不应失败。
ExtenderManagedResource
出现在:
ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数。
字段 描述
name
[必需]
string
扩展资源的名称。
ignoredByScheduler
[必需]
bool
ignoredByScheduler
标明 kube-scheduler 是否应在应用断言时忽略此资源。
ExtenderTLSConfig
出现在:
ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数。
字段 描述
insecure
[必需]
bool
访问服务器时不需要检查 TLS 证书。此配置仅针对测试用途。
serverName
[必需]
string
serverName
会被发送到服务器端,作为 SNI 标志;
客户端会使用此设置来检查服务器证书。
如果 serverName
为空,则会使用联系服务器时所用的主机名。
certFile
[必需]
string
服务器端所要求的 TLS 客户端证书认证。
keyFile
[必需]
string
服务器端所要求的 TLS 客户端秘钥认证。
caFile
[必需]
string
服务器端被信任的根证书。
certData
[必需]
[]byte
certData
包含 PEM 编码的字节流(通常从某客户端证书文件读入)。
此字段优先级高于 certFile 字段。
keyData
[必需]
[]byte
keyData
包含 PEM 编码的字节流(通常从某客户端证书秘钥文件读入)。
此字段优先级高于 keyFile 字段。
caData
[必需]
[]byte
caData
包含 PEM 编码的字节流(通常从某根证书包文件读入)。
此字段优先级高于 caFile 字段。
KubeSchedulerProfile
出现在:
KubeSchedulerProfile 是一个调度方案。
字段 描述
schedulerName
[必需]
string
schedulerName
是与此调度方案相关联的调度器的名称。
如果 schedulerName
与 Pod 的 spec.schedulerName
匹配,
则该 Pod 会使用此方案来调度。
percentageOfNodesToScore
[必需]
int32
percentageOfNodesToScore 是已发现可运行 Pod 的节点与所有节点的百分比,
调度器所发现的可行节点到达此阈值时,将停止在集群中继续搜索可行节点。
这有助于提高调度器的性能。无论此标志的值是多少,调度器总是尝试至少找到 “minFeasibleNodesToFind” 个可行的节点。
例如:如果集群大小为 500 个节点并且此标志的值为 30,则调度器在找到 150 个可行节点后将停止寻找更多可行的节点。
当值为 0 时,默认百分比(根据集群大小为 5% - 50%)的节点将被评分。此设置值将覆盖全局的 PercentageOfNodesToScore 值。
如果为空,将使用全局 PercentageOfNodesToScore。
plugins
[必需]
Plugins
plugins
设置一组应该被启用或禁止的插件。
被启用的插件是指除了默认插件之外需要被启用的插件。
被禁止的插件是指需要被禁用的默认插件。
如果针对某个扩展点没有设置被启用或被禁止的插件,
则使用该扩展点的默认插件(如果有的话)。如果设置了 QueueSort 插件,
则同一个 QueueSort 插件和 pluginConfig
要被设置到所有调度方案之上。
pluginConfig
[必需]
[]PluginConfig
pluginConfig
是为每个插件提供的一组可选的定制插件参数。
如果忽略了插件的配置参数,则意味着使用该插件的默认配置。
Plugin
出现在:
Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用于评分(Score)插件。
字段 描述
name
[必需]
string
插件的名称。
weight
[必需]
int32
插件的权重;仅适用于评分(Score)插件。
PluginConfig
出现在:
PluginConfig 给出初始化阶段要传递给插件的参数。
在多个扩展点被调用的插件仅会被初始化一次。
参数可以是任意结构。插件负责处理这里所传的参数。
PluginSet
出现在:
PluginSet 为某扩展点设置要启用或禁用的插件。
如果数组为空,或者取值为 null,则使用该扩展点的默认插件集合。
字段 描述
enabled
[必需]
[]Plugin
enabled
设置在默认插件之外要启用的插件。
如果在调度器的配置文件中也配置了默认插件,则对应插件的权重会被覆盖。
此处所设置的插件会在默认插件之后被调用,调用顺序与数组中元素顺序相同。
disabled
[必需]
[]Plugin
disabled
设置要被禁用的默认插件。
如果需要禁用所有的默认插件,应该提供仅包含一个元素 "∗" 的数组。
Plugins
出现在:
Plugins 结构中包含多个扩展点。当此结构被设置时,
针对特定扩展点所启用的所有插件都在这一列表中。
如果配置中不包含某个扩展点,则使用该扩展点的默认插件集合。
被启用的插件的调用顺序与这里指定的顺序相同,都在默认插件之后调用。
如果它们需要在默认插件之前调用,则需要先行禁止默认插件,
之后在这里按期望的顺序重新启用。
字段 描述
preEnqueue
[必需]
PluginSet
preEnqueue 是在将 Pod 添加到调度队列之前应调用的插件的列表。
queueSort
[必需]
PluginSet
queueSort
是一个在对调度队列中 Pod 排序时要调用的插件列表。
preFilter
[必需]
PluginSet
preFilter
是一个在调度框架中 "PreFilter(预过滤)"扩展点上要调用的插件列表。
filter
[必需]
PluginSet
filter
是一个在需要过滤掉无法运行 Pod 的节点时被调用的插件列表。
postFilter
[必需]
PluginSet
postFilter
是一个在过滤阶段结束后会被调用的插件列表;
这里的插件只有在找不到合适的节点来运行 Pod 时才会被调用。
preScore
[必需]
PluginSet
preScore
是一个在打分之前要调用的插件列表。
score
[必需]
PluginSet
score
是一个在对已经通过过滤阶段的节点进行排序时调用的插件的列表。
reserve
[必需]
PluginSet
reserve
是一组在运行 Pod 的节点已被选定后,需要预留或者释放资源时调用的插件的列表。
permit
[必需]
PluginSet
permit
是一个用来控制 Pod 绑定关系的插件列表。
这些插件可以禁止或者延迟 Pod 的绑定。
preBind
[必需]
PluginSet
preBind
是一个在 Pod 被绑定到某节点之前要被调用的插件的列表。
bind
[必需]
PluginSet
bind
是一个在调度框架中 "Bind(绑定)"扩展点上要调用的插件的列表。
调度器按顺序调用这些插件。只要其中某个插件返回成功,则调度器就略过余下的插件。
postBind
[必需]
PluginSet
postBind
是一个在 Pod 已经被成功绑定之后要调用的插件的列表。
multiPoint
[必需]
PluginSet
multiPoint
是一个简化的配置段落,用来为所有合法的扩展点启用插件。
通过 multiPoint
启用的插件会自动注册到插件所实现的每个独立的扩展点上。
通过 multiPoint
禁用的插件会禁用对应的操作行为。
通过 multiPoint
所禁止的 "∗"
也是如此,意味着所有默认插件都不会被自动注册。
插件也可以通过各个独立的扩展点来禁用。
就优先序而言,插件配置遵从以下基本层次:
特定的扩展点;
显式配置的 multiPoint
插件;
默认插件的集合,以及 multiPoint
插件。
这意味着优先序较高的插件会先被运行,并且覆盖 multiPoint
中的任何配置。
用户显式配置的插件也会比默认插件优先序高。
在这样的层次结构设计之下,enabled
的优先序高于 disabled
。
例如,某插件同时出现在 multiPoint.enabled
和 multiPoint.disalbed
时,
该插件会被启用。类似的,
同时设置 multiPoint.disabled = '∗'
和 multiPoint.enabled = pluginA
时,
插件 pluginA 仍然会被注册。这一设计与所有其他扩展点的配置行为是相符的。
PodTopologySpreadConstraintsDefaulting
(string
类型的别名)
出现在:
PodTopologySpreadConstraintsDefaulting
定义如何为 PodTopologySpread 插件设置默认的约束。
RequestedToCapacityRatioParam
出现在:
RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
ResourceSpec
出现在:
ResourceSpec 用来代表某个资源。
字段 描述
name
[必需]
string
资源名称。
weight
[必需]
int64
资源权重。
ScoringStrategy
出现在:
ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
ScoringStrategyType
(string
数据类型的别名)
出现在:
ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型。
UtilizationShapePoint
出现在:
UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
字段 描述
utilization
[必需]
int32
利用率(x 轴)。合法值为 0 到 100。完全被利用的节点映射到 100。
score
[必需]
int32
score
分配给指定利用率的分值(y 轴)。合法值为 0 到 10。
14.12 - kubeadm 配置 (v1beta4)
概述
v1beta4 包定义 v1beta4 版本的 kubeadm 配置文件格式。
此版本改进了 v1beta3 的格式,修复了一些小问题并添加了一些新的字段。
从 v1beta3 版本以来的变更列表:
TODO https://github.com/kubernetes/kubeadm/issues/2890
使用 APIServer.ExtraEnvs
、ControllerManager.ExtraEnvs
、
Scheduler.ExtraEnvs
、Etcd.Local.ExtraEnvs
。
支持在 ClusterConfiguration
下控制平面组件中的定制环境变量。
ResetConfiguration
API 类型在 v1beta4 中已得到支持。
用户可以为 kubeadm reset
指定 --config
文件来重置节点。
kubeadm 配置版本迁移
kubeadm v1.15.x 及更高版本可用于从 v1beta1 迁移到 v1beta2。
kubeadm v1.22.x 及更高版本不再支持 v1beta1 和更早的 API,但可用于从 v1beta2 迁移到 v1beta3。
kubeadm v1.27.x 及更高版本不再支持 v1beta2 和更早的 API。
TODO: https://github.com/kubernetes/kubeadm/issues/2890
添加可用于转换到 v1beta4 的版本
基础知识
配置 kubeadm 的推荐方式是使用 --config
选项向其传递一个 YAML 配置文件。
kubeadm 配置文件中定义的某些配置选项也可以作为命令行标志来使用,
不过这种方法所支持的都是一些最常见的、最简单的使用场景。
一个 kubeadm 配置文件中可以包含多个配置类型,使用三根横线(---
)作为分隔符。
kubeadm 支持以下配置类型:
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
要输出 "init" 和 "join" 动作的默认值,可以使用下面的命令:
kubeadm config print init-defaults
kubeadm config print join-defaults
配置文件中必须包含的配置类型列表取决于你所执行的动作(init
或 join
),
也取决于你要使用的配置选项(默认值或者高级定制)。
如果某些配置类型没有提供,或者仅部分提供,kubeadm 将使用默认值;
kubeadm 所提供的默认值在必要时也会保证其在多个组件之间是一致的
(例如控制器管理器上的 --cluster-cidr
参数和 kube-proxy 上的
clusterCIDR
)。
用户总是可以覆盖默认配置值,唯一的例外是一小部分与安全性相关联的配置
(例如在 API 服务器上强制实施 Node 和 RBAC 鉴权模式)。
如果用户所提供的配置类型并非你所执行的操作需要的,kubeadm 会忽略这些配置类型并打印警告信息。
kubeadm init 配置类型
当带有 --config
选项来执行 kubeadm init 命令时,可以使用下面的配置类型:
InitConfiguration
、ClusterConfiguration
、KubeProxyConfiguration
、
KubeletConfiguration
,但 InitConfiguration
和 ClusterConfiguration
二者之间取其一即可。
apiVersion : kubeadm.k8s.io/v1beta4
kind : InitConfiguration
bootstrapTokens :
...
nodeRegistration :
...
InitConfiguration 类型用来配置运行时设置,就 kubeadm init 命令而言,
包括启动引导令牌以及所有与 kubeadm 所在节点相关的设置,包括:
nodeRegistration:其中包含与向集群注册新节点相关的字段;
使用这个类型来定制节点名称、要使用的 CRI 套接字或者其他仅对当前节点起作用的设置(例如节点 IP 地址)。
localAPIEndpoint:代表的是要部署到此节点上的 API 服务器实例的端点;
使用这个类型可以完成定制 API 服务器公告地址这类操作。
apiVersion : kubeadm.k8s.io/v1beta4
kind : ClusterConfiguration
networking :
...
etcd :
...
apiServer :
extraArgs :
...
extraVolumes :
...
...
类型 ClusterConfiguration
用来定制集群范围的设置,具体包括以下设置:
networking
:其中包含集群的网络拓扑配置。使用这一部分可以定制 Pod
的子网或者 Service 的子网。
etcd
:etcd 数据库的配置。例如使用这个部分可以定制本地 etcd 或者配置 API
服务器使用一个外部的 etcd 集群。
kube-apiserver
、kube-scheduler
、kube-controller-manager
配置:这些部分可以通过添加定制的设置或者重载 kubeadm 的默认设置来定制控制平面组件。
apiVersion : kubeproxy.config.k8s.io/v1alpha1
kind : KubeProxyConfiguration
...
KubeProxyConfiguration 类型用来更改传递给在集群中部署的 kube-proxy 实例的配置。
如果此对象没有提供,或者仅部分提供,kubeadm 使用默认值。
关于 kube-proxy 的官方文档,可参阅
https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-proxy/
或者 https://pkg.go.dev/k8s.io/kube-proxy/config/v1alpha1#KubeProxyConfiguration。
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
...
KubeletConfiguration 类型用来更改传递给在集群中部署的 kubelet 实例的配置。
如果此对象没有提供,或者仅部分提供,kubeadm 使用默认值。
关于 kubelet 的官方文档,可参阅
https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kubelet/
或者
https://pkg.go.dev/k8s.io/kubelet/config/v1beta1#KubeletConfiguration。
下面是一个为执行 kubeadm init
而提供的、包含多个配置类型的单一 YAML 文件,
其中填充了很多部分。
apiVersion : kubeadm.k8s.io/v1beta4
kind : InitConfiguration
bootstrapTokens :
- token : "9a08jv.c0izixklcxtmnze7"
description : "kubeadm bootstrap token"
ttl : "24h"
- token : "783bde.3f89s0fje9f38fhf"
description : "another bootstrap token"
usages :
- authentication
- signing
groups :
- system:bootstrappers:kubeadm:default-node-token
nodeRegistration :
name : "ec2-10-100-0-1"
criSocket : "unix:///var/run/containerd/containerd.sock"
taints :
- key : "kubeadmNode"
value : "someValue"
effect : "NoSchedule"
kubeletExtraArgs :
v : 4
ignorePreflightErrors :
- IsPrivilegedUser
imagePullPolicy : "IfNotPresent"
localAPIEndpoint :
advertiseAddress : "10.100.0.1"
bindPort : 6443
certificateKey : "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204"
skipPhases :
- addon/kube-proxy
---
apiVersion : kubeadm.k8s.io/v1beta4
kind : ClusterConfiguration
etcd :
# one of local or external
local :
imageRepository : "registry.k8s.io"
imageTag : "3.2.24"
dataDir : "/var/lib/etcd"
extraArgs :
listen-client-urls : "http://10.100.0.1:2379"
serverCertSANs :
- "ec2-10-100-0-1.compute-1.amazonaws.com"
peerCertSANs :
- "10.100.0.1"
# external:
# endpoints:
# - "10.100.0.1:2379"
# - "10.100.0.2:2379"
# caFile: "/etcd/kubernetes/pki/etcd/etcd-ca.crt"
# certFile: "/etcd/kubernetes/pki/etcd/etcd.crt"
# keyFile: "/etcd/kubernetes/pki/etcd/etcd.key"
networking :
serviceSubnet : "10.96.0.0/16"
podSubnet : "10.244.0.0/24"
dnsDomain : "cluster.local"
kubernetesVersion : "v1.21.0"
controlPlaneEndpoint : "10.100.0.1:6443"
apiServer :
extraArgs :
authorization-mode : "Node,RBAC"
extraVolumes :
- name : "some-volume"
hostPath : "/etc/some-path"
mountPath : "/etc/some-pod-path"
readOnly : false
pathType : File
certSANs :
- "10.100.1.1"
- "ec2-10-100-0-1.compute-1.amazonaws.com"
timeoutForControlPlane : 4m0s
controllerManager :
extraArgs :
"node-cidr-mask-size": "20"
extraVolumes :
- name : "some-volume"
hostPath : "/etc/some-path"
mountPath : "/etc/some-pod-path"
readOnly : false
pathType : File
scheduler :
extraArgs :
address : "10.100.0.1"
extraVolumes :
- name : "some-volume"
hostPath : "/etc/some-path"
mountPath : "/etc/some-pod-path"
readOnly : false
pathType : File
certificatesDir : "/etc/kubernetes/pki"
imageRepository : "registry.k8s.io"
clusterName : "example-cluster"
---
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
# kubelet specific options here
---
apiVersion : kubeproxy.config.k8s.io/v1alpha1
kind : KubeProxyConfiguration
# kube-proxy specific options here
kubeadm join 配置类型
当使用 --config
选项执行 kubeadm join
命令时,
需要提供 JoinConfiguration 类型。
apiVersion : kubeadm.k8s.io/v1beta4
kind : JoinConfiguration
...
JoinConfiguration 类型用来配置运行时设置,就 kubeadm join
而言包括用来访问集群信息的发现方法,以及所有特定于 kubeadm 执行所在节点的设置,包括:
资源类型
BootstrapToken
出现在:
BootstrapToken 描述的是一个启动引导令牌,以 Secret 的形式存储在集群中。
字段 描述
token
[必需]
BootstrapTokenString
token
用来在节点与控制平面之间建立双向的信任关系。
在向集群中添加节点时使用。
description
string
description
设置一个对用户友好的信息,
说明为什么此令牌会存在以及其目标用途,这样其他管理员能够知道其目的。
ttl
meta/v1.Duration
ttl
定义此令牌的生命周期。默认为 24h
。
expires
和 ttl
是互斥的。
expires
meta/v1.Time
expires
设置此令牌过期的时间戳。默认根据 ttl
值在运行时动态设置。
expires
和 ttl
是互斥的。
usages
[]string
usages
描述此令牌的可能使用方式。默认情况下,
令牌可用于建立双向的信任关系;不过这里可以改变默认用途。
groups
[]string
groups
设定此令牌被用于身份认证时对应的附加用户组。
BootstrapTokenString
出现在:
BootstrapTokenString 形式为 abcdef.abcdef0123456789
的一个令牌,
用来从加入集群的节点角度验证 API 服务器的身份,或者 "kubeadm join"
在节点启动引导时作为一种身份认证方法。
此令牌的生命期是短暂的,并且应该如此。
字段 描述
-
[必需]
string
令牌的 ID。
-
[必需]
string
令牌的私密数据。
ClusterConfiguration
ClusterConfiguration 包含一个 kubeadm 集群的集群范围配置信息。
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta4
kind
stringClusterConfiguration
etcd
Etcd
etcd
中包含 etcd 服务的配置。
networking
Networking
networking
字段包含集群的网络拓扑配置。
kubernetesVersion
string
kubernetesVersion
设置控制平面的目标版本。
controlPlaneEndpoint
string
controlPlaneEndpoint
为控制平面设置一个稳定的 IP 地址或 DNS 名称。
取值可以是一个合法的 IP 地址或者 RFC-1123 形式的 DNS 子域名,二者均可以带一个可选的 TCP 端口号。
如果 controlPlaneEndpoint
未设置,则使用 advertiseAddress +
bindPort
。如果设置了 controlPlaneEndpoint
,但未指定 TCP 端口号,
则使用 bindPort
。
可能的用法有:
在一个包含不止一个控制平面实例的集群中,该字段应该设置为放置在控制平面实例前面的外部负载均衡器的地址。
在带有强制性节点回收的环境中,controlPlaneEndpoint
可以用来为控制平面设置一个稳定的 DNS。
apiServer
APIServer
apiServer
包含 API 服务器的一些额外配置。
controllerManager
ControlPlaneComponent
controllerManager
中包含控制器管理器的额外配置。
scheduler
ControlPlaneComponent
scheduler
包含调度器控制平面组件的额外配置。
dns
DNS
dns
定义在集群中安装的 DNS 插件的选项。
certificatesDir
string
certificatesDir
设置在何处存放或者查找所需证书。
imageRepository
string
imageRepository
设置用来拉取镜像的容器仓库。
如果此字段为空,默认使用 registry.k8s.io
。
当 Kubernetes 用来执行 CI 构建时(Kubernetes 版本以 ci/
开头),
将默认使用 gcr.io/k8s-staging-ci-images
来拉取控制平面组件镜像,
而使用 registry.k8s.io
来拉取所有其他镜像。
featureGates
map[string]bool
featureGates
包含用户所启用的特性门控。
clusterName
string
集群名称。
InitConfiguration
InitConfiguration
包含一组特定于 "kubeadm init" 的运行时元素。
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta4
kind
stringInitConfiguration
bootstrapTokens
[]BootstrapToken
bootstrapTokens
在 kubeadm init
执行时会被用到,
其中描述了一组要创建的启动引导令牌(Bootstrap Tokens)。
这里的信息不会被上传到 kubeadm 在集群中保存的 ConfigMap 中,部分原因是由于信息本身比较敏感。
nodeRegistration
NodeRegistrationOptions
nodeRegistration
中包含与向集群中注册新的控制平面节点相关的字段。
localAPIEndpoint
APIEndpoint
localAPIEndpoint
所代表的是在此控制平面节点上要部署的 API 服务器的端点。
在高可用(HA)配置中,此字段与 ClusterConfiguration.controlPlaneEndpoint
的取值不同:后者代表的是整个集群的全局端点,该端点上的请求会被负载均衡到每个
API 服务器。此配置对象允许你定制本地 API 服务器所公布的、可访问的 IP/DNS 名称和端口。
默认情况下,kubeadm 会尝试自动检测默认接口上的 IP 并使用该地址。
不过,如果这种检测失败,你可以在此字段中直接设置所期望的值。
certificateKey
string
certificateKey
用来设置一个秘钥,该秘钥将对 uploadcerts init
阶段上传到集群中某 Secret 内的秘钥和证书加密。
skipPhases
[]string
skipPhases
是命令执行过程中要略过的阶段(Phases)。
通过执行命令 kubeadm init --help
可以获得阶段的列表。
参数标志 "--skip-phases" 优先于此字段的设置。
patches
Patches
patches
包含与 kubeadm init
阶段 kubeadm
所部署的组件上要应用的补丁相关的信息。
JoinConfiguration
JoinConfiguration 包含描述特定节点的元素。
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta4
kind
stringJoinConfiguration
nodeRegistration
NodeRegistrationOptions
nodeRegistration
包含与向集群注册控制平面节点相关的字段。
caCertPath
string
caCertPath
是指向 SSL 证书机构的路径,该证书包用来加密节点与控制平面之间的通信。
默认值为 "/etc/kubernetes/pki/ca.crt"。
discovery
[必需]
Discovery
discovery
设置 TLS 引导过程中 kubelet 要使用的选项。
controlPlane
JoinControlPlane
controlPlane
定义要在正被加入到集群中的节点上部署的额外控制平面实例。
此字段为 null 时,不会在上面部署额外的控制平面实例。
skipPhases
[]string
skipPhases
是在命令执行过程中要略过的阶段的列表。
通过 kubeadm join --help
命令可以查看阶段的列表。
参数 --skip-phases
优先于此字段。
patches
Patches
此字段包含 kubeadm join
阶段向 kubeadm 所部署的组件打补丁的选项。
ResetConfiguration
ResetConfiguration
包含一个字段列表,这些字段是特定于 "kubeadm reset" 的运行时元素。
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta4
kind
stringResetConfiguration
cleanupTmpDir
bool
cleanupTmpDir
指定在重置过程中 "/etc/kubernetes/tmp" 目录是否应被清理。
certificatesDir
string
certificatesDir
指定证书存储的目录。如果被指定,则在重置过程中此目录将被清理。
criSocket
string
criSocket
用于检索容器运行时信息,并用于移除容器。
如果未通过标志或配置文件指定 criSocket
,kubeadm 将尝试检测一个有效的 criSocket
。
dryRun
bool
dryRun
指定是否启用试运行模式。如果启用了试运行模式,
则不应用任何更改,只输出将要执行的操作。
force
bool
force
标志指示 kubeadm 在重置节点时不需要确认提示。
ignorePreflightErrors
[]string
ignorePreflightErrors
提供了一个在重置过程中要忽略的预检错误列表,例如
'IsPrivilegedUser,Swap'。值 'all' 将忽略所有检查的错误。
skipPhases
[]string
skipPhases
是一个在命令执行过程中要略过的阶段的列表。
你可以使用命令 "kubeadm reset phase --help" 获取阶段的列表。
APIEndpoint
出现在:
APIEndpoint
结构包含某节点上部署的 API 服务器实例的元素。
字段 描述
advertiseAddress
string
advertiseAddress
设置 API 服务器要公布的 IP 地址。
bindPort
int32
bindPort
设置 API 服务器要绑定到的安全端口。默认值为 6443。
APIServer
出现在:
APIServer
包含集群中 API 服务器部署所必需的设置。
字段 描述
ControlPlaneComponent
[必需]
ControlPlaneComponent
(ControlPlaneComponent
结构的字段被嵌入到此类型中。)
无描述。
certSANs
[]string
certSANs
设置 API 服务器签署证书所用的额外主体替代名(Subject Alternative Name,SAN)。
timeoutForControlPlane
meta/v1.Duration
timeoutForControlPlane
用来控制我们等待 API 服务器开始运行的超时时间。
BootstrapTokenDiscovery
出现在:
BootstrapTokenDiscovery 用来设置基于引导令牌的服务发现选项。
字段 描述
token
[必需]
string
token
是用来验证从控制平面获得的集群信息的令牌。
apiServerEndpoint
string
apiServerEndpoint
为 API 服务器的 IP 地址或者域名,从该端点可以获得集群信息。
caCertHashes
[]string
caCertHashes
设置一组在基于令牌来发现服务时要验证的公钥指纹。
发现过程中获得的根 CA 必须与这里的数值之一匹配。设置为空集合意味着禁用根 CA 指纹,
因而可能是不安全的。每个哈希值的形式为 <type>:<value>
,
当前唯一支持的 type 为 "sha256"。
哈希值为主体公钥信息(Subject Public Key Info,SPKI)对象的 SHA-256
哈希值(十六进制编码),形式为 DER 编码的 ASN.1。
例如,这些哈希值可以使用 OpenSSL 来计算。
unsafeSkipCAVerification
bool
unsafeSkipCAVerification
允许在使用基于令牌的服务发现时不使用
caCertHashes
来执行 CA 验证。这会弱化 kubeadm 的安全性,
因为其他节点可以伪装成控制平面。
ControlPlaneComponent
出现在:
ControlPlaneComponent 中包含对集群中所有控制平面组件都适用的设置。
字段 描述
extraArgs
map[string]string
extraArgs
是要传递给控制平面组件的一组额外的参数标志。
此映射中的每个键对应命令行上使用的标志名称,只是没有其引导连字符。
TODO:这只是暂时的,我们希望将所有组件切换为使用 ComponentConfig + ConfigMap。
extraVolumes
[]HostPathMount
extraVolumes
是一组额外的主机卷,需要挂载到控制平面组件中。
extraEnvs
[]core/v1.EnvVar
extraEnvs
是要传递给控制平面组件的额外环境变量集合。
使用 extraEnvs
传递的环境变量将会覆盖所有现有的环境变量或是 kubeadm 默认添加的 *_proxy 环境变量。
DNS
出现在:
DNS 结构定义要在集群中使用的 DNS 插件。
字段 描述
ImageMeta
[必需]
ImageMeta
(ImageMeta
的成员被内嵌到此类型中)。
imageMeta
允许对 DNS 组件所使用的的镜像作定制。
Discovery
出现在:
Discovery 设置 TLS 启动引导过程中 kubelet 要使用的配置选项。
字段 描述
bootstrapToken
BootstrapTokenDiscovery
bootstrapToken
设置基于启动引导令牌的服务发现选项。
bootstrapToken
与 file
是互斥的。
file
FileDiscovery
file
用来设置一个文件或者 URL 路径,指向一个 kubeconfig 文件;
该配置文件中包含集群信息。
bootstrapToken
与 file
是互斥的。
tlsBootstrapToken
string
tlsBootstrapToken
是 TLS 启动引导过程中使用的令牌。
如果设置了 bootstrapToken
,则此字段默认值为 .bootstrapToken.token
,
不过可以被重载。如果设置了 file
,此字段必须被设置 ,以防 kubeconfig
文件中不包含其他身份认证信息。
timeout
meta/v1.Duration
timeout
用来修改发现过程的超时时长。
Etcd
出现在:
Etcd 包含用来描述 etcd 配置的元素。
字段 描述
local
LocalEtcd
local
提供配置本地 etcd 实例的选项。
local
和 external
是互斥的。
external
ExternalEtcd
external
描述如何连接到外部的 etcd 集群。
external
是互斥的。
ExternalEtcd
出现在:
ExternalEtcd 描述外部 etcd 集群。
kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信息。
字段 描述
endpoints
[必需]
[]string
endpoints
包含一组 etcd 成员的列表。
caFile
[必需]
string
caFile
是一个 SSL 证书机构(CA)文件,用来加密 etcd 通信。
如果使用 TLS 连接,此字段为必需字段。
certFile
[必需]
string
certFile
是一个 SSL 证书文件,用来加密 etcd 通信。
如果使用 TLS 连接,此字段为必需字段。
keyFile
[必需]
string
keyFile
是一个用来加密 etcd 通信的 SSL 秘钥文件。
此字段在使用 TLS 连接时为必填字段。
FileDiscovery
出现在:
FileDiscovery 用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件;
该配置文件可用来加载集群信息。
字段 描述
kubeConfigPath
[必需]
string
kubeConfigPath
用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件;
该配置文件可用来加载集群信息。
HostPathMount
出现在:
HostPathMount 包含从宿主节点挂载的卷的信息。
字段 描述
name
[必需]
string
name
为卷在 Pod 模板中的名称。
hostPath
[必需]
string
hostPath
是要在 Pod 中挂载的卷在宿主系统上的路径。
mountPath
[必需]
string
mountPath
是 hostPath
在 Pod 内挂载的路径。
readOnly
bool
readOnly
控制卷的读写访问模式。
pathType
core/v1.HostPathType
pathType
是 hostPath
的类型。
出现在:
ImageMeta 用来配置来源不是 Kubernetes/Kubernetes 发布过程的组件所使用的镜像。
字段 描述
imageRepository
string
imageRepository
设置镜像拉取所用的容器仓库。
若未设置,则使用 ClusterConfiguration 中的 imageRepository
。
imageTag
string
imageTag
允许用户设置镜像的标签。
如果设置了此字段,则 kubeadm 不再在集群升级时自动更改组件的版本。
JoinControlPlane
出现在:
JoinControlPlane 包含在正在加入集群的节点上要部署的额外的控制平面组件的设置。
字段 描述
localAPIEndpoint
APIEndpoint
localAPIEndpoint
代表的是将在此节点上部署的 API 服务器实例的端点。
certificateKey
string
certificateKey
是在添加新的控制平面节点时用来解密所下载的
Secret 中的证书的秘钥。对应的加密秘钥在 InitConfiguration 结构中。
LocalEtcd
出现在:
LocalEtcd 描述的是 kubeadm 要使用的本地 etcd 集群。
字段 描述
ImageMeta
[必需]
ImageMeta
(ImageMeta
结构的字段被嵌入到此类型中。)
ImageMeta 允许用户为 etcd 定制要使用的容器。
dataDir
[必需]
string
dataDir
是 etcd 用来存放数据的目录。
默认值为 "/var/lib/etcd"。
extraArgs
map[string]string
extraArgs
是为 etcd 可执行文件提供的额外参数,用于在静态
Pod 中运行 etcd。映射中的每一个键对应命令行上的一个标志参数,只是去掉了前置的连字符。
extraEnvs
[]core/v1.EnvVar
extraEnvs
是要传递给控制平面组件的额外环境变量集合。
使用 ExtraEnvs 传递的环境变量将会覆盖任何现有的环境变量或是 kubeadm 默认添加的 *_proxy 环境变量。
serverCertSANs
[]string
serverCertSANs
为 etcd 服务器的签名证书设置额外的主体替代名
(Subject Alternative Names,SAN)。
peerCertSANs
[]string
peerCertSANs
为 etcd 的对等端签名证书设置额外的主体替代名
(Subject Alternative Names,SAN)。
Networking
出现在:
Networking 中包含描述集群网络配置的元素。
字段 描述
serviceSubnet
string
serviceSubnet
是 Kubernetes 服务所使用的的子网。
默认值为 "10.96.0.0/12"。
podSubnet
string
podSubnet
为 Pod 所使用的子网。
dnsDomain
string
dnsDomain
是 Kubernetes 服务所使用的的 DNS 域名。
默认值为 "cluster.local"。
NodeRegistrationOptions
出现在:
NodeRegistrationOptions 包含向集群中注册新的控制平面或节点所需要的信息;
节点注册可能通过 "kubeadm init" 或 "kubeadm join" 完成。
字段 描述
name
string
name
是 Node API 对象的 .metadata.name
字段值;
该 API 对象会在此 kubeadm init
或 kubeadm join
操作期间创建。
在提交给 API 服务器的 kubelet 客户端证书中,此字段也用作其 CommonName
。
如果未指定则默认为节点的主机名。
criSocket
string
criSocket
用来读取容器运行时的信息。此信息会被以注解的方式添加到 Node API 对象至上,用于后续用途。
taints
[必需]
[]core/v1.Taint
taints
设定 Node API 对象被注册时要附带的污点。
若未设置此字段(即字段值为 null),默认为控制平面节点添加控制平面污点。
如果你不想为控制平面节点添加污点,可以将此字段设置为空列表(即 YAML 文件中的 taints: []
),
这个字段只用于节点注册。
kubeletExtraArgs
map[string]string
kubeletExtraArgs
用来向 kubelet 传递额外参数。
这里的参数会通过 kubeadm 在运行时写入的、由 kubelet 来读取的环境文件来传递给 kubelet 命令行。
这里的设置会覆盖掉 kubelet-config
ConfigMap 中包含的一般性的配置。
命令行标志在解析时优先级更高。这里的设置值仅作用于 kubeadm 运行所在的节点。
映射中的每个键对应命令行中的一个标志参数,只是去掉了前置的连字符。
ignorePreflightErrors
[]string
ignorePreflightErrors
提供一组在当前节点被注册时可以忽略掉的预检错误。
例如:IsPrevilegedUser,Swap
。
取值 all
忽略所有检查的错误。
imagePullPolicy
core/v1.PullPolicy
imagePullPolicy
设定 "kubeadm init" 和 "kubeadm join"
操作期间的镜像拉取策略。此字段的取值可以是 "Always"、"IfNotPresent" 或
"Never" 之一。若此字段未设置,则 kubeadm 使用 "IfNotPresent" 作为其默认值,
换言之,当镜像在主机上不存在时才执行拉取操作。
Patches
出现在:
Patches
包含要向 kubeadm 所部署的组件应用的补丁信息。
字段 描述
directory
string
directory
是指向某目录的路径,该目录中包含名为
"target[suffix][+patchtype].extension" 的文件。
例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、
"kube-scheduler"、"etcd" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json",
其取值对应 kubectl 所支持的补丁形式。
"patchtype" 的默认值是 "strategic"。
"extension" 必须是 "json" 或者 "yaml"。
"suffix" 是一个可选的字符串,用来确定按字母表顺序来应用时,哪个补丁最先被应用。
14.13 - kubeadm 配置(v1beta3)
概述
v1beta3 包定义 v1beta3 版本的 kubeadm 配置文件格式。
此版本改进了 v1beta2 的格式,修复了一些小问题并添加了一些新的字段。
从 v1beta2 版本以来的变更列表:
已弃用的字段 "ClusterConfiguration.useHyperKubeImage" 现在被移除。
kubeadm 不再支持 hyperkube 镜像。
"ClusterConfiguration.dns.type" 字段已经被移除,因为 CoreDNS 是
kubeadm 所支持的唯一 DNS 服务器类型。
保存 Secret 信息的字段现在包含了 "datapolicy" 标记(tag)。
这一标记会导致 API 结构通过 klog 打印输出时,会忽略这些字段的值。
添加了 "InitConfiguration.skipPhases"、"JoinConfiguration.skipPhases",
以允许在执行 kubeadm init/join
命令时略过某些阶段。
添加了 "InitConfiguration.nodeRegistration.imagePullPolicy" 和
"JoinConfiguration.nodeRegistration.imagePullPolicy"
以允许在 kubeadm init
和 kubeadm join
期间指定镜像拉取策略。
这两个字段的值必须是 "Always"、"Never" 或 "IfNotPresent" 之一。
默认值是 "IfNotPresent",也是添加此字段之前的默认行为。
添加了 "InitConfiguration.patches.directory" 和
"JoinConfiguration.patches.directory" 以允许用户配置一个目录,
kubeadm 将从该目录中提取组件的补丁包。
BootstrapToken* API 和相关的工具被从 "kubeadm" API 组中移出,
放到一个新的 "bootstraptoken" 组中。kubeadm API 版本 v1beta3 不再包含
BootstrapToken* 结构。
从老的 kubeadm 配置版本迁移:
kubeadm v1.15.x 及更新的版本可以用来从 v1beta1 迁移到 v1beta2 版本;
kubeadm v1.22.x 及更新的版本不再支持 v1beta1 和更老的 API,但可以用来从 v1beta2 迁移到 v1beta3。
基础知识
配置 kubeadm 的推荐方式是使用 --config
选项向其传递一个 YAML 配置文件。
kubeadm 配置文件中定义的某些配置选项也可以作为命令行标志来使用,不过这种方法所支持的都是一些最常见的、最简单的使用场景。
一个 kubeadm 配置文件中可以包含多个配置类型,使用三根横线(---
)作为分隔符。
kubeadm 支持以下配置类型:
apiVersion : kubeadm.k8s.io/v1beta3
kind : InitConfiguration
apiVersion : kubeadm.k8s.io/v1beta3
kind : ClusterConfiguration
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
apiVersion : kubeproxy.config.k8s.io/v1alpha1
kind : KubeProxyConfiguration
apiVersion : kubeadm.k8s.io/v1beta3
kind : JoinConfiguration
要输出 "init" 和 "join" 动作的默认值,可以使用下面的命令:
kubeadm config print init-defaults
kubeadm config print join-defaults
配置文件中必须包含的配置类型列表取决于你在执行的动作(init
或 join
),
也取决于你要使用的配置选项(默认值或者高级定制)。
如果某些配置类型没有提供,或者仅部分提供,kubeadm 将使用默认值;
kubeadm 所提供的默认值在必要时也会保证其在多个组件之间是一致的
(例如控制器管理器上的 --cluster-cidr
参数和 kube-proxy 上的
clusterCIDR
)。
用户总是可以重载默认配置值,唯一的例外是一小部分与安全性相关联的配置
(例如在 API 服务器上强制实施 Node 和 RBAC 鉴权模式)。
如果用户所提供的配置类型并非你所执行的操作需要的,kubeadm 会忽略这些配置类型并打印警告信息。
kubeadm init 配置类型
当带有 --config
选项来执行 kubeadm init 命令时,可以使用下面的配置类型:
InitConfiguration
、ClusterConfiguration
、KubeProxyConfiguration
、KubeletConfiguration
,
但 InitConfiguration
和 ClusterConfiguration
之间只有一个是必须提供的。
apiVersion : kubeadm.k8s.io/v1beta3
kind : InitConfiguration
bootstrapTokens :
...
nodeRegistration :
...
类型 InitConfiguration 用来配置运行时设置,就 kubeadm init
命令而言,
包括启动引导令牌以及所有与 kubeadm 所在节点相关的设置,包括:
nodeRegistration:其中包含与向集群注册新节点相关的字段;
使用这个类型来定制节点名称、要使用的 CRI 套接字或者其他仅对当前节点起作用的设置
(例如节点 IP 地址)。
localAPIEndpoint:代表的是要部署到此节点上的 API 服务器实例的端点;
使用这个类型可以完成定制 API 服务器公告地址这类操作。
apiVersion : kubeadm.k8s.io/v1beta3
kind : ClusterConfiguration
networking :
...
etcd :
...
apiServer :
extraArgs :
...
extraVolumes :
...
...
类型 ClusterConfiguration
用来定制集群范围的设置,具体包括以下设置:
networking
:其中包含集群的网络拓扑配置。使用这一部分可以定制 Pod
的子网或者 Service 的子网。
etcd
:etcd 数据库的配置。例如使用这个部分可以定制本地 etcd 或者配置 API
服务器使用一个外部的 etcd 集群。
kube-apiserver
、kube-scheduler
、kube-controller-manager
配置:这些部分可以通过添加定制的设置或者重载 kubeadm 的默认设置来定制控制面组件。
apiVersion : kubeproxy.config.k8s.io/v1alpha1
kind : KubeProxyConfiguration
...
KubeProxyConfiguration 类型用来更改传递给在集群中部署的 kube-proxy 实例的配置。
如果此对象没有提供,或者仅部分提供,kubeadm 使用默认值。
关于 kube-proxy 的官方文档,可参阅
https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-proxy/
或者 https://pkg.go.dev/k8s.io/kube-proxy/config/v1alpha1#KubeProxyConfiguration。
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
...
KubeletConfiguration 类型用来更改传递给在集群中部署的 kubelet 实例的配置。
如果此对象没有提供,或者仅部分提供,kubeadm 使用默认值。
关于 kubelet 的官方文档,可参阅
https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kubelet/
或者
https://pkg.go.dev/k8s.io/kubelet/config/v1beta1#KubeletConfiguration。
下面是一个为执行 kubeadm init
而提供的、包含多个配置类型的单一 YAML 文件,
其中填充了很多部分。
apiVersion : kubeadm.k8s.io/v1beta3
kind : InitConfiguration
bootstrapTokens :
- token : "9a08jv.c0izixklcxtmnze7"
description : "kubeadm bootstrap token"
ttl : "24h"
- token : "783bde.3f89s0fje9f38fhf"
description : "another bootstrap token"
usages :
- authentication
- signing
groups :
- system:bootstrappers:kubeadm:default-node-token
nodeRegistration :
name : "ec2-10-100-0-1"
criSocket : "/var/run/dockershim.sock"
taints :
- key : "kubeadmNode"
value : "someValue"
effect : "NoSchedule"
kubeletExtraArgs :
v : 4
ignorePreflightErrors :
- IsPrivilegedUser
imagePullPolicy : "IfNotPresent"
localAPIEndpoint :
advertiseAddress : "10.100.0.1"
bindPort : 6443
certificateKey : "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204"
skipPhases :
- addon/kube-proxy
---
apiVersion : kubeadm.k8s.io/v1beta3
kind : ClusterConfiguration
etcd :
# one of local or external
local :
imageRepository : "registry.k8s.io"
imageTag : "3.2.24"
dataDir : "/var/lib/etcd"
extraArgs :
listen-client-urls : "http://10.100.0.1:2379"
serverCertSANs :
- "ec2-10-100-0-1.compute-1.amazonaws.com"
peerCertSANs :
- "10.100.0.1"
# external:
# endpoints:
# - "10.100.0.1:2379"
# - "10.100.0.2:2379"
# caFile: "/etcd/kubernetes/pki/etcd/etcd-ca.crt"
# certFile: "/etcd/kubernetes/pki/etcd/etcd.crt"
# keyFile: "/etcd/kubernetes/pki/etcd/etcd.key"
networking :
serviceSubnet : "10.96.0.0/16"
podSubnet : "10.244.0.0/24"
dnsDomain : "cluster.local"
kubernetesVersion : "v1.21.0"
controlPlaneEndpoint : "10.100.0.1:6443"
apiServer :
extraArgs :
authorization-mode : "Node,RBAC"
extraVolumes :
- name : "some-volume"
hostPath : "/etc/some-path"
mountPath : "/etc/some-pod-path"
readOnly : false
pathType : File
certSANs :
- "10.100.1.1"
- "ec2-10-100-0-1.compute-1.amazonaws.com"
timeoutForControlPlane : 4m0s
controllerManager :
extraArgs :
"node-cidr-mask-size": "20"
extraVolumes :
- name : "some-volume"
hostPath : "/etc/some-path"
mountPath : "/etc/some-pod-path"
readOnly : false
pathType : File
scheduler :
extraArgs :
bind-address : "10.100.0.1"
extraVolumes :
- name : "some-volume"
hostPath : "/etc/some-path"
mountPath : "/etc/some-pod-path"
readOnly : false
pathType : File
certificatesDir : "/etc/kubernetes/pki"
imageRepository : "registry.k8s.io"
clusterName : "example-cluster"
---
apiVersion : kubelet.config.k8s.io/v1beta1
kind : KubeletConfiguration
# kubelet specific options here
---
apiVersion : kubeproxy.config.k8s.io/v1alpha1
kind : KubeProxyConfiguration
# kube-proxy specific options here
kubeadm join 配置类型
当使用 --config
选项执行 kubeadm join
命令时,
需要提供 JoinConfiguration 类型。
apiVersion : kubeadm.k8s.io/v1beta3
kind : JoinConfiguration
...
JoinConfiguration 类型用来配置运行时设置,就 kubeadm join
而言包括用来访问集群信息的发现方法,以及所有特定于 kubeadm 执行所在节点的设置,包括:
nodeRegistration
:其中包含向集群注册新节点相关的配置字段;
使用这个类型可以定制节点名称、用使用的 CRI 套接字和所有其他仅适用于当前节点的设置
(例如节点 IP 地址)。
apiEndpoint
:用来代表最终要部署到此节点上的 API
服务器实例的端点。
资源类型
BootstrapToken
出现在:
BootstrapToken
描述的是一个启动引导令牌,以 Secret 形式存储在集群中。
字段 描述
token
[必需]
BootstrapTokenString
token
用来在节点与控制面之间建立双向的信任关系。
在向集群中添加节点时使用。
description
string
description
设置一个对用户友好的消息,
说明为什么此令牌会存在以及其目标用途,这样其他管理员能够知道其目的。
ttl
meta/v1.Duration
ttl
定义此令牌的声明周期。默认为 24h
。
expires
和 ttl
是互斥的。
expires
meta/v1.Time
expires
设置此令牌过期的时间戳。默认为在运行时基于
ttl
来决定。
expires
和 ttl
是互斥的。
usages
[]string
usages
描述此令牌的可能使用方式。默认情况下,
令牌可用于建立双向的信任关系;不过这里可以改变默认用途。
groups
[]string
groups
设定此令牌被用于身份认证时对应的附加用户组。
BootstrapTokenString
出现在:
BootstrapTokenString 形式为 abcdef.abcdef0123456789
的一个令牌,
用来从加入集群的节点角度验证 API 服务器的身份,或者 "kubeadm join"
在节点启动引导时作为一种身份认证方法。
此令牌的生命期是短暂的,并且应该如此。
字段 描述
-
[必需]
string
令牌的 ID。
-
[必需]
string
令牌的私密数据。
ClusterConfiguration
ClusterConfiguration 包含一个 kubeadm 集群的集群范围配置信息。
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta3
kind
stringClusterConfiguration
etcd
Etcd
etcd
中包含 etcd 服务的配置。
networking
Networking
networking
字段包含集群的网络拓扑配置。
kubernetesVersion
string
kubernetesVersion
设置控制面的目标版本。
controlPlaneEndpoint
string
controlPlaneEndpoint
为控制面设置一个稳定的 IP 地址或 DNS 名称。
取值可以是一个合法的 IP 地址或者 RFC-1123 形式的 DNS 子域名,二者均可以带一个可选的 TCP 端口号。
如果 controlPlaneEndpoint
未设置,则使用 advertiseAddress
+ bindPort
。
如果设置了 controlPlaneEndpoint
,但未指定 TCP 端口号,则使用
bindPort
。
可能的用法有:
在一个包含不止一个控制面实例的集群中,该字段应该设置为放置在控制面实例前面的外部负载均衡器的地址。
在带有强制性节点回收的环境中,controlPlaneEndpoint
可以用来为控制面设置一个稳定的 DNS。
apiServer
APIServer
apiServer
包含 API 服务器的一些额外配置。
controllerManager
ControlPlaneComponent
controllerManager
中包含控制器管理器的额外配置。
scheduler
ControlPlaneComponent
scheduler
包含调度器的额外配置。
dns
DNS
dns
定义在集群中安装的 DNS 插件的选项。
certificatesDir
string
certificatesDir
设置在何处存放或者查找所需证书。
imageRepository
string
imageRepository
设置用来拉取镜像的容器仓库。
如果此字段为空,默认使用 registry.k8s.io
。
当 Kubernetes 用来执行 CI 构建时(Kubernetes 版本以 ci/
开头),
将默认使用 gcr.io/k8s-staging-ci-images
来拉取控制面组件镜像,
而使用 registry.k8s.io
来拉取所有其他镜像。
featureGates
map[string]bool
featureGates
包含用户所启用的特性门控。
clusterName
string
集群名称。
InitConfiguration
InitConfiguration 包含一组特定于 "kubeadm init" 的运行时元素。
这里的字段仅用于第一次运行 kubeadm init
命令。
之后,此结构中的字段信息不会再被上传到 kubeadm upgrade
所要使用的
kubeadm-config
ConfigMap 中。
这些字段必须设置 "omitempty"
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta3
kind
stringInitConfiguration
bootstrapTokens
[]BootstrapToken
bootstrapTokens
在 kubeadm init
执行时会被用到,
其中描述了一组要创建的启动引导令牌(Bootstrap Tokens)。这里的信息不会被上传到 kubeadm
在集群中保存的 ConfigMap 中,部分原因是由于信息本身比较敏感。
nodeRegistration
NodeRegistrationOptions
nodeRegistration
中包含与向集群中注册新的控制面节点相关的字段。
localAPIEndpoint
APIEndpoint
localAPIEndpoint
所代表的是在此控制面节点上要部署的 API 服务器的端点。
在高可用(HA)配置中,此字段与 ClusterConfiguration.controlPlaneEndpoint
的取值不同:后者代表的是整个集群的全局端点,该端点上的请求会被负载均衡到每个 API 服务器。
此配置对象允许你定制本地 API 服务器所公布的、可访问的 IP/DNS 名称和端口。
默认情况下,kubeadm 会尝试自动检测默认接口上的 IP 并使用该地址。
不过,如果这种检测失败,你可以在此字段中直接设置所期望的值。
certificateKey
string
certificateKey
用来设置一个密钥,该密钥将对 uploadcerts init
阶段上传到集群中某 Secret 内的密钥和证书加密。
证书密钥是十六进制编码的字符串,是长度为 32 字节的 AES 密钥。
skipPhases
[]string
skipPhases
是命令执行过程中要略过的阶段(Phases)。
通过执行命令 kubeadm init --help
可以获得阶段的列表。
参数标志 "--skip-phases" 优先于此字段的设置。
patches
Patches
patches
包含与 kubeadm init
阶段 kubeadm
所部署的组件上要应用的补丁相关的信息。
JoinConfiguration
JoinConfiguration 包含描述特定节点的元素。
字段 描述
apiVersion
stringkubeadm.k8s.io/v1beta3
kind
stringJoinConfiguration
nodeRegistration
NodeRegistrationOptions
nodeRegistration
包含与向集群注册控制面节点相关的字段。
caCertPath
string
caCertPath
是指向 SSL 证书机构的路径,该证书包用来加密节点与控制面之间的通信。
默认值为 "/etc/kubernetes/pki/ca.crt"。
discovery
[必需]
Discovery
discovery
设置 TLS 引导过程中 kubelet 要使用的选项。
controlPlane
JoinControlPlane
controlPlane
定义要在正被加入到集群中的节点上部署的额外控制面实例。
此字段为 null 时,不会在上面部署额外的控制面实例。
skipPhases
[]string
此字段包含在命令执行过程中要略过的阶段。通过 kubeadm join --help
命令可以查看阶段的列表。参数 --skip-phases
优先于此字段。
patches
Patches
此字段包含 kubeadm join
阶段向 kubeadm 所部署的组件打补丁的选项。
APIEndpoint
出现在:
APIEndpoint 结构包含某节点上部署的 API 服务器的配置元素。
字段 描述
advertiseAddress
string
advertiseAddress
设置 API 服务器要公布的 IP 地址。
bindPort
int32
bindPort
设置 API 服务器要绑定到的安全端口。默认值为 6443。
APIServer
出现在:
APIServer 包含集群中 API 服务器部署所必需的设置。
字段 描述
ControlPlaneComponent
[必需]
ControlPlaneComponent
(ControlPlaneComponent
结构的字段被嵌入到此类型中。)
无描述。
certSANs
[]string
certSANs
设置 API 服务器签署证书所用的额外主体替代名(Subject Alternative Name,SAN)。
timeoutForControlPlane
meta/v1.Duration
timeoutForControlPlane
用来控制我们等待 API 服务器开始运行的超时时间。
BootstrapTokenDiscovery
出现在:
BootstrapTokenDiscovery 用来设置基于引导令牌的服务发现选项。
字段 描述
token
[必需]
string
token
用来验证从控制面获得的集群信息。
apiServerEndpoint
string
apiServerEndpoint
为 API 服务器的 IP 地址或者域名,从该端点可以获得集群信息。
caCertHashes
[]string
caCertHashes
设置一组在基于令牌来发现服务时要验证的公钥指纹。
发现过程中获得的根 CA 必须与这里的数值之一匹配。
设置为空集合意味着禁用根 CA 指纹,因而可能是不安全的。
每个哈希值的形式为 <type>:<value>
,当前唯一支持的 type 为
"sha256"。
哈希值为主体公钥信息(Subject Public Key Info,SPKI)对象的 SHA-256
哈希值(十六进制编码),形式为 DER 编码的 ASN.1。
例如,这些哈希值可以使用 OpenSSL 来计算。
unsafeSkipCAVerification
bool
unsafeSkipCAVerification
允许在使用基于令牌的服务发现时不使用
caCertHashes
来执行 CA 验证。这会弱化 kubeadm 的安全性,
因为其他节点可以伪装成控制面。
ControlPlaneComponent
出现在:
ControlPlaneComponent 中包含对集群中所有控制面组件都适用的设置。
字段 描述
extraArgs
map[string]string
extraArgs
是要传递给控制面组件的一组额外的参数标志。
此映射中的每个键对应命令行上使用的标志名称,只是没有其引导连字符。
extraVolumes
[]HostPathMount
extraVolumes
是一组额外的主机卷,需要挂载到控制面组件中。
DNS
出现在:
DNS 结构定义要在集群中使用的 DNS 插件。
字段 描述
ImageMeta
[必需]
ImageMeta
(ImageMeta
的成员被内嵌到此类型中)。
imageMeta
允许对 DNS 组件所使用的镜像作定制。
Discovery
出现在:
Discovery 设置 TLS 启动引导过程中 kubelet 要使用的配置选项。
字段 描述
bootstrapToken
BootstrapTokenDiscovery
bootstrapToken
设置基于启动引导令牌的服务发现选项。
bootstrapToken
与 file
是互斥的。
file
FileDiscovery
用来设置一个文件或者 URL 路径,指向一个 kubeconfig 文件;该配置文件中包含集群信息。
bootstrapToken
与 file
是互斥的。
tlsBootstrapToken
string
tlsBootstrapToken
是 TLS 启动引导过程中使用的令牌。
如果设置了 bootstrapToken
,则此字段默认值为 .bootstrapToken.token
,不过可以被重载。
如果设置了 file
,此字段必须被设置 ,以防 kubeconfig 文件中不包含其他身份认证信息。
timeout
meta/v1.Duration
timeout
用来修改发现过程的超时时长。
Etcd
出现在:
Etcd 包含用来描述 etcd 配置的元素。
字段 描述
local
LocalEtcd
local
提供配置本地 etcd 实例的选项。local
和
external
是互斥的。
external
ExternalEtcd
external
描述如何连接到外部的 etcd 集群。
external
是互斥的。
ExternalEtcd
出现在:
ExternalEtcd 描述外部 etcd 集群。
kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信息。
字段 描述
endpoints
[必需]
[]string
endpoints
包含一组 etcd 成员的列表。
caFile
[必需]
string
caFile
是一个 SSL 证书机构(CA)文件,用来加密 etcd 通信。
如果使用 TLS 连接,此字段为必需字段。
certFile
[必需]
string
certFile
是一个 SSL 证书文件,用来加密 etcd 通信。
如果使用 TLS 连接,此字段为必需字段。
keyFile
[必需]
string
keyFile
是一个用来加密 etcd 通信的 SSL 密钥文件。
此字段在使用 TLS 连接时为必填字段。
FileDiscovery
出现在:
FileDiscovery 用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件;
该配置文件可用来加载集群信息。
字段 描述
kubeConfigPath
[必需]
string
kubeConfigPath
用来指定一个文件或者 URL 路径,指向一个 kubeconfig 文件;
该配置文件可用来加载集群信息。
HostPathMount
出现在:
HostPathMount 包含从主机节点挂载的卷的信息。
字段 描述
name
[必需]
string
name
为卷在 Pod 模板中的名称。
hostPath
[必需]
string
hostPath
是要在 Pod 中挂载的卷在主机系统上的路径。
mountPath
[必需]
string
mountPath
是 hostPath
在 Pod 内挂载的路径。
readOnly
bool
readOnly
控制卷的读写访问模式。
pathType
core/v1.HostPathType
pathType
是 hostPath
的类型。
出现在:
ImageMeta 用来配置来源不是 Kubernetes/kubernetes 发布过程的组件所使用的镜像。
字段 描述
imageRepository
string
imageRepository
设置镜像拉取所用的容器仓库。
若未设置,则使用 ClusterConfiguration 中的 imageRepository
。
imageTag
string
imageTag
允许用户设置镜像的标签。
如果设置了此字段,则 kubeadm 不再在集群升级时自动更改组件的版本。
JoinControlPlane
出现在:
JoinControlPlane 包含在正在加入集群的节点上要部署的额外的控制面组件的设置。
字段 描述
localAPIEndpoint
APIEndpoint
localAPIEndpoint
代表的是将在此节点上部署的 API 服务器实例的端点。
certificateKey
string
certificateKey
是在添加新的控制面节点时用来解密所下载的
Secret 中的证书的密钥。对应的加密密钥在 InitConfiguration 结构中。
证书密钥是十六进制编码的字符串,是长度为 32 字节的 AES 密钥。
LocalEtcd
出现在:
LocalEtcd 描述的是 kubeadm 要使用的本地 etcd 集群。
字段 描述
ImageMeta
[必需]
ImageMeta
(ImageMeta
结构的字段被嵌入到此类型中。)
ImageMeta 允许用户为 etcd 定制要使用的容器。
dataDir
[必需]
string
dataDir
是 etcd 用来存放数据的目录。
默认值为 "/var/lib/etcd"。
extraArgs
map[string]string
extraArgs
是为 etcd 可执行文件提供的额外参数,用于在静态
Pod 中运行 etcd。映射中的每一个键对应命令行上的一个标志参数,只是去掉了前置的连字符。
serverCertSANs
[]string
serverCertSANs
为 etcd
服务器的签名证书设置额外的主体替代名(Subject Alternative Names,SAN)。
peerCertSANs
[]string
peerCertSANs
为 etcd
的对等端签名证书设置额外的主体替代名(Subject Alternative Names,SAN)。
Networking
出现在:
Networking 中包含描述集群网络配置的元素。
字段 描述
serviceSubnet
string
serviceSubnet
是 Kubernetes 服务所使用的子网。
默认值为 "10.96.0.0/12"。
podSubnet
string
podSubnet
为 Pod 所使用的子网。
dnsDomain
string
dnsDomain
是 Kubernetes 服务所使用的 DNS 域名。
默认值为 "cluster.local"。
NodeRegistrationOptions
出现在:
NodeRegistrationOptions 包含向集群中注册新的控制面或节点所需要的信息;
节点注册可能通过 "kubeadm init" 或 "kubeadm join" 完成。
字段 描述
name
string
name
是 Node API 对象的 .metadata.name
字段值;
该 API 对象会在此 kubeadm init
或 kubeadm join
操作期间创建。
在提交给 API 服务器的 kubelet 客户端证书中,此字段也用作其 CommonName
。
如果未指定则默认为节点的主机名。
criSocket
string
criSocket
用来读取容器运行时的信息。
此信息会被以注解的方式添加到 Node API 对象至上,用于后续用途。
taints
[必需]
[]core/v1.Taint
taints
设定 Node API 对象被注册时要附带的污点。
若未设置此字段(即字段值为 null),默认为控制面节点添加控制面污点。
如果你不想为控制面节点添加污点,可以将此字段设置为空列表(即 YAML 文件中的 taints: []
),
这个字段只用于节点注册。
kubeletExtraArgs
map[string]string
kubeletExtraArgs
用来向 kubelet 传递额外参数。
这里的参数会通过 kubeadm 在运行时写入的、由 kubelet 来读取的环境文件来传递给 kubelet 命令行。
这里的设置会覆盖掉 kubelet-config
ConfigMap 中包含的一般性的配置。
命令行标志在解析时优先级更高。这里的设置值仅作用于 kubeadm 运行所在的节点。
映射中的每个键对应命令行中的一个标志参数,只是去掉了前置的连字符。
ignorePreflightErrors
[]string
ignorePreflightErrors
提供一组在当前节点被注册时可以忽略掉的预检错误。
例如:IsPrevilegedUser,Swap
。
取值 all
忽略所有检查的错误。
imagePullPolicy
core/v1.PullPolicy
imagePullPolicy
设定 "kubeadm init" 和 "kubeadm join"
操作期间的镜像拉取策略。此字段的取值可以是 "Always"、"IfNotPresent" 或
"Never" 之一。若此字段未设置,则 kubeadm 使用 "IfNotPresent" 作为其默认值,
换言之,当镜像在主机上不存在时才执行拉取操作。
Patches
出现在:
Patches 包含要向 kubeadm 所部署的组件应用的补丁信息。
字段 描述
directory
string
directory
是指向某目录的路径,该目录中包含名为
"target[suffix][+patchtype].extension" 的文件。
例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
"target" 可以是 "kube-apiserver"、"kube-controller-manager"、
"kube-scheduler"、"etcd" 之一。
"patchtype" 可以是 "strategic"、"merge" 或者 "json",
其取值对应 kubectl 所支持的补丁形式。
"patchtype" 的默认值是 "strategic"。
"extension" 必须是 "json" 或者 "yaml"。
"suffix" 是一个可选的字符串,用来确定按字母表顺序来应用时,哪个补丁最先被应用。
14.14 - Kubelet CredentialProvider (v1)
资源类型
CredentialProviderRequest
CredentialProviderRequest 包含 kubelet 需要通过身份验证才能访问的镜像。
kubelet 将此请求对象通过 stdin 传递到插件。
通常,插件应优先使用所收到的 apiVersion 作出响应。
字段 描述
apiVersion
stringcredentialprovider.kubelet.k8s.io/v1
kind
stringCredentialProviderRequest
image
[必需]
string
image 是作为凭据提供程序插件请求的一部分所拉取的容器镜像。
这些插件可以选择解析镜像以提取获取凭据所需的任何信息。
CredentialProviderResponse
CredentialProviderResponse 中包含 kubelet 应针对原始请求中所给镜像来使用的凭据。
kubelet 将通过 stdout 读取来自插件的响应。
此响应应被设置为与 CredentialProviderRequest 相同的 apiVersion。
字段 描述
apiVersion
stringcredentialprovider.kubelet.k8s.io/v1
kind
stringCredentialProviderResponse
cacheKeyType
[必需]
PluginCacheKeyType
cacheKeyType 标示了基于请求中提供的镜像要使用的缓存键的类型。
缓存键类型有三个有效值:Image、Registry 和 Global。
如果所指定的值无效,则此响应不会被 kubelet 使用。
cacheDuration
meta/v1.Duration
cacheDuration 标示所提供的凭据可被缓存的持续期。
kubelet 将使用此字段为 AuthConfig 中的凭据设置内存中缓存持续期。
如果为空,kubelet 将使用 CredentialProviderConfig 中提供的 defaultCacheDuration。
如果设置为 0,kubelet 将不再缓存提供的 AuthConfig。
auth
map[string]AuthConfig
auth 是一个映射,包含传递给 kubelet 的身份验证信息。
映射中每个键都是一个匹配镜像字符串(更多内容见下文)。
相应的 authConfig 值应该对匹配此键的所有镜像有效。
如果无法为请求的镜像返回有效凭据,则插件应将此字段设置为空。
映射中的每个主键都可以包含端口和路径。
域名中可以使用 Glob 通配,但不能在端口或路径中使用 Glob。
Glob 支持类似 *.k8s.io
或 k8s.*.io
这类子域以及 k8s.*
这类顶级域。
也支持匹配的部分子域,例如 app*.k8s.io
。
每个 Glob 只能匹配一个子域段,因此 *.io
与 *.k8s.io
不匹配。
当满足以下所有条件时,kubelet 将根据主键来匹配镜像:
两者都包含相同数量的域名部分,并且每个部分都匹配。
imageMatch 的 URL 路径必须是目标镜像 URL 路径的前缀。
如果 imageMatch 包含端口,则此端口也必须在镜像中匹配。
当返回多个主键时,kubelet 将以相反的顺序遍历所有主键,以便:
较长键出现在具有相同前缀的较短键前面。
非通配符键出现在具有相同前缀的通配符键之前。
对于任一给定的匹配项,kubelet 将尝试用提供的凭据拉取镜像,并在第一次成功通过身份验证的拉取之后停止。
示例键:
123456789.dkr.ecr.us-east-1.amazonaws.com
*.azurecr.io
gcr.io
*.*.registry.io
registry.io:8080/path
AuthConfig
出现在:
AuthConfig 包含针对容器镜像仓库的身份验证信息。
目前仅支持基于用户名/密码的身份验证,但未来可能添加更多的身份验证机制。
字段 描述
username
[必需]
string
username 是对容器镜像仓库身份验证所用的用户名。
空白用户名是有效的。
password
[必需]
string
password 是对容器镜像仓库身份验证所用的密码。
空白密码是有效的。
PluginCacheKeyType
(string
的别名)
出现在:
14.15 - Kubelet 配置 (v1)
资源类型
CredentialProviderConfig
CredentialProviderConfig 包含有关每个 exec 凭据提供程序的配置信息。
Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供程序。
字段 描述
apiVersion
stringkubelet.config.k8s.io/v1
kind
stringCredentialProviderConfig
providers
[必需]
[]CredentialProvider
providers
是一组凭据提供程序插件,这些插件会被 kubelet 启用。
多个提供程序可以匹配到同一镜像上,这时,来自所有提供程序的凭据信息都会返回给 kubelet。
如果针对同一镜像调用了多个提供程序,则结果会被组合起来。如果提供程序返回的认证主键有重复,
列表中先出现的提供程序所返回的值将被使用。
CredentialProvider
出现在:
CredentialProvider 代表的是要被 kubelet 调用的一个 exec 插件。
这一插件只会在所拉取的镜像与该插件所处理的镜像匹配时才会被调用(参见 matchImages
)。
字段 描述
name
[必需]
string
name
是凭据提供程序的名称(必需)。此名称必须与 kubelet
所看到的提供程序可执行文件的名称匹配。可执行文件必须位于 kubelet 的
bin
目录(通过 --image-credential-provider-bin-dir
设置)下。
matchImages
[必需]
[]string
matchImages
是一个必须设置的字符串列表,用来匹配镜像以便确定是否要调用此提供程序。
如果字符串之一与 kubelet 所请求的镜像匹配,则此插件会被调用并给予提供凭据的机会。
镜像应该包含镜像库域名和 URL 路径。
matchImages
中的每个条目都是一个模式字符串,其中可以包含端口号和路径。
域名部分可以包含通配符,但端口或路径部分不可以。'*.k8s.io' 或 'k8s.*.io' 等子域名以及
'k8s.*' 这类顶级域名都支持通配符。
对于 'app.k8s.io' 这类部分子域名的匹配也是支持的。
每个通配符只能用来匹配一个子域名段,所以 *.io 不会匹配 *.k8s.io。
镜像与 matchImages
之间存在匹配时,以下条件都要满足:
二者均包含相同个数的域名部分,并且每个域名部分都对应匹配;
matchImages
条目中的 URL 路径部分必须是目标镜像的 URL 路径的前缀;
如果 matchImages
条目中包含端口号,则端口号也必须与镜像端口号匹配。
matchImages
的一些示例如下:
123456789.dkr.ecr.us-east-1.amazonaws.com
*.azurecr.io
gcr.io
*.*.registry.io
registry.io:8080/path
defaultCacheDuration
[必需]
meta/v1.Duration
defaultCacheDuration
是插件在内存中缓存凭据的默认时长,
在插件响应中没有给出缓存时长时,使用这里设置的值。此字段是必需的。
apiVersion
[必需]
string
要求 exec 插件 CredentialProviderRequest 请求的输入版本。
所返回的 CredentialProviderResponse 必须使用与输入相同的编码版本。当前支持的值有:
credentialprovider.kubelet.k8s.io/v1
args
[]string
在执行插件可执行文件时要传递给命令的参数。
env
[]ExecEnvVar
env
定义要提供给插件进程的额外的环境变量。
这些环境变量会与主机上的其他环境变量以及 client-go 所使用的环境变量组合起来,
一起传递给插件。
ExecEnvVar
出现在:
ExecEnvVar 用来在执行基于 exec 的凭据插件时设置环境变量。
字段 描述
name
[必需]
string
环境变量名称
value
[必需]
string
环境变量取值
14.16 - Kubelet 配置 (v1alpha1)
资源类型
CredentialProviderConfig
CredentialProviderConfig 包含有关每个 exec 凭据提供者的配置信息。
Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供者。
字段 描述
apiVersion
stringkubelet.config.k8s.io/v1alpha1
kind
stringCredentialProviderConfig
providers
[必需]
[]CredentialProvider
providers
是一组凭据提供者插件,这些插件会被 kubelet 启用。
多个提供者可以匹配到同一镜像上,这时,来自所有提供者的凭据信息都会返回给 kubelet。
如果针对同一镜像调用了多个提供者,则结果会被组合起来。如果提供者返回的认证主键有重复,
列表中先出现的提供者所返回的值将被使用。
CredentialProvider
出现在:
CredentialProvider 代表的是要被 kubelet 调用的一个 exec 插件。
这一插件只会在所拉取的镜像与该插件所处理的镜像匹配时才会被调用(参见 matchImages
)。
字段 描述
name
[必需]
string
name
是凭据提供者的名称(必需)。此名称必须与 kubelet
所看到的提供者可执行文件的名称匹配。可执行文件必须位于 kubelet 的
bin
目录(通过 --image-credential-provider-bin-dir
设置)下。
matchImages
[必需]
[]string
matchImages
是一个必须设置的字符串列表,用来匹配镜像以便确定是否要调用此提供者。
如果字符串之一与 kubelet 所请求的镜像匹配,则此插件会被调用并给予提供凭证的机会。
镜像应该包含镜像库域名和 URL 路径。
matchImages
中的每个条目都是一个模式字符串,其中可以包含端口号和路径。
域名部分可以包含统配符,但端口或路径部分不可以。通配符可以用作子域名,例如
*.k8s.io
或 k8s.*.io
,以及顶级域名,如 k8s.*
。
对类似 app*.k8s.io
这类部分子域名的匹配也是支持的。
每个通配符只能用来匹配一个子域名段,所以 *.io
不会匹配 *.k8s.io
。
镜像与 matchImages
之间存在匹配时,以下条件都要满足:
二者均包含相同个数的域名部分,并且每个域名部分都对应匹配;
matchImages
条目中的 URL 路径部分必须是目标镜像的 URL 路径的前缀;
如果 matchImages
条目中包含端口号,则端口号也必须与镜像端口号匹配。
matchImages
的一些示例如下:
123456789.dkr.ecr.us-east-1.amazonaws.com
*.azurecr.io
gcr.io
*.*.registry.io
registry.io:8080/path
defaultCacheDuration
[必需]
meta/v1.Duration
defaultCacheDuration
是插件在内存中缓存凭据的默认时长,
在插件响应中没有给出缓存时长时,使用这里设置的值。此字段是必需的。
apiVersion
[必需]
string
要求 exec 插件 CredentialProviderRequest 请求的输入版本。
所返回的 CredentialProviderResponse 必须使用与输入相同的编码版本。当前支持的值有:
credentialprovider.kubelet.k8s.io/v1alpha1
args
[]string
在执行插件可执行文件时要传递给命令的参数。
env
[]ExecEnvVar
env
定义要提供给插件进程的额外的环境变量。
这些环境变量会与主机上的其他环境变量以及 client-go 所使用的环境变量组合起来,
一起传递给插件。
ExecEnvVar
出现在:
ExecEnvVar 用来在执行基于 exec 的凭据插件时设置环境变量。
字段 描述
name
[必需]
string
环境变量名称。
value
[必需]
string
环境变量取值。
14.17 - Kubelet 配置 (v1beta1)
资源类型
出现在:
FormatOptions 包含为不同日志格式提供的选项。
字段 描述
text
[必需]
TextOptions
[Alpha] 文本包含用于记录 "text" 格式的选项。
仅当 LoggingAlphaOptions 特性门控被启用时可用。
json
[必需]
JSONOptions
[Alpha] json
包含 "json" 日志格式的选项。
只有 LoggingAlphaOptions 特性门控被启用时才可用。
JSONOptions
出现在:
JSONOptions 包含为 "json" 日志格式提供的选项。
LogFormatFactory 提供了对某些附加的、非默认的日志格式的支持。
LoggingConfiguration
出现在:
LoggingConfiguration 包含日志选项。
字段 描述
format
[必需]
string
format 设置日志消息的结构。默认的格式取值为 text
。
flushFrequency
[必需]
TimeOrMetaDuration
日志清洗之间的最大时间间隔。
如果是字符串,则解析为持续时间(例如 "1s")。
如果是整数,则表示为最大纳秒数(例如 1s = 1000000000)。
如果所选的日志后端在写入日志消息时未缓冲,则被忽略。
verbosity
[必需]
VerbosityLevel
verbosity
用来确定日志消息记录的详细程度阈值。默认值为 0,
意味着仅记录最重要的消息。数值越大,额外的消息越多。出错消息总是会被记录下来。
vmodule
[必需]
VModuleConfiguration
vmodule
会在单个文件层面重载 verbosity 阈值的设置。
这一选项仅支持 "text" 日志格式。
options
[必需]
FormatOptions
[Alpha] options
中包含特定于不同日志格式的附加参数。
只有针对所选格式的选项会被使用,但是合法性检查时会查看所有参数。
只有 LoggingAlphaOptions 特性门控被启用时才可用。
LoggingOptions
LoggingOptions
可以与 ValidateAndApplyWithOptions
一起使用,以覆盖某些全局默认值。
字段 描述
ErrorStream
[必需]
io.Writer
ErrorStream
可用于覆盖默认值 os.Stderr
。
InfoStream
[必需]
io.Writer
InfoStream
可用于覆盖默认值 os.Stdout
。
OutputRoutingOptions
OutputRoutingOptions 包含 "text" 和 "json" 支持的选项。
Field 描述<
splitStream
[必需]
bool
[Alpha] SplitStream 将错误消息重定向到 stderr,而信息消息则转到 stdout,并进行缓冲。
默认是将两者都写入 stdout,而不进行缓冲。仅在 LoggingAlphaOptions 特性门控启用时可用。
infoBufferSize
[必需]
k8s.io/apimachinery/pkg/api/resource.QuantityValue
[Alpha] InfoBufferSize 设置使用分割流时信息流的大小。默认值为零,表示禁用缓冲。
仅在 LoggingAlphaOptions 特性门控启用时可用。
TextOptions
出现在:
TextOptions 包含用于记录 "text" 格式的选项。
出现在:
TimeOrMetaDuration
仅出于向后兼容 flushFrequency 字段而存在,
新字段应使用 metav1.Duration。
字段 描述
Duration
[必需]
meta/v1.Duration
Duration 保存持续时间。
-
[必需]
bool
SerializeAsString
控制此值是以字符串还是以整数进行序列化。
TracingConfiguration
出现在:
TracingConfiguration 为 OpenTelemetry 追踪客户端提供版本化的配置信息。
字段 描述
endpoint
string
采集器的端点,此组件将向其报告追踪链路。
此连接不安全,目前不支持 TLS。推荐不设置,端点是 otlp grpc 默认值 localhost:4317。
samplingRatePerMillion
int32
samplingRatePerMillion
是每百万 span 要采集的样本数。推荐不设置。
如果不设置,则采样器优先使用其父级 span 的采样率,否则不采样。
VModuleConfiguration
([]k8s.io/component-base/logs/api/v1.VModuleItem
的别名)
出现在:
VModuleConfiguration 是一个集合,其中包含一个个文件名(或文件名模式)
及其对应的详细程度阈值。
VerbosityLevel
(uint32
的别名)
出现在:
VerbosityLevel 表示 klog 或 logr 的详细程度(verbosity)阈值。
CredentialProviderConfig
CredentialProviderConfig 包含有关每个 exec 凭据提供者的配置信息。
Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供者。
字段 描述
apiVersion
stringkubelet.config.k8s.io/v1beta1
kind
stringCredentialProviderConfig
providers
[必需]
[]CredentialProvider
providers
是一组凭据提供者插件,这些插件会被 kubelet 启用。
多个提供者可以匹配到同一镜像上,这时,来自所有提供者的凭据信息都会返回给 kubelet。
如果针对同一镜像调用了多个提供者,则结果会被组合起来。如果提供者返回的认证主键有重复,
列表中先出现的提供者所返回的值将被使用。
KubeletConfiguration
KubeletConfiguration 中包含 Kubelet 的配置。
字段 描述
apiVersion
stringkubelet.config.k8s.io/v1beta1
kind
stringKubeletConfiguration
enableServer
[必需]
bool
enableServer
会启用 kubelet 的安全服务器。
注意:kubelet 的不安全端口由 readOnlyPort
选项控制。
默认值:true
staticPodPath
string
staticPodPath
是指向要运行的本地(静态)Pod 的目录,
或者指向某个静态 Pod 文件的路径。
默认值:""
podLogsDir
string
podLogsDir 是 kubelet 用于放置 Pod 日志文件的自定义根目录路径。
默认值:"/var/log/pods/"
注意:不建议使用临时文件夹作为日志目录,因为它可能会在许多地方引起意外行为。
syncFrequency
meta/v1.Duration
syncFrequency
是对运行中的容器和配置进行同步的最长周期。
默认值:"1m"
fileCheckFrequency
meta/v1.Duration
fileCheckFrequency
是对配置文件中新数据进行检查的时间间隔值。
默认值:"20s"
httpCheckFrequency
meta/v1.Duration
httpCheckFrequency
是对 HTTP 服务器上新数据进行检查的时间间隔值。
默认值:"20s"
staticPodURL
string
staticPodURL
是访问要运行的静态 Pod 的 URL 地址。
默认值:""
staticPodURLHeader
map[string][]string
staticPodURLHeader
是一个由字符串组成的映射表,其中包含的 HTTP
头部信息用于访问podURL
。
默认值:nil
address
string
address
是 kubelet 提供服务所用的 IP 地址(设置为 0.0.0.0
使用所有网络接口提供服务)。
默认值:"0.0.0.0"
port
int32
port
是 kubelet 用来提供服务所使用的端口号。
这一端口号必须介于 1 到 65535 之间,包含 1 和 65535。
默认值:10250
readOnlyPort
int32
readOnlyPort
是 kubelet 用来提供服务所使用的只读端口号。
此端口上的服务不支持身份认证或鉴权。这一端口号必须介于 1 到 65535 之间,
包含 1 和 65535。将此字段设置为 0 会禁用只读服务。
默认值:0(禁用)
tlsCertFile
string
tlsCertFile
是包含 HTTPS 所需要的 x509 证书的文件
(如果有 CA 证书,会串接到服务器证书之后)。如果tlsCertFile
和 tlsPrivateKeyFile
都没有设置,则系统会为节点的公开地址生成自签名的证书和私钥,
并将其保存到 kubelet --cert-dir
参数所指定的目录下。
默认值:""
tlsPrivateKeyFile
string
tlsPrivateKeyFile
是一个包含与 tlsCertFile
证书匹配的 X509 私钥的文件。
默认值:""
tlsCipherSuites
[]string
tlsCipherSuites
是一个字符串列表,其中包含服务器所接受的加密包名称。
请注意,TLS 1.3 密码套件是不可配置的。
列表中的每个值来自于 tls
包中定义的常数(https://golang.org/pkg/crypto/tls/#pkg-constants)。
默认值:nil
tlsMinVersion
string
tlsMinVersion
给出所支持的最小 TLS 版本。
字段取值来自于 tls
包中的常数定义(https://golang.org/pkg/crypto/tls/#pkg-constants)。
默认值:""
rotateCertificates
bool
rotateCertificates
用来启用客户端证书轮换。kubelet 会调用
certificates.k8s.io
API 来请求新的证书。需要有一个批复人批准证书签名请求。
默认值:false
serverTLSBootstrap
bool
serverTLSBootstrap
用来启用服务器证书引导。系统不再使用自签名的服务证书,
kubelet 会调用 certificates.k8s.io
API 来请求证书。
需要有一个批复人来批准证书签名请求(CSR)。
设置此字段时,RotateKubeletServerCertificate
特性必须被启用。
默认值:false
authentication
KubeletAuthentication
authentication
设置发送给 kubelet 服务器的请求是如何进行身份认证的。
默认值:
anonymous:
enabled: false
webhook:
enabled: true
cacheTTL: "2m"
authorization
KubeletAuthorization
authorization
设置发送给 kubelet 服务器的请求是如何进行鉴权的。
默认值:
mode: Webhook
webhook:
cacheAuthorizedTTL: "5m"
cacheUnauthorizedTTL: "30s"
registryPullQPS
int32
registryPullQPS
是每秒钟可以执行的镜像仓库拉取操作限值。
此值必须不能为负数。将其设置为 0 表示没有限值。
默认值:5
registryBurst
int32
registryBurst
是突发性镜像拉取的上限值,允许镜像拉取临时上升到所指定数量,
不过仍然不超过 registryPullQPS
所设置的约束。此值必须是非负值。
只有 registryPullQPS
参数值大于 0 时才会使用此设置。
默认值:10
eventRecordQPS
int32
eventRecordQPS
设置每秒钟可创建的事件个数上限。如果此值为 0,
则表示没有限制。此值不能设置为负数。
默认值:50
eventBurst
int32
eventBurst
是突发性事件创建的上限值,允许事件创建临时上升到所指定数量,
不过仍然不超过 eventRecordQPS
所设置的约束。此值必须是非负值,
且只有 eventRecordQPS
> 0 时才会使用此设置。
默认值:100
enableDebuggingHandlers
bool
enableDebuggingHandlers
启用服务器上用来访问日志、
在本地运行容器和命令的端点,包括 exec
、attach
、
logs
和 portforward
等功能。
默认值:true
enableContentionProfiling
bool
enableContentionProfiling
用于启用阻塞性能分析,
仅用于 enableDebuggingHandlers
为 true
的场合。
默认值:false
healthzPort
int32
healthzPort
是本地主机上提供 healthz
端点的端口
(设置值为 0 时表示禁止)。合法值介于 1 和 65535 之间。
默认值:10248
healthzBindAddress
string
healthzBindAddress 是 healthz
服务器用来提供服务的 IP 地址。
默认值:"127.0.0.1"
oomScoreAdj
int32
oomScoreAdj
是为 kubelet 进程设置的 oom-score-adj
值。
所设置的取值要在 [-1000, 1000] 范围之内。
默认值:-999
clusterDomain
string
clusterDomain
是集群的 DNS 域名。如果设置了此字段,kubelet
会配置所有容器,使之在搜索主机的搜索域的同时也搜索这里指定的 DNS 域。
默认值:""
clusterDNS
[]string
clusterDNS
是集群 DNS 服务器的 IP 地址的列表。
如果设置了,kubelet 将会配置所有容器使用这里的 IP 地址而不是宿主系统上的 DNS
服务器来完成 DNS 解析。
默认值:nil
streamingConnectionIdleTimeout
meta/v1.Duration
streamingConnectionIdleTimeout
设置流式连接在被自动关闭之前可以空闲的最长时间。
默认值:"4h"
nodeStatusUpdateFrequency
meta/v1.Duration
nodeStatusUpdateFrequency
是 kubelet 计算节点状态的频率。
如果未启用节点租约特性,这一字段设置的也是 kubelet 向控制面投递节点状态的频率。
注意:如果节点租约特性未被启用,更改此参数设置时要非常小心,
所设置的参数值必须与节点控制器的 nodeMonitorGracePeriod
协同。
默认值:"10s"
nodeStatusReportFrequency
meta/v1.Duration
nodeStatusReportFrequency
是节点状态未发生变化时,kubelet
向控制面更新节点状态的频率。如果节点状态发生变化,则 kubelet 会忽略这一频率设置,
立即更新节点状态。
此字段仅当启用了节点租约特性时才被使用。nodeStatusReportFrequency
的默认值是"5m"。不过,如果 nodeStatusUpdateFrequency
被显式设置了,则 nodeStatusReportFrequency
的默认值会等于
nodeStatusUpdateFrequency
值,这是为了实现向后兼容。
默认值:"5m"
nodeLeaseDurationSeconds
int32
nodeLeaseDurationSeconds
是 kubelet 会在其对应的 Lease 对象上设置的时长值。
NodeLease
让 kubelet 来在 kube-node-lease
名字空间中创建按节点名称命名的租约并定期执行续约操作,并通过这种机制来了解节点健康状况。
如果租约过期,则节点可被视作不健康。根据 KEP-0009 约定,目前的租约每 10 秒钟续约一次。
在将来,租约的续约时间间隔可能会根据租约的时长来设置。
此字段的取值必须大于零。
默认值:40
imageMinimumGCAge
meta/v1.Duration
imageMinimumGCAge
是对未使用镜像进行垃圾收集之前允许其存在的时长。
默认值:"2m"
imageMaximumGCAge
meta/v1.Duration
imageMaximumGCAge
是对未使用镜像进行垃圾收集之前允许其存在的时长。
此字段的默认值为 "0s",表示禁用此字段,这意味着镜像不会因为过长时间不使用而被垃圾收集。
默认值:"0s"(已禁用)
imageGCHighThresholdPercent
int32
imageGCHighThresholdPercent
所给的是镜像的磁盘用量百分数,
一旦镜像用量超过此阈值,则镜像垃圾收集会一直运行。百分比是用这里的值除以 100
得到的,所以此字段取值必须介于 0 和 100 之间,包括 0 和 100。如果设置了此字段,
则取值必须大于 imageGCLowThresholdPercent
取值。
默认值:85
imageGCLowThresholdPercent
int32
imageGCLowThresholdPercent
所给的是镜像的磁盘用量百分数,
镜像用量低于此阈值时不会执行镜像垃圾收集操作。垃圾收集操作也将此作为最低磁盘用量边界。
百分比是用这里的值除以 100 得到的,所以此字段取值必须介于 0 和 100 之间,包括 0 和 100。
如果设置了此字段,则取值必须小于 imageGCHighThresholdPercent
取值。
默认值:80
volumeStatsAggPeriod
meta/v1.Duration
volumeStatsAggPeriod
是计算和缓存所有 Pod 磁盘用量的频率。
默认值:"1m"
kubeletCgroups
string
kubeletCgroups
是用来隔离 kubelet 的控制组(CGroup)的绝对名称。
默认值:""
systemCgroups
string
systemCgroups
是用来放置那些未被容器化的、非内核的进程的控制组
(CGroup)的绝对名称。设置为空字符串表示没有这类容器。回滚此字段设置需要重启节点。
当此字段非空时,必须设置 cgroupRoot
字段。
默认值:""
cgroupRoot
string
cgroupRoot
是用来运行 Pod 的控制组(CGroup)。
容器运行时会尽可能处理此字段的设置值。
cgroupsPerQOS
bool
cgroupsPerQOS
用来启用基于 QoS 的控制组(CGroup)层次结构:
顶层的控制组用于不同 QoS 类,所有 Burstable
和 BestEffort
Pod
都会被放置到对应的顶级 QoS 控制组下。
默认值:true
cgroupDriver
string
cgroupDriver
是 kubelet 用来操控宿主系统上控制组(CGroup)
的驱动程序(cgroupfs 或 systemd)。
默认值:"cgroupfs"
cpuManagerPolicy
string
cpuManagerPolicy
是要使用的策略名称。需要启用 CPUManager
特性门控。
默认值:"None"
cpuManagerPolicyOptions
map[string]string
cpuManagerPolicyOptions
是一组 key=value
键值映射,
容许通过额外的选项来精细调整 CPU 管理器策略的行为。需要 CPUManager
和
CPUManagerPolicyOptions
两个特性门控都被启用。
默认值:nil
cpuManagerReconcilePeriod
meta/v1.Duration
cpuManagerReconcilePeriod
是 CPU 管理器的协调周期时长。
要求启用 CPUManager
特性门控。默认值:"10s"
memoryManagerPolicy
string
memoryManagerPolicy
是内存管理器要使用的策略的名称。
要求启用 MemoryManager
特性门控。
默认值:"none"
topologyManagerPolicy
string
topologyManagerPolicy
是要使用的拓扑管理器策略名称。合法值包括:
restricted
:kubelet 仅接受在所请求资源上实现最佳 NUMA 对齐的 Pod。
best-effort
:kubelet 会优选在 CPU 和设备资源上实现 NUMA 对齐的 Pod。
none
:kubelet 不了解 Pod CPU 和设备资源 NUMA 对齐需求。
single-numa-node
:kubelet 仅允许在 CPU 和设备资源上对齐到同一 NUMA 节点的 Pod。
默认值:"none"
topologyManagerScope
string
topologyManagerScope
代表的是拓扑提示生成的范围,
拓扑提示信息由提示提供者生成,提供给拓扑管理器。合法值包括:
container
:拓扑策略是按每个容器来实施的。
pod
:拓扑策略是按每个 Pod 来实施的。
默认值:"container"
topologyManagerPolicyOptions
map[string]string
TopologyManagerPolicyOptions 是一组 key=value 键值映射,容许设置额外的选项来微调拓扑管理器策略的行为。
需要同时启用 "TopologyManager" 和 "TopologyManagerPolicyOptions" 特性门控。
默认值:nil
qosReserved
map[string]string
qosReserved
是一组从资源名称到百分比值的映射,用来为 Guaranteed
QoS 类型的负载预留供其独占使用的资源百分比。目前支持的资源为:"memory"。
需要启用 QOSReserved
特性门控。
默认值:nil
runtimeRequestTimeout
meta/v1.Duration
runtimeRequestTimeout
用来设置除长期运行的请求(pull
、
logs
、exec
和 attach
)之外所有运行时请求的超时时长。
默认值:"2m"
hairpinMode
string
hairpinMode
设置 kubelet 如何为发夹模式数据包配置容器网桥。
设置此字段可以让 Service 中的端点在尝试访问自身 Service 时将服务请求路由的自身。
可选值有:
"promiscuous-bridge":将容器网桥设置为混杂模式。
"hairpin-veth":在容器的 veth 接口上设置发夹模式标记。
"none":什么也不做。
一般而言,用户必须设置 --hairpin-mode=hairpin-veth
才能实现发夹模式的网络地址转译
(NAT),因为混杂模式的网桥要求存在一个名为 cbr0
的容器网桥。
默认值:"promiscuous-bridge"
maxPods
int32
maxPods
是此 kubelet 上课运行的 Pod 个数上限。此值必须为非负整数。
默认值:110
podCIDR
string
podCIDR
是用来设置 Pod IP 地址的 CIDR 值,仅用于独立部署模式。
运行于集群模式时,这一数值会从控制面获得。
默认值:""
podPidsLimit
int64
podPidsLimit
是每个 Pod 中可使用的 PID 个数上限。
默认值:-1
resolvConf
string
resolvConf
是一个域名解析配置文件,用作容器 DNS 解析配置的基础。
如果此值设置为空字符串,则会覆盖 DNS 解析的默认配置,本质上相当于禁用了 DNS 查询。
默认值:"/etc/resolv.conf"
runOnce
bool
runOnce
字段被设置时,kubelet 会咨询 API 服务器一次并获得 Pod 列表,
运行在静态 Pod 文件中指定的 Pod 及这里所获得的 Pod,然后退出。
默认值:false
cpuCFSQuota
bool
cpuCFSQuota
允许为设置了 CPU 限制的容器实施 CPU CFS 配额约束。
默认值:true
cpuCFSQuotaPeriod
meta/v1.Duration
cpuCFSQuotaPeriod
设置 CPU CFS 配额周期值,cpu.cfs_period_us
。
此值需要介于 1 毫秒和 1 秒之间,包含 1 毫秒和 1 秒。
此功能要求启用 CustomCPUCFSQuotaPeriod
特性门控被启用。
默认值:"100ms"
nodeStatusMaxImages
int32
nodeStatusMaxImages
限制 Node.status.images
中报告的镜像数量。
此值必须大于 -2。
注意:如果设置为 -1,则不会对镜像数量做限制;如果设置为 0,则不会返回任何镜像。
默认值:50
maxOpenFiles
int64
maxOpenFiles
是 kubelet 进程可以打开的文件个数。此值必须不能为负数。
默认值:1000000
contentType
string
contentType
是向 API 服务器发送请求时使用的内容类型。
默认值:"application/vnd.kubernetes.protobuf"
kubeAPIQPS
int32
kubeAPIQPS
设置与 Kubernetes API 服务器通信时要使用的 QPS(每秒查询数)。
默认值:50
kubeAPIBurst
int32
kubeAPIBurst
设置与 Kubernetes API 服务器通信时突发的流量级别。
此字段取值不可以是负数。
默认值:100
serializeImagePulls
bool
serializeImagePulls
被启用时会通知 kubelet 每次仅拉取一个镜像。
我们建议不要 在所运行的 Docker 守护进程版本低于 1.9、使用 aufs
存储后端的节点上更改默认值。详细信息可参见 Issue #10959。
默认值:true
maxParallelImagePulls
int32
maxParallelImagePulls 设置并行拉取镜像的最大数量。
如果 serializeImagePulls 为 true,则无法设置此字段。
把它设置为 nil 意味着没有限制。
默认值:true
evictionHard
map[string]string
evictionHard
是一个映射,是从信号名称到定义硬性驱逐阈值的映射。
例如:{"memory.available": "300Mi"}
。
如果希望显式地禁用,可以在任意资源上将其阈值设置为 0% 或 100%。
默认值:
memory.available: "100Mi"
nodefs.available: "10%"
nodefs.inodesFree: "5%"
imagefs.available: "15%"
evictionSoft
map[string]string
evictionSoft
是一个映射,是从信号名称到定义软性驱逐阈值的映射。
例如:{"memory.available": "300Mi"}
。
默认值:nil
evictionSoftGracePeriod
map[string]string
evictionSoftGracePeriod
是一个映射,是从信号名称到每个软性驱逐信号的宽限期限。
例如:{"memory.available": "30s"}
。
默认值:nil
evictionPressureTransitionPeriod
meta/v1.Duration
evictionPressureTransitionPeriod
设置 kubelet
离开驱逐压力状况之前必须要等待的时长。
默认值:"5m"
evictionMaxPodGracePeriod
int32
evictionMaxPodGracePeriod
是指达到软性逐出阈值而引起 Pod 终止时,
可以赋予的宽限期限最大值(按秒计)。这个值本质上限制了软性逐出事件发生时,
Pod 可以获得的 terminationGracePeriodSeconds
。
注意:由于 Issue #64530 的原因,系统中存在一个缺陷,即此处所设置的值会在软性逐出时覆盖
Pod 的宽限期设置,从而有可能增加 Pod 上原本设置的宽限期限时长。
这个缺陷会在未来版本中修复。
默认值:0
evictionMinimumReclaim
map[string]string
evictionMinimumReclaim
是一个映射,定义信号名称与最小回收量数值之间的关系。
最小回收量指的是资源压力较大而执行 Pod 驱逐操作时,kubelet 对给定资源的最小回收量。
例如:{"imagefs.available": "2Gi"}
。
默认值:nil
podsPerCore
int32
podsPerCore
设置的是每个核上 Pod 个数上限。此值不能超过 maxPods
。
所设值必须是非负整数。如果设置为 0,则意味着对 Pod 个数没有限制。
默认值:0
enableControllerAttachDetach
bool
enableControllerAttachDetach
用来允许 Attach/Detach
控制器管理调度到本节点的卷的挂接(attachment)和解除挂接(detachement),
并且禁止 kubelet 执行任何 attach/detach 操作。
注意:kubelet 不支持挂接 CSI 卷和解除挂接,
因此对于该用例,此选项必须为 true。
默认值:true
protectKernelDefaults
bool
protectKernelDefaults
设置为 true
时,会令 kubelet
在发现内核参数与预期不符时出错退出。若此字段设置为 false
,则 kubelet
会尝试更改内核参数以满足其预期。
默认值:false
makeIPTablesUtilChains
bool
makeIPTablesUtilChains
设置为 true
时,相当于允许 kubelet
在 iptables 中创建 KUBE-IPTABLES-HINT 链,提示其他组件有关系统上 iptables 的配置。
默认值:true
iptablesMasqueradeBit
int32
iptablesMasqueradeBit
以前用于控制 KUBE-MARK-MASQ 链的创建。
已弃用:不再有任何效果。
默认值:14
iptablesDropBit
int32
iptablesDropBit
以前用于控制 KUBE-MARK-DROP 链的创建。
已弃用:不再有任何效果。
默认值:15
featureGates
map[string]bool
featureGates
是一个从功能特性名称到布尔值的映射,用来启用或禁用实验性的功能。
此字段可逐条更改文件 "k8s.io/kubernetes/pkg/features/kube_features.go"
中所给的内置默认值。
默认值:nil
failSwapOn
bool
failSwapOn
通知 kubelet 在节点上启用交换分区时拒绝启动。
默认值:true
memorySwap
MemorySwapConfiguration
memorySwap
配置容器负载可用的交换内存。
containerLogMaxSize
string
containerLogMaxSize
是定义容器日志文件被轮转之前可以到达的最大尺寸。
例如:"5Mi" 或 "256Ki"。
默认值:"10Mi"
containerLogMaxFiles
int32
containerLogMaxFiles
设置每个容器可以存在的日志文件个数上限。
默认值:"5"
containerLogMaxWorkers
int32
containerLogMaxWorkers 指定执行日志轮换操作所需的并发工作程序的最大数量。
将此计数设置为 1,以禁用并发日志轮换工作流程。
默认值:1
containerLogMonitorInterval
meta/v1.Duration
ContainerLogMonitorInterval 指定监视容器日志以执行日志轮转操作的持续时间。
默认为 10s,但可以根据日志生成率和需要轮换的大小定制为较小的值。
默认值:10s
configMapAndSecretChangeDetectionStrategy
ResourceChangeDetectionStrategy
configMapAndSecretChangeDetectionStrategy
是 ConfigMap 和 Secret
管理器的运行模式。合法值包括:
Get
:kubelet 从 API 服务器直接取回必要的对象;
Cache
:kubelet 使用 TTL 缓存来管理来自 API 服务器的对象;
Watch
:kubelet 使用 watch 操作来观察所关心的对象的变更。
默认值:"Watch"
systemReserved
map[string]string
systemReserved
是一组资源名称=资源数量
对,
用来描述为非 Kubernetes 组件预留的资源(例如:'cpu=200m,memory=150G')。
目前仅支持 CPU 和内存。更多细节可参见
https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/ 。
默认值:Nil
kubeReserved
map[string]string
kubeReserved
是一组资源名称=资源数量
对,
用来描述为 Kubernetes 系统组件预留的资源(例如:'cpu=200m,memory=150G')。
目前支持 CPU、内存和根文件系统的本地存储。
更多细节可参见 https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/。
默认值:Nil
reservedSystemCPUs
[必需]
string
reservedSystemCPUs
选项设置为宿主级系统线程和 Kubernetes
相关线程所预留的 CPU 列表。此字段提供的是一种“静态”的 CPU 列表,而不是像
systemReserved
和 kubeReserved
所提供的“动态”列表。
此选项不支持 systemReservedCgroup
或 kubeReservedCgroup
。
showHiddenMetricsForVersion
string
showHiddenMetricsForVersion 是你希望显示隐藏度量值的上一版本。
只有上一个次版本是有意义的,其他值都是不允许的。
字段值的格式为 <major>.<minor>
,例如:1.16
。
此格式的目的是为了确保在下一个版本中有新的度量值被隐藏时,你有机会注意到这类变化,
而不是当这些度量值在其后的版本中彻底去除时来不及应对。
默认值:""
systemReservedCgroup
string
systemReservedCgroup
帮助 kubelet 识别用来为 OS 系统级守护进程实施
systemReserved
计算资源预留时使用的顶级控制组(CGroup)。
更多细节参阅节点可分配资源 。
默认值:""
kubeReservedCgroup
string
kubeReservedCgroup
帮助 kubelet 识别用来为 Kubernetes 节点系统级守护进程实施
kubeReserved
计算资源预留时使用的顶级控制组(CGroup)。
更多细节参阅节点可分配资源
默认值:""
enforceNodeAllocatable
[]string
此标志设置 kubelet 需要执行的各类节点可分配资源策略。此字段接受一组选项列表。
可接受的选项有 none
、pods
、system-reserved
和
kube-reserved
。
如果设置了 none
,则字段值中不可以包含其他选项。
如果列表中包含 system-reserved
,则必须设置 systemReservedCgroup
。
如果列表中包含 kube-reserved
,则必须设置 kubeReservedCgroup
。
这个字段只有在 cgroupsPerQOS
被设置为 true
才被支持。
更多细节参阅节点可分配资源 。
默认值:["pods"]
allowedUnsafeSysctls
[]string
用逗号分隔的白名单列表,其中包含不安全的 sysctl 或 sysctl 模式(以 *
结尾)。
不安全的 sysctl 组有 kernel.shm*
、kernel.msg*
、
kernel.sem
、fs.mqueue.*
和 net.*
。
例如:"kernel.msg*,net.ipv4.route.min\_pmtu
"
默认值:[]
volumePluginDir
string
volumePluginDir
是用来搜索其他第三方卷插件的目录的路径。
默认值:"/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
providerID
string
providerID
字段被设置时,指定的是一个外部提供者(即云驱动)实例的唯一 ID,
该提供者可用来唯一性地标识特定节点。
默认值:""
kernelMemcgNotification
bool
kernelMemcgNotification
字段如果被设置了,会告知 kubelet 集成内核的
memcg 通知机制来确定是否超出内存逐出阈值,而不是使用轮询机制来判定。
默认值:false
logging
[必需]
LoggingConfiguration
logging
设置日志机制选项。更多的详细信息可参阅
日志选项 。
默认值:
Format: text
enableSystemLogHandler
bool
enableSystemLogHandler
用来启用通过 Web 接口 host:port/logs/
访问系统日志的能力。
默认值:true
enableSystemLogQuery
bool
enableSystemLogQuery
启用在 /logs 端点上的节点日志查询功能。
此外,还必须启用 enableSystemLogHandler 才能使此功能起作用。
默认值:false
shutdownGracePeriod
meta/v1.Duration
shutdownGracePeriod
设置节点关闭期间,节点自身需要延迟以及为
Pod 提供的宽限期限的总时长。
默认值:"0s"
shutdownGracePeriodCriticalPods
meta/v1.Duration
shutdownGracePeriodCriticalPods
设置节点关闭期间用来终止关键性
Pod 的时长。此时长要短于shutdownGracePeriod
。
例如,如果shutdownGracePeriod=30s
,shutdownGracePeriodCriticalPods=10s,
在节点关闭期间,前 20 秒钟被预留用来体面终止普通 Pod,后 10 秒钟用来终止关键 Pod。
默认值:"0s"
shutdownGracePeriodByPodPriority
[]ShutdownGracePeriodByPodPriority
shutdownGracePeriodByPodPriority
设置基于 Pod
相关的优先级类值而确定的体面关闭时间。当 kubelet 收到关闭请求的时候,kubelet
会针对节点上运行的所有 Pod 发起关闭操作,这些关闭操作会根据 Pod 的优先级确定其宽限期限,
之后 kubelet 等待所有 Pod 退出。
数组中的每个表项代表的是节点关闭时 Pod 的体面终止时间;这里的 Pod
的优先级类介于列表中当前优先级类值和下一个表项的优先级类值之间。
例如,要赋予关键 Pod 10 秒钟时间来关闭,赋予优先级 >=10000 Pod 20 秒钟时间来关闭,
赋予其余的 Pod 30 秒钟来关闭。
shutdownGracePeriodByPodPriority:
priority: 2000000000
shutdownGracePeriodSeconds: 10
priority: 10000
shutdownGracePeriodSeconds: 20
priority: 0
shutdownGracePeriodSeconds: 30
在退出之前,kubelet 要等待的时间上限为节点上所有优先级类的
shutdownGracePeriodSeconds
的最大值。
当所有 Pod 都退出或者到达其宽限期限时,kubelet 会释放关闭防护锁。
此功能要求 GracefulNodeShutdown
特性门控被启用。
当 shutdownGracePeriod
或 shutdownGracePeriodCriticalPods
被设置时,此配置字段必须为空。
默认值:nil
reservedMemory
[]MemoryReservation
reservedMemory
给出一个逗号分隔的列表,为 NUMA 节点预留内存。
此参数仅在内存管理器功能特性语境下有意义。内存管理器不会为容器负载分配预留内存。
例如,如果你的 NUMA0 节点内存为 10Gi,reservedMemory
设置为在 NUMA0
上预留 1Gi 内存,内存管理器会认为其上只有 9Gi 内存可供分配。
你可以设置不同数量的 NUMA 节点和内存类型。你也可以完全忽略这个字段,不过你要清楚,
所有 NUMA 节点上预留内存的总量要等于通过
节点可分配资源 设置的内存量。
如果至少有一个节点可分配参数设置值非零,则你需要设置至少一个 NUMA 节点。
此外,避免如下设置:
在配置值中存在重复项,NUMA 节点和内存类型相同,但配置值不同,这是不允许的。
为任何内存类型设置限制值为零。
NUMA 节点 ID 在宿主系统上不存在。/li>
除 memory
和 hugepages-<size>
之外的内存类型。
默认值:nil
enableProfilingHandler
bool
enableProfilingHandler
启用通过 host:port/debug/pprof/
接口来执行性能分析。
默认值:true
enableDebugFlagsHandler
bool
enableDebugFlagsHandler
启用通过 host:port/debug/flags/v Web
接口上的标志设置。
默认值:true
seccompDefault
bool
seccompDefault
字段允许针对所有负载将 RuntimeDefault
设置为默认的 seccomp 配置。这一设置要求对应的 SeccompDefault
特性门控被启用。
默认值:false
memoryThrottlingFactor
float64
当设置 cgroupv2 memory.high
以实施 MemoryQoS
特性时,
memoryThrottlingFactor
用来作为内存限制或节点可分配内存的系数。
减小此系数会为容器控制组设置较低的 high 限制值,从而增大回收压力;反之,
增大此系数会降低回收压力。更多细节参见 https://kep.k8s.io/2570。
默认值:0.8
registerWithTaints
[]core/v1.Taint
registerWithTaints
是一个由污点组成的数组,包含 kubelet
注册自身时要向节点对象添加的污点。只有 registerNode
为 true
时才会起作用,并且仅在节点的最初注册时起作用。
默认值:nil
registerNode
bool
registerNode
启用向 API 服务器的自动注册。
默认值:true
tracing
TracingConfiguration
tracing 为 OpenTelemetry 追踪客户端设置版本化的配置信息。
参阅 https://kep.k8s.io/2832 了解更多细节。
localStorageCapacityIsolation
bool
localStorageCapacityIsolation 启用本地临时存储隔离特性。默认设置为 true。
此特性允许用户为容器的临时存储设置请求/限制,并以类似的方式管理 cpu 和 memory 的请求/限制。
此特性还允许为 emptyDir 卷设置 sizeLimit,如果卷所用的磁盘超过此限制将触发 Pod 驱逐。
此特性取决于准确测定根文件系统磁盘用量的能力。对于 kind rootless 这类系统,
如果不支持此能力,则 LocalStorageCapacityIsolation 特性应被禁用。
一旦禁用,用户不应该为容器的临时存储设置请求/限制,也不应该为 emptyDir 设置 sizeLimit。
默认值:true
containerRuntimeEndpoint
[必需]
string
containerRuntimeEndpoint 是容器运行时的端点。
Linux 支持 UNIX 域套接字,而 Windows 支持命名管道和 TCP 端点。
示例:'unix:///path/to/runtime.sock', 'npipe:////./pipe/runtime'。
imageServiceEndpoint
string
imageServiceEndpoint 是容器镜像服务的端点。
Linux 支持 UNIX 域套接字,而 Windows 支持命名管道和 TCP 端点。
示例:'unix:///path/to/runtime.sock'、'npipe:////./pipe/runtime'。
如果未指定,则使用 containerRuntimeEndpoint 中的值。
failCgroupV1
bool
failCgroupV1
防止 kubelet 在使用 cgroup v1 的主机上启动。
默认情况下,此选项设置为 “false”,这意味着除非此选项被显式启用,
否则 kubelet 被允许在 cgroup v1 主机上启动。
默认值:false
SerializedNodeConfigSource
SerializedNodeConfigSource 允许对 v1.NodeConfigSource
执行序列化操作。
这一类型供 kubelet 内部使用,以便跟踪动态配置的检查点。
此资源存在于 kubeletconfig API 组是因为它被当做是对 kubelet 的一种版本化输入。
字段 描述
apiVersion
stringkubelet.config.k8s.io/v1beta1
kind
stringSerializedNodeConfigSource
source
core/v1.NodeConfigSource
source
是我们执行序列化的数据源。
CredentialProvider
出现在:
CredentialProvider 代表的是要被 kubelet 调用的一个 exec 插件。
这一插件只会在所拉取的镜像与该插件所处理的镜像匹配时才会被调用(参见 matchImages
)。
字段 描述
name
[必需]
string
name
是凭据提供者的名称(必需)。此名称必须与 kubelet
所看到的提供者可执行文件的名称匹配。可执行文件必须位于 kubelet 的
bin
目录(通过 --image-credential-provider-bin-dir
设置)下。
matchImages
[必需]
[]string
matchImages
是一个必须设置的字符串列表,用来匹配镜像以便确定是否要调用此提供者。
如果字符串之一与 kubelet 所请求的镜像匹配,则此插件会被调用并给予提供凭证的机会。
镜像应该包含镜像库域名和 URL 路径。
matchImages
中的每个条目都是一个模式字符串,其中可以包含端口号和路径。
域名部分可以包含统配符,但端口或路径部分不可以。通配符可以用作子域名,例如
*.k8s.io
或 k8s.*.io
,以及顶级域名,如 k8s.*
。
对类似 app*.k8s.io
这类部分子域名的匹配也是支持的。
每个通配符只能用来匹配一个子域名段,所以 *.io
不会匹配 *.k8s.io
。
镜像与 matchImages
之间存在匹配时,以下条件都要满足:
二者均包含相同个数的域名部分,并且每个域名部分都对应匹配;
matchImages
条目中的 URL 路径部分必须是目标镜像的 URL 路径的前缀;
如果 matchImages
条目中包含端口号,则端口号也必须与镜像端口号匹配。
matchImages
的一些示例如下:
123456789.dkr.ecr.us-east-1.amazonaws.com
*.azurecr.io
gcr.io
*.*.registry.io
registry.io:8080/path
defaultCacheDuration
[必需]
meta/v1.Duration
defaultCacheDuration
是插件在内存中缓存凭据的默认时长,
在插件响应中没有给出缓存时长时,使用这里设置的值。此字段是必需的。
apiVersion
[必需]
string
要求 exec 插件 CredentialProviderRequest 请求的输入版本。
所返回的 CredentialProviderResponse 必须使用与输入相同的编码版本。当前支持的值有:
credentialprovider.kubelet.k8s.io/v1beta1
args
[]string
在执行插件可执行文件时要传递给命令的参数。
env
[]ExecEnvVar
env
定义要提供给插件进程的额外的环境变量。
这些环境变量会与主机上的其他环境变量以及 client-go 所使用的环境变量组合起来,
一起传递给插件。
ExecEnvVar
出现在:
ExecEnvVar 用来在执行基于 exec 的凭据插件时设置环境变量。
字段 描述
name
[必需]
string
环境变量的名称。
value
[必需]
string
环境变量的取值。
KubeletAnonymousAuthentication
出现在:
字段 描述
enabled
bool
enabled
允许匿名用户向 kubelet 服务器发送请求。
未被其他身份认证方法拒绝的请求都会被当做匿名请求。
匿名请求对应的用户名为 system:anonymous
,对应的用户组名为
system:unauthenticated
。
KubeletAuthentication
出现在:
KubeletAuthorization
出现在:
KubeletAuthorizationMode
(string
类型的别名)
出现在:
KubeletWebhookAuthentication
出现在:
字段 描述
enabled
bool
enabled
允许使用 tokenreviews.authentication.k8s.io
API 来提供持有者令牌身份认证。
cacheTTL
meta/v1.Duration
cacheTTL
启用对身份认证结果的缓存。
KubeletWebhookAuthorization
出现在:
字段 描述
cacheAuthorizedTTL
meta/v1.Duration
cacheAuthorizedTTL
设置来自 Webhook 鉴权组件的 'authorized'
响应的缓存时长。
cacheUnauthorizedTTL
meta/v1.Duration
cacheUnauthorizedTTL
设置来自 Webhook 鉴权组件的 'unauthorized'
响应的缓存时长。
KubeletX509Authentication
出现在:
字段 描述
clientCAFile
string
clientCAFile
是一个指向 PEM 编码的证书包的路径。
如果设置了此字段,则能够提供由此证书包中机构之一所签名的客户端证书的请求会被成功认证,
并且其用户名对应于客户端证书的 CommonName
、组名对应于客户端证书的
Organization
。
MemoryReservation
出现在:
MemoryReservation 为每个 NUMA 节点设置不同类型的内存预留。
MemorySwapConfiguration
出现在:
字段 描述
swapBehavior
string
swapBehavior
配置容器负载可以使用的交换内存。可以是:
""、"LimitedSwap":工作负载的内存和交换分区总用量不能超过 Pod 的内存限制;
"UnlimitedSwap":工作负载可以无限制地使用交换分区,上限是可分配的约束。
ResourceChangeDetectionStrategy
(string
类型的别名)
出现在:
ResourceChangeDetectionStrategy 给出的是内部管理器(Secret、ConfigMap)
用来发现对象变化的模式。
ShutdownGracePeriodByPodPriority
出现在:
ShutdownGracePeriodByPodPriority 基于 Pod 关联的优先级类数值来为其设置关闭宽限时间。
字段 描述
priority
[必需]
int32
priority
是与关闭宽限期限相关联的优先级值。
shutdownGracePeriodSeconds
[必需]
int64
shutdownGracePeriodSeconds
是按秒数给出的关闭宽限期限。
14.18 - WebhookAdmission 配置 (v1)
此 API 的版本是 v1。
资源类型
WebhookAdmission
WebhookAdmission 为 Webhook 准入控制器提供配置信息。
字段 描述
apiVersion
stringapiserver.config.k8s.io/v1
kind
stringWebhookAdmission
kubeConfigFile
[必需]
string
字段 kubeConfigFile 包含指向 kubeconfig 文件的路径。
14.19 - 客户端身份认证(Client Authentication) (v1)
资源类型
ExecCredential
ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭据信息。
字段 描述
apiVersion
stringclient.authentication.k8s.io/v1
kind
stringExecCredential
spec
[必需]
ExecCredentialSpec
字段 spec 包含由 HTTP 传输组件传递给插件的信息。
status
ExecCredentialStatus
字段 status 由插件填充,包含传输组件与 API 服务器连接时需要提供的凭据。
Cluster
出现在:
Cluster 中包含允许 exec 插件与 Kubernetes 集群进行通信身份认证时所需
的信息。
为了确保该结构体包含需要与 Kubernetes 集群进行通信的所有内容(就像通过 Kubeconfig 一样),
除了证书授权之外,该字段应该映射到 "k8s.io/client-go/tools/clientcmd/api/v1".cluster,
由于 CA 数据将始终以字节形式传递给插件。
字段 描述
server
[必需]
string
字段 server 是 Kubernetes 集群的地址(https://hostname:port)。
tls-server-name
string
tls-server-name 是用来提供给服务器用作 SNI 解析的,客户端以此检查服务器的证书。
如此字段为空,则使用链接服务器时使用的主机名。
insecure-skip-tls-verify
bool
设置此字段之后,会令客户端跳过对服务器端证书的合法性检查。
这会使得你的 HTTPS 链接不再安全。
certificate-authority-data
[]byte
此字段包含 PEM 编码的证书机构(CA)证书。
如果为空,则使用系统的根证书。
proxy-url
string
此字段用来设置向集群发送所有请求时要使用的代理服务器。
disable-compression
bool
disable-compression 允许客户端针对到服务器的所有请求选择取消响应压缩。
当客户端服务器网络带宽充足时,这有助于通过节省压缩(服务器端)和解压缩(客户端)时间来加快请求(特别是列表)的速度:
https://github.com/kubernetes/kubernetes/issues/112296。
config
k8s.io/apimachinery/pkg/runtime.RawExtension
在某些环境中,用户配置可能对很多集群而言都完全一样(即调用同一个 exec 插件),
只是针对不同集群会有一些细节上的差异,例如 audience。
此字段使得特定于集群的配置可以直接使用集群信息来设置。
不建议使用此字段来保存 Secret 数据,因为 exec 插件的主要优势之一是不需要在
kubeconfig 中保存 Secret 数据。
ExecCredentialSpec
出现在:
ExecCredentialSpec 保存传输组件所提供的特定于请求和运行时的信息。
字段 描述
cluster
Cluster
此字段中包含的信息使得 exec 插件能够与要访问的 Kubernetes 集群通信。
注意,cluster 字段只有在 exec 驱动的配置中 provideClusterInfo
(即:ExecConfig.ProvideClusterInfo)被设置为 true 时才不能为空。
interactive
[必需]
bool
此字段用来标明标准输出信息是否已传递给 exec 插件。
ExecCredentialStatus
出现在:
ExecCredentialStatus 中包含传输组件要使用的凭据。
字段 token 和 clientKeyData 都是敏感字段。此数据只能在
客户端与 exec 插件进程之间使用内存来传递。exec 插件本身至少
应通过文件访问许可来实施保护。
字段 描述
expirationTimestamp
meta/v1.Time
给出所提供的凭据到期的时间。
token
[必需]
string
客户端用做请求身份认证的持有者令牌。
clientCertificateData
[必需]
string
PEM 编码的客户端 TLS 证书(如果有临时证书,也会包含)。
clientKeyData
[必需]
string
与上述证书对应的、PEM 编码的私钥。
14.20 - 客户端身份认证(Client Authentication)(v1beta1)
资源类型
ExecCredential
ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭据信息。
字段 描述
apiVersion
stringclient.authentication.k8s.io/v1beta1
kind
stringExecCredential
spec
[必需]
ExecCredentialSpec
字段 spec 包含由 HTTP 传输组件传递给插件的信息。
status
ExecCredentialStatus
字段 status 由插件填充,包含传输组件与 API 服务器连接时需要提供的凭据。
Cluster
出现在:
Cluster 中包含允许 exec 插件与 Kubernetes 集群进行通信身份认证时所需
的信息。
为了确保该结构体包含需要与 Kubernetes 集群进行通信的所有内容(就像通过 Kubeconfig 一样),
该字段应该映射到 "k8s.io/client-go/tools/clientcmd/api/v1".cluster,
除了证书授权之外,由于 CA 数据将始终以字节形式传递给插件。
字段 描述
server
[必需]
string
字段 server 是 Kubernetes 集群的地址(https://hostname:port)。
tls-server-name
string
tls-server-name 是用来提供给服务器用作 SNI 解析的,客户端以此检查服务器的证书。
如此字段为空,则使用链接服务器时使用的主机名。
insecure-skip-tls-verify
bool
设置此字段之后,会令客户端跳过对服务器端证书的合法性检查。
这会使得你的 HTTPS 链接不再安全。
certificate-authority-data
[]byte
此字段包含 PEM 编码的证书机构(CA)证书。
如果为空,则使用系统的根证书。
proxy-url
string
此字段用来设置向集群发送所有请求时要使用的代理服务器。
disable-compression
bool
disable-compression 允许客户端针对到服务器的所有请求选择取消响应压缩。
当客户端服务器网络带宽充足时,这有助于通过节省压缩(服务器端)和解压缩(客户端)时间来加快请求(特别是列表)的速度:
https://github.com/kubernetes/kubernetes/issues/112296。
config
k8s.io/apimachinery/pkg/runtime.RawExtension
在某些环境中,用户配置可能对很多集群而言都完全一样(即调用同一个 exec 插件),
只是针对不同集群会有一些细节上的差异,例如 audience。
此字段使得特定于集群的配置可以直接使用集群信息来设置。
不建议使用此字段来保存 Secret 数据,因为 exec 插件的主要优势之一是不需要在
kubeconfig 中保存 Secret 数据。
ExecCredentialSpec
出现在:
ExecCredentialSpec 保存传输组件所提供的特定于请求和运行时的信息。
字段 描述
cluster
Cluster
此字段中包含的信息使得 exec 插件能够与要访问的 Kubernetes 集群通信。
注意,cluster 字段只有在 exec 驱动的配置中 provideClusterInfo
(即:ExecConfig.ProvideClusterInfo)被设置为 true 时才不能为空。
ExecCredentialStatus
出现在:
ExecCredentialStatus 中包含传输组件要使用的凭据。
字段 token 和 clientKeyData 都是敏感字段。
此数据只能在客户端与 exec 插件进程之间使用内存来传递。
exec 插件本身至少应通过文件访问许可来实施保护。
字段 描述
expirationTimestamp
meta/v1.Time
给出所提供的凭据到期的时间。
token
[必需]
string
客户端用做请求身份认证的持有者令牌。
clientCertificateData
[必需]
string
PEM 编码的客户端 TLS 证书(如果有临时证书,也会包含)。
clientKeyData
[必需]
string
与上述证书对应的、PEM 编码的私钥。
15 - 外部 API
15.1 - Kubernetes 外部指标 (v1beta1)
v1beta1 包是 v1beta1 版本的外部指标 API。
资源类型
ExternalMetricValue
出现在:
ExternalMetricValue 是外部指标的一个度量值。
单个度量值由指标名称和一组字符串标签标识。
对于一个指标,可以有多个具有不同标签集的值。
字段 描述
apiVersion
stringexternal.metrics.k8s.io/v1beta1
kind
stringExternalMetricValue
metricName
[必需]
string
指标的名称。
metricLabels
[必需]
map[string]string
用于标识指标的单个时间序列的标签集。
timestamp
[必需]
meta/v1.Time
标明这些度量值生成的时间。
window
[必需]
int64
当返回根据累积度量计算的速率度量值时,此字段标明计算这些度量值的时间窗口
([Timestamp-Window, Timestamp])(或对于非计算的瞬时度量值为零)。
value
[必需]
k8s.io/apimachinery/pkg/api/resource.Quantity
度量值。
ExternalMetricValueList
ExternalMetricValueList 是某个给定指标的某些标签集的数值列表。
15.2 - Kubernetes 指标 (v1beta1)
v1beta1 包是 v1beta1 版本的指标 API。
资源类型
NodeMetrics
出现在:
NodeMetrics 设置节点的资源用量指标。
字段 描述
apiVersion
stringmetrics.k8s.io/v1beta1
kind
stringNodeMetrics
metadata
meta/v1.ObjectMeta
标准的对象元数据。更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
参阅 Kubernetes API 文档了解 metadata
字段。
timestamp
[必需]
meta/v1.Time
以下字段定义从时间间隔 [Timestamp-Window,Timestamp] 中收集指标的时间间隔。
window
[必需]
meta/v1.Duration
无描述。
usage
[必需]
core/v1.ResourceList
内存用量是内存工作集。
NodeMetricsList
NodeMetricsList 是 NodeMetrics 的列表。
字段 描述
apiVersion
stringmetrics.k8s.io/v1beta1
kind
stringNodeMetricsList
metadata
[必需]
meta/v1.ListMeta
标准的列表元数据。更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items
[必需]
[]NodeMetrics
节点指标的列表。
PodMetrics
出现在:
PodMetrics 设置 Pod 的资源用量指标。
字段 描述
apiVersion
stringmetrics.k8s.io/v1beta1
kind
stringPodMetrics
metadata
meta/v1.ObjectMeta
标准的对象元数据。更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
参阅 Kubernetes API 文档了解 metadata
字段。
timestamp
[必需]
meta/v1.Time
以下字段定义了从时间间隔 [Timestamp-Window,Timestamp] 中收集指标的时间间隔。
window
[必需]
meta/v1.Duration
无描述。
containers
[必需]
[]ContainerMetrics
在相同时间窗口内收集所有容器的指标。
PodMetricsList
PodMetricsList 是 PodMetrics 的列表。
字段 描述
apiVersion
stringmetrics.k8s.io/v1beta1
kind
stringPodMetricsList
metadata
[必需]
meta/v1.ListMeta
标准的列表元数据。更多信息:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items
[必需]
[]PodMetrics
Pod 指标的列表。
ContainerMetrics
出现在:
ContainerMetrics 设置容器的资源用量指标。
15.3 - Kubernetes 自定义指标 (v1beta2)
v1beta2 包是 v1beta2 版本的 custom_metrics API。
资源类型
MetricListOptions
MetricListOptions 用于按其标签选择算符来选择指标。
字段 描述
apiVersion
stringcustom.metrics.k8s.io/v1beta2
kind
stringMetricListOptions
labelSelector
string
这个选择算符通过标签来限制所返回对象的列表。
默认为任意值。
metricLabelSelector
string
这个选择算符通过标签来限制所返回指标的列表。
MetricValue
出现在:
MetricValue 是某些对象的指标值。
MetricValueList
MetricValueList 是某个给定指标的某些对象集的数值列表。
字段 描述
apiVersion
stringcustom.metrics.k8s.io/v1beta2
kind
stringMetricValueList
metadata
[必需]
meta/v1.ListMeta
无描述。
items
[必需]
[]MetricValue
所描述对象的度量值。
MetricIdentifier
出现在:
MetricIdentifier 按名称和可选的选择算符来标识指标。
字段 描述
name
[必需]
string
name 是给定指标的名称。
selector
meta/v1.LabelSelector
selector 表示可用于选择此指标的标签选择算符,通常就是传递给查询用于获取此指标的选择算符。
当留空时,仅使用指标的 Name 来采集指标。
16 - 调度
16.1 - 调度器配置
特性状态:
Kubernetes v1.25 [stable]
你可以通过编写配置文件,并将其路径传给 kube-scheduler
的命令行参数,定制 kube-scheduler
的行为。
调度模板(Profile)允许你配置 kube-scheduler
中的不同调度阶段。每个阶段都暴露于某个扩展点中。插件通过实现一个或多个扩展点来提供调度行为。
你可以通过运行 kube-scheduler --config <filename>
来设置调度模板,
使用 KubeSchedulerConfiguration v1
结构体。
最简单的配置如下:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
clientConnection :
kubeconfig : /etc/srv/kubernetes/kube-scheduler/kubeconfig
说明:
KubeSchedulerConfiguration v1beta3 在 v1.26 中已被弃用,
并将在 v1.29 中被移除。请将 KubeSchedulerConfiguration 迁移到
v1 。
配置文件
通过调度配置文件,你可以配置 kube-scheduler 在不同阶段的调度行为。
每个阶段都在一个扩展点 中公开。
调度插件 通过实现一个或多个扩展点,来提供调度行为。
你可以配置同一 kube-scheduler
实例使用多个配置文件 。
扩展点
调度行为发生在一系列阶段中,这些阶段是通过以下扩展点公开的:
queueSort
:这些插件对调度队列中的悬决的 Pod 排序。
一次只能启用一个队列排序插件。
preFilter
:这些插件用于在过滤之前预处理或检查 Pod 或集群的信息。
它们可以将 Pod 标记为不可调度。
filter
:这些插件相当于调度策略中的断言(Predicates),用于过滤不能运行 Pod 的节点。
过滤器的调用顺序是可配置的。
如果没有一个节点通过所有过滤器的筛选,Pod 将会被标记为不可调度。
postFilter
:当无法为 Pod 找到可用节点时,按照这些插件的配置顺序调用他们。
如果任何 postFilter
插件将 Pod 标记为可调度 ,则不会调用其余插件。
preScore
:这是一个信息扩展点,可用于预打分工作。
score
:这些插件给通过筛选阶段的节点打分。调度器会选择得分最高的节点。
reserve
:这是一个信息扩展点,当资源已经预留给 Pod 时,会通知插件。
这些插件还实现了 Unreserve
接口,在 Reserve
期间或之后出现故障时调用。
permit
:这些插件可以阻止或延迟 Pod 绑定。
preBind
:这些插件在 Pod 绑定节点之前执行。
bind
:这个插件将 Pod 与节点绑定。bind
插件是按顺序调用的,只要有一个插件完成了绑定,
其余插件都会跳过。bind
插件至少需要一个。
postBind
:这是一个信息扩展点,在 Pod 绑定了节点之后调用。
multiPoint
:这是一个仅配置字段,允许同时为所有适用的扩展点启用或禁用插件。
对每个扩展点,你可以禁用默认插件 或者是启用自己的插件,例如:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- plugins :
score :
disabled :
- name : PodTopologySpread
enabled :
- name : MyCustomPluginA
weight : 2
- name : MyCustomPluginB
weight : 1
你可以在 disabled
数组中使用 *
禁用该扩展点的所有默认插件。
如果需要,这个字段也可以用来对插件重新顺序。
调度插件
下面默认启用的插件实现了一个或多个扩展点:
DefaultBinder
:提供默认的绑定机制。
实现的扩展点:bind
。
你也可以通过组件配置 API 启用以下插件(默认不启用):
多配置文件
你可以配置 kube-scheduler
运行多个配置文件。
每个配置文件都有一个关联的调度器名称,并且可以在其扩展点中配置一组不同的插件。
使用下面的配置样例,调度器将运行两个配置文件:一个使用默认插件,另一个禁用所有打分插件。
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : default-scheduler
- schedulerName : no -scoring-scheduler
plugins :
preScore :
disabled :
- name : '*'
score :
disabled :
- name : '*'
对于那些希望根据特定配置文件来进行调度的 Pod,可以在 .spec.schedulerName
字段指定相应的调度器名称。
默认情况下,将创建一个调度器名为 default-scheduler
的配置文件。
这个配置文件包括上面描述的所有默认插件。
声明多个配置文件时,每个配置文件中调度器名称必须唯一。
如果 Pod 未指定调度器名称,kube-apiserver 将会把调度器名设置为 default-scheduler
。
因此,应该存在一个调度器名为 default-scheduler
的配置文件来调度这些 Pod。
说明:
Pod 的调度事件把 .spec.schedulerName
字段值作为它们的 ReportingController
。
领导者选举事件使用列表中第一个配置文件的调度器名称。
有关更多信息,请参阅
Event API 参考文档 中的
reportingController
一节。
说明:
所有配置文件必须在 queueSort
扩展点使用相同的插件,并具有相同的配置参数(如果适用)。
这是因为调度器只有一个保存 pending 状态 Pod 的队列。
应用于多个扩展点的插件
从 kubescheduler.config.k8s.io/v1beta3
开始,配置文件配置中有一个附加字段
multiPoint
,它允许跨多个扩展点轻松启用或禁用插件。
multiPoint
配置的目的是简化用户和管理员在使用自定义配置文件时所需的配置。
考虑一个插件,MyPlugin
,它实现了 preScore
、score
、preFilter
和 filter
扩展点。
要为其所有可用的扩展点启用 MyPlugin
,配置文件配置如下所示:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
multiPoint :
enabled :
- name : MyPlugin
这相当于为所有扩展点手动启用 MyPlugin
,如下所示:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : non-multipoint-scheduler
plugins :
preScore :
enabled :
- name : MyPlugin
score :
enabled :
- name : MyPlugin
preFilter :
enabled :
- name : MyPlugin
filter :
enabled :
- name : MyPlugin
在这里使用 multiPoint
的一个好处是,如果 MyPlugin
将来实现另一个扩展点,multiPoint
配置将自动为新扩展启用它。
可以使用该扩展点的 disabled
字段将特定扩展点从 MultiPoint
扩展中排除。
这适用于禁用默认插件、非默认插件或使用通配符 ('*'
) 来禁用所有插件。
禁用 Score
和 PreScore
的一个例子是:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : non-multipoint-scheduler
plugins :
multiPoint :
enabled :
- name : 'MyPlugin'
preScore :
disabled :
- name : '*'
score :
disabled :
- name : '*'
从 kubescheduler.config.k8s.io/v1beta3
开始,所有默认插件 都通过 MultiPoint
在内部启用。
但是,仍然可以使用单独的扩展点来灵活地重新配置默认值(例如排序和分数权重)。
例如,考虑两个 Score 插件 DefaultScore1
和 DefaultScore2
,每个插件的权重为 1
。
它们可以用不同的权重重新排序,如下所示:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
score :
enabled :
- name : 'DefaultScore2'
weight : 5
在这个例子中,没有必要在 MultiPoint
中明确指定插件,因为它们是默认插件。
Score
中指定的唯一插件是 DefaultScore2
。
这是因为通过特定扩展点设置的插件将始终优先于 MultiPoint
插件。
因此,此代码段实质上重新排序了这两个插件,而无需同时指定它们。
配置 MultiPoint
插件时优先级的一般层次结构如下:
特定的扩展点首先运行,它们的设置会覆盖其他地方的设置
通过 MultiPoint
手动配置的插件及其设置
默认插件及其默认设置
为了演示上述层次结构,以下示例基于这些插件:
插件
扩展点
DefaultQueueSort
QueueSort
CustomQueueSort
QueueSort
DefaultPlugin1
Score
, Filter
DefaultPlugin2
Score
CustomPlugin1
Score
, Filter
CustomPlugin2
Score
, Filter
这些插件的一个有效示例配置是:
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
multiPoint :
enabled :
- name : 'CustomQueueSort'
- name : 'CustomPlugin1'
weight : 3
- name : 'CustomPlugin2'
disabled :
- name : 'DefaultQueueSort'
filter :
disabled :
- name : 'DefaultPlugin1'
score :
enabled :
- name : 'DefaultPlugin2'
请注意,在特定扩展点中重新声明 MultiPoint
插件不会出错。
重新声明被忽略(并记录),因为特定的扩展点优先。
除了将大部分配置保存在一个位置之外,此示例还做了一些事情:
启用自定义 queueSort
插件并禁用默认插件
启用 CustomPlugin1
和 CustomPlugin2
,这将首先为它们的所有扩展点运行
禁用 DefaultPlugin1
,但仅适用于 filter
重新排序 DefaultPlugin2
以在 score
中首先运行(甚至在自定义插件之前)
在 v1beta3
之前的配置版本中,没有 multiPoint
,上面的代码片段等同于:
apiVersion : kubescheduler.config.k8s.io/v1beta2
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
# 禁用默认的 QueueSort 插件
queueSort :
enabled :
- name : 'CustomQueueSort'
disabled :
- name : 'DefaultQueueSort'
# 启用自定义的 Filter 插件
filter :
enabled :
- name : 'CustomPlugin1'
- name : 'CustomPlugin2'
- name : 'DefaultPlugin2'
disabled :
- name : 'DefaultPlugin1'
# 启用并重新排序自定义的打分插件
score :
enabled :
- name : 'DefaultPlugin2'
weight : 1
- name : 'DefaultPlugin1'
weight : 3
虽然这是一个复杂的例子,但它展示了 MultiPoint
配置的灵活性以及它与配置扩展点的现有方法的无缝集成。
调度程序配置迁移
调度器插件 NodePreferAvoidPods
已弃用;
相反,使用节点污点 来实现类似的行为。
在 v1beta2 配置文件中启用的插件优先于该插件的默认配置。
调度器的健康检查和审计的绑定地址,所配置的 host
或 port
无效将导致验证失败。
默认增加三个插件的权重:
InterPodAffinity
从 1 到 2
NodeAffinity
从 1 到 2
TaintToleration
从 1 到 3
调度器插件 SelectorSpread
被移除,改为使用 PodTopologySpread
插件(默认启用)来实现类似的行为。
接下来
16.2 - 调度策略
在 Kubernetes v1.23 版本之前,可以使用调度策略来指定 predicates 和 priorities 进程。
例如,可以通过运行 kube-scheduler --policy-config-file <filename>
或者
kube-scheduler --policy-configmap <ConfigMap>
设置调度策略。
但是从 Kubernetes v1.23 版本开始,不再支持这种调度策略。
同样地也不支持相关的 policy-config-file
、policy-configmap
、policy-configmap-namespace
和 use-legacy-policy-config
标志。
你可以通过使用调度配置 来实现类似的行为。
接下来
17 - 其他工具
Kubernetes 包含多种工具来帮助你使用 Kubernetes 系统。
crictl
crictl
是用于检查和调试兼容 CRI 的容器运行时的命令行接口。
仪表盘
Dashboard
,
基于 Web 的 Kubernetes 用户界面,
允许你将容器化的应用程序部署到 Kubernetes 集群,
对它们进行故障排查,并管理集群及其资源本身。
Helm
🛇 本条目指向第三方项目或产品,而该项目(产品)不是 Kubernetes 的一部分。
更多信息
Helm
是一个用于管理预配置 Kubernetes 资源包的工具。这些包被称为“Helm 图表”。
使用 Helm 来:
查找和使用打包为 Kubernetes 图表的流行软件
将你自己的应用程序共享为 Kubernetes 图表
为你的 Kubernetes 应用程序创建可重现的构建
智能管理你的 Kubernetes 清单文件
管理 Helm 包的发布
Kompose
Kompose
是一个帮助 Docker Compose 用户迁移到 Kubernetes 的工具。
使用 Kompose:
将 Docker Compose 文件翻译成 Kubernetes 对象
从本地 Docker 开发转到通过 Kubernetes 管理你的应用程序
转换 Docker Compose v1 或 v2 版本的 yaml
文件或分布式应用程序包
Kui
Kui
是一个接受你标准的 kubectl
命令行请求并以图形响应的 GUI 工具。
Kui 接受标准的 kubectl
命令行工具并以图形响应。
Kui 提供包含可排序表格的 GUI 渲染,而不是 ASCII 表格。
Kui 让你能够:
直接点击长的、自动生成的资源名称,而不是复制和粘贴
输入 kubectl
命令并查看它们的执行,有时甚至比 kubectl
本身更快
查询 Job 并查看其执行渲染为瀑布图
使用选项卡式 UI 在集群中单击资源
Minikube
minikube
是一种在你的工作站上本地运行单节点 Kubernetes 集群的工具,用于开发和测试。