跳至内容

Cluster 资源

Cluster 资源包含集群本身的规范。

可以在 Cluster 参考页面找到完整键列表。

在本页中,我们将详细介绍更重要的配置键。

可选附加组件的文档可以在 附加组件页面 上找到

api

此对象配置我们如何公开 API

  • dns 将允许直接访问主实例,并配置 DNS 以直接指向主节点。
  • loadBalancer 将在主节点前面配置一个负载均衡器,并将 DNS 配置为指向它。

DNS 示例

spec:
  api:
    dns: {}

在配置负载均衡器时,您还可以选择使用公共负载均衡器或内部 (仅限 VPC) 负载均衡器。type 字段应为 PublicInternal

此外,您可以通过设置 additionalSecurityGroups 将预先创建的附加安全组添加到负载均衡器。

spec:
  api:
    loadBalancer:
      type: Public
      additionalSecurityGroups:
      - sg-xxxxxxxx
      - sg-xxxxxxxx

此外,您可以通过设置其 idleTimeoutSeconds 来增加负载均衡器的空闲超时时间。默认空闲超时时间为 5 分钟,AWS 允许的最大值为 3600 秒 (60 分钟)。请注意,此值对于负载均衡器类别 Network 会被忽略。有关更多信息,请参阅 配置空闲超时时间

spec:
  api:
    loadBalancer:
      type: Public
      idleTimeoutSeconds: 300

您可以使用有效的 SSL 证书为您的 API 服务器负载均衡器。目前,仅支持 AWS。

此外,您可以通过 sslPolicy 更改侦听器的 安全策略。目前,仅支持 AWS 网络负载均衡器。

请注意,当使用 sslCertificate 时,客户端证书身份验证(例如,使用通过 kOps export kubecfg 生成的凭据)将无法通过负载均衡器工作。从 kOps 1.19 开始,可以通过 --internal 标志创建绕过负载均衡器的 kubecfg,用于 kops update clusterkOps export kubecfg。可能需要打开安全组以允许客户端访问主实例的端口 TCP/443,例如,通过使用主实例组上的 additionalSecurityGroups 字段。例如,在使用主实例组上的 additionalSecurityGroups 字段时。

spec:
  api:
    loadBalancer:
      type: Public
      sslCertificate: arn:aws:acm:<region>:<accountId>:certificate/<uuid>
      sslPolicy: ELBSecurityPolicy-TLS-1-2-2017-01

仅限 Openstack 从 kOps 1.12.0 开始,可以通过设置 useForInternalApi: true 在内部使用负载均衡器。这将使 masterPublicName 指向负载均衡器。

spec:
  api:
    loadBalancer:
      type: Internal
      useForInternalApi: true

您还可以将 API 负载均衡器设置为跨区域

spec:
  api:
    loadBalancer:
      crossZoneLoadBalancing: true

负载均衡器类别

仅限 AWS

引入
kOps 1.19

您可以选择使用网络负载均衡器 (NLB) 或经典负载均衡器 (CLB)。class 字段应为 Network(默认)或 Classic(已弃用)。

注意:在现有集群中更改负载均衡器的类别对于控制平面而言是破坏性操作,必须手动删除旧负载均衡器。在主节点完成滚动更新之前,由于旧主节点的 TLS 证书包含旧负载均衡器的 IP 地址,因此对 apiserver 的新连接将失败。

spec:
  api:
    loadBalancer:
      class : Network
      type: Public

负载均衡器子网配置

仅限 AWS

默认情况下,kops 将尝试为每个可用区选择一个合适的子网,并将其用于 API 负载均衡器。根据 type,kops 将从 PrivatePublic 子网中进行选择。如果此默认逻辑不适合您(例如,因为您对子网有更细粒度的分离),则可以显式配置要使用的子网

spec:
  api:
    loadBalancer:
      type: Public
      subnets:
        - name: subnet-a
        - name: subnet-b
        - name: subnet-c
````

It is only allowed to add more subnets and forbidden to remove existing ones. This is due to limitations on AWS
ELBs and NLBs.

If the `type` is `Internal` and the `class` is `Network`, you can also specify a static private IPv4 address per subnet:
```yaml
spec:
  api:
    loadBalancer:
      type: Internal
      subnets:
        - name: subnet-a
          privateIPv4Address: 172.16.1.10

指定的 IPv4 地址必须是子网 CIDR 的一部分。它们在初始部署后不可更改。

如果 typePublicclassNetwork,您还可以指定一个弹性 IP 分配 ID 以按子网绑定一个固定的公共 IP 地址。请注意,仅测试了 IPv4 地址

spec:
  api:
    loadBalancer:
      type: Public
      subnets:
        - name: utility-subnet-a
          allocationId: eipalloc-222ghi789

指定的分配 ID 必须已经通过手动方式或外部基础设施代码(例如 Terraform)创建。您需要将负载均衡器放置在实用程序子网中,以实现外部连接。

如果您犯了错误或需要出于任何其他原因更改子网,目前您被迫手动删除底层的 ELB/NLB 并重新运行 kops update

etcdClusters

默认 etcd 配置

kOps 将默认使用 TLS 默认使用 v3。etcd 配置和升级由 etcd-manager 处理。默认情况下,规范如下所示

etcdClusters:
- etcdMembers:
  - instanceGroup: master0-az0
    name: a-1
  - instanceGroup: master1-az0
    name: a-2
  - instanceGroup: master0-az1
    name: b-1
  name: main
- etcdMembers:
  - instanceGroup: master0-az0
    name: a-1
  - instanceGroup: master1-az0
    name: a-2
  - instanceGroup: master0-az1
    name: b-1
  name: events

kOps 使用的 etcd 版本遵循给定 kubernetes 版本的推荐 etcd 版本。可以通过将 version 键添加到每个 etcd 集群中来覆盖此版本。

默认情况下,为 etcd 集群创建的卷为 gp3,每个卷为 20GB。卷大小、类型 (gp2gp3io1io2)、iops(对于 io1io2gp3)和吞吐量 (gp3) 可以通过其参数配置。

从 kOps 1.12.0 开始,还可以使用 cpuRequestmemoryRequest 参数修改 etcd 集群成员的请求。

etcdClusters:
- etcdMembers:
  - instanceGroup: master-us-east-1a
    name: a
    volumeType: gp3
    volumeSize: 20
  name: main
- etcdMembers:
  - instanceGroup: master-us-east-1a
    name: a
    volumeType: io1
    # WARNING: bear in mind that the Iops to volume size ratio has a maximum of 50 on AWS!
    volumeIops: 100
    volumeSize: 21
  name: events
  cpuRequest: 150m
  memoryRequest: 512Mi

etcd 指标

引入
kOps 1.18

您可以通过定义环境变量来公开 etcd 实例的 /metrics 端点并控制其类型(basicextensive)。

etcdClusters:
- etcdMembers:
  - instanceGroup: master-us-east-1a
    name: a
  name: main
  manager:
    env:
    - name: ETCD_LISTEN_METRICS_URLS
      value: http://0.0.0.0:8081
    - name: ETCD_METRICS
      value: basic

注意:如果您运行多个 etcd 集群,则需要为每个集群在不同的端口上公开指标,因为 etcd 作为服务在主节点上运行。

etcd 备份间隔

引入
kOps 1.24.1

您可以使用 backupInterval 参数设置备份之间的间隔。

etcdClusters:
- etcdMembers:
  - instanceGroup: master-us-east-1a
    name: a
  name: main
  manager:
    backupInterval: 1h

etcd 备份保留

引入
kOps 1.18

从 kOps 1.27 开始,默认 etcd 备份保留时间为 90 天。您可以使用 backupRetentionDays 参数调整保留时间。

etcdClusters:
- etcdMembers:
  - instanceGroup: master-us-east-1a
    name: a
  name: main
  manager:
    backupRetentionDays: 30

对于较旧的 kOps 版本,您可以通过定义环境变量来设置每小时和每天备份的保留时间。

etcdClusters:
- etcdMembers:
  - instanceGroup: master-us-east-1a
    name: a
  name: main
  manager:
    env:
    - name: ETCD_MANAGER_HOURLY_BACKUPS_RETENTION
      value: 7d
    - name: ETCD_MANAGER_DAILY_BACKUPS_RETENTION
      value: 1y

sshAccess

此数组配置了能够 ssh 到节点的 CIDR。在 AWS 上,这体现在 nodesmaster 安全组上的入站安全组规则中。

例如,使用此键将集群访问限制到办公室 IP 地址范围。

spec:
  sshAccess:
    - 12.34.56.78/32
引入
kOps 1.23

在 AWS 上,您可以指定预先存在的 AWS 前缀列表 ID,而不是列出所有 CIDR。

kubernetesApiAccess

此数组配置了能够访问 kubernetes API 的 CIDR。在 AWS 上,这体现在 ELB 或主安全组上的入站安全组规则中。

例如,使用此键将集群访问限制到办公室 IP 地址范围。

spec:
  kubernetesApiAccess:
    - 12.34.56.78/32
引入
kOps 1.23

在 AWS 上,您可以指定预先存在的 AWS 前缀列表 ID,而不是列出所有 CIDR。

cluster.spec 子网键

id

要在一个现有的 VPC 中共享的子网的 ID。

egress

您现有 VPC 中的某个东西的资源标识符 (ID),您希望将其用作对外部世界的“出口”。

此功能最初设想允许重复使用 NAT 网关。在这种情况下,用法如下。尽管 NAT 网关是面向“公共”的资源,但在 Cluster spec 中,您必须在私有子网部分中指定它们。您可以将其理解为,您正在指定“出口”,即从该私有子网出发的默认路由。

spec:
  subnets:
  - cidr: 10.20.64.0/21
    name: us-east-1a
    egress: nat-987654321
    type: Private
    zone: us-east-1a
  - cidr: 10.20.32.0/21
    name: utility-us-east-1a
    id: subnet-12345
    type: Utility
    zone: us-east-1a

如果您不想使用现有的 NAT 网关,但仍然希望使用预分配的弹性 IP,kOps 1.19.0 引入了将弹性 IP 指定为出口的可能性,kOps 将创建一个使用它的 NAT 网关。

spec:
  subnets:
  - cidr: 10.20.64.0/21
    name: us-east-1a
    egress: eipalloc-0123456789abcdef0
    type: Private
    zone: us-east-1a

从 kOps 1.20.0 开始,也支持指定现有的 AWS Transit 网关。

spec:
  subnets:
  - cidr: 10.20.64.0/21
    name: us-east-1a
    egress: tgw-0123456789abcdef0
    type: Private
    zone: us-east-1a

如果您不使用 NAT 网关或互联网网关,kOps 1.12.0 为出口引入了“External”标志,以强制 kOps 忽略子网的出口。当其他工具用于管理子网的出口(例如虚拟私有网关)时,这很有用。请注意,您的集群可能需要在创建时访问互联网,因此在初始化集群时必须提供出口。这旨在用于出口在 kOps 外部进行管理时,通常使用现有集群。

spec:
  subnets:
  - cidr: 10.20.64.0/21
    name: us-east-1a
    egress: External
    type: Private
    zone: us-east-1a

publicIP

您希望附加到 NAT 网关的现有 EIP 的 IP。

spec:
  subnets:
  - cidr: 10.20.64.0/21
    name: us-east-1a
    publicIP: 203.93.148.142
    type: Private
    zone: us-east-1a

additionalRoutes

引入
kOps 1.24

在子网的路由表中添加路由。路由的目标可以是实例、对等连接、NAT 网关、Transit 网关、互联网网关或仅出口互联网网关。目前,只支持 AWS。

spec:
  subnets:
  - cidr: 10.20.64.0/21
    name: us-east-1a
    type: Private
    zone: us-east-1a
    additionalRoutes:
    - cidr: 10.21.0.0/16
      target: vpc-abcdef

kubeAPIServer

此块包含 kube-apiserver 的配置。

Open ID Connect 令牌的 oidc 标志

在此处了解更多信息:https://kubernetes.ac.cn/docs/admin/authentication/#openid-connect-tokens

spec:
  kubeAPIServer:
    oidcIssuerURL: https://your-oidc-provider.svc.cluster.local
    oidcClientID: kubernetes
    oidcUsernameClaim: sub
    oidcUsernamePrefix: "oidc:"
    oidcGroupsClaim: user_roles
    oidcGroupsPrefix: "oidc:"
    oidcCAFile: /etc/kubernetes/ssl/kc-ca.pem
    oidcRequiredClaim:
    - "key=value"

审计日志记录

在此处了解更多信息:https://kubernetes.ac.cn/docs/tasks/debug-application-cluster/audit/

注意:从 kOps 1.26 开始,ControlPlane 作为主实例的角色使用。以前,主角色是 Master。

spec:
  kubeAPIServer:
    auditLogMaxAge: 10
    auditLogMaxBackups: 1
    auditLogMaxSize: 100
    auditLogPath: /var/log/kube-apiserver-audit.log
    auditPolicyFile: /etc/kubernetes/audit/policy-config.yaml
  fileAssets:
  - name: audit-policy-config
    path: /etc/kubernetes/audit/policy-config.yaml
    roles:
    - ControlPlane
    content: |
      apiVersion: audit.k8s.io/v1
      kind: Policy
      rules:
      - level: Metadata

注意:需要 auditPolicyFile。如果省略此标志,则不会记录任何事件。

注意:对于 kOps 1.22-1.24,请使用 auditPolicyFile: /srv/kubernetes/kube-apiserver/audit/policy-config.yaml,因为 挂载路径已更改

您可以使用 fileAssets 功能在主节点上推送高级审计策略文件。

示例策略文件可以在这里找到 这里

审计 Webhook 后端

Webhook 后端将审计事件发送到远程 API,该 API 假设与 kube-apiserver 公开相同的 API。

注意:从 kOps 1.26 开始,ControlPlane 作为主实例的角色使用。以前,主角色是 Master。

spec:
  kubeAPIServer:
    auditWebhookBatchMaxWait: 5s
    auditWebhookConfigFile: /etc/kubernetes/audit/webhook-config.yaml
  fileAssets:
  - name: audit-webhook-config
    path: /etc/kubernetes/audit/webhook-config.yaml
    roles:
    - ControlPlane
    content: |
      apiVersion: v1
      kind: Config
      clusters:
      - name: server
        cluster:
          server: https://my-webhook-receiver
      contexts:
      - context:
          cluster: server
          user: ""
        name: default-context
      current-context: default-context
      preferences: {}
      users: []

注意:还需要审计日志记录配置。如果省略此配置,则不会发送任何事件。

最大飞行请求数

在给定时间内,飞行中的非突变请求的最大数量。当服务器超过此数量时,它会拒绝请求。零表示没有限制。(默认值为 400)

spec:
  kubeAPIServer:
    maxRequestsInflight: 1000

在给定时间内,飞行中的突变请求的最大数量。当服务器超过此数量时,它会拒绝请求。零表示没有限制。(默认值为 200)

spec:
  kubeAPIServer:
    maxMutatingRequestsInflight: 450

请求超时

引入
kOps 1.19

处理程序必须保持请求打开的持续时间,然后再超时,并且可以被其他标志覆盖以用于特定类型的请求。请注意,您必须用零填充空的时间单位。(默认值为 1m0s)

spec:
  kubeAPIServer:
    requestTimeout: 3m0s

分析

引入
kOps 1.18

通过 Web 界面进行分析 host:port/debug/pprof/。(默认:true)

spec:
  kubeAPIServer:
    enableProfiling: false

runtimeConfig

此处的键和值将转换为 kube-apiserver--runtime-config 值,并用逗号分隔。

使用此方法启用 alpha 功能,例如

spec:
  kubeAPIServer:
    runtimeConfig:
      batch/v2alpha1: "true"
      apps/v1alpha1: "true"

将导致标志 --runtime-config=batch/v2alpha1=true,apps/v1alpha1=true。请注意,kube-apiserver 接受 true 作为类似开关标志的值。

serviceNodePortRange

此值作为 kube-apiserver--service-node-port-range 传递。

spec:
  kubeAPIServer:
    serviceNodePortRange: 30000-33000

自定义 client-ca 文件

此值作为 kube-apiserver--client-ca-file 传递。(默认:/srv/kubernetes/ca.crt

spec:
  kubeAPIServer:
    clientCAFile: /srv/kubernetes/client-ca.crt
在某些情况下,用户可能希望使用自定义的 client CA 文件,而不是为 Kubernetes 生成的默认文件。在这种情况下,用户可以使用此标志指定要使用的 client-ca 文件。

要准备主节点上的自定义 client-ca 文件,用户可以使用 fileAssets 功能推送 client-ca 文件,或者将自定义的 client-ca 文件嵌入到主 AMI 中。

如果用户使用自定义的 client-ca 文件,则通常需要将 kubernetes CA (/srv/kubernetes/ca/crt) 附加到 client-ca 文件的末尾。将 ca.crt 附加到自定义 client-ca 文件末尾的一种方法是编写一个 kop-hook 来执行附加逻辑。

Kops 有一个 CA 旋转 功能,它会刷新 Kubernetes 证书文件,包括 ca.crt。如果使用自定义的 client-ca 文件,当 kOps 证书旋转发生时,用户负责更新自定义 client-ca 文件中的 ca.crt。刷新 ca.crt 逻辑也可以通过编写 kops hook 来实现。

另请参阅 Kubernetes 证书

禁用基本身份验证

Kubernetes 1.19 中删除了对基本身份验证的支持。对于以前的 Kubernetes 版本,这将禁用在

spec:
  kubeAPIServer:
    disableBasicAuth: true

targetRamMb

API 服务器的内存限制(以 MB 为单位)(用于配置缓存大小等)。

spec:
  kubeAPIServer:
    targetRamMb: 4096

eventTTL

API 服务器保留事件的时长。请注意,您必须用零填充空的时间单位。

spec:
  kubeAPIServer:
    eventTTL: 03h0m0s

基于污点的驱逐

与基于污点的驱逐相关的参数有两个。这些参数指示 notReady:NoExecuteunreachable:NoExecutetolerationSeconds 的默认值。

spec:
  kubeAPIServer:
    defaultNotReadyTolerationSeconds: 600
    defaultUnreachableTolerationSeconds: 600

LogFormat

在日志格式之间进行选择。允许的格式:“json”、“text”。默认:”text”。

spec:
  kubeAPIServer:
    logFormat: json

externalDns

此块包含 external-DNS 提供程序的配置选项。

spec:
  externalDns:
    watchIngress: true

默认的 kOps 行为为 false。watchIngress: true 使用默认的 dns-controller 行为,该行为是监视 Ingress 控制器以进行更改。在某些情况下,设置此选项有可能会中断服务更新。

默认的 external-DNS 提供程序是 kOps dns-controller

您可以通过添加以下内容,将 external-dns 用作提供程序。

spec:
  externalDns:
    provider: external-dns

请注意,如果您安装了 dns-controller,则需要在使用新配置更新集群之前删除此部署。

kubelet

此块包含 kubelet 的配置。请参阅 https://kubernetes.ac.cn/docs/admin/kubelet/

注意:如果相应的配置值可以为空,则可以在 spec 中将字段设置为为空,并将空字符串作为配置值传递。yaml spec: kubelet: resolvConf: ""

将导致构建标志 --resolv-conf=

禁用 CPU CFS 配额

要禁用对指定 CPU 限制的容器的 CPU CFS 配额强制执行(默认值为 true),我们必须在所有 kubelet 上将标志 --cpu-cfs-quota 设置为 false。我们可以在 kubelet spec 中的 cluster.yml 中指定它。

spec:
  kubelet:
    cpuCFSQuota: false

配置 CPU CFS 周期

配置 CPU CFS 配额周期值 (cpu.cfs_period_us)。示例

spec:
  kubelet:
    cpuCFSQuotaPeriod: "100ms"

此更改需要 CustomCPUCFSQuotaPeriod 功能网关

启用自定义指标支持

要在 kubernetes 中使用自定义指标,如 自定义指标文档 所述,我们必须在所有 kubelet 上将标志 --enable-custom-metrics 设置为 true。我们可以在 kubelet spec 中的 cluster.yml 中指定它。

spec:
  kubelet:
    enableCustomMetrics: true

设置 kubelet CPU 管理策略

kOps 1.12.0 添加了对在 kubernetes 中启用 CPU 管理策略的支持,如 CPU 管理文档 所述,我们必须在所有 kubelet 上将标志 --cpu-manager-policy 设置为适当的值。这必须在 kubelet spec 中的 cluster.yml 中指定。

spec:
  kubelet:
    cpuManagerPolicy: static

将 kubelet 配置与 Amazon VPC 后端一起设置

将 kubelet 配置与网络 Amazon VPC 后端一起设置需要在该块中也设置 cloudProvider: aws 设置。示例

spec:
  kubelet:
    enableCustomMetrics: true
    cloudProvider: aws
...
...
  cloudProvider: aws
...
...
  networking:
    amazonvpc: {}

配置 Flex Volume 插件目录

可以在 KubeletSpec 中提供一个可选的标志来设置卷插件目录(必须可用于读写操作),该目录还会附加到 Controller Manager 并在其中挂载。

kOps 将根据使用的操作系统为您设置它:- ContainerOS:/home/kubernetes/flexvolume/ - Flatcar:/var/lib/kubelet/volumeplugins/ - 默认(与上游 k8s 一致):/usr/libexec/kubernetes/kubelet-plugins/volume/exec/

如果您希望覆盖此值,可以通过对 kubelet spec 添加以下内容来实现。

spec:
  kubelet:
    volumePluginDirectory: /provide/a/writable/path/here

保护内核默认值

引入 最小 K8s 版本
kOps 1.18 k8s 1.4

内核调优的默认 kubelet 行为。如果设置,如果任何内核可调参数与 kubelet 默认值不同,kubelet 将会报错。

spec:
  kubelet:
    protectKernelDefaults: true

清理间隔

引入 最小 K8s 版本
kOps 1.19 k8s 1.2

容器清理之间的间隔默认为 10s。这对于某些用例来说可能太小或太大,可以通过以下添加到 kubelet 规范的方式修改。

spec:
  kubelet:
    housekeepingInterval: 30s

Pod PID 限制

引入 最小 K8s 版本
kOps 1.22 k8s 1.20

podPidsLimit 允许配置任何 Pod 中最大的 PID(进程 ID)数量。在 Kubernetes 文档中了解更多

spec:
  kubelet:
    podPidsLimit: 1024

事件 QPS

引入
kOps 1.19

kubelet 中每秒事件创建的限制。默认值为 0,表示无限制的事件创建。

spec:
  kubelet:
    eventQPS: 0

事件突发

引入
kOps 1.19

突发事件记录的最大大小,暂时允许事件记录突发到这个数量,但仍然不超过 EventQPS。仅当 EventQPS > 0 时使用。

spec:
  kubelet:
    eventBurst: 10

日志格式

在日志格式之间进行选择。允许的格式:“json”、“text”。默认:”text”。

spec:
  kubelet:
    logFormat: json

优雅节点关闭

引入 最小 K8s 版本
kOps 1.23 k8s 1.21

优雅节点关闭允许 kubelet 阻止实例关闭,直到 Pod 安全地终止或超时。

对于除 amazonaws 之外的所有 CNI,kOps 将尝试添加一个 30 秒的超时时间,其中前 20 秒保留给普通 Pod,最后 10 秒保留给关键 Pod。在使用 amazonaws 时,此功能被禁用,因为它会导致ENI 泄漏

此配置可以如下更改

spec:
  kubelet:
    shutdownGracePeriod: 60s
    shutdownGracePeriodCriticalPods: 20s

注意,Kubelet 无法在 logind 配置了低于 shutdownGracePeriodInhibitDelayMaxSeconds 的系统上安装关闭抑制器。在 Ubuntu 上,此设置是 30 秒。

Seccomp 默认值

SeccompDefault 允许对所有工作负载使用 RuntimeDefault 作为默认的 seccomp 配置文件。(默认:false)

注意,启用该功能需要一个特性门,该功能是使用 kubelet 配置开启的。

spec:
  kubelet:
    featureGates:
      SeccompDefault: "true"
    seccompDefault: true

kubeScheduler

此块包含 kube-scheduler 的配置。请参见 https://kubernetes.ac.cn/docs/admin/kube-scheduler/

spec:
  kubeScheduler:
    usePolicyConfigMap: true
    enableProfiling: false

将使 kube-scheduler 使用 kube-system 命名空间中 configmap "scheduler-policy" 中的调度程序策略。

日志格式

在日志格式之间进行选择。允许的格式:“json”、“text”。默认:”text”。

spec:
  kubeScheduler:
    logFormat: json

kubeDNS

此块包含 CoreDNS 的配置。

对于 Kubernetes 版本 >= 1.20,CoreDNS 将被安装为默认 DNS 服务器。

 spec:
   kubeDNS:
     provider: CoreDNS
或者

spec:
   kubeDNS:

指定 KubeDNS 将安装 kube-dns 作为默认的服务发现,而不是 CoreDNS

 spec:
   kubeDNS:
     provider: KubeDNS

如果您使用 CoreDNS 并想使用完全自定义的 CoreFile,可以通过指定文件来实现。这将不适用于与默认 CoreFile 交互的任何其他选项。您还可以覆盖用于使用不同注册表或版本的 CoreDNS 镜像的版本,方法是指定 CoreDNSImage

注意:如果您使用此功能,则需要格外注意 CoreDNS 版本的变化,以便了解正在使用的插件的功能变化等。

spec:
  kubeDNS:
    provider: CoreDNS
    coreDNSImage: mirror.registry.local/mirrors/coredns:1.3.1
    externalCoreFile: |
      amazonaws.com:53 {
            errors
            log . {
                class denial error
            }
            health :8084
            prometheus :9153
            proxy . 169.254.169.253 {
            }
            cache 30
        }
        .:53 {
            errors
            health :8080
            autopath @kubernetes
            kubernetes cluster.local {
                pods verified
                upstream 169.254.169.253
                fallthrough in-addr.arpa ip6.arpa
            }
            prometheus :9153
            proxy . 169.254.169.253
            cache 300
        }

注意:如果您正在升级到 CoreDNS,kube-dns 将保留在原位,必须手动删除。您可以将 kube-system 命名空间中的 kube-dns 和 kube-dns-autoscaler 部署缩放到 0 作为起点,然后删除这两个部署。kube-dns 服务本身应保留在原位,因为这会保留 ClusterIP 并消除集群中出现 DNS 故障的可能性。

对于更大的集群,您可能需要设置自定义资源请求和限制。对于 CoreDNS 提供程序,您可以设置

  • 内存限制
  • CPU 请求
  • 内存请求

这将覆盖内存的默认限制值为 170Mi,内存和 CPU 的默认请求值分别为 70Mi 和 100m。

示例

  kubeDNS:
    memoryLimit: 2Gi
    cpuRequest: 300m
    memoryRequest: 700Mi

kubeControllerManager

此块包含 controller-manager 的配置。

spec:
  kubeControllerManager:
    horizontalPodAutoscalerSyncPeriod: 15s
    horizontalPodAutoscalerDownscaleDelay: 5m0s
    horizontalPodAutoscalerDownscaleStabilization: 5m
    horizontalPodAutoscalerUpscaleDelay: 3m0s
    horizontalPodAutoscalerInitialReadinessDelay: 30s
    horizontalPodAutoscalerCpuInitializationPeriod: 5m
    horizontalPodAutoscalerTolerance: 0.1
    experimentalClusterSigningDuration: 8760h0m0s
    enableProfiling: false

有关 horizontalPodAutoscaler 标志的更多详细信息,请参见 官方 HPA 文档kOps 设置指南

日志格式

在日志格式之间进行选择。允许的格式:“json”、“text”。默认:”text”。

spec:
  kubeControllerManager:
    logFormat: json

特性门

特性门可以在 kubelet 上配置。

spec:
  kubelet:
    featureGates:
      Accelerators: "true"
      AllowExtTrafficLocalEndpoints: "false"

以上操作将导致将标志 --feature-gates=Accelerators=true,AllowExtTrafficLocalEndpoints=false 添加到 kubelet。

某些特性门还需要其他组件上的 featureGates 设置。例如,PodShareProcessNamespace 需要在 API 服务器上也启用特性门

spec:
  kubelet:
    featureGates:
      PodShareProcessNamespace: "true"
  kubeAPIServer:
    featureGates:
      PodShareProcessNamespace: "true"

有关更多信息,请参见 特性门文档

计算资源预留

在节点具有 32Gi 内存、16 个 CPU 和 100Gi 瞬时存储的场景中,资源预留可以按照以下示例设置

spec:
  kubelet:
    kubeReserved:
        cpu: "1"
        memory: "2Gi"
        ephemeral-storage: "1Gi"
    kubeReservedCgroup: "/kube-reserved"
    kubeletCgroups: "/kube-reserved"
    runtimeCgroups: "/kube-reserved"
    systemReserved:
        cpu: "500m"
        memory: "1Gi"
        ephemeral-storage: "1Gi"
    systemReservedCgroup: "/system-reserved"
    enforceNodeAllocatable: "pods,system-reserved,kube-reserved"

以上操作将导致将标志 --kube-reserved=cpu=1,memory=2Gi,ephemeral-storage=1Gi --kube-reserved-cgroup=/kube-reserved --kubelet-cgroups=/kube-reserved --runtime-cgroups=/kube-reserved --system-reserved=cpu=500m,memory=1Gi,ephemeral-storage=1Gi --system-reserved-cgroup=/system-reserved --enforce-node-allocatable=pods,system-reserved,kube-reserved 添加到 kubelet。

了解有关预留计算资源的更多信息 此处此处

networkID

在 AWS 上,这是创建集群所在的 VPC 的 ID。如果从头开始创建集群,则不需要在创建时指定此字段;kops 将为您创建一个 VPC

spec:
  networkID: vpc-abcdefg1

有关在现有 VPC 中运行的更多信息,请参见此处

钩子

钩子允许在集群中每个节点上安装 Kubernetes 之前执行操作。例如,您可以安装 Nvidia 驱动程序以使用 GPU。这些钩子可以是容器镜像或清单文件(systemd 单位)的形式。钩子可以放置在集群规范中,这意味着它们将在全局部署,或者可以放置在实例组规范中。注意:实例组上的服务名称与集群规范重叠将优先使用,并忽略集群规范定义,即,如果您在集群中有单元文件 'myunit.service',然后在实例组中有一个,则只应用实例组。

当使用 manifest 字段创建 systemd 单位钩子时,钩子系统将为您构建一个 systemd 单位文件。它创建 [Unit] 部分,添加自动描述并根据 beforerequires 字段设置 BeforeRequires 值。manifest 字段的值用作单元文件的 [Service] 部分。要覆盖此行为,并改为自行指定整个单元文件,您可以指定 useRawManifest: true。在这种情况下,manifest 字段的内容将用作 systemd 单位,不会修改。beforerequires 字段不能与 useRawManifest 一起使用。

spec:
  # many sections removed

  # run a container as a hook
  hooks:
  - before:
    - some_service.service
    requires:
    - docker.service
    execContainer:
      image: kopeio/nvidia-bootstrap:1.6
      # these are added as -e to the docker environment
      environment:
        AWS_REGION: eu-west-1
        SOME_VAR: SOME_VALUE

  # or construct a systemd unit
  hooks:
  - name: iptable-restore.service
    roles:
    - Node
    - Master
    before:
    - kubelet.service
    manifest: |
      EnvironmentFile=/etc/environment
      # do some stuff

  # or use a raw systemd unit
  hooks:
  - name: iptable-restore.service
    roles:
    - Node
    - Master
    useRawManifest: true
    manifest: |
      [Unit]
      Description=Restore iptables rules
      Before=kubelet.service
      [Service]
      EnvironmentFile=/etc/environment
      # do some stuff

  # or disable a systemd unit
  hooks:
  - name: update-engine.service
    disabled: true

  # or you could wrap this into a full unit
  hooks:
  - name: disable-update-engine.service
    before:
    - update-engine.service
    manifest: |
      Type=oneshot
      ExecStart=/usr/bin/systemctl stop update-engine.service

安装 Ceph

spec:
  # many sections removed
  hooks:
  - execContainer:
      command:
      - sh
      - -c
      - chroot /rootfs apt-get update && chroot /rootfs apt-get install -y ceph-common
      image: busybox

安装 cachefilesd

spec:
  # many sections removed
  hooks:
  - before:
    - kubelet.service
    manifest: |
      Type=oneshot
      ExecStart=/sbin/modprobe cachefiles
    name: cachefiles.service
  - execContainer:
      command:
      - sh
      - -c
      - chroot /rootfs apt-get update && chroot /rootfs apt-get install -y cachefilesd
        && chroot /rootfs sed -i s/#RUN/RUN/ /etc/default/cachefilesd && chroot /rootfs
        service cachefilesd restart
      image: busybox

文件资产

FileAssets 允许您将内联文件内容放置在集群和 实例组 规范中。这对于部署 Kubernetes 组件所需的附加文件很有用,例如审计日志记录或准入控制器配置。

spec:
  fileAssets:
  - name: iptable-restore
    # Note if path is not specified, the default is /srv/kubernetes/assets/<name>
    path: /var/lib/iptables/rules-save
    # Note if roles are not specified, the default is all roles. As of kOps 1.26, ControlPlane is being used as a role for the master instances. Previously, the master role was Master.
    roles: [ControlPlane,Node,Bastion] # a list of roles to apply the asset to
    content: |
      some file content

模式

引入
kOps 1.24

可选地,mode 允许您指定文件的模式和权限位。

注意:如果未指定,则默认为 "0440",这与 kOps 的旧版本的行为相匹配。

spec:
  fileAssets:
  - name: my-script
    path: /usr/local/bin/my-script
    mode: "0550"
    content: |
      #! /usr/bin/env bash
      ...

云配置

disableSecurityGroupIngress

如果您使用 aws 作为 cloudProvider,则可以禁用 ELB 安全组对 Kubernetes 节点安全组的授权。换句话说,它不会添加安全组规则。这对于避免 AWS 限制很有用:每个安全组 50 条规则。

spec:
  cloudConfig:
    disableSecurityGroupIngress: true

elbSecurityGroup

为了避免为每个 elb 创建安全组,您可以指定安全组 ID,该 ID 将分配给您的负载均衡器。它必须是安全组 ID,而不是名称。api.loadBalancer.additionalSecurityGroups 必须为空,因为 Kubernetes 将根据服务文件中指定的端口添加规则。这对于避免 AWS 限制很有用:每个区域 500 个安全组,每个安全组 50 条规则。

spec:
  cloudConfig:
    elbSecurityGroup: sg-123445678

manageStorageClasses

引入
kOps 1.20

默认情况下,kops 将使用某些特定于安装集群的云提供商的意见性设置创建 StorageClass 资源。其中一个存储类将被定义为默认值,应用注释 storageclass.kubernetes.io/is-default-class: "true"。这可能并不总是理想的行为,一些集群管理员更愿意对存储类有更多控制,并在 kops 之外管理它们。当设置为 false 时,kOps 将不再创建任何 StorageClass 对象。kops 在过去创建的任何此类对象将保留原样,kops 不会再根据未来的更改对它们进行协调。

现有的 spec.cloudConfig.openstack.blockStorage.createStorageClass 字段仍然保留。但是,如果这两个字段(该字段和新的 spec.cloudConfig.manageStorageClasses 字段)都被填充,则它们必须一致:全局禁用 StorageClass 对象的管理但为 OpenStack 启用它们,以及全局启用管理但为 OpenStack 禁用它们,这两种情况都是无效的。

spec:
  cloudConfig:
    manageStorageClasses: false

containerRuntime

引入 最小 K8s 版本
kOps 1.18 k8s 1.11

从 Kubernetes 1.20 开始,默认的 容器运行时 是 containerd。以前,默认的容器运行时是 Docker。

Docker 仍然可以在 Kubernetes 1.20+ 中用作容器运行时,但请注意,Kubernetes 正在弃用对其的支持,并将从 Kubernetes 1.22 中删除。

spec:
  containerRuntime: containerd

containerd

配置

可以覆盖集群中所有节点的 containerd 守护进程选项。请参见 API 文档,了解完整的选项列表。覆盖 containerd 的配置必须谨慎进行,因为默认配置可能会随着新版本的发布而更改,并可能导致不兼容性。

spec:
  containerd:
    version: 1.4.4
    logLevel: info
    configOverride: ""

自定义包

kOps 使用 .tar.gz 包在任何支持的操作系统上安装 containerd。通过指定其 URL 和 sha256,这使得使用自定义构建或预发布包变得容易。

spec:
  containerd:
    packages:
      urlAmd64: https://github.com/containerd/containerd/releases/download/v1.4.4/cri-containerd-cni-1.4.4-linux-amd64.tar.gz
      hashAmd64: 96641849cb78a0a119223a427dfdc1ade88412ef791a14193212c8c8e29d447b

自定义包的格式必须与官方包相同

tar tf cri-containerd-cni-1.4.4-linux-amd64.tar.gz
    usr/local/bin/containerd
    usr/local/bin/containerd-shim
    usr/local/bin/containerd-shim-runc-v1
    usr/local/bin/containerd-shim-runc-v2
    usr/local/bin/crictl
    usr/local/bin/critest
    usr/local/bin/ctr
    usr/local/sbin/runc

Runc 版本和包

引入
kOps 1.24.2

kOps 使用来自 https://github.com/opencontainers/runc 的二进制文件在任何支持的操作系统上安装 runc。这使得指定所需的发布版本变得容易。

spec:
  containerd:
    runc:
      version: 1.1.2

它还允许使用比 kOps 二进制文件更新的版本、预发布包,甚至自定义构建,方法是指定其 URL 和 sha256。

spec:
  containerd:
    runc:
      version: 1.100.0
      packages:
        urlAmd64: https://cdn.example.com/k8s/runc/releases/download/v1.100.0/runc.amd64
        hashAmd64: ab1c67fbcbdddbe481e48a55cf0ef9a86b38b166b5079e0010737fd87d7454bb

注册表镜像

引入
kOps 1.19

如果您运行多个实例,每次实例拉取主机上不存在的镜像时,它都会从互联网获取。通过缓存这些镜像,您可以将流量保留在本地网络内,避免出口带宽使用。

有关更多信息,请参阅 镜像仓库 文档。

spec:
  containerd:
    registryMirrors:
      docker.io:
      - https://registry-1.docker.io
      "*":
      - http://HostIP2:Port2

NRI 配置

使用 kOps,您可以在 containerd 中激活 节点资源接口 (NRI) 功能。重要的是,您至少需要 1.7.0 或更高版本的 containerd。kOps 中可用的 containerd NRI 参数包括:enabledpluginRegistrationTimeoutpluginRequestTimeout。默认情况下,kOps 中的 NRI 选项未设置,这意味着我们依赖 containerd 的默认行为(即禁用)。

spec:
  containerd:
    version: 1.7.0
    nri:
      # Enable NRI support in containerd.
      enabled: true
      # pluginRegistrationTimeout is the timeout for a plugin to register after connection.
      pluginRegistrationTimeout: "5s"
      # pluginRequestTimeout is the timeout for a plugin to handle an event/request.
      pluginRequestTimeout: "2s"

如果您禁用了 NRI(即 nri.enabled = false),请注意 pluginRegistrationTimeoutpluginRequestTimeout 的设置将不会生效。这些设置仅在启用 NRI 时适用。启用 NRI 而不为 pluginRegistrationTimeoutpluginRequestTimeout 指定自定义值是有效的配置,因为这些字段将继承 containerd 的默认值。如果您需要配置其他 NRI 参数,可以使用 configOverride 提供完整的 containerd 配置。

sshKeyName

在某些情况下,您可能希望使用现有的 AWS SSH 密钥,而不是允许 kOps 创建新的密钥。提供 AWS 中已存在的密钥的名称是 --ssh-public-key 的替代方法。

spec:
  sshKeyName: myexistingkey

如果您想在没有 SSH 密钥的情况下创建实例,可以将其设置为一个空字符串。

spec:
  sshKeyName: ""

useHostCertificates

指向云 API 的自签名证书。在某些情况下,云 API 确实具有自签名证书。

spec:
  useHostCertificates: true

可选步骤:将根证书添加到实例组的根 CA 捆绑包

  additionalUserData:
  - name: cacert.sh
    type: text/x-shellscript
    content: |
      #!/bin/sh
      cat > /usr/local/share/ca-certificates/mycert.crt <<EOF
      -----BEGIN CERTIFICATE-----
snip
      -----END CERTIFICATE-----
      EOF
      update-ca-certificates

注意update-ca-certificates 是 debian/ubuntu 的命令。该命令根据您的操作系统而不同。

target

在某些用例中,您可能希望使用额外选项来增强目标输出。target 支持您可以使用的一小部分选项。目前只有 Terraform 目标支持此功能,但如果出现其他用例,kOps 最终可能会支持更多。

spec:
  target:
    terraform:
      providerExtraConfig:
        alias: foo

assets

Assets 定义了检索静态文件和容器的备用位置。

containerRegistry

容器仓库使 kOps/Kubernetes 能够从托管仓库拉取容器。当无法从互联网拉取容器时,这很有用,例如,因为部署是离线/受互联网限制,或者因为部署的工件有特殊要求,例如,容器的审计。

有关用例示例,请参阅 如何在 AWS 中国区域使用 kOps

spec:
  assets:
    containerRegistry: example.com/registry

containerProxy

容器代理旨在充当 拉取通过缓存 用于 Docker 容器资产。基本上,它的作用是重新映射 Kubernetes 镜像 URL 以指向您的缓存,以便 Docker 守护程序将从该位置拉取镜像。例如,如果将 containerProxy 设置为 proxy.example.com,则将从 proxy.example.com/kube-apiserver 而不是 k8s.gcr.io/kube-apiserver 拉取镜像 k8s.gcr.io/kube-apiserver。请注意,您使用的代理必须支持此功能才能用于私有仓库。

spec:
  assets:
    containerProxy: proxy.example.com

sysctlParameters

引入
kOps 1.17

要将自定义内核运行时参数添加到群集中的所有实例组,请将 sysctlParameters 字段指定为字符串数组。每个字符串必须采用 variable=value 的形式,就像它在 sysctl.conf 中出现一样(另请参阅 sysctl(8) 手册页)。

您也可以在 实例组 上使用 sysctlParameters 字段,为每个实例组指定不同的参数。

与简单的文件资产不同,以这种方式指定内核运行时参数将自动正确调用 sysctl --system 以便您应用这些参数。

例如

spec:
  sysctlParameters:
    - fs.pipe-user-pages-soft=524288
    - net.ipv4.tcp_keepalive_time=200

最终将在群集的所有主节点和节点上的一个 drop-in 文件中显示。

cgroupDriver

从 Kubernetes 1.20 开始,kOps 将默认将 kubelet 和容器运行时的 cgroup 驱动程序设置为使用 systemd 作为默认的 cgroup 驱动程序,而不是 cgroup fs。

确保 kubelet 和容器运行时使用相同的 cgroup 驱动程序非常重要。以下是一些示例,展示了如何设置 kubelet 和容器运行时的 cgroup 驱动程序。

将 kubelet 设置为使用 cgroupfs

spec:
  kubelet:
    cgroupDriver: cgroupfs

将 Docker 设置为使用 cgroupfs

spec:
  docker:
    execOpt:
      - native.cgroupdriver=cgroupfs

在 containerd 的情况下,cgroup-driver 依赖于 kubelet 的 cgroup 驱动程序。要使用 cgroupfs,只需更新 kubelet 的 cgroupDriver 以使用 cgroupfs 即可。

NTP

可以通过将 managed 设置为 false 来跳过 NTP 的安装和配置。

spec:
  ntp:
    managed: false

服务帐户发行者发现和适用于服务帐户的 AWS IAM 角色 (IRSA)

引入
kOps 1.21

警告:在现有群集上启用以下配置可能会造成中断,因为控制平面会使用不同的发行者配置服务帐户预配令牌。症状是 Pod 无法对 Kubernetes API 进行身份验证。要解决此问题,请删除群集中存在的服务帐户令牌密钥,并杀死所有无法进行身份验证的 Pod。

注意:您可以按照 此处 文档中所述的步骤的变体来在现有群集上启用 IRSA,而不会造成中断。

kOps 可以发布 Kubernetes 服务帐户令牌发行者,并配置 AWS 以信任它来对 Kubernetes 服务帐户进行身份验证

spec:
  serviceAccountIssuerDiscovery:
    discoveryStore: s3://publicly-readable-store
    enableAWSOIDCProvider: true

discoveryStore 选项会导致 kOps 将与 OIDC 兼容的发现文档发布到对象存储桶(例如 S3 或 GCS)中的路径。这通常与状态存储桶不同。kOps 将自动配置 spec.kubeAPIServer.serviceAccountIssuer,并将默认的 spec.kubeAPIServer.serviceAccountJWKSURI 设置为相应的 HTTPS URL。

enableAWSOIDCProvider 会配置 AWS 以信任服务帐户发行者来对适用于服务帐户的 IAM 角色 (IRSA) 的服务帐户进行身份验证。为了使此功能正常工作,服务帐户发行者发现 URL 必须是公开可读的。

附加组件的 IAM 角色

大多数与 AWS API 交互的 kOps 附加组件可以使用专用的 IAM 角色。要启用此功能,请添加以下内容

spec:
  iam:
    useServiceAccountExternalPermissions: true

用户管理的服务帐户的 IAM 角色

kOps 可以预配 AWS 权限供任意服务帐户使用

spec:
  iam:
    serviceAccountExternalPermissions:
      - name: someServiceAccount
        namespace: someNamespace
        aws:
          policyARNs:
            - arn:aws:iam::000000000000:policy/somePolicy
      - name: anotherServiceAccount
        namespace: anotherNamespace
        aws:
          inlinePolicy: |-
            [
              {
                "Effect": "Allow",
                "Action": "s3:ListAllMyBuckets",
                "Resource": "*"
              }
            ]

要配置 Pod 以假定给定的 IAM 角色,请启用 Pod 身份 Webhook。没有此 Webhook,您需要自己修改 Pod 规范,以便您的 Pod 假定定义的角色。

API 更改

kOps 正在更新 v1alpha2 API 到一个更新的版本。该新 API 仍在开发中,但 API 的内部形式和验证错误消息使用新的字段名。下表跟踪了这些更改,不包括不再使用的字段的删除。

v1alpha2 字段 新字段
additionalNetworkCIDRs networking.additionalNetworkCIDRs
additionalSans api.additionalSANs
api.loadBalancer.subnets.allocationId api.loadBalancer.subnets.allocationID
api.loadBalancer.useForInternalApi api.loadBalancer.useForInternalAPI
awsLoadBalancerController cloudProvider.aws.loadBalancerController
cloudConfig.awsEBSCSIDriver cloudProvider.aws.ebsCSIDriver
cloudConfig.azure cloudProvider.azure
cloudConfig.azure.subscriptionId cloudProvider.azure.subscriptionID
cloudConfig.azure.tenantId cloudProvider.azure.tenantID
cloudConfig.gcpPDCSIDriver cloudProvider.gce.pdCSIDriver
cloudConfig.disableSecurityGroupIngress cloudProvider.aws.disableSecurityGroupIngress
cloudConfig.elbSecurityGroup cloudProvider.aws.elbSecurityGroup
cloudConfig.gceServiceAccount cloudProvider.gce.serviceAccount
cloudConfig.nodeIPFamilies cloudProvider.aws.nodeIPFamilies
cloudConfig.openstack cloudProvider.openstack
cloudConfig.spotinstOrientation cloudProvider.aws.spotinstOrientation
cloudConfig.spotinstProduct cloudProvider.aws.spotinstProduct
cloudProvider (string) cloudProvider (map)
configBase configStore.base
DisableSubnetTags tagSubnets (值反转)
egressProxy networking.egressProxy
etcdClusters[*].etcdMembers[*].kmsKeyId etcdClusters[*].etcdMembers[*].kmsKeyID
etcdClusters[*].etcdMembers[*].volumeIops etcdClusters[*].etcdMembers[*].volumeIOPS
externalDns externalDNS
externalDns.disable: true externalDNS.provider: none
hooks[*].disabled hooks[*].enabled (值反转)
isolateMasters networking.isolateControlPlane
keyStore configStore.keypairs
kubeAPIServer.authorizationRbacSuperUser kubeAPIServer.authorizationRBACSuperUser
kubeAPIServer.authorizationWebhookCacheAuthorizedTtl kubeAPIServer.authorizationWebhookCacheAuthorizedTTL
kubeAPIServer.authorizationWebhookCacheUnauthorizedTtl kubeAPIServer.authorizationWebhookCacheUnauthorizedTTL
kubeAPIServer.etcdCaFile kubeAPIServer.etcdCAFile
kubeAPIServer.oidcClientID authentication.oidc.clientID
kubeAPIServer.oidcGroupsPrefix authentication.oidc.groupsPrefix
kubeAPIServer.oidcIssuerURL authentication.oidc.issuerURL
kubeAPIServer.oidcRequiredClaim (list) authentication.oidc.oidcRequiredClaims (map)
kubeAPIServer.oidcUsernameClaim authentication.oidc.usernameClaim
kubeAPIServer.oidcUsernamePrefix authentication.oidc.usernamePrefix
kubeAPIServer.targetRamMb kubeAPIServer.targetRamMB
kubeControllerManager.concurrentRcSyncs kubeControllerManager.concurrentRCSyncs
kubelet.authenticationTokenWebhookCacheTtl kubelet.authenticationTokenWebhookCacheTTL
kubelet.clientCaFile kubelet.clientCAFile
kubeProxy.ipvsExcludeCidrs kubeProxy.ipvsExcludeCIDRs
kubernetesApiAccess api.access
masterKubelet controlPlaneKubelet
masterKubelet.authenticationTokenWebhookCacheTtl controlPlaneKubelet.authenticationTokenWebhookCacheTTL
masterKubelet.clientCaFile controlPlaneKubelet.clientCAFile
masterPublicName api.publicName
networkCIDR networking.networkCIDR
networkID networking.networkID
networking.amazonvpc networking.amazonVPC
networking.amazonvpc.imageName networking.amazonVPC.image
networking.amazonvpc.initImageName networking.amazonVPC.initImage
networking.canal.disableFlannelForwardRules networking.canal.flanneldIptablesForwardRules (值反转)
networking.cilium.disableMasquerade networking.cilium.masquerade (值反转)
networking.cilium.IPTablesRulesNoinstall networking.cilium.installIptablesRules (值反转)
networking.cilium.toFqdnsDnsRejectResponseCode networking.cilium.toFQDNsDNSRejectResponseCode
networking.cilium.toFqdnsEnablePoller networking.cilium.toFQDNsEnablePoller
networking.gce networking.gcp
networking.kuberouter networking.kubeRouter
nodeTerminationHandler cloudProvider.aws.nodeTerminationHandler
nonMasqueradeCIDR networking.nonMasqueradeCIDR
podCIDR networking.podCIDR
podIdentityWebhook cloudProvider.aws.podIdentityWebhook
project cloudProvider.gce.project
secretStore configStore.secrets
serviceClusterIPRange networking.serviceClusterIPRange
subnets networking.subnets
tagSubnets networking.tagSubnets
topology networking.topology
topology.bastion.bastionPublicName networking.topology.bastion.publicName
topology.dns.type networking.topology.dns
warmPool cloudProvider.aws.warmPool