kubeadm 組態 (v1beta3)
總覽
套件 v1beta3 定義 kubeadm 組態檔案格式的 v1beta3 版本。此版本改進 v1beta2 格式,修正一些小問題並新增一些欄位。
v1beta2 以來的變更清單
- 已移除已棄用的「ClusterConfiguration.useHyperKubeImage」欄位。Kubeadm 不再支援 hyperkube 映像檔。
- 已移除「ClusterConfiguration.dns.type」欄位,因為 CoreDNS 是 kubeadm 唯一支援的 DNS 伺服器類型。
- 在保存密鑰的欄位上包含「datapolicy」標籤。這會導致在使用 klog 列印 API 結構時省略欄位值。
- 新增「InitConfiguration.skipPhases」、「JoinConfiguration.skipPhases」以允許在 kubeadm init/join 命令執行期間跳過階段清單。
- 新增「InitConfiguration.nodeRegistration.imagePullPolicy」和「JoinConfiguration.nodeRegistration.imagePullPolicy」以允許在 kubeadm「init」和「join」期間指定映像檔提取原則。值必須是「Always」、「Never」或「IfNotPresent」之一。「IfNotPresent」是預設值,這是此新增功能之前的現有行為。
- 新增「InitConfiguration.patches.directory」、「JoinConfiguration.patches.directory」以允許使用者組態從中取得 kubeadm 部署組件的修補程式的目錄。
- 將 BootstrapToken* API 和相關公用程式移出「kubeadm」API 群組,移至新的群組「bootstraptoken」。kubeadm API 版本 v1beta3 不再包含 BootstrapToken* 結構。
從舊版 kubeadm 組態版本遷移
- kubeadm v1.15.x 和更新版本可用於從 v1beta1 遷移到 v1beta2。
- kubeadm v1.22.x 和更新版本不再支援 v1beta1 和更舊的 API,但可用於將 v1beta2 遷移到 v1beta3。
- kubeadm v1.27.x 和更新版本不再支援 v1beta2 和更舊的 API,
基礎知識
組態 kubeadm 的慣用方式是傳遞具有 --config
選項的 YAML 組態檔案。kubeadm 組態檔案中定義的一些組態選項也可用作命令列旗標,但此方法僅支援最常見/簡單的使用案例。
kubeadm 組態檔案可以包含使用三個破折號 (---
) 分隔的多個組態類型。
kubeadm 支援下列組態類型
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration apiVersion: kubeadm.k8s.io/v1beta3 kind: JoinConfiguration
若要列印「init」和「join」動作的預設值,請使用下列命令
kubeadm config print init-defaults kubeadm config print join-defaults
必須包含在組態檔案中的組態類型清單取決於您執行的動作 (init
或 join
) 以及您要使用的組態選項 (預設值或進階自訂)。
如果未提供某些組態類型,或僅部分提供,kubeadm 將使用預設值;kubeadm 提供的預設值也包括在需要時強制跨組件的值一致性 (例如,控制器管理員上的 --cluster-cidr
旗標和 kube-proxy 上的 clusterCIDR
)。
使用者始終可以覆寫預設值,但與安全性相關的一小部分設定除外 (例如,在 API 伺服器上強制執行 authorization-mode Node 和 RBAC)。
如果使用者提供的組態類型不是您執行的動作預期的類型,kubeadm 將忽略這些類型並列印警告。
Kubeadm init 組態類型
使用 --config
選項執行 kubeadm init 時,可以使用下列組態類型:InitConfiguration、ClusterConfiguration、KubeProxyConfiguration、KubeletConfiguration,但 InitConfiguration 和 ClusterConfiguration 之間只能有一個是強制性的。
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration bootstrapTokens: ... nodeRegistration: ...
InitConfiguration 類型應用於組態執行階段設定,在 kubeadm init 的情況下,執行階段設定是引導程式 Token 的組態以及所有特定於執行 kubeadm 之節點的設定,包括
NodeRegistration,其中包含與將新節點註冊到叢集相關的欄位;使用它來自訂節點名稱、要使用的 CRI Socket 或任何其他應僅套用於此節點的設定 (例如,節點 IP)。
LocalAPIEndpoint,表示要在此節點上部署的 API 伺服器實例的端點;使用它來自訂 API 伺服器公告位址,例如。
apiVersion: kubeadm.k8s.io/v1beta3 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 會套用預設值。
請參閱 https://kubernetes.dev.org.tw/docs/reference/command-line-tools-reference/kube-proxy/ 或 https://pkg.go.dev/k8s.io/kube-proxy/config/v1alpha1#KubeProxyConfiguration 以取得 kube-proxy 官方文件。
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration ...
KubeletConfiguration 類型應用於變更將傳遞至叢集中部署的所有 kubelet 實例的組態。如果未提供此物件或僅部分提供,kubeadm 會套用預設值。
請參閱 https://kubernetes.dev.org.tw/docs/reference/command-line-tools-reference/kubelet/ 或 https://pkg.go.dev/k8s.io/kubelet/config/v1beta1#KubeletConfiguration 以取得 kubelet 官方文件。
以下是包含多個組態類型的單一 YAML 檔案的完整範例,用於 kubeadm init
執行期間。
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration bootstrapTokens: - token: "9a08jv.c0izixklcxtmnze7" description: "kubeadm bootstrap token" ttl: "24h" - token: "783bde.3f89s0fje9f38fhf" description: "another bootstrap token" usages: - authentication - signing groups: - system:bootstrappers:kubeadm:default-node-token nodeRegistration: name: "ec2-10-100-0-1" criSocket: "/var/run/dockershim.sock" taints: - key: "kubeadmNode" value: "someValue" effect: "NoSchedule" kubeletExtraArgs: v: 4 ignorePreflightErrors: - IsPrivilegedUser imagePullPolicy: "IfNotPresent" localAPIEndpoint: advertiseAddress: "10.100.0.1" bindPort: 6443 certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204" skipPhases: - addon/kube-proxy --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration etcd: # one of local or external local: imageRepository: "registry.k8s.io" imageTag: "3.2.24" dataDir: "/var/lib/etcd" extraArgs: listen-client-urls: "http://10.100.0.1:2379" serverCertSANs: - "ec2-10-100-0-1.compute-1.amazonaws.com" peerCertSANs: - "10.100.0.1" # external: # endpoints: # - "10.100.0.1:2379" # - "10.100.0.2:2379" # caFile: "/etcd/kubernetes/pki/etcd/etcd-ca.crt" # certFile: "/etcd/kubernetes/pki/etcd/etcd.crt" # keyFile: "/etcd/kubernetes/pki/etcd/etcd.key" networking: serviceSubnet: "10.96.0.0/16" podSubnet: "10.244.0.0/24" dnsDomain: "cluster.local" kubernetesVersion: "v1.21.0" controlPlaneEndpoint: "10.100.0.1:6443" apiServer: extraArgs: authorization-mode: "Node,RBAC" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File certSANs: - "10.100.1.1" - "ec2-10-100-0-1.compute-1.amazonaws.com" timeoutForControlPlane: 4m0s controllerManager: extraArgs: "node-cidr-mask-size": "20" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File scheduler: extraArgs: bind-address: "10.100.0.1" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File certificatesDir: "/etc/kubernetes/pki" imageRepository: "registry.k8s.io" clusterName: "example-cluster" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration # kubelet specific options here --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration # kube-proxy specific options here
Kubeadm join 組態類型
使用 --config
選項執行 kubeadm join
時,應提供 JoinConfiguration 類型。
apiVersion: kubeadm.k8s.io/v1beta3 kind: JoinConfiguration ...
JoinConfiguration 類型應用於組態執行階段設定,在 kubeadm join
的情況下,執行階段設定是用於存取叢集資訊的探索方法以及所有特定於執行 kubeadm 之節點的設定,包括
nodeRegistration
,其中包含與將新節點註冊到叢集相關的欄位;使用它來自訂節點名稱、要使用的 CRI Socket 或任何其他應僅套用於此節點的設定 (例如,節點 IP)。apiEndpoint
,表示最終要在此節點上部署的 API 伺服器實例的端點。
資源類型
BootstrapToken
出現在
BootstrapToken 描述一個引導程式 Token,儲存為叢集中的密鑰
欄位 | 描述 |
---|---|
token [必要]BootstrapTokenString |
|
description string |
|
ttl meta/v1.Duration |
|
到期時間 meta/v1.Time |
|
用途 []string |
|
群組 []string |
|
BootstrapTokenString
出現在
BootstrapTokenString 是一種格式為 abcdef.abcdef0123456789
的權杖,用於從加入節點的角度驗證 API 伺服器的實用性,以及作為 "kubeadm join" 啟動階段中節點的身分驗證方法。此權杖是且應該是短效期的。
欄位 | 描述 |
---|---|
- [必填]string | 未提供描述。 |
- [必填]string | 未提供描述。 |
ClusterConfiguration
ClusterConfiguration 包含 kubeadm 叢集的叢集範圍組態。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta3 |
kind string | ClusterConfiguration |
etcd Etcd |
|
networking 網路 |
|
kubernetesVersion string |
|
controlPlaneEndpoint string |
|
apiServer APIServer |
|
controllerManager ControlPlaneComponent |
|
scheduler ControlPlaneComponent |
|
dns DNS |
|
certificatesDir string |
|
imageRepository string |
|
featureGates map[string]bool |
|
clusterName string | 叢集名稱。 |
InitConfiguration
InitConfiguration 包含特定於 "kubeadm init" 的執行階段資訊元素清單。kubeadm init
專用資訊。這些欄位僅在首次執行 kubeadm init
時使用。之後,欄位中的資訊不會上傳到 kubeadm-config
ConfigMap,該 ConfigMap 用於例如 kubeadm upgrade
。這些欄位必須是 omitempty。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta3 |
kind string | InitConfiguration |
bootstrapTokens []BootstrapToken |
|
nodeRegistration NodeRegistrationOptions |
|
localAPIEndpoint APIEndpoint |
|
certificateKey string |
|
skipPhases []string |
|
patches Patches |
|
JoinConfiguration
JoinConfiguration 包含描述特定節點的元素。
欄位 | 描述 |
---|---|
apiVersion string | kubeadm.k8s.io/v1beta3 |
kind string | JoinConfiguration |
nodeRegistration NodeRegistrationOptions |
|
caCertPath string |
|
discovery [必填]Discovery |
|
controlPlane JoinControlPlane |
|
skipPhases []string |
|
patches Patches |
|
APIEndpoint
出現在
APIEndpoint 結構包含部署在節點上的 API 伺服器實例的元素。
欄位 | 描述 |
---|---|
advertiseAddress string |
|
bindPort int32 |
|
APIServer
出現在
APIServer 保存叢集中 API 伺服器部署所需的設定
欄位 | 描述 |
---|---|
ControlPlaneComponent [必填]ControlPlaneComponent | (ControlPlaneComponent 的成員嵌入到此類型中。) 未提供描述。 |
certSANs []string |
|
timeoutForControlPlane meta/v1.Duration |
|
BootstrapTokenDiscovery
出現在
BootstrapTokenDiscovery 用於設定基於啟動引導權杖的探索選項。
欄位 | 描述 |
---|---|
token [必要]string |
|
apiServerEndpoint string |
|
caCertHashes []string |
|
unsafeSkipCAVerification bool |
|
ControlPlaneComponent
出現在
ControlPlaneComponent 保存叢集控制平面元件的通用設定
欄位 | 描述 |
---|---|
extraArgs map[string]string |
|
extraVolumes []HostPathMount |
|
DNS
出現在
DNS 定義應在叢集中使用的 DNS 附加元件
欄位 | 描述 |
---|---|
ImageMeta [必填]ImageMeta | (ImageMeta 的成員嵌入到此類型中。)
|
Discovery
出現在
Discovery 指定 kubelet 在 TLS 啟動引導程序期間使用的選項。
欄位 | 描述 |
---|---|
bootstrapToken BootstrapTokenDiscovery |
|
file FileDiscovery |
|
tlsBootstrapToken string |
|
timeout meta/v1.Duration |
|
Etcd
出現在
Etcd 包含描述 Etcd 組態的元素。
欄位 | 描述 |
---|---|
local LocalEtcd |
|
external ExternalEtcd |
|
ExternalEtcd
出現在
ExternalEtcd 描述外部 etcd 叢集。Kubeadm 不知道憑證檔案的存放位置,且必須提供這些檔案。
欄位 | 描述 |
---|---|
endpoints [必填][]string |
|
caFile [必填]string |
|
certFile [必填]string |
|
keyFile [必填]string |
|
FileDiscovery
出現在
FileDiscovery 用於指定檔案或 URL 到 kubeconfig 檔案,從該檔案載入叢集資訊。
欄位 | 描述 |
---|---|
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 map[string]string |
|
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 map[string]string |
|
ignorePreflightErrors []string |
|
imagePullPolicy core/v1.PullPolicy |
|
Patches
出現在
Patches 包含與將修補程式套用至 kubeadm 部署的元件相關的選項。
欄位 | 描述 |
---|---|
directory string |
|
此頁面為自動產生。
如果您計劃回報此頁面的問題,請在您的問題描述中提及該頁面為自動產生。修正可能需要在 Kubernetes 專案中的其他位置進行。