From 500745dd609942ca21f5a810ff70ec30392240a1 Mon Sep 17 00:00:00 2001 From: Qiming Teng <tengqm@outlook.com> Date: Mon, 12 Jul 2021 19:31:25 +0800 Subject: [PATCH] Add kubeadm config reference v1beta3 --- content/en/docs/reference/_index.md | 1 + .../config-api/kubeadm-config.v1beta2.md | 144 +- .../config-api/kubeadm-config.v1beta3.md | 1416 +++++++++++++++++ 3 files changed, 1489 insertions(+), 72 deletions(-) create mode 100644 content/en/docs/reference/config-api/kubeadm-config.v1beta3.md diff --git a/content/en/docs/reference/_index.md b/content/en/docs/reference/_index.md index 7a61443525..7926083bc3 100644 --- a/content/en/docs/reference/_index.md +++ b/content/en/docs/reference/_index.md @@ -82,6 +82,7 @@ operator to use or manage a cluster. ## Config API for kubeadm * [v1beta2](/docs/reference/config-api/kubeadm-config.v1beta2/) +* [v1beta3](/docs/reference/config-api/kubeadm-config.v1beta3/) ## Design Docs diff --git a/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md b/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md index 293c7dc779..95cc3161e0 100644 --- a/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md +++ b/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md @@ -116,7 +116,7 @@ The ClusterConfiguration type should be used to configure cluster-wide settings, including settings for: - Networking, that holds configuration for the networking topology of the cluster; use it e.g. to customize - node subnet or services subnet. + pod subnet or services subnet. - Etcd configurations; use it e.g. to customize the local etcd or to configure the API server for using an external etcd cluster. - kube-apiserver, kube-scheduler, kube-controller-manager configurations; use it to customize control-plane @@ -164,19 +164,19 @@ bootstrapTokens: groups: - system:bootstrappers:kubeadm:default-node-token nodeRegistration: - name: "ec2-10-100-0-1" - criSocket: "/var/run/dockershim.sock" - taints: - - key: "kubeadmNode" - value: "master" - effect: "NoSchedule" - kubeletExtraArgs: - cgroup-driver: "cgroupfs" - ignorePreflightErrors: - - IsPrivilegedUser + name: "ec2-10-100-0-1" + criSocket: "/var/run/dockershim.sock" + taints: + - key: "kubeadmNode" + value: "master" + effect: "NoSchedule" + kubeletExtraArgs: + cgroup-driver: "cgroupfs" + ignorePreflightErrors: + - IsPrivilegedUser localAPIEndpoint: - advertiseAddress: "10.100.0.1" - bindPort: 6443 + advertiseAddress: "10.100.0.1" + bindPort: 6443 certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204" --- apiVersion: kubeadm.k8s.io/v1beta2 @@ -184,59 +184,59 @@ kind: ClusterConfiguration etcd: # one of local or external local: - imageRepository: "k8s.gcr.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/12" - podSubnet: "10.100.0.1/24" - dnsDomain: "cluster.local" - kubernetesVersion: "v1.12.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 + imageRepository: "k8s.gcr.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/12" + podSubnet: "10.100.0.1/24" + dnsDomain: "cluster.local" + kubernetesVersion: "v1.12.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: "k8s.gcr.io" useHyperKubeImage: false @@ -663,7 +663,7 @@ APIServer holds settings necessary for API server deployments in the cluster <tr><td><code>timeoutForControlPlane</code> <B>[Required]</B><br/> -<code>invalid type</code> +<a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"><code>meta/v1.Duration</code></a> </td> <td> `timeoutForControlPlane` controls the timeout that we use for API server to appear</td> @@ -712,7 +712,7 @@ for, so other administrators can know its purpose.</td> <tr><td><code>ttl</code> <B>[Required]</B><br/> -<code>invalid type</code> +<a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"><code>meta/v1.Duration</code></a> </td> <td> `ttl` defines the time to live for this token. Defaults to "24h". @@ -721,7 +721,7 @@ for, so other administrators can know its purpose.</td> <tr><td><code>expires</code> <B>[Required]</B><br/> -<code>invalid type</code> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#time-v1-meta"><code>meta/v1.Time</code></a> </td> <td> `expires` specifies the timestamp when this token expires. Defaults to being set @@ -1004,7 +1004,7 @@ not contain any other authentication information</td> <tr><td><code>timeout</code> <B>[Required]</B><br/> -<code>invalid type</code> +<a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"><code>meta/v1.Duration</code></a> </td> <td> `timeout` modifies the discovery timeout.</td> @@ -1199,7 +1199,7 @@ HostPathMount contains elements describing volumes that are mounted from the hos <tr><td><code>pathType</code> <B>[Required]</B><br/> -<code>invalid type</code> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#hostpathtype-v1-core"><code>core/v1.HostPathType</code></a> </td> <td> `pathType` is the type of the `hostPath` volume.</td> @@ -1451,7 +1451,7 @@ annotated to the Node API object, for later re-use.</td> <tr><td><code>taints</code> <B>[Required]</B><br/> -<code>[]invalid type</code> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#taint-v1-core"><code>[]core/v1.Taint</code></a> </td> <td> `taints` specifies the taints the Node API object should be registered with. If diff --git a/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md b/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md new file mode 100644 index 0000000000..de72001368 --- /dev/null +++ b/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md @@ -0,0 +1,1416 @@ +--- +title: kubeadm Configuration (v1beta3) +content_type: tool-reference +package: kubeadm.k8s.io/v1beta3 +auto_generated: true +--- +Package v1beta3 defines the v1beta3 version of the kubeadm configuration file format. +This version improves on the v1beta2 format by fixing some minor issues and adding a few new fields. + +A list of changes since v1beta2: + +- The deprecated `ClusterConfiguration.useHyperKubeImage` field has been removed. + Kubeadm no longer supports the hyperkube image. +- The `ClusterConfiguration.dns.type` field has been removed since CoreDNS is the only supported + DNS server type by kubeadm. +- Include "datapolicy" tags on the fields that hold secrets. + This would result in the field values to be omitted when API structures are printed with klog. +- Add `InitConfiguration.skipPhases`, `JoinConfiguration.skipPhases` to allow skipping + a list of phases during kubeadm init/join command execution. +- Add `InitConfiguration.nodeRegistration.imagePullPolicy" and + `JoinConfiguration.nodeRegistration.imagePullPolicy` to allow specifying + the images pull policy during kubeadm "init" and "join". The value must be + one of "Always", "Never" or "IfNotPresent". "IfNotPresent" is the default, + which has been the existing behavior prior to this addition. +- Add `InitConfiguration.patches.directory`, `JoinConfiguration.patches.directory` + to allow the user to configure a directory from which to take patches for + components deployed by kubeadm. +- Move the `BootstrapToken∗` API and related utilities out of the "kubeadm" API group + to a new group "bootstraptoken". The kubeadm API version v1beta3 no longer contains + the `BootstrapToken∗` structures. + +## Migration from old kubeadm config versions + +- kubeadm v1.15.x and newer can be used to migrate from the v1beta1 to v1beta2. +- kubeadm v1.22.x no longer supports v1beta1 and older APIs, but can be used to migrate v1beta2 to v1beta3. + +## Basics + +The preferred way to configure kubeadm is to pass an YAML configuration file with the --config option. Some of the +configuration options defined in the kubeadm config file are also available as command line flags, but only +the most common/simple use case are supported with this approach. + +A kubeadm config file could contain multiple configuration types separated using three dashes (“---”). + +kubeadm supports the following configuration types: + +```yaml +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 +``` + +To print the defaults for "init" and "join" actions use the following commands: + +```shell +kubeadm config print init-defaults +kubeadm config print join-defaults +``` + +The list of configuration types that must be included in a configuration file depends by the action you are +performing (init or join) and by the configuration options you are going to use (defaults or advanced customization). + +If some configuration types are not provided, or provided only partially, kubeadm will use default values; defaults +provided by kubeadm includes also enforcing consistency of values across components when required (e.g. +cluster-cidr flag on controller manager and clusterCIDR on kube-proxy). + +Users are always allowed to override default values, with the only exception of a small subset of setting with +relevance for security (e.g. enforce authorization-mode Node and RBAC on api server) + +If the user provides a configuration types that is not expected for the action you are performing, kubeadm will +ignore those types and print a warning. + +## Kubeadm init configuration types + +When executing kubeadm init with the `--config` option, the following configuration types could be used: +InitConfiguration, ClusterConfiguration, KubeProxyConfiguration, KubeletConfiguration, but only one +between InitConfiguration and ClusterConfiguration is mandatory. + +```yaml +apiVersion: kubeadm.k8s.io/v1beta3 +kind: InitConfiguration +bootstrapTokens: + ... +nodeRegistration: + ... +``` + +The InitConfiguration type should be used to configure runtime settings, that in case of kubeadm init +are the configuration of the bootstrap token and all the setting which are specific to the node where kubeadm +is executed, including: + +- NodeRegistration, that holds fields that relate to registering the new node to the cluster; + use it to customize the node name, the CRI socket to use or any other settings that should apply to this + node only (e.g. the node ip). + +- LocalAPIEndpoint, that represents the endpoint of the instance of the API server to be deployed on this node; + use it e.g. to customize the API server advertise address. + + ```yaml + apiVersion: kubeadm.k8s.io/v1beta3 + kind: ClusterConfiguration + networking: + ... + etcd: + ... + apiServer: + extraArgs: + ... + extraVolumes: + ... + ... + ``` + +The ClusterConfiguration type should be used to configure cluster-wide settings, +including settings for: + +- Networking, that holds configuration for the networking topology of the cluster; use it e.g. to customize + pod subnet or services subnet. +- Etcd configurations; use it e.g. to customize the local etcd or to configure the API server + for using an external etcd cluster. +- kube-apiserver, kube-scheduler, kube-controller-manager configurations; use it to customize control-plane + components by adding customized setting or overriding kubeadm default settings. + + ```yaml + apiVersion: kubeproxy.config.k8s.io/v1alpha1 + kind: KubeProxyConfiguration + ... + ``` + +The KubeProxyConfiguration type should be used to change the configuration passed to kube-proxy instances deployed +in the cluster. If this object is not provided or provided only partially, kubeadm applies defaults. + +See https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/ or https://godoc.org/k8s.io/kube-proxy/config/v1alpha1#KubeProxyConfiguration +for kube proxy official documentation. + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +... +``` + +The KubeletConfiguration type should be used to change the configurations that will be passed to all kubelet instances +deployed in the cluster. If this object is not provided or provided only partially, kubeadm applies defaults. + +See https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/ or https://godoc.org/k8s.io/kubelet/config/v1beta1#KubeletConfiguration +for kubelet official documentation. + +Here is a fully populated example of a single YAML file containing multiple +configuration types to be used during a `kubeadm init` run. + +```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: "master" + effect: "NoSchedule" + kubeletExtraArgs: + v: 4 + ignorePreflightErrors: + - IsPrivilegedUser + imagePullPolicy: "IfNotPresent" +localAPIEndpoint: + advertiseAddress: "10.100.0.1" + bindPort: 6443 +certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204" +skipPhases: + - add/kube-proxy +--- +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +etcd: + # one of local or external + local: + imageRepository: "k8s.gcr.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/12" + podSubnet: "10.100.0.1/24" + dnsDomain: "cluster.local" +kubernetesVersion: "v1.12.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: "k8s.gcr.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 configuration types + +When executing kubeadm join with the `--config` option, the JoinConfiguration type should be provided. + +```yaml +apiVersion: kubeadm.k8s.io/v1beta3 +kind: JoinConfiguration +... +``` + +The JoinConfiguration type should be used to configure runtime settings, that in case of kubeadm join +are the discovery method used for accessing the cluster info and all the setting which are specific +to the node where kubeadm is executed, including: + +- NodeRegistration, that holds fields that relate to registering the new node to the cluster; + use it to customize the node name, the CRI socket to use or any other settings that should apply to this + node only (e.g. the node ip). +- APIEndpoint, that represents the endpoint of the instance of the API server to be eventually + deployed on this node. + +## Resource Types + + +- [ClusterConfiguration](#kubeadm-k8s-io-v1beta3-ClusterConfiguration) +- [InitConfiguration](#kubeadm-k8s-io-v1beta3-InitConfiguration) +- [JoinConfiguration](#kubeadm-k8s-io-v1beta3-JoinConfiguration) + + + + +## `ClusterConfiguration` {#kubeadm-k8s-io-v1beta3-ClusterConfiguration} + + + + + +ClusterConfiguration contains cluster-wide configuration for a kubeadm cluster + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + +<tr><td><code>apiVersion</code><br/>string</td><td><code>kubeadm.k8s.io/v1beta3</code></td></tr> +<tr><td><code>kind</code><br/>string</td><td><code>ClusterConfiguration</code></td></tr> + + + + +<tr><td><code>etcd</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-Etcd"><code>Etcd</code></a> +</td> +<td> + `etcd` holds configuration for etcd.</td> +</tr> + + +<tr><td><code>networking</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-Networking"><code>Networking</code></a> +</td> +<td> + `networking` holds configuration for the networking topology of the cluster.</td> +</tr> + + +<tr><td><code>kubernetesVersion</code><br/> +<code>string</code> +</td> +<td> + `kubernetesVersion` is the target version of the control plane.</td> +</tr> + + +<tr><td><code>controlPlaneEndpoint</code><br/> +<code>string</code> +</td> +<td> + `controlPlaneEndpoint` sets a stable IP address or DNS name for the control plane; it +can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port. +In case the `controlPlaneEndpoint` is not specified, the `advertiseAddress` + `bindPort` +are used; in case the `controlPlaneEndpoint` is specified but without a TCP port, +the `bindPort` of the `localAPIEndpoint` is used. +Possible usages are: + +- In a cluster with more than one control plane instances, this field should be + assigned the address of the external load balancer in front of the + control plane instances. +- In environments with enforced node recycling, the ControlPlaneEndpoint + could be used for assigning a stable DNS to the control plane.</td> +</tr> + + +<tr><td><code>apiServer</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-APIServer"><code>APIServer</code></a> +</td> +<td> + `apiServer` contains extra settings for the API server.</td> +</tr> + + +<tr><td><code>controllerManager</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-ControlPlaneComponent"><code>ControlPlaneComponent</code></a> +</td> +<td> + `controllerManager` contains extra settings for the controller manager.</td> +</tr> + + +<tr><td><code>scheduler</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-ControlPlaneComponent"><code>ControlPlaneComponent</code></a> +</td> +<td> + `scheduler` contains extra settings for the scheduler.</td> +</tr> + + +<tr><td><code>dns</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-DNS"><code>DNS</code></a> +</td> +<td> + `dns` defines the options for the DNS add-on.</td> +</tr> + + +<tr><td><code>certificatesDir</code><br/> +<code>string</code> +</td> +<td> + `certificatesDir` specifies where to store or look for all required certificates.</td> +</tr> + + +<tr><td><code>imageRepository</code><br/> +<code>string</code> +</td> +<td> + `imageRepository` sets the container registry to pull images from. +If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is +a CI build (kubernetes version starts with `ci/` or `ci-cross/`) +`gcr.io/k8s-staging-ci-images` will be used as a default for control plane +components and for kube-proxy, while `k8s.gcr.io` will be used for all the other images.</td> +</tr> + + +<tr><td><code>featureGates</code><br/> +<code>map[string]bool</code> +</td> +<td> + Feature gates enabled by the user.</td> +</tr> + + +<tr><td><code>clusterName</code><br/> +<code>string</code> +</td> +<td> + The cluster name.</td> +</tr> + + +</tbody> +</table> + + + +## `InitConfiguration` {#kubeadm-k8s-io-v1beta3-InitConfiguration} + + + + + +InitConfiguration contains a list of elements that is specific "kubeadm init"-only runtime +information. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + +<tr><td><code>apiVersion</code><br/>string</td><td><code>kubeadm.k8s.io/v1beta3</code></td></tr> +<tr><td><code>kind</code><br/>string</td><td><code>InitConfiguration</code></td></tr> + + + + +<tr><td><code>bootstrapTokens</code><br/> +<code>[]github.com/tengqm/kubeconfig/config/bootstraptoken/v1.BootstrapToken</code> +</td> +<td> + `bootstrapTokens` is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create. +This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature.</td> +</tr> + + +<tr><td><code>nodeRegistration</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-NodeRegistrationOptions"><code>NodeRegistrationOptions</code></a> +</td> +<td> + `nodeRegistration` holds fields that relate to registering the new control-plane node to the cluster</td> +</tr> + + +<tr><td><code>localAPIEndpoint</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-APIEndpoint"><code>APIEndpoint</code></a> +</td> +<td> + `localAPIEndpoint` represents the endpoint of the API server instance that's deployed on this control plane node +In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint +is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This +configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible +on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process +fails you may set the desired value here.</td> +</tr> + + +<tr><td><code>certificateKey</code><br/> +<code>string</code> +</td> +<td> + `certificateKey` sets the key with which certificates and keys are encrypted prior to being uploaded in +a Secret in the cluster during the "uploadcerts" init phase.</td> +</tr> + + +<tr><td><code>skipPhases</code><br/> +<code>[]string</code> +</td> +<td> + `skipPhases` is a list of phases to skip during command execution. +The list of phases can be obtained with the `kubeadm init --help` command. +The flag `--skip-phases` takes precedence over this field.</td> +</tr> + + +<tr><td><code>patches</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-Patches"><code>Patches</code></a> +</td> +<td> + `patches` contains options related to applying patches to components deployed by kubeadm during +"kubeadm init".</td> +</tr> + + +</tbody> +</table> + + + +## `JoinConfiguration` {#kubeadm-k8s-io-v1beta3-JoinConfiguration} + + + + + +JoinConfiguration contains elements describing a particular node. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + +<tr><td><code>apiVersion</code><br/>string</td><td><code>kubeadm.k8s.io/v1beta3</code></td></tr> +<tr><td><code>kind</code><br/>string</td><td><code>JoinConfiguration</code></td></tr> + + + + +<tr><td><code>nodeRegistration</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-NodeRegistrationOptions"><code>NodeRegistrationOptions</code></a> +</td> +<td> + `nodeRegistration` holds fields that relate to registering the new control-plane +node to the cluster</td> +</tr> + + +<tr><td><code>caCertPath</code><br/> +<code>string</code> +</td> +<td> + `caCertPath` is the path to the SSL certificate authority used to +secure comunications between node and control-plane. +Defaults to "/etc/kubernetes/pki/ca.crt".</td> +</tr> + + +<tr><td><code>discovery</code> <B>[Required]</B><br/> +<a href="#kubeadm-k8s-io-v1beta3-Discovery"><code>Discovery</code></a> +</td> +<td> + `discovery` specifies the options for the kubelet to use during the TLS Bootstrap process.</td> +</tr> + + +<tr><td><code>controlPlane</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-JoinControlPlane"><code>JoinControlPlane</code></a> +</td> +<td> + `controlPlane` defines the additional control plane instance to be deployed on the +joining node. If nil, no additional control plane instance will be deployed.</td> +</tr> + + +<tr><td><code>skipPhases</code><br/> +<code>[]string</code> +</td> +<td> + `skipPhases` is a list of phases to skip during command execution. +The list of phases can be obtained with the `kubeadm join --help` command. +The flag `--skip-phases` takes precedence over this field.</td> +</tr> + + +<tr><td><code>patches</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-Patches"><code>Patches</code></a> +</td> +<td> + `patches` contains options related to applying patches to components deployed by kubeadm during +`kubeadm join`.</td> +</tr> + + +</tbody> +</table> + + + +## `APIEndpoint` {#kubeadm-k8s-io-v1beta3-APIEndpoint} + + + + +**Appears in:** + +- [InitConfiguration](#kubeadm-k8s-io-v1beta3-InitConfiguration) + +- [JoinControlPlane](#kubeadm-k8s-io-v1beta3-JoinControlPlane) + + +APIEndpoint struct contains elements of API server instance deployed on a node. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>advertiseAddress</code><br/> +<code>string</code> +</td> +<td> + `advertiseAddress` sets the IP address for the API server to advertise.</td> +</tr> + + +<tr><td><code>bindPort</code><br/> +<code>int32</code> +</td> +<td> + `bindPort` sets the secure port for the API Server to bind to. Defaults to 6443.</td> +</tr> + + +</tbody> +</table> + + + +## `APIServer` {#kubeadm-k8s-io-v1beta3-APIServer} + + + + +**Appears in:** + +- [ClusterConfiguration](#kubeadm-k8s-io-v1beta3-ClusterConfiguration) + + +APIServer holds settings necessary for API server deployments in the cluster + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>ControlPlaneComponent</code> <B>[Required]</B><br/> +<a href="#kubeadm-k8s-io-v1beta3-ControlPlaneComponent"><code>ControlPlaneComponent</code></a> +</td> +<td>(Members of <code>ControlPlaneComponent</code> are embedded into this type.) + <span class="text-muted">No description provided.</span> + </td> +</tr> + + +<tr><td><code>certSANs</code><br/> +<code>[]string</code> +</td> +<td> + `certSANs` sets extra Subject Alternative Names for the API Server signing cert.</td> +</tr> + + +<tr><td><code>timeoutForControlPlane</code><br/> +<a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"><code>meta/v1.Duration</code></a> +</td> +<td> + `timeoutForControlPlane` controls the timeout that we use for API server to appear</td> +</tr> + + +</tbody> +</table> + + + +## `BootstrapTokenDiscovery` {#kubeadm-k8s-io-v1beta3-BootstrapTokenDiscovery} + + + + +**Appears in:** + +- [Discovery](#kubeadm-k8s-io-v1beta3-Discovery) + + +BootstrapTokenDiscovery is used to set the options for bootstrap token based discovery + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>token</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `token` is a token used to validate cluster information fetched from the control-plane.</td> +</tr> + + +<tr><td><code>apiServerEndpoint</code><br/> +<code>string</code> +</td> +<td> + `apiServerEndpoint` is an IP or domain name to the API server from which +information will be fetched.</td> +</tr> + + +<tr><td><code>caCertHashes</code><br/> +<code>[]string</code> +</td> +<td> + CACertHashes specifies a set of public key pins to verify when token-based +discovery is used. The root CA found during discovery must match one of these +values. Specifying an empty set disables root CA pinning, which can be unsafe. +Each hash is specified as `<type>:<value>`, where the only currently supported +type is "sha256". This is a hex-encoded SHA-256 hash of the Subject Public Key +Info (SPKI) object in DER-encoded ASN.1. These hashes can be calculated using, +for example, OpenSSL.</td> +</tr> + + +<tr><td><code>unsafeSkipCAVerification</code><br/> +<code>bool</code> +</td> +<td> + `unsafeSkipCAVerification` allows token-based discovery without CA verification +via `caCertHashes`. This can weaken the security of kubeadm since other nodes +can impersonate the control-plane.</td> +</tr> + + +</tbody> +</table> + + + +## `ControlPlaneComponent` {#kubeadm-k8s-io-v1beta3-ControlPlaneComponent} + + + + +**Appears in:** + +- [ClusterConfiguration](#kubeadm-k8s-io-v1beta3-ClusterConfiguration) + +- [APIServer](#kubeadm-k8s-io-v1beta3-APIServer) + + +ControlPlaneComponent holds settings common to control plane component of the cluster + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>extraArgs</code><br/> +<code>map[string]string</code> +</td> +<td> + `extraArgs` is an extra set of flags to pass to the control plane component. +A key in this map is the flag name as it appears on the +command line except without leading dash(es).</td> +</tr> + + +<tr><td><code>extraVolumes</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-HostPathMount"><code>[]HostPathMount</code></a> +</td> +<td> + `extraVolumes` is an extra set of host volumes, mounted to the control plane component.</td> +</tr> + + +</tbody> +</table> + + + +## `DNS` {#kubeadm-k8s-io-v1beta3-DNS} + + + + +**Appears in:** + +- [ClusterConfiguration](#kubeadm-k8s-io-v1beta3-ClusterConfiguration) + + +DNS defines the DNS addon that should be used in the cluster + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>ImageMeta</code> <B>[Required]</B><br/> +<a href="#kubeadm-k8s-io-v1beta3-ImageMeta"><code>ImageMeta</code></a> +</td> +<td>(Members of <code>ImageMeta</code> are embedded into this type.) + `imageMeta` allows to customize the image used for the DNS component.</td> +</tr> + + +</tbody> +</table> + + + +## `DNSAddOnType` {#kubeadm-k8s-io-v1beta3-DNSAddOnType} + +(Alias of `string`) + + + +DNSAddOnType defines string identifying DNS add-on types + + + + + +## `Discovery` {#kubeadm-k8s-io-v1beta3-Discovery} + + + + +**Appears in:** + +- [JoinConfiguration](#kubeadm-k8s-io-v1beta3-JoinConfiguration) + + +Discovery specifies the options for the kubelet to use during the TLS Bootstrap process + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>bootstrapToken</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-BootstrapTokenDiscovery"><code>BootstrapTokenDiscovery</code></a> +</td> +<td> + `bootstrapToken` is used to set the options for bootstrap token based discovery. +`bootstrapToken` and `file` are mutually exclusive.</td> +</tr> + + +<tr><td><code>file</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-FileDiscovery"><code>FileDiscovery</code></a> +</td> +<td> + `file` specifies a file or URL to a kubeconfig file from which to load cluster information. +`bootstrapToken` and `file` are mutually exclusive.</td> +</tr> + + +<tr><td><code>tlsBootstrapToken</code><br/> +<code>string</code> +</td> +<td> + `tlsBootstrapToken` is a token used for TLS bootstrapping. +If `bootstrapToken` is set, this field is defaulted to `bootstrapToken.token`, +but can be overridden. +If `file` is set, this field ∗∗must be set∗∗ in case the KubeConfigFile does +not contain any other authentication information</td> +</tr> + + +<tr><td><code>timeout</code><br/> +<a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"><code>meta/v1.Duration</code></a> +</td> +<td> + `timeout` modifies the discovery timeout.</td> +</tr> + + +</tbody> +</table> + + + +## `Etcd` {#kubeadm-k8s-io-v1beta3-Etcd} + + + + +**Appears in:** + +- [ClusterConfiguration](#kubeadm-k8s-io-v1beta3-ClusterConfiguration) + + +Etcd contains elements describing Etcd configuration. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>local</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-LocalEtcd"><code>LocalEtcd</code></a> +</td> +<td> + `local` provides configuration knobs for configuring the local etcd instance. +`local` and `external` are mutually exclusive.</td> +</tr> + + +<tr><td><code>external</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-ExternalEtcd"><code>ExternalEtcd</code></a> +</td> +<td> + `external` describes how to connect to an external etcd cluster. +`local` and `external` are mutually exclusive.</td> +</tr> + + +</tbody> +</table> + + + +## `ExternalEtcd` {#kubeadm-k8s-io-v1beta3-ExternalEtcd} + + + + +**Appears in:** + +- [Etcd](#kubeadm-k8s-io-v1beta3-Etcd) + + +ExternalEtcd describes an external etcd cluster. +Kubeadm has no knowledge of where certificate files live and they must be supplied. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>endpoints</code> <B>[Required]</B><br/> +<code>[]string</code> +</td> +<td> + `endpoints` are endpoints of etcd members. This field is required.</td> +</tr> + + +<tr><td><code>caFile</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `caFile` is an SSL Certificate Authority file used to secure etcd communication. +Required if using a TLS connection.</td> +</tr> + + +<tr><td><code>certFile</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `certFile` is an SSL certification file used to secure etcd communication. +Required if using a TLS connection.</td> +</tr> + + +<tr><td><code>keyFile</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `keyFile` is an SSL key file used to secure etcd communication. +Required if using a TLS connection.</td> +</tr> + + +</tbody> +</table> + + + +## `FileDiscovery` {#kubeadm-k8s-io-v1beta3-FileDiscovery} + + + + +**Appears in:** + +- [Discovery](#kubeadm-k8s-io-v1beta3-Discovery) + + +FileDiscovery is used to specify a file or URL to a kubeconfig file from which to load cluster information + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>kubeConfigPath</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `kubeConfigPath` specifies the actual file path or URL to the kubeconfig file +from which to load cluster information</td> +</tr> + + +</tbody> +</table> + + + +## `HostPathMount` {#kubeadm-k8s-io-v1beta3-HostPathMount} + + + + +**Appears in:** + +- [ControlPlaneComponent](#kubeadm-k8s-io-v1beta3-ControlPlaneComponent) + + +HostPathMount contains elements describing volumes that are mounted from the host. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>name</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `name` is the volume name inside the Pod template.</td> +</tr> + + +<tr><td><code>hostPath</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `hostPath` is the path in the host that will be mounted inside the Pod.</td> +</tr> + + +<tr><td><code>mountPath</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `mountPath` is the path inside the Pod where the `hostPath` volume is mounted.</td> +</tr> + + +<tr><td><code>readOnly</code><br/> +<code>bool</code> +</td> +<td> + `readOnly` controls write access to the volume.</td> +</tr> + + +<tr><td><code>pathType</code><br/> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#hostpathtype-v1-core"><code>core/v1.HostPathType</code></a> +</td> +<td> + `pathType` is the type of the `hostPath` volume.</td> +</tr> + + +</tbody> +</table> + + + +## `ImageMeta` {#kubeadm-k8s-io-v1beta3-ImageMeta} + + + + +**Appears in:** + +- [DNS](#kubeadm-k8s-io-v1beta3-DNS) + +- [LocalEtcd](#kubeadm-k8s-io-v1beta3-LocalEtcd) + + +ImageMeta allows to customize the image used for components that are not +originated from the Kubernetes/Kubernetes release process + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>imageRepository</code><br/> +<code>string</code> +</td> +<td> + `imageRepository` sets the container registry to pull images from. +If not set, the ImageRepository defined in ClusterConfiguration will be used instead.</td> +</tr> + + +<tr><td><code>imageTag</code><br/> +<code>string</code> +</td> +<td> + `imageTag` allows to specify a tag for the image. +In case this value is set, kubeadm does not change automatically the +version of the above components during upgrades.</td> +</tr> + + +</tbody> +</table> + + + +## `JoinControlPlane` {#kubeadm-k8s-io-v1beta3-JoinControlPlane} + + + + +**Appears in:** + +- [JoinConfiguration](#kubeadm-k8s-io-v1beta3-JoinConfiguration) + + +JoinControlPlane contains elements describing an additional control plane instance to be deployed on the joining node. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>localAPIEndpoint</code><br/> +<a href="#kubeadm-k8s-io-v1beta3-APIEndpoint"><code>APIEndpoint</code></a> +</td> +<td> + `localAPIEndpoint` represents the endpoint of the API server instance to be deployed +on this node.</td> +</tr> + + +<tr><td><code>certificateKey</code><br/> +<code>string</code> +</td> +<td> + `certificateKey` is the key that is used for decryption of certificates after they +are downloaded from the secret upon joining a new control plane node. The +corresponding encryption key is in the InitConfiguration.</td> +</tr> + + +</tbody> +</table> + + + +## `LocalEtcd` {#kubeadm-k8s-io-v1beta3-LocalEtcd} + + + + +**Appears in:** + +- [Etcd](#kubeadm-k8s-io-v1beta3-Etcd) + + +LocalEtcd describes that kubeadm should run an etcd cluster locally + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>ImageMeta</code> <B>[Required]</B><br/> +<a href="#kubeadm-k8s-io-v1beta3-ImageMeta"><code>ImageMeta</code></a> +</td> +<td>(Members of <code>ImageMeta</code> are embedded into this type.) + `ImageMeta` allows to customize the container used for etcd.</td> +</tr> + + +<tr><td><code>dataDir</code> <B>[Required]</B><br/> +<code>string</code> +</td> +<td> + `dataDir` is the directory etcd will place its data. +Defaults to "/var/lib/etcd".</td> +</tr> + + +<tr><td><code>extraArgs</code><br/> +<code>map[string]string</code> +</td> +<td> + `extraArgs` are extra arguments provided to the etcd binary +when run inside a static pod. +A key in this map is the flag name as it appears on the command line except +without leading dash(es).</td> +</tr> + + +<tr><td><code>serverCertSANs</code><br/> +<code>[]string</code> +</td> +<td> + `serverCertSANs` sets extra Subject Alternative Names for the etcd server signing cert.</td> +</tr> + + +<tr><td><code>peerCertSANs</code><br/> +<code>[]string</code> +</td> +<td> + `peerCertSANs` sets extra Subject Alternative Names for the etcd peer signing cert.</td> +</tr> + + +</tbody> +</table> + + + +## `Networking` {#kubeadm-k8s-io-v1beta3-Networking} + + + + +**Appears in:** + +- [ClusterConfiguration](#kubeadm-k8s-io-v1beta3-ClusterConfiguration) + + +Networking contains elements describing cluster's networking configuration + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>serviceSubnet</code><br/> +<code>string</code> +</td> +<td> + `serviceSubnet` is the subnet used by k8s services. Defaults to "10.96.0.0/12".</td> +</tr> + + +<tr><td><code>podSubnet</code><br/> +<code>string</code> +</td> +<td> + `podSubnet` is the subnet used by Pods.</td> +</tr> + + +<tr><td><code>dnsDomain</code><br/> +<code>string</code> +</td> +<td> + `dnsDomain` is the DNS domain used by k8s services. Defaults to "cluster.local".</td> +</tr> + + +</tbody> +</table> + + + +## `NodeRegistrationOptions` {#kubeadm-k8s-io-v1beta3-NodeRegistrationOptions} + + + + +**Appears in:** + +- [InitConfiguration](#kubeadm-k8s-io-v1beta3-InitConfiguration) + +- [JoinConfiguration](#kubeadm-k8s-io-v1beta3-JoinConfiguration) + + +NodeRegistrationOptions holds fields that relate to registering a new control-plane or node to the cluster, either via "kubeadm init" or "kubeadm join" + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>name</code><br/> +<code>string</code> +</td> +<td> + `name` is the `.metadata.name` field of the Node API object that will be created in this +`kubeadm init` or `kubeadm join` operation. +This field is also used in the `CommonName` field of the kubelet's client certificate to the +API server. Defaults to the hostname of the node if not provided.</td> +</tr> + + +<tr><td><code>criSocket</code><br/> +<code>string</code> +</td> +<td> + `criSocket` is used to retrieve container runtime info. This information will be +annotated to the Node API object, for later re-use.</td> +</tr> + + +<tr><td><code>taints</code> <B>[Required]</B><br/> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#taint-v1-core"><code>[]core/v1.Taint</code></a> +</td> +<td> + `taints` specifies the taints the Node API object should be registered with. If +this field is unset, i.e. nil, in the `kubeadm init` process, it will be defaulted +to `['"node-role.kubernetes.io/master"=""']`. If you don't want to taint your +control-plane node, set this field to an empty list, i.e. `taints: []` in the YAML +file. This field is solely used for Node registration.</td> +</tr> + + +<tr><td><code>kubeletExtraArgs</code><br/> +<code>map[string]string</code> +</td> +<td> + `kubeletExtraArgs` passes through extra arguments to the kubelet. The arguments here +are passed to the kubelet command line via the environment file kubeadm writes at +runtime for the kubelet to source. This overrides the generic base-level +configuration in the "kubelet-config-1.X" ConfigMap. Flags have higher priority when +parsing. These values are local and specific to the node kubeadm is executing on. +A key in this map is the flag name as it appears on the command line except without +leading dash(es).</td> +</tr> + + +<tr><td><code>ignorePreflightErrors</code><br/> +<code>[]string</code> +</td> +<td> + `ignorePreflightErrors` provides a slice of pre-flight errors to be ignored when +the current node is registered.</td> +</tr> + + +<tr><td><code>imagePullPolicy</code><br/> +<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#pullpolicy-v1-core"><code>core/v1.PullPolicy</code></a> +</td> +<td> + `imagePullPolicy` specifies the policy for image pulling during `kubeadm init` and +`kubeadm join` operations. +The value of this field must be one of "Always", "IfNotPresent" or "Never". +If this field is unset kubeadm will default it to "IfNotPresent", or pull the required +images if not present on the host.</td> +</tr> + + +</tbody> +</table> + + + +## `Patches` {#kubeadm-k8s-io-v1beta3-Patches} + + + + +**Appears in:** + +- [InitConfiguration](#kubeadm-k8s-io-v1beta3-InitConfiguration) + +- [JoinConfiguration](#kubeadm-k8s-io-v1beta3-JoinConfiguration) + + +Patches contains options related to applying patches to components deployed by kubeadm. + +<table class="table"> +<thead><tr><th width="30%">Field</th><th>Description</th></tr></thead> +<tbody> + + + +<tr><td><code>directory</code><br/> +<code>string</code> +</td> +<td> + `directory` is a path to a directory that contains files named +`target[suffix][+patchtype].extension`. +For example, `kube-apiserver0+merge.yaml` or just `etcd.json`. `target` can be one of +"kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". `patchtype` can be one +of "strategic", "merge" or "json" and they match the patch formats supported by kubectl. +The default `patchtype` is "strategic". `extension` must be either "json" or "yaml". +`suffix` is an optional string that can be used to determine which patches are applied +first alpha-numerically.</td> +</tr> + + +</tbody> +</table> + +