kubeadm 配置 (v1beta3)
概述
v1beta3 包定義了 kubeadm 配置檔案格式的 v1beta3 版本。此版本透過修復一些小問題並新增一些新欄位來改進 v1beta2 格式。
自 v1beta2 以來的變更列表
- 已刪除已棄用的“ClusterConfiguration.useHyperKubeImage”欄位。Kubeadm 不再支援 hyperkube 映象。
- 已刪除“ClusterConfiguration.dns.type”欄位,因為 CoreDNS 是 kubeadm 支援的唯一 DNS 伺服器型別。
- 在包含敏感資訊的欄位上新增“datapolicy”標籤。這將導致在列印 API 結構時省略欄位值(使用 klog)。
- 新增“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 提供的預設值還包括在需要時強制元件之間值的 {0}(例如,控制器管理器上的 --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 的情況下,這些設定是引導令牌的配置以及執行 kubeadm 的節點特有的所有設定,包括
NodeRegistration,它包含與將新節點註冊到叢集相關的欄位;使用它來自定義節點名稱、要使用的 CRI 套接字或應僅適用於此節點的任何其他設定(例如,節點 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 將應用預設值。
有關 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/v1beta3 kind: InitConfiguration bootstrapTokens: - token: "9a08jv.c0izixklcxtmnze7" description: "kubeadm bootstrap token" ttl: "24h" - token: "783bde.3f89s0fje9f38fhf" description: "another bootstrap token" usages: - authentication - signing groups: - system:bootstrappers:kubeadm:default-node-token nodeRegistration: name: "ec2-10-100-0-1" criSocket: "/var/run/dockershim.sock" taints: - key: "kubeadmNode" value: "someValue" effect: "NoSchedule" kubeletExtraArgs: v: 4 ignorePreflightErrors: - IsPrivilegedUser imagePullPolicy: "IfNotPresent" localAPIEndpoint: advertiseAddress: "10.100.0.1" bindPort: 6443 certificateKey: "e6a2eb8581237ab72a4f494f30285ec12a9694d750b9785706a83bfcbbbd2204" skipPhases: - addon/kube-proxy --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration etcd: # one of local or external local: imageRepository: "registry.k8s.io" imageTag: "3.2.24" dataDir: "/var/lib/etcd" extraArgs: listen-client-urls: "http://10.100.0.1:2379" serverCertSANs: - "ec2-10-100-0-1.compute-1.amazonaws.com" peerCertSANs: - "10.100.0.1" # external: # endpoints: # - "10.100.0.1:2379" # - "10.100.0.2:2379" # caFile: "/etcd/kubernetes/pki/etcd/etcd-ca.crt" # certFile: "/etcd/kubernetes/pki/etcd/etcd.crt" # keyFile: "/etcd/kubernetes/pki/etcd/etcd.key" networking: serviceSubnet: "10.96.0.0/16" podSubnet: "10.244.0.0/24" dnsDomain: "cluster.local" kubernetesVersion: "v1.21.0" controlPlaneEndpoint: "10.100.0.1:6443" apiServer: extraArgs: authorization-mode: "Node,RBAC" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File certSANs: - "10.100.1.1" - "ec2-10-100-0-1.compute-1.amazonaws.com" timeoutForControlPlane: 4m0s controllerManager: extraArgs: "node-cidr-mask-size": "20" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File scheduler: extraArgs: bind-address: "10.100.0.1" extraVolumes: - name: "some-volume" hostPath: "/etc/some-path" mountPath: "/etc/some-pod-path" readOnly: false pathType: File certificatesDir: "/etc/kubernetes/pki" imageRepository: "registry.k8s.io" clusterName: "example-cluster" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration # kubelet specific options here --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration # kube-proxy specific options here
Kubeadm join 配置型別
當使用 --config
選項執行 kubeadm join
時,應提供 JoinConfiguration 型別。
apiVersion: kubeadm.k8s.io/v1beta3 kind: JoinConfiguration ...
JoinConfiguration 型別用於配置執行時設定,在 kubeadm join
的情況下,這些設定是用於訪問叢集資訊的發現方法以及執行 kubeadm 的節點特有的所有設定,包括
nodeRegistration
,它包含與將新節點註冊到叢集相關的欄位;使用它來自定義節點名稱、要使用的 CRI 套接字或應僅適用於此節點的任何其他設定(例如,節點 IP)。apiEndpoint
,它代表將在該節點上部署的 API 伺服器例項的端點。
資源型別
BootstrapToken
出現在
BootstrapToken 描述一個引導令牌,該令牌儲存在叢集中的 Secret 中
欄位 | 描述 |
---|---|
token [必填]BootstrapTokenString |
|
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/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 [必填]發現 |
|
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 指定 kubelet 在 TLS 引導過程中使用的選項。
欄位 | 描述 |
---|---|
bootstrapToken BootstrapTokenDiscovery |
|
file FileDiscovery |
|
tlsBootstrapToken string |
|
timeout meta/v1.Duration |
|
Etcd
出現在
Etcd 包含描述 Etcd 配置的元素。
欄位 | 描述 |
---|---|
本地 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 專案的其他地方進行。