1 - Event Rate Limit Configuration (v1alpha1)

资源类型

Configuration

Configuration 为 EventRateLimit 准入控制器提供配置数据。

字段描述
apiVersion
string
eventratelimit.admission.k8s.io/v1alpha1
kind
string
Configuration
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)。

2 - Image Policy API (v1alpha1)

资源类型

ImageReview

ImageReview 检查某个 Pod 中是否可以使用某些镜像。

字段描述
apiVersion
string
imagepolicy.k8s.io/v1alpha1
kind
string
ImageReview
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 对象上。 注解键应该不含前缀,换言之,准入控制器会添加合适的前缀。

3 - kube 配置 (v1)

资源类型

Config

Config 保存以给定用户身份构建连接到远程 Kubernetes 集群所需的信息

字段描述
apiVersion
string
/v1
kind
string
Config
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 是一个指针,指向包含有持有者令牌(如上所述)的文件。 如果 tokentokenFile 都存在,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_proxyhttps_proxy 环境变量构建代理配置。 如果这些环境变量也没有设置, 客户端不会尝试代理请求。

socks5 代理当前不支持 SPDY 流式端点 (execattachport-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 插件。 默认情况下,它被设置为 falsek8s.io/client-go/tools/auth/exec 包提供了用于读取这个环境变量的辅助方法。

interactiveMode
ExecInteractiveMode

interactiveMode 确定此插件与标准输入之间的关系。有效值为:

  • "Never":这个 exec 插件从不使用标准输入;
  • "IfAvailable":这个 exec 插件希望使用标准输入,如果可用的话;
  • "Always":这个 exec 插件需要标准输入以正常运行。

查看 ExecInteractiveMode 值以了解更多详情。

如果 apiVersionclient.authentication.k8s.io/v1alpha1client.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 将昵称与扩展信息关联起来。

字段描述
name[必需]
string

name 是此扩展的昵称。

extension[必需]
k8s.io/apimachinery/pkg/runtime.RawExtension

extension 保存扩展信息。

Preferences

出现在:

字段描述
colors
bool

是否采用彩色字符编码。

extensions
[]NamedExtension

extensions 保存一些额外信息。 这些信息对于扩展程序是有用的,目的是确保读写操作不会破坏未知字段。

4 - kube-apiserver Admission (v1)

资源类型

AdmissionReview

AdmissionReview 描述准入评审请求/响应。

字段描述
apiVersion
string
admission.k8s.io/v1
kind
string
AdmissionReview
request
AdmissionRequest

request 描述准入请求的属性。

response
AdmissionResponse

response 描述准入响应的属性。

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.DeleteOptionsmeta.k8s.io/v1.CreateOptions。 所设置的值可能不同于调用方所提供的选项。例如 patch 请求执行的操作可能是 CREATE,那这种情况下即使调用方提供了 meta.k8s.io/v1.PatchOptionsoptions 也将是 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 是用于表示所变更对象的补丁类型。

5 - kube-apiserver Audit 配置(v1)

资源类型

Event

出现在:

Event 结构包含可出现在 API 审计日志中的所有信息。

字段描述
apiVersion
string
audit.k8s.io/v1
kind
string
Event
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 从以下(按顺序)列出:

  1. X-Forwarded-For 请求标头 IP
  2. X-Real-Ip 标头,如果 X-Forwarded-For 列表中不存在
  3. 连接的远程地址,如果它无法与此处列表中的最后一个 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
string
audit.k8s.io/v1
kind
string
EventList
metadata
meta/v1.ListMeta
列表结构元数据
items [必需]
[]Event
事件对象列表

Policy

出现在:

Policy 定义的是审计日志的配置以及不同类型请求的日志记录规则。

字段描述
apiVersion
string
audit.k8s.io/v1
kind
string
Policy
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
string
audit.k8s.io/v1
kind
string
PolicyList
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 定义在请求处理过程中可以生成审计事件的阶段。

6 - kube-apiserver 配置 (v1)

v1 包中包含 API 的 v1 版本。

资源类型

AdmissionConfiguration

AdmissionConfiguration 为准入控制器提供版本化的配置。

字段描述
apiVersion
string
apiserver.config.k8s.io/v1
kind
string
AdmissionConfiguration
plugins
[]AdmissionPluginConfiguration

plugins 字段允许为每个准入控制插件设置配置选项。

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
string
apiserver.config.k8s.io/v1
kind
string
EncryptionConfiguration
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 存储为加密驱动提供的配置。

字段描述
aesgcm [必需]
AESConfiguration

aesgcm 是 AES-GCM 转换器的配置。

aescbc [必需]
AESConfiguration

aescbc 是 AES-CBC 转换器的配置。

secretbox [必需]
SecretboxConfiguration

secretbox 是基于 Secretbox 的转换器的配置。

identity [必需]
IdentityConfiguration

identity 是身份转换器的(空)配置。

kms [必需]
KMSConfiguration

kms 包含 KMS 型信封转换器所用的配置文件的名称、缓存大小和路径。

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 字节。

7 - kube-apiserver 配置 (v1alpha1)

包 v1alpha1 包含 API 的 v1alpha1 版本。

资源类型

TracingConfiguration

出现在:

TracingConfiguration 为 OpenTelemetry 跟踪客户端提供了不同版本的配置。

字段描述
endpoint
string

采集器的端点,此组件将向其报告跟踪信息。 连接不安全,目前不支持 TLS。 推荐不设置,端点为 otlp grpc 默认值 localhost:4317。

samplingRatePerMillion
int32

SamplingRatePerMillion 是每百万 span 中采集的样本数。 推荐不设置。如果不设置,采集器将继承其父级 span 的采样率,否则不进行采样。

AdmissionConfiguration

AdmissionConfiguration 为准入控制器提供版本化的配置信息。

字段描述
apiVersion
string
apiserver.k8s.io/v1alpha1
kind
string
AdmissionConfiguration
plugins
[]AdmissionPluginConfiguration

plugins 允许用户为每个准入控制插件指定设置。

AuthenticationConfiguration

AuthenticationConfiguration 为身份认证提供版本化的配置。

字段描述
apiVersion
string
apiserver.k8s.io/v1alpha1
kind
string
AuthenticationConfiguration
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
string
apiserver.k8s.io/v1alpha1
kind
string
AuthorizationConfiguration
authorizers [必需]
[]AuthorizerConfiguration

authorizers 是一个有序的鉴权器列表,用于对请求进行鉴权。 这类似于 kube-apiserver --authorization-modes 标志。 此列表不能为空。

EgressSelectorConfiguration

EgressSelectorConfiguration 为 Egress 选择算符客户端提供版本化的配置选项。

字段描述
apiVersion
string
apiserver.k8s.io/v1alpha1
kind
string
EgressSelectorConfiguration
egressSelections [必需]
[]EgressSelection

connectionServices 包含一组 Egress 选择算符客户端配置选项。

TracingConfiguration

TracingConfiguration 为跟踪客户端提供版本化的配置信息。

字段描述
apiVersion
string
apiserver.k8s.io/v1alpha1
kind
string
TracingConfiguration
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 为匿名身份认证器提供配置信息。

字段描述
enabled [必需]
bool
conditions [必需]
[]AnonymousAuthCondition

如果设置,只有在请求满足其中一个条件时才允许匿名身份认证。

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.expressionextra[*].valueExpressionclaimValidationRules[*].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

出现在:

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" 声明。 允许的值有:

  1. "MatchAny" 当指定多个受众时
  2. 空(或未设置)或 "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 的 proxyProtocoltcpuds 二者至少设置一个。

uds
UDSTransport

uds 包含通过 UDS 与 konnectivity 服务器通信时使用的 UDS 配置。 tcpuds 二者至少设置一个。

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 个匹配条件。

精确匹配逻辑如下(按顺序):

  1. 如果至少一个 matchCondition 计算结果为 FALSE,则跳过 Webhook。
  2. 如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。
  3. 如果至少一个 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 版本。

  • `resourceAttributes` 描述了资源访问请求的信息,并且在非资源请求中未设置。 例如:`has(request.resourceAttributes) && request.resourceAttributes.namespace == 'default'`
  • `nonResourceAttributes` 描述了非资源访问请求的信息,并且在资源请求中未设置。 例如:`has(request.nonResourceAttributes) && request.nonResourceAttributes.path == '/healthz'`
  • `user` 是要测试的用户。例如:`request.user == 'alice'`
  • `groups` 是要测试的用户组。例如:`'group1' in request.groups`
  • `extra` 对应于认证器中的 `user.Info.GetExtra()` 方法。
  • `uid` 是关于请求用户的标识信息。例如:`request.uid == '1'`

关于 CEL 文档:https://kubernetes.io/zh-cn/docs/reference/using-api/cel/

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
string
apiserver.k8s.io/v1beta1
kind
string
AuthenticationConfiguration
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
string
apiserver.k8s.io/v1beta1
kind
string
AuthorizationConfiguration
authorizers [必需]
[]AuthorizerConfiguration

authorizers 是一个有序的鉴权器列表,用于对请求进行鉴权。 这类似于 kube-apiserver --authorization-modes 标志。 此列表不能为空。

EgressSelectorConfiguration

EgressSelectorConfiguration 为出站流量选择器客户端(Egress Selector Client)提供版本化的配置选项。

字段描述
apiVersion
string
apiserver.k8s.io/v1beta1
kind
string
EgressSelectorConfiguration
egressSelections [必需]
[]EgressSelection

connectionServices 包含一组出站流量选择器客户端(Egress Selector Client)配置选项。

TracingConfiguration

TracingConfiguration 为跟踪客户端提供版本化的配置信息。

字段描述
apiVersion
string
apiserver.k8s.io/v1beta1
kind
string
TracingConfiguration
TracingConfiguration [必需]
TracingConfiguration
TracingConfiguration 的成员嵌入到这种类型中。)

嵌入组件配置中的跟踪配置结构体。

AnonymousAuthCondition

出现在:

AnonymousAuthCondition 描述了应启用匿名身份认证的条件。

字段描述
path [必需]
string

启用匿名身份认证的路径。

AnonymousAuthConfig

出现在:

AnonymousAuthConfig 为匿名身份认证器提供配置信息。

字段描述
enabled [必需]
bool
conditions [必需]
[]AnonymousAuthCondition

如果设置,只有在请求满足其中一个条件时才允许匿名身份认证。

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.expressionextra[*].valueExpressionclaimValidationRules[*].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

出现在:

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" 声明。 允许的值有:

  1. "MatchAny" 当指定多个受众时
  2. 空(或未设置)或 "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 个匹配条件。

精确匹配逻辑如下(按顺序):

  1. 如果至少一个 matchCondition 计算结果为 FALSE,则跳过 Webhook。
  2. 如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。
  3. 如果至少一个 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/

9 - kube-controller-manager Configuration (v1alpha1)

资源类型

NodeControllerConfiguration

出现在:

NodeControllerConfiguration 包含描述 NodeController 的元素。

字段描述
ConcurrentNodeSyncs [必需]
int32

ConcurrentNodeSyncs 是并发执行以进行节点同步的工作程序的数量。

ServiceControllerConfiguration

出现在:

ServiceControllerConfiguration 包含描述 ServiceController 的元素。

字段描述
ConcurrentServiceSyncs [必需]
int32

concurrentServiceSyncs 是允许同时同步的服务数。 数量越大表示服务管理响应越快,但 CPU(和网络)负载也越高。

CloudControllerManagerConfiguration

CloudControllerManagerConfiguration 包含描述云控制器管理器的元素。

字段描述
apiVersion
string
cloudcontrollermanager.config.k8s.io/v1alpha1
kind
string
CloudControllerManagerConfiguration
Generic [必需]
GenericControllerManagerConfiguration

Generic 包含通用控制器管理器的配置。

KubeCloudShared [必需]
KubeCloudSharedConfiguration

KubeCloudSharedConfiguration 保存被云控制器管理器和 kube-controller 管理器共享的相关特性的配置。

NodeController [必需]
NodeControllerConfiguration

NodeController 保存与节点控制器相关的特性的配置。

ServiceController [必需]
ServiceControllerConfiguration

ServiceControllerConfiguration 保存 ServiceController 相关的特性的配置。

NodeStatusUpdateFrequency [必需]
meta/v1.Duration

NodeStatusUpdateFrequency 是控制器更新节点状态的频率。

Webhook [必需]
WebhookConfiguration

Webhook 是云控制器管理器托管的 webhook 的配置。

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
string
controllermanager.config.k8s.io/v1alpha1
kind
string
LeaderMigrationConfiguration
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 管理器的元素。

字段描述
apiVersion
string
kubecontrollermanager.config.k8s.io/v1alpha1
kind
string
KubeControllerManagerConfiguration
Generic [必需]
GenericControllerManagerConfiguration

Generic 保存通用控制器管理器的配置。

KubeCloudShared [必需]
KubeCloudSharedConfiguration

KubeCloudSharedConfiguration 保存云控制器管理器和 kube-controller 管理器间共享的相关特性的配置。

AttachDetachController [必需]
AttachDetachControllerConfiguration

AttachDetachControllerConfiguration 包含 AttachDetachController 相关特性的配置。

CSRSigningController [必需]
CSRSigningControllerConfiguration

CSRSigningControllerConfiguration 包含 CSRSigningController 相关特性的配置。

DaemonSetController [必需]
DaemonSetControllerConfiguration

DaemonSetControllerConfiguration 包含 DaemonSetController 相关特性的配置。

DeploymentController [必需]
DeploymentControllerConfiguration

DeploymentControllerConfiguration 包含 DeploymentController 相关特性的配置。

StatefulSetController [必需]
StatefulSetControllerConfiguration

StatefulSetControllerConfiguration 包含 StatefulSetController 相关特性的配置。

DeprecatedController [必需]
DeprecatedControllerConfiguration

DeprecatedControllerConfiguration 包含一些已弃用的特性的配置。

EndpointController [必需]
EndpointControllerConfiguration

EndpointControllerConfiguration 包含 EndpointController 相关特性的配置。

EndpointSliceController [必需]
EndpointSliceControllerConfiguration

EndpointSliceControllerConfiguration 包含 EndpointSliceController 相关特性的配置。

EndpointSliceMirroringController [必需]
EndpointSliceMirroringControllerConfiguration

EndpointSliceMirroringControllerConfiguration 包含 EndpointSliceMirroringController 相关特性的配置。

EphemeralVolumeController [必需]
EphemeralVolumeControllerConfiguration

EphemeralVolumeControllerConfiguration 包含 EphemeralVolumeController 相关特性的配置。

GarbageCollectorController [必需]
GarbageCollectorControllerConfiguration

GarbageCollectorControllerConfiguration 包含 GarbageCollectorController 相关特性的配置。

HPAController [必需]
HPAControllerConfiguration

HPAControllerConfiguration 包含 HPAController 相关特性的配置。

JobController [必需]
JobControllerConfiguration

HPAControllerConfiguration 包含 JobController 相关特性的配置。

CronJobController [必需]
CronJobControllerConfiguration

CronJobControllerConfiguration 包含 CronJobController 相关特性的配置。

LegacySATokenCleaner [必需]
LegacySATokenCleanerConfiguration

LegacySATokenCleanerConfiguration 包含 LegacySATokenCleaner 相关特性的配置。

NamespaceController [必需]
NamespaceControllerConfiguration

NamespaceControllerConfiguration 包含 NamespaceController 相关特性的配置。

NodeIPAMController [必需]
NodeIPAMControllerConfiguration

NodeIPAMControllerConfiguration 包含 NodeIPAMController 相关特性的配置。

NodeLifecycleController [必需]
NodeLifecycleControllerConfiguration

NodeLifecycleControllerConfiguration 包含 NodeLifecycleController 相关特性的配置。

PersistentVolumeBinderController [必需]
PersistentVolumeBinderControllerConfiguration

PersistentVolumeBinderControllerConfiguration 包含 PersistentVolumeBinderController 相关特性的配置。

PodGCController [必需]
PodGCControllerConfiguration

PodGCControllerConfiguration 包含 PodGCController 相关特性的配置。

ReplicaSetController [必需]
ReplicaSetControllerConfiguration

ReplicaSetControllerConfiguration 包含 ReplicaSetController 相关特性的配置。

ReplicationController [必需]
ReplicationControllerConfiguration

ReplicationControllerConfiguration 包含 ReplicationController 相关特性的配置。

ResourceQuotaController [必需]
ResourceQuotaControllerConfiguration

ResourceQuotaControllerConfiguration 包含 ResourceQuotaController 相关特性的配置。

SAController [必需]
SAControllerConfiguration

SAControllerConfiguration 包含 ServiceAccountController 相关特性的配置。

ServiceController [必需]
ServiceControllerConfiguration

ServiceControllerConfiguration 包含 ServiceController 相关特性的配置。

TTLAfterFinishedController [必需]
TTLAfterFinishedControllerConfiguration

TTLAfterFinishedControllerConfiguration 包含 TTLAfterFinishedController 相关特性的配置。

ValidatingAdmissionPolicyStatusController [必需]
ValidatingAdmissionPolicyStatusControllerConfiguration

ValidatingAdmissionPolicyStatusControllerConfiguration 包含 ValidatingAdmissionPolicyStatusController 相关特性的配置。

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 的元素。

字段描述
PVClaimBinderSyncPeriod [必需]
meta/v1.Duration

pvClaimBinderSyncPeriod 用于同步 PV 和 PVC 的周期。

VolumeConfiguration [必需]
VolumeConfiguration

volumeConfiguration 包含卷相关特性的配置。

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 插件在这一目录中搜索额外的第三方卷插件。

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
string
kubeproxy.config.k8s.io/v1alpha1
kind
string
KubeProxyConfiguration
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 相关配置详细信息。

FieldDescription
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 将出错并退出。

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
string
kubescheduler.config.k8s.io/v1
kind
string
DefaultPreemptionArgs
minCandidateNodesPercentage [必需]
int32

minCandidateNodesPercentage 字段为试运行抢占时 shortlist 中候选节点数的下限, 数值为节点数的百分比。字段值必须介于 [0, 100] 之间。未指定时默认值为整个集群规模的 10%。

minCandidateNodesAbsolute [必需]
int32

minCandidateNodesAbsolute 字段设置 shortlist 中候选节点的绝对下限。 用于试运行抢占而列举的候选节点个数近似于通过下面的公式计算的:
候选节点数 = max(节点数 * minCandidateNodesPercentage, minCandidateNodesAbsolute)
之所以说是"近似于"是因为存在一些类似于 PDB 违例这种因素, 会影响到进入 shortlist 中候选节点的个数。 取值至少为 0 节点。若未设置默认为 100 节点。

InterPodAffinityArgs

InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。

字段描述
apiVersion
string
kubescheduler.config.k8s.io/v1
kind
string
InterPodAffinityArgs
hardPodAffinityWeight [必需]
int32

hardPodAffinityWeight 字段是一个计分权重值。针对新增的 Pod,要对现存的、 带有与新 Pod 匹配的硬性亲和性设置的 Pods 计算亲和性得分。

ignorePreferredTermsOfExistingPods [必需]
bool

ignorePreferredTermsOfExistingPods 配置调度器在为候选节点评分时忽略现有 Pod 的优选亲和性规则, 除非传入的 Pod 具有 Pod 间的亲和性。

KubeSchedulerConfiguration

KubeSchedulerConfiguration 用来配置调度器。

字段描述
apiVersion
string
kubescheduler.config.k8s.io/v1
kind
string
KubeSchedulerConfiguration
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
string
kubescheduler.config.k8s.io/v1
kind
string
NodeAffinityArgs
addedAffinity
core/v1.NodeAffinity

addedAffinity 会作为附加的亲和性属性添加到所有 Pod 的规约中指定的 NodeAffinity 中。 换言之,节点需要同时满足 addedAffinity 和 .spec.nodeAffinity。 默认情况下,addedAffinity 为空(与所有节点匹配)。使用了 addedAffinity 时, 某些带有已经能够与某特定节点匹配的亲和性需求的 Pod (例如 DaemonSet Pod)可能会继续呈现不可调度状态。

NodeResourcesBalancedAllocationArgs

NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllocation 插件的参数。

字段描述
apiVersion
string
kubescheduler.config.k8s.io/v1
kind
string
NodeResourcesBalancedAllocationArgs
resources [必需]
[]ResourceSpec

要管理的资源;如果未设置,则默认值为 "cpu" 和 "memory"。

NodeResourcesFitArgs

NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。

字段描述
apiVersion
string
kubescheduler.config.k8s.io/v1
kind
string
NodeResourcesFitArgs
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
string
kubescheduler.config.k8s.io/v1
kind
string
PodTopologySpreadArgs
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
string
kubescheduler.config.k8s.io/v1
kind
string
VolumeBindingArgs
bindTimeoutSeconds [必需]
int64

bindTimeoutSeconds 字段设置卷绑定操作的超时秒数。字段值必须是非负数。 取值为 0 意味着不等待。如果此值为 null,则使用默认值(600)。

shape
[]UtilizationShapePoint

shape 用来设置打分函数曲线所使用的计分点, 这些计分点用来基于静态制备的 PV 卷的利用率为节点打分。 卷的利用率是计算得来的, 将 Pod 所请求的总的存储空间大小除以每个节点上可用的总的卷容量。 每个计分点包含利用率(范围从 0 到 100)和其对应的得分(范围从 0 到 10)。 你可以通过为不同的使用率值设置不同的得分来反转优先级:

默认的曲线计分点为:

  1. 利用率为 0 时得分为 0;
  2. 利用率为 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 给出初始化阶段要传递给插件的参数。 在多个扩展点被调用的插件仅会被初始化一次。 参数可以是任意结构。插件负责处理这里所传的参数。

字段描述
name [必需]
string

name 是所配置的插件的名称。

args [必需]
k8s.io/apimachinery/pkg/runtime.RawExtension

args 定义在初始化阶段要传递给插件的参数。参数可以为任意结构。

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 所禁止的 "∗" 也是如此,意味着所有默认插件都不会被自动注册。 插件也可以通过各个独立的扩展点来禁用。

就优先序而言,插件配置遵从以下基本层次:

  1. 特定的扩展点;
  2. 显式配置的 multiPoint 插件;
  3. 默认插件的集合,以及 multiPoint 插件。

这意味着优先序较高的插件会先被运行,并且覆盖 multiPoint 中的任何配置。

用户显式配置的插件也会比默认插件优先序高。

在这样的层次结构设计之下,enabled 的优先序高于 disabled。 例如,某插件同时出现在 multiPoint.enabledmultiPoint.disalbed 时, 该插件会被启用。类似的, 同时设置 multiPoint.disabled = '∗'multiPoint.enabled = pluginA 时, 插件 pluginA 仍然会被注册。这一设计与所有其他扩展点的配置行为是相符的。

PodTopologySpreadConstraintsDefaulting

string 类型的别名)

出现在:

PodTopologySpreadConstraintsDefaulting 定义如何为 PodTopologySpread 插件设置默认的约束。

RequestedToCapacityRatioParam

出现在:

RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。

字段描述
shape [必需]
[]UtilizationShapePoint

shape 是一个定义评分函数曲线的计分点的列表。

ResourceSpec

出现在:

ResourceSpec 用来代表某个资源。

字段描述
name [必需]
string

资源名称。

weight [必需]
int64

资源权重。

ScoringStrategy

出现在:

ScoringStrategy 为节点资源插件定义 ScoringStrategyType。

字段描述
type [必需]
ScoringStrategyType

type 用来选择要运行的策略。

resources [必需]
[]ResourceSpec

resources 设置在评分时要考虑的资源。

默认的资源集合包含 "cpu" 和 "memory",且二者权重相同。

权重的取值范围为 1 到 100。

当权重未设置或者显式设置为 0 时,意味着使用默认值 1。

requestedToCapacityRatio [必需]
RequestedToCapacityRatioParam

特定于 RequestedToCapacityRatio 策略的参数。

ScoringStrategyType

string 数据类型的别名)

出现在:

ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型。

UtilizationShapePoint

出现在:

UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。

字段描述
utilization [必需]
int32

利用率(x 轴)。合法值为 0 到 100。完全被利用的节点映射到 100。

score [必需]
int32

score 分配给指定利用率的分值(y 轴)。合法值为 0 到 10。

12 - kubeadm 配置 (v1beta4)

概述

v1beta4 包定义 v1beta4 版本的 kubeadm 配置文件格式。 此版本改进了 v1beta3 的格式,修复了一些小问题并添加了一些新的字段。

从 v1beta3 版本以来的变更列表:

  • TODO https://github.com/kubernetes/kubeadm/issues/2890
  • 使用 APIServer.ExtraEnvsControllerManager.ExtraEnvsScheduler.ExtraEnvsEtcd.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

配置文件中必须包含的配置类型列表取决于你所执行的动作(initjoin), 也取决于你要使用的配置选项(默认值或者高级定制)。

如果某些配置类型没有提供,或者仅部分提供,kubeadm 将使用默认值; kubeadm 所提供的默认值在必要时也会保证其在多个组件之间是一致的 (例如控制器管理器上的 --cluster-cidr 参数和 kube-proxy 上的 clusterCIDR)。

用户总是可以覆盖默认配置值,唯一的例外是一小部分与安全性相关联的配置 (例如在 API 服务器上强制实施 Node 和 RBAC 鉴权模式)。

如果用户所提供的配置类型并非你所执行的操作需要的,kubeadm 会忽略这些配置类型并打印警告信息。

kubeadm init 配置类型

当带有 --config 选项来执行 kubeadm init 命令时,可以使用下面的配置类型: InitConfigurationClusterConfigurationKubeProxyConfigurationKubeletConfiguration,但 InitConfigurationClusterConfiguration 二者之间取其一即可。

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-apiserverkube-schedulerkube-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 执行所在节点的设置,包括:

  • nodeRegistration:其中包含向集群注册新节点相关的配置字段; 使用这个类型可以定制节点名称、用使用的 CRI 套接字和所有其他仅适用于当前节点的设置 (例如节点 IP 地址)。

  • apiEndpoint:用来代表最终要部署到此节点上的 API 服务器实例的端点。

资源类型

BootstrapToken

出现在:

BootstrapToken 描述的是一个启动引导令牌,以 Secret 的形式存储在集群中。

字段描述
token [必需]
BootstrapTokenString

token 用来在节点与控制平面之间建立双向的信任关系。 在向集群中添加节点时使用。

description
string

description 设置一个对用户友好的信息, 说明为什么此令牌会存在以及其目标用途,这样其他管理员能够知道其目的。

ttl
meta/v1.Duration

ttl 定义此令牌的生命周期。默认为 24hexpiresttl 是互斥的。

expires
meta/v1.Time

expires 设置此令牌过期的时间戳。默认根据 ttl 值在运行时动态设置。 expiresttl 是互斥的。

usages
[]string

usages 描述此令牌的可能使用方式。默认情况下, 令牌可用于建立双向的信任关系;不过这里可以改变默认用途。

groups
[]string

groups 设定此令牌被用于身份认证时对应的附加用户组。

BootstrapTokenString

出现在:

BootstrapTokenString 形式为 abcdef.abcdef0123456789 的一个令牌, 用来从加入集群的节点角度验证 API 服务器的身份,或者 "kubeadm join" 在节点启动引导时作为一种身份认证方法。 此令牌的生命期是短暂的,并且应该如此。

字段描述
- [必需]
string
令牌的 ID。
- [必需]
string
令牌的私密数据。

ClusterConfiguration

ClusterConfiguration 包含一个 kubeadm 集群的集群范围配置信息。

字段描述
apiVersion
string
kubeadm.k8s.io/v1beta4
kind
string
ClusterConfiguration
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
string
kubeadm.k8s.io/v1beta4
kind
string
InitConfiguration
bootstrapTokens
[]BootstrapToken

bootstrapTokenskubeadm 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
string
kubeadm.k8s.io/v1beta4
kind
string
JoinConfiguration
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
string
kubeadm.k8s.io/v1beta4
kind
string
ResetConfiguration
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 设置基于启动引导令牌的服务发现选项。 bootstrapTokenfile 是互斥的。

file
FileDiscovery

file 用来设置一个文件或者 URL 路径,指向一个 kubeconfig 文件; 该配置文件中包含集群信息。 bootstrapTokenfile 是互斥的。

tlsBootstrapToken
string

tlsBootstrapToken 是 TLS 启动引导过程中使用的令牌。 如果设置了 bootstrapToken,则此字段默认值为 .bootstrapToken.token, 不过可以被重载。如果设置了 file,此字段必须被设置,以防 kubeconfig 文件中不包含其他身份认证信息。

timeout
meta/v1.Duration

timeout 用来修改发现过程的超时时长。

Etcd

出现在:

Etcd 包含用来描述 etcd 配置的元素。

字段描述
local
LocalEtcd

local 提供配置本地 etcd 实例的选项。 localexternal 是互斥的。

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

mountPathhostPath 在 Pod 内挂载的路径。

readOnly
bool

readOnly 控制卷的读写访问模式。

pathType
core/v1.HostPathType

pathTypehostPath 的类型。

ImageMeta

出现在:

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 initkubeadm 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" 是一个可选的字符串,用来确定按字母表顺序来应用时,哪个补丁最先被应用。

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 initkubeadm 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

配置文件中必须包含的配置类型列表取决于你在执行的动作(initjoin), 也取决于你要使用的配置选项(默认值或者高级定制)。

如果某些配置类型没有提供,或者仅部分提供,kubeadm 将使用默认值; kubeadm 所提供的默认值在必要时也会保证其在多个组件之间是一致的 (例如控制器管理器上的 --cluster-cidr 参数和 kube-proxy 上的 clusterCIDR)。

用户总是可以重载默认配置值,唯一的例外是一小部分与安全性相关联的配置 (例如在 API 服务器上强制实施 Node 和 RBAC 鉴权模式)。

如果用户所提供的配置类型并非你所执行的操作需要的,kubeadm 会忽略这些配置类型并打印警告信息。

kubeadm init 配置类型

当带有 --config 选项来执行 kubeadm init 命令时,可以使用下面的配置类型: InitConfigurationClusterConfigurationKubeProxyConfigurationKubeletConfiguration, 但 InitConfigurationClusterConfiguration 之间只有一个是必须提供的。

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-apiserverkube-schedulerkube-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 定义此令牌的声明周期。默认为 24hexpiresttl 是互斥的。

expires
meta/v1.Time

expires 设置此令牌过期的时间戳。默认为在运行时基于 ttl 来决定。 expiresttl 是互斥的。

usages
[]string

usages 描述此令牌的可能使用方式。默认情况下, 令牌可用于建立双向的信任关系;不过这里可以改变默认用途。

groups
[]string

groups 设定此令牌被用于身份认证时对应的附加用户组。

BootstrapTokenString

出现在:

BootstrapTokenString 形式为 abcdef.abcdef0123456789 的一个令牌, 用来从加入集群的节点角度验证 API 服务器的身份,或者 "kubeadm join" 在节点启动引导时作为一种身份认证方法。 此令牌的生命期是短暂的,并且应该如此。

字段描述
- [必需]
string
令牌的 ID。
- [必需]
string
令牌的私密数据。

ClusterConfiguration

ClusterConfiguration 包含一个 kubeadm 集群的集群范围配置信息。

字段描述
apiVersion
string
kubeadm.k8s.io/v1beta3
kind
string
ClusterConfiguration
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
string
kubeadm.k8s.io/v1beta3
kind
string
InitConfiguration
bootstrapTokens
[]BootstrapToken

bootstrapTokenskubeadm 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
string
kubeadm.k8s.io/v1beta3
kind
string
JoinConfiguration
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 设置基于启动引导令牌的服务发现选项。 bootstrapTokenfile 是互斥的。

file
FileDiscovery

用来设置一个文件或者 URL 路径,指向一个 kubeconfig 文件;该配置文件中包含集群信息。 bootstrapTokenfile 是互斥的。

tlsBootstrapToken
string

tlsBootstrapToken 是 TLS 启动引导过程中使用的令牌。 如果设置了 bootstrapToken,则此字段默认值为 .bootstrapToken.token,不过可以被重载。 如果设置了 file,此字段必须被设置,以防 kubeconfig 文件中不包含其他身份认证信息。

timeout
meta/v1.Duration

timeout 用来修改发现过程的超时时长。

Etcd

出现在:

Etcd 包含用来描述 etcd 配置的元素。

字段描述
local
LocalEtcd

local 提供配置本地 etcd 实例的选项。localexternal 是互斥的。

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

mountPathhostPath 在 Pod 内挂载的路径。

readOnly
bool

readOnly 控制卷的读写访问模式。

pathType
core/v1.HostPathType

pathTypehostPath 的类型。

ImageMeta

出现在:

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 initkubeadm 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 - Kubelet CredentialProvider (v1)

资源类型

CredentialProviderRequest

CredentialProviderRequest 包含 kubelet 需要通过身份验证才能访问的镜像。 kubelet 将此请求对象通过 stdin 传递到插件。 通常,插件应优先使用所收到的 apiVersion 作出响应。

字段描述
apiVersion
string
credentialprovider.kubelet.k8s.io/v1
kind
string
CredentialProviderRequest
image [必需]
string

image 是作为凭据提供程序插件请求的一部分所拉取的容器镜像。 这些插件可以选择解析镜像以提取获取凭据所需的任何信息。

CredentialProviderResponse

CredentialProviderResponse 中包含 kubelet 应针对原始请求中所给镜像来使用的凭据。 kubelet 将通过 stdout 读取来自插件的响应。 此响应应被设置为与 CredentialProviderRequest 相同的 apiVersion。

字段描述
apiVersion
string
credentialprovider.kubelet.k8s.io/v1
kind
string
CredentialProviderResponse
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.iok8s.*.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 的别名)

出现在:

15 - Kubelet 配置 (v1)

资源类型

CredentialProviderConfig

CredentialProviderConfig 包含有关每个 exec 凭据提供程序的配置信息。 Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供程序。

字段描述
apiVersion
string
kubelet.config.k8s.io/v1
kind
string
CredentialProviderConfig
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
环境变量取值

16 - Kubelet 配置 (v1alpha1)

资源类型

CredentialProviderConfig

CredentialProviderConfig 包含有关每个 exec 凭据提供者的配置信息。 Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供者。

字段描述
apiVersion
string
kubelet.config.k8s.io/v1alpha1
kind
string
CredentialProviderConfig
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.iok8s.*.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
环境变量取值。

17 - Kubelet 配置 (v1beta1)

资源类型

FormatOptions

出现在:

FormatOptions 包含为不同日志格式提供的选项。

字段描述
text [必需]
TextOptions

[Alpha] 文本包含用于记录 "text" 格式的选项。 仅当 LoggingAlphaOptions 特性门控被启用时可用。

json [必需]
JSONOptions

[Alpha] json 包含 "json" 日志格式的选项。 只有 LoggingAlphaOptions 特性门控被启用时才可用。

JSONOptions

出现在:

JSONOptions 包含为 "json" 日志格式提供的选项。

字段描述
OutputRoutingOptions [必需]
OutputRoutingOptions
OutputRoutingOptions 的成员嵌入到此类型中。) 没有提供描述。

LogFormatFactory

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" 格式的选项。

Field描述
OutputRoutingOptions [必需]
OutputRoutingOptions
OutputRoutingOptions 的成员嵌入到此类型中。) 未提供描述。

TimeOrMetaDuration

出现在:

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
string
kubelet.config.k8s.io/v1beta1
kind
string
CredentialProviderConfig
providers [必需]
[]CredentialProvider

providers 是一组凭据提供者插件,这些插件会被 kubelet 启用。 多个提供者可以匹配到同一镜像上,这时,来自所有提供者的凭据信息都会返回给 kubelet。 如果针对同一镜像调用了多个提供者,则结果会被组合起来。如果提供者返回的认证主键有重复, 列表中先出现的提供者所返回的值将被使用。

KubeletConfiguration

KubeletConfiguration 中包含 kubelet 的配置。

字段描述
apiVersion
string
kubelet.config.k8s.io/v1beta1
kind
string
KubeletConfiguration
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 证书,会串接到服务器证书之后)。如果tlsCertFiletlsPrivateKeyFile 都没有设置,则系统会为节点的公开地址生成自签名的证书和私钥, 并将其保存到 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 启用服务器上用来访问日志、 在本地运行容器和命令的端点,包括 execattachlogsportforward 等功能。

默认值:true

enableContentionProfiling
bool

enableContentionProfiling 用于启用阻塞性能分析, 仅用于 enableDebuggingHandlerstrue 的场合。

默认值:false

healthzPort
int32

healthzPort 是本地主机上提供 healthz 端点的端口 (设置值为 0 时表示禁止)。合法值介于 1 和 65535 之间。

默认值:10248

healthzBindAddress
string

healthzBindAddresshealthz 服务器用来提供服务的 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 类,所有 BurstableBestEffort Pod 都会被放置到对应的顶级 QoS 控制组下。

默认值:true

cgroupDriver
string

cgroupDriver 是 kubelet 用来操控宿主系统上控制组(CGroup) 的驱动程序(cgroupfs 或 systemd)。

默认值:"cgroupfs"

cpuManagerPolicy
string

cpuManagerPolicy 是要使用的策略名称。需要启用 CPUManager 特性门控。

默认值:"None"

singleProcessOOMKill
bool

如果 singleProcessOOMKill 为 true,将阻止在 cgroup v2 中为容器 cgroup 设置 memory.oom.group 标志。 这会导致容器中的单个进程因 OOM 被单独杀死,而不是作为一个组被杀死。 这意味着如果为 true,其行为与 cgroup v1 的行为一致。 当你未指定值时,默认值将被自动确定。 在 Windows 这类非 Linux 系统上,仅允许 null(或不设置)。 在 cgroup v1 Linux 上,仅允许 null(或不设置)和 true。 在 cgroup v2 Linux 上,允许 null(或不设置)、true 和 false。默认值为 false。

cpuManagerPolicyOptions
map[string]string

cpuManagerPolicyOptions 是一组 key=value 键值映射, 容许通过额外的选项来精细调整 CPU 管理器策略的行为。需要 CPUManagerCPUManagerPolicyOptions 两个特性门控都被启用。

默认值: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 用来设置除长期运行的请求(pulllogsexecattach)之外所有运行时请求的超时时长。

默认值:"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 意味着没有限制。

默认值:nil

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

默认值: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/tasks/administer-cluster/reserve-compute-resources

默认值:Nil

kubeReserved
map[string]string

kubeReserved 是一组资源名称=资源数量对, 用来描述为 Kubernetes 系统组件预留的资源(例如:'cpu=200m,memory=150G')。 目前支持 CPU、内存和根文件系统的本地存储。 更多细节可参见 https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/reserve-compute-resources

默认值:Nil

reservedSystemCPUs [必需]
string

reservedSystemCPUs 选项设置为宿主级系统线程和 Kubernetes 相关线程所预留的 CPU 列表。此字段提供的是一种“静态”的 CPU 列表,而不是像 systemReservedkubeReserved 所提供的“动态”列表。 此选项不支持 systemReservedCgroupkubeReservedCgroup

showHiddenMetricsForVersion
string

showHiddenMetricsForVersion 是你希望显示隐藏度量值的上一版本。 只有上一个次版本是有意义的,其他值都是不允许的。 字段值的格式为 <major>.<minor>,例如:1.16。 此格式的目的是为了确保在下一个版本中有新的度量值被隐藏时,你有机会注意到这类变化, 而不是当这些度量值在其后的版本中彻底去除时来不及应对。

默认值:""

systemReservedCgroup
string

systemReservedCgroup 帮助 kubelet 识别用来为 OS 系统级守护进程实施 systemReserved 计算资源预留时使用的顶级控制组(CGroup)。 更多细节参阅节点可分配资源

默认值:""

kubeReservedCgroup
string

kubeReservedCgroup 帮助 kubelet 识别用来为 Kubernetes 节点系统级守护进程实施 kubeReserved 计算资源预留时使用的顶级控制组(CGroup)。 更多细节参阅节点可分配资源

默认值:""

enforceNodeAllocatable
[]string

此标志设置 kubelet 需要执行的各类节点可分配资源策略。此字段接受一组选项列表。 可接受的选项有 nonepodssystem-reservedkube-reserved

如果设置了 none,则字段值中不可以包含其他选项。

如果列表中包含 system-reserved,则必须设置 systemReservedCgroup

如果列表中包含 kube-reserved,则必须设置 kubeReservedCgroup

这个字段只有在 cgroupsPerQOS被设置为 true 才被支持。

更多细节参阅节点可分配资源

默认值:["pods"]

allowedUnsafeSysctls
[]string

用逗号分隔的白名单列表,其中包含不安全的 sysctl 或 sysctl 模式(以 * 结尾)。

不安全的 sysctl 组有 kernel.shm*kernel.msg*kernel.semfs.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=30sshutdownGracePeriodCriticalPods=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 特性门控被启用。

shutdownGracePeriodshutdownGracePeriodCriticalPods 被设置时,此配置字段必须为空。

默认值:nil

crashLoopBackOff
CrashLoopBackOffConfig

crashLoopBackOff 包含修改节点级别参数的配置,用于容器重启行为。

reservedMemory
[]MemoryReservation

reservedMemory 给出一个逗号分隔的列表,为 NUMA 节点预留内存。 此参数仅在内存管理器功能特性语境下有意义。内存管理器不会为容器负载分配预留内存。 例如,如果你的 NUMA0 节点内存为 10Gi,reservedMemory 设置为在 NUMA0 上预留 1Gi 内存,内存管理器会认为其上只有 9Gi 内存可供分配。 你可以设置不同数量的 NUMA 节点和内存类型。你也可以完全忽略这个字段,不过你要清楚, 所有 NUMA 节点上预留内存的总量要等于通过 节点可分配资源设置的内存量。 如果至少有一个节点可分配参数设置值非零,则你需要设置至少一个 NUMA 节点。 此外,避免如下设置:

  1. 在配置值中存在重复项,NUMA 节点和内存类型相同,但配置值不同,这是不允许的。
  2. 为任何内存类型设置限制值为零。
  3. NUMA 节点 ID 在宿主系统上不存在。/li>
  4. memoryhugepages-<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 注册自身时要向节点对象添加的污点。只有 registerNodetrue 时才会起作用,并且仅在节点的最初注册时起作用。

默认值: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
string
kubelet.config.k8s.io/v1beta1
kind
string
SerializedNodeConfigSource
source
core/v1.NodeConfigSource

source是我们执行序列化的数据源。

CrashLoopBackOffConfig

出现在:

字段描述
maxContainerRestartPeriod
meta/v1.Duration

maxContainerRestartPeriod 是容器重启时回退延迟可以累积的最长持续时间,最短为 1 秒,最长为 300 秒。 如果不设置,则默认为内部 crashloopbackoff 的最大值(300 秒)。

CredentialProvider

出现在:

CredentialProvider 代表的是要被 kubelet 调用的一个 exec 插件。 这一插件只会在所拉取的镜像与该插件所处理的镜像匹配时才会被调用(参见 matchImages)。

字段描述
name [必需]
string

name 是凭据提供者的名称(必需)。此名称必须与 kubelet 所看到的提供者可执行文件的名称匹配。可执行文件必须位于 kubelet 的 bin 目录(通过 --image-credential-provider-bin-dir 设置)下。

matchImages [必需]
[]string

matchImages 是一个必须设置的字符串列表,用来匹配镜像以便确定是否要调用此提供者。 如果字符串之一与 kubelet 所请求的镜像匹配,则此插件会被调用并给予提供凭证的机会。 镜像应该包含镜像库域名和 URL 路径。

matchImages 中的每个条目都是一个模式字符串,其中可以包含端口号和路径。 域名部分可以包含统配符,但端口或路径部分不可以。通配符可以用作子域名,例如 *.k8s.iok8s.*.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

出现在:

字段描述
x509
KubeletX509Authentication

x509 包含与 x509 客户端证书认证相关的配置。

webhook
KubeletWebhookAuthentication

webhook 包含与 Webhook 持有者令牌认证相关的配置。

anonymous
KubeletAnonymousAuthentication

anonymous 包含与匿名身份认证相关的配置信息。

KubeletAuthorization

出现在:

字段描述
mode
KubeletAuthorizationMode

mode 是应用到 kubelet 服务器所接收到的请求上的鉴权模式。合法值包括 AlwaysAllowWebhook。 Webhook 模式使用 SubjectAccessReview API 来确定鉴权。

webhook
KubeletWebhookAuthorization

webhook包含与 Webhook 鉴权相关的配置信息。

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 节点设置不同类型的内存预留。

字段描述
numaNode [必需]
int32

NUMA 节点

limits [必需]
core/v1.ResourceList

资源列表

MemorySwapConfiguration

出现在:

字段描述
swapBehavior
string

swapBehavior配置容器负载可以使用的交换内存。可以是:

  • ""、"LimitedSwap":工作负载的内存和交换分区总用量不能超过 Pod 的内存限制;
  • "UnlimitedSwap":工作负载可以无限制地使用交换分区,上限是可分配的约束。

ResourceChangeDetectionStrategy

string 类型的别名)

出现在:

ResourceChangeDetectionStrategy 给出的是内部管理器(Secret、ConfigMap) 用来发现对象变化的模式。

ShutdownGracePeriodByPodPriority

出现在:

ShutdownGracePeriodByPodPriority 基于 Pod 关联的优先级类数值来为其设置关闭宽限时间。

字段描述
priority [必需]
int32

priority 是与关闭宽限期限相关联的优先级值。

shutdownGracePeriodSeconds [必需]
int64

shutdownGracePeriodSeconds 是按秒数给出的关闭宽限期限。

18 - WebhookAdmission 配置 (v1)

此 API 的版本是 v1。

资源类型

WebhookAdmission

WebhookAdmission 为 Webhook 准入控制器提供配置信息。

字段描述
apiVersion
string
apiserver.config.k8s.io/v1
kind
string
WebhookAdmission
kubeConfigFile [必需]
string

字段 kubeConfigFile 包含指向 kubeconfig 文件的路径。

19 - 客户端身份认证(Client Authentication) (v1)

资源类型

ExecCredential

ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭据信息。

字段描述
apiVersion
string
client.authentication.k8s.io/v1
kind
string
ExecCredential
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 编码的私钥。

20 - 客户端身份认证(Client Authentication)(v1beta1)

资源类型

ExecCredential

ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭据信息。

字段描述
apiVersion
string
client.authentication.k8s.io/v1beta1
kind
string
ExecCredential
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 编码的私钥。