使用 kubeadm 部署控制平面,無需註冊主節點

使用 kubeadm 部署控制平面,無需註冊主節點

我想設定 Kubernetes 叢集並隱藏所有客戶端的控制平面元件(某種託管叢集)。Kubeadm使用 Kubelet 和靜態 Pod 來運行此元件,這會導致將 Node 和 Pod 資源註冊到 API Server 中,以便任何使用者都ClusterRole可以列出和管理主節點和 Pod。

我可以引導控制平面,停止 Kubelet 代理並刪除主節點資源,但似乎這樣我就無法kubeadm在發生任何崩潰時使用升級元件和 Kubelet 來恢復 Pod。

在這種情況下,我可以使用 Kubernetes 叢集來運行控制平面嗎kubeadm

答案1

我可以使用 kubeadm 在 Kubernetes 叢集之外運行控制平面嗎

簡短的回答:不,這是不可能的。

在這種情況下我應該使用自己的儀器嗎

是的,這將是解決這種情況的方法。如果您找到自己的解決方案,請隨意將其寫為答案。

作為解決方法,您可以嘗試建立一個單獨的控制平面(如Kubernetes 的艱難之路) 進而kubeadm join。但是,您還必須意識到這種類型的配置執行起來會很複雜。另請參閱這個部落格頁面

另請參閱類似主題:

只要工作節點具有對控制平面的網路存取權限,您就可以在 Kubernetes 外部執行 Kubernetes 控制平面。大多數託管 Kubernetes 解決方案都使用這種方法。

另請參閱此頁面有關節點自註冊

編輯:我發現了另一種可能解決方法

編輯2:這個教學也應該對你有幫助。

答案2

最終我重寫了kubeadm新增的選項,將控制平面元件部署為 unix 服務並在 Kubernetes 叢集外運行它們。

如果您有興趣,請看一下公關並根據您的要求採用它。如何使用:

# build the updated kubeadm
make WHAT=cmd/kubeadm KUBE_BUILD_PLATFORMS=linux/amd64

# install the control plane components
wget -q --show-progress --https-only --timestamping \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kube-apiserver" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kube-controller-manager" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kube-scheduler" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kubectl"

chmod +x kube-apiserver kube-controller-manager kube-scheduler kubectl
sudo mv kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/

wget -q --show-progress --https-only --timestamping \
  "https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz"

tar -xvf etcd-v3.4.15-linux-amd64.tar.gz
sudo mv etcd-v3.4.15-linux-amd64/etcd* /usr/local/bin/

# run kubeadm with enabled service hosting option
kubeadm init --service-hosting

如果您使用 Cluster API,則必須編寫自己的控制平面控制器和 CRD 來支援您自己的部署。

相關內容