Stellen Sie die Steuerebene ohne Masterknotenregistrierung mit kubeadm bereit.

Stellen Sie die Steuerebene ohne Masterknotenregistrierung mit kubeadm bereit.

Ich möchte den Kubernetes-Cluster einrichten und die Control Plane-Komponenten für alle Clients ausblenden (eine Art verwalteter Cluster). Kubeadmverwendet Kubelet und statische Pods, um diese Komponenten auszuführen, was dazu führt, dass Node- und Pod-Ressourcen im API-Server registriert werden, sodass jeder Benutzer ClusterRoledie Master-Knoten und -Pods auflisten und verwalten kann.

Ich kann die Steuerebene bootstrappen, den Kubelet-Agenten stoppen und die Ressourcen des Masterknotens löschen, aber es scheint, dass ich auf diese Weise weder kubeadmdie Komponenten aktualisieren noch Kubelet verwenden kann, um Pods wiederherzustellen, falls ein Absturz auftritt.

Kann ich die Steuerebene außerhalb des Kubernetes-Clusters ausführen kubeadmoder sollte ich in diesem Fall meine eigenen Instrumente verwenden?

Antwort1

Kann ich die Kontrollebene mit kubeadm aus dem Kubernetes-Cluster ausführen?

Kurze Antwort: Nein, das ist nicht möglich.

sollte ich in diesem Fall meine eigenen Instrumente verwenden

Ja, das ist die Lösung für diese Situation. Wenn Sie Ihre eigene Lösung finden, können Sie diese gerne als Antwort schreiben.

Als Workaround können Sie versuchen, eine separate Kontrollebene zu erstellen (wie inKubernetes auf die harte Tour) und dannkubeadm join. Sie müssen sich jedoch auch darüber im Klaren sein, dass diese Art der Konfiguration kompliziert durchzuführen ist. Sehen Sie sich auch an:diese Blogseite.

Siehe auch ähnliche Themen:

Sie können die Kubernetes-Steuerungsebene außerhalb von Kubernetes ausführen, solange die Worker-Knoten Netzwerkzugriff auf die Steuerungsebene haben. Dieser Ansatz wird bei den meisten verwalteten Kubernetes-Lösungen verwendet.

Schauen Sie sich auch diese Seite überSelbstregistrierung von Knoten.

EDIT: Ich habe eine andere Möglichkeit gefundenProblemumgehung.

EDIT2: DiesLernprogrammsollte dir auch helfen.

Antwort2

Schließlich habe ich es umgeschrieben und kubeadmdie Option hinzugefügt, Control Plane-Komponenten als Unix-Dienste bereitzustellen und sie aus dem Kubernetes-Cluster auszuführen.

Wenn Sie interessiert sind, schauen Sie sichPRund passen Sie es Ihren Anforderungen an. So verwenden Sie es:

# 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

Wenn Sie die Cluster-API verwenden, müssen Sie Ihren eigenen Control Plane-Controller und Ihre eigenen CRDs schreiben, um Ihre eigene Bereitstellung zu unterstützen.

verwandte Informationen