kubeadm 配置 (v1beta4)
概述
Package v1beta4 定義了 kubeadm 配置檔案格式的 v1beta4 版本。此版本透過修復一些小問題和新增一些新欄位,改進了 v1beta3 格式。
v1beta3 以來更改列表
v1.33
- 向
UpgradeConfiguration.plan
新增EtcdUpgrade
欄位,可用於控制是否顯示 etcd 升級計劃。
v1.31
- 在
ClusterConfiguration
下支援控制平面元件中的自定義環境變數。使用apiServer.extraEnvs
、controllerManager.extraEnvs
、scheduler.extraEnvs
、etcd.local.extraEnvs
。 - v1beta4 現在支援
ResetConfiguration
API 型別。使用者可以透過向kubeadm reset
傳遞--config
檔案來重置節點。 - 現在可以在
InitConfiguration
和JoinConfiguration
B 中配置試執行模式。 - 將現有的字串/字串額外引數對映替換為支援重複項的結構化額外引數。此更改適用於
ClusterConfiguration
-apiServer.extraArgs
、controllerManager.extraArgs
、scheduler.extraArgs
、etcd.local.extraArgs
。也適用於nodeRegistration.kubeletExtraArgs
。 - 新增
ClusterConfiguration.encryptionAlgorithm
,可用於設定此叢集金鑰和證書使用的非對稱加密演算法。可以是"RSA-2048"
(預設)、"RSA-3072"
、"RSA-4096"
或"ECDSA-P256"
之一。 - 新增
ClusterConfiguration.dns.disabled
和ClusterConfiguration.proxy.disabled
,可用於在叢集初始化期間停用 CoreDNS 和 kube-proxy 外掛。跳過與叢集建立相關的外掛階段會將相同的欄位設定為true
。 - 在
InitConfiguration
和JoinConfiguration
中新增nodeRegistration.imagePullSerial
欄位,可用於控制 kubeadm 是序列還是並行拉取映象。 - 現在 v1beta4 支援
UpgradeConfiguration
kubeadm API,透過向kubeadm upgrade
子命令傳遞--config
。對於kubelet
和kube-proxy
、InitConfiguration
和ClusterConfiguration
的元件配置用法已被棄用,在向upgrade
子命令傳遞--config
時將被忽略。 - 向
InitConfiguration
、JoinConfiguration
、ResetConfiguration
和UpgradeConfiguration
新增Timeouts
結構,可用於配置各種超時。ClusterConfiguration.timeoutForControlPlane
欄位被Timeouts.controlPlaneComponentHealthCheck
替換。JoinConfiguration.discovery.timeout
被timeouts.Discovery
替換。 - 向
ClusterConfiguration
新增certificateValidityPeriod
和caCertificateValidityPeriod
欄位。這些欄位可用於控制 kubeadm 在init
、join
、upgrade
和certs
等子命令期間生成的證書的有效期。預設值繼續為非 CA 證書為 1 年,CA 證書為 10 年。只有非 CA 證書可以繼續透過kubeadm certs renew
更新。
從舊的 kubeadm 配置版本遷移
- kubeadm v1.15.x 及更高版本可用於從 v1beta1 遷移到 v1beta2。
- kubeadm v1.22.x 及更高版本不再支援 v1beta1 及更早的 API,但可用於將 v1beta2 遷移到 v1beta3。
- kubeadm v1.27.x 及更高版本不再支援 v1beta2 及更早的 API。
- kubeadm v1.31.x 及更高版本可用於從 v1beta3 遷移到 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 apiVersion: kubeadm.k8s.io/v1beta4 kind: ResetConfiguration apiVersion: kubeadm.k8s.io/v1beta4 kind: UpgradeConfiguration
要列印 init
和 join
操作的預設值,請使用以下命令
kubeadm config print init-defaults kubeadm config print join-defaults kubeadm config print reset-defaults kubeadm config print upgrade-defaults
需要包含在配置檔案中的配置型別列表取決於您執行的操作(init
或 join
)以及您將使用的配置選項(預設值或高階自定義)。
如果某些配置型別未提供,或僅部分提供,kubeadm 將使用預設值;kubeadm 提供的預設值還包括強制執行元件之間的一致性(例如,控制器管理器上的 --cluster-cidr
標誌和 kube-proxy 上的 clusterCIDR
)。
使用者始終可以覆蓋預設值,唯一例外的是一小部分與安全性相關的設定(例如,強制 API 伺服器的 authorization-mode 為 Node 和 RBAC)。
如果使用者提供了一個與您正在執行的操作不符的配置型別,kubeadm 將忽略這些型別併發出警告。
Kubeadm init 配置型別
當使用 --config
選項執行 kubeadm init 時,可以使用以下配置型別:InitConfiguration、ClusterConfiguration、KubeProxyConfiguration、KubeletConfiguration,但 InitConfiguration 和 ClusterConfiguration 之間只需要其中一種。
apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration bootstrapTokens: ... nodeRegistration: ...
InitConfiguration 型別應用於配置執行時設定,對於 kubeadm init 來說,這些設定包括引導令牌的配置以及 kubeadm 執行所在的節點的所有特定設定,包括:
NodeRegistration,包含與將新節點註冊到叢集相關的欄位;用於自定義節點名稱、要使用的 CRI 套接字或僅適用於此節點的任何其他設定(例如,節點 IP)。
LocalAPIEndpoint,代表將在此節點上部署的 API 伺服器例項的端點;例如,用於自定義 API 伺服器的廣告地址。
apiVersion: kubeadm.k8s.io/v1beta4 kind: ClusterConfiguration networking: ... etcd: ... apiServer: extraArgs: ... extraVolumes: ... ...
ClusterConfiguration 型別應用於配置叢集範圍的設定,包括:
networking
,包含叢集網路拓撲的配置;例如,用於自定義 Pod 子網或服務子網。etcd
:例如,用於自定義本地 etcd 或配置 API 伺服器使用外部 etcd 叢集。kube-apiserver、kube-scheduler、kube-controller-manager 的配置;用於透過新增自定義設定或覆蓋 kubeadm 預設設定來定製控制平面元件。
apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration ...
KubeProxyConfiguration 型別應用於更改傳遞給叢集中部署的 kube-proxy 例項的配置。如果未提供此物件或僅部分提供,kubeadm 將應用預設值。
有關 kube-proxy 的官方文件,請參閱 https://kubernetes.club.tw/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.club.tw/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: - name: v value: "5" ignorePreflightErrors: - IsPrivilegedUser imagePullPolicy: "IfNotPresent" imagePullSerial: true localAPIEndpoint: advertiseAddress: "10.100.0.1" bindPort: 6443 certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204" skipPhases: - preflight timeouts: controlPlaneComponentHealthCheck: "60s" kubenetesAPICall: "40s" --- 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: - name: listen-client-urls value: http://10.100.0.1:2379 extraEnvs: - name: SOME_VAR value: SOME_VALUE 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: - name: authorization-mode value: Node,RBAC extraEnvs: - name: SOME_VAR value: SOME_VALUE 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" controllerManager: extraArgs: - name: node-cidr-mask-size value: "20" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File scheduler: extraArgs: - name: address value: 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" encryptionAlgorithm: ECDSA-P256 dns: disabled: true # disable CoreDNS proxy: disabled: true # disable kube-proxy --- 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 配置型別
執行 kubeadm join 並使用 --config 選項時,應提供 JoinConfiguration 型別。
apiVersion: kubeadm.k8s.io/v1beta4 kind: JoinConfiguration discovery: bootstrapToken: apiServerEndpoint: some-address:6443 token: abcdef.0123456789abcdef unsafeSkipCAVerification: true tlsBootstrapToken: abcdef.0123456789abcdef
JoinConfiguration 型別應用於配置執行時設定,對於 kubeadm join 來說,這些設定是用於訪問叢集資訊的發現方法以及 kubeadm 執行所在的節點的所有特定設定,包括:
nodeRegistration
,包含與將新節點註冊到叢集相關的欄位;用於自定義節點名稱、要使用的 CRI 套接字或僅適用於此節點的任何其他設定(例如,節點 IP)。apiEndpoint
,代表將在該節點上部署的 API 伺服器例項的端點。
Kubeadm reset 配置型別
當使用 --config
選項執行 kubeadm reset
時,應提供 ResetConfiguration
型別。
apiVersion: kubeadm.k8s.io/v1beta4 kind: ResetConfiguration ...
Kubeadm upgrade 配置型別
當使用 --config
選項執行 kubeadm upgrade
時,應提供 UpgradeConfiguration
型別。
apiVersion: kubeadm.k8s.io/v1beta4 kind: UpgradeConfiguration apply: ... diff: ... node: ... plan: ...
UpgradeConfiguration
結構包含一些子結構,這些子結構僅適用於 kubeadm upgrade
的不同子命令。例如,apply
子結構將與 kubeadm upgrade apply
子命令一起使用,並且在這種情況下會忽略所有其他子結構。
資源型別
BootstrapToken
出現在
BootstrapToken 描述了一個引導令牌,儲存在叢集中作為 Secret
欄位 | 描述 |
---|---|
token [必填]BootstrapTokenString |
|
description string |
|
ttl meta/v1.Duration |
|
expires meta/v1.Time |
|
usages []string |
|
groups []string |
|
BootstrapTokenString
出現在
BootstrapTokenString 是一個格式為 abcdef.abcdef0123456789
的令牌,用於從加入節點的角度驗證 API 伺服器的實用性,以及作為“kubeadm join”引導階段節點的身份驗證方法。此令牌是且應該是短暫的。
欄位 | 描述 |
---|---|
- [必填]string | 未提供描述。 |
- [必填]string | 未提供描述。 |
ClusterConfiguration
ClusterConfiguration 包含 kubeadm 叢集的叢集範圍配置。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta4 |
kind string | ClusterConfiguration |
etcd Etcd |
|
networking 網路 |
|
kubernetesVersion string |
|
controlPlaneEndpoint string |
|
apiServer APIServer |
|
controllerManager ControlPlaneComponent |
|
scheduler ControlPlaneComponent |
|
dns DNS |
|
proxy [必填]Proxy |
|
certificatesDir string |
|
imageRepository string |
|
featureGates map[string]bool |
|
clusterName string | 叢集名稱。 |
encryptionAlgorithm EncryptionAlgorithmType |
|
certificateValidityPeriod meta/v1.Duration |
|
caCertificateValidityPeriod meta/v1.Duration |
|
InitConfiguration
InitConfiguration 包含一組僅在“kubeadm init”期間使用的執行時資訊。kubeadm init
專用資訊。這些欄位僅在首次執行 kubeadm init
時使用。此後,欄位中的資訊**不會**上傳到 kubeadm-config
ConfigMap,因為 kubeadm upgrade
等工具會使用該 ConfigMap。這些欄位必須是可選的。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta4 |
kind string | InitConfiguration |
bootstrapTokens []BootstrapToken |
|
dryRun [必填]bool |
|
nodeRegistration NodeRegistrationOptions |
|
localAPIEndpoint APIEndpoint |
|
certificateKey string |
|
skipPhases []string |
|
patches Patches |
|
timeouts Timeouts |
|
JoinConfiguration
JoinConfiguration 包含描述特定節點的元素。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta4 |
kind string | JoinConfiguration |
dryRun bool |
|
nodeRegistration NodeRegistrationOptions |
|
caCertPath string |
|
discovery [必填]發現 |
|
controlPlane JoinControlPlane |
|
skipPhases []string |
|
patches Patches |
|
timeouts Timeouts |
|
ResetConfiguration
ResetConfiguration 包含一組僅在“kubeadm reset”期間使用的執行時資訊。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta4 |
kind string | ResetConfiguration |
cleanupTmpDir bool |
|
certificatesDir string |
|
criSocket string |
|
dryRun bool |
|
force bool |
|
ignorePreflightErrors []string |
|
skipPhases []string |
|
unmountFlags []string |
|
timeouts Timeouts | Timeouts 包含適用於 kubeadm 命令的各種超時。 |
UpgradeConfiguration
UpgradeConfiguration 包含一組僅適用於 kubeadm upgrade
子命令的選項。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta4 |
kind string | UpgradeConfiguration |
apply UpgradeApplyConfiguration |
|
diff UpgradeDiffConfiguration |
|
node UpgradeNodeConfiguration |
|
plan UpgradePlanConfiguration |
|
timeouts Timeouts |
|
APIEndpoint
出現在
APIEndpoint 結構包含節點上部署的 API 伺服器例項的元素。
欄位 | 描述 |
---|---|
advertiseAddress string |
|
bindPort int32 |
|
APIServer
出現在
APIServer 包含叢集中 API 伺服器部署所需的設定
欄位 | 描述 |
---|---|
ControlPlaneComponent [必填]ControlPlaneComponent | (ControlPlaneComponent 的成員已嵌入到此型別中。) 未提供描述。 |
certSANs []string |
|
Arg
出現在
Arg 表示一個帶有名稱和值的引數。
欄位 | 描述 |
---|---|
name [必填]string | 引數名稱。 |
value [必填]string | 引數值。 |
BootstrapTokenDiscovery
出現在
BootstrapTokenDiscovery 用於設定基於引導令牌的發現選項。
欄位 | 描述 |
---|---|
token [必填]string |
|
apiServerEndpoint string |
|
caCertHashes []string |
|
unsafeSkipCAVerification bool |
|
ControlPlaneComponent
出現在
ControlPlaneComponent 包含叢集控制平面元件的通用設定
欄位 | 描述 |
---|---|
extraArgs []Arg |
|
extraVolumes []HostPathMount |
|
extraEnvs []EnvVar |
|
DNS
出現在
DNS 定義了叢集中應使用的 DNS 外掛
欄位 | 描述 |
---|---|
ImageMeta [必填]ImageMeta | (ImageMeta 的成員已嵌入到此型別中。)
|
disabled [必填]bool |
|
發現
出現在
Discovery 指定了 kubelet 在 TLS 引導過程中使用的選項
欄位 | 描述 |
---|---|
bootstrapToken BootstrapTokenDiscovery |
|
file FileDiscovery |
|
tlsBootstrapToken string |
|
EncryptionAlgorithmType
(string
的別名)
出現在
EncryptionAlgorithmType 可以定義非對稱加密演算法型別。
EnvVar
出現在
EnvVar 表示容器中的環境變數。
欄位 | 描述 |
---|---|
EnvVar [必填]core/v1.EnvVar | (EnvVar 的成員已嵌入到此型別中。) 未提供描述。 |
Etcd
出現在
Etcd 包含描述 Etcd 配置的元素。
欄位 | 描述 |
---|---|
本地 LocalEtcd |
|
external ExternalEtcd |
|
ExternalEtcd
出現在
ExternalEtcd 描述了一個外部 etcd 叢集。Kubeadm 對證書檔案存放位置一無所知,必須提供。
欄位 | 描述 |
---|---|
endpoints [必填][]string |
|
caFile [必填]string |
|
certFile [必填]string |
|
keyFile [必填]string |
|
FileDiscovery
出現在
FileDiscovery 用於指定一個 kubeconfig 檔案(或 URL),從中載入叢集資訊。
欄位 | 描述 |
---|---|
kubeConfigPath [必填]string |
|
HostPathMount
出現在
HostPathMount 包含描述從宿主機掛載的卷的元素。
欄位 | 描述 |
---|---|
name [必填]string |
|
hostPath [必填]string |
|
mountPath [必填]string |
|
readOnly bool |
|
pathType core/v1.HostPathType |
|
ImageMeta
出現在
ImageMeta 允許自定義非 Kubernetes/Kubernetes 釋出流程產生的元件所使用的映象
欄位 | 描述 |
---|---|
imageRepository string |
|
imageTag string |
|
JoinControlPlane
出現在
JoinControlPlane 包含描述將在加入節點上部署的附加控制平面例項的元素。
欄位 | 描述 |
---|---|
localAPIEndpoint APIEndpoint |
|
certificateKey string |
|
LocalEtcd
出現在
LocalEtcd 描述了 kubeadm 應本地執行一個 etcd 叢集。
欄位 | 描述 |
---|---|
ImageMeta [必填]ImageMeta | (ImageMeta 的成員已嵌入到此型別中。)ImageMeta 允許自定義用於 etcd 的容器 |
dataDir [必填]string |
|
extraArgs [必填][]Arg |
|
extraEnvs []EnvVar |
|
serverCertSANs []string |
|
peerCertSANs []string |
|
網路
出現在
Networking 包含描述叢集網路配置的元素。
欄位 | 描述 |
---|---|
serviceSubnet string |
|
podSubnet string |
|
dnsDomain string |
|
NodeRegistrationOptions
出現在
NodeRegistrationOptions 包含與透過 kubeadm init
或 kubeadm join
將新控制平面或節點註冊到叢集相關的欄位。
欄位 | 描述 |
---|---|
name string |
|
criSocket string |
|
taints [必填][]core/v1.Taint |
|
kubeletExtraArgs []Arg |
|
ignorePreflightErrors []string |
|
imagePullPolicy core/v1.PullPolicy |
|
imagePullSerial bool |
|
Patches
出現在
Patches 包含與在 kubeadm 部署的元件上應用補丁相關的選項。
欄位 | 描述 |
---|---|
directory string |
|
Proxy
出現在
Proxy 定義了叢集中應使用的代理外掛。
欄位 | 描述 |
---|---|
disabled [必填]bool |
|
Timeouts
出現在
Timeouts 包含適用於 kubeadm 命令的各種超時。
欄位 | 描述 |
---|---|
controlPlaneComponentHealthCheck meta/v1.Duration |
|
kubeletHealthCheck meta/v1.Duration |
|
kubernetesAPICall meta/v1.Duration |
|
etcdAPICall meta/v1.Duration |
|
tlsBootstrap meta/v1.Duration |
|
discovery meta/v1.Duration |
|
upgradeManifests [必填]meta/v1.Duration |
|
UpgradeApplyConfiguration
出現在
UpgradeApplyConfiguration 包含一組僅適用於“kubeadm upgrade apply”命令的可配置選項。
欄位 | 描述 |
---|---|
kubernetesVersion string |
|
allowExperimentalUpgrades bool |
|
allowRCUpgrades bool | 啟用 |
certificateRenewal bool |
|
dryRun bool |
|
etcdUpgrade bool |
|
forceUpgrade bool |
|
ignorePreflightErrors []string |
|
patches Patches |
|
printConfig bool |
|
skipPhases [必填][]string |
|
imagePullPolicy core/v1.PullPolicy |
|
imagePullSerial bool |
|
UpgradeDiffConfiguration
出現在
UpgradeDiffConfiguration 包含一組僅適用於 kubeadm upgrade diff
命令的可配置選項。
欄位 | 描述 |
---|---|
kubernetesVersion string |
|
contextLines int |
|
UpgradeNodeConfiguration
出現在
UpgradeNodeConfiguration 包含一組僅適用於“kubeadm upgrade node”命令的可配置選項。
欄位 | 描述 |
---|---|
certificateRenewal bool |
|
dryRun bool |
|
etcdUpgrade bool |
|
ignorePreflightErrors []string |
|
skipPhases []string |
|
patches Patches |
|
imagePullPolicy core/v1.PullPolicy |
|
imagePullSerial bool |
|
UpgradePlanConfiguration
出現在
UpgradePlanConfiguration 包含一組僅適用於“kubeadm upgrade plan”命令的可配置選項。
欄位 | 描述 |
---|---|
kubernetesVersion [必填]string |
|
allowExperimentalUpgrades bool |
|
allowRCUpgrades bool | 啟用 |
dryRun bool |
|
ignorePreflightErrors []string |
|
printConfig bool |
|
本頁面是自動生成的。
如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。