Einführung
KubeOne ist das Open-Source-Tool von Kubermatic zur Automatisierung des gesamten Lebenszyklus von Kubernetes-Clustern. In diesem Tutorial lernen Sie, wie Sie von Bare-Metal-Servern zu einem produktionsreifen Cluster gelangen.
Schritt 1: KubeOne installieren
Laden Sie die neueste KubeOne-Binärdatei für Ihre Plattform herunter:
curl -sfL https://get.kubeone.io | sh
kubeone-Version
Schritt 2: Bereiten Sie Ihre Infrastruktur vor
Bei einer Bare-Metal-Umgebung können Sie Terraform komplett überspringen – Ihre Server sind ja bereits vorhanden. Sie benötigen jedoch eine Komponente vor der Steuerungsebene: einen Load Balancer. Dies ist für die Hochverfügbarkeit (HA) unabdingbar, da kubectl und jeder Worker-Knoten benötigt eine einzige feste Adresse, mit der er kommunizieren kann, und nicht drei separate IP-Adressen der Steuerungsebene.
Die einfachste Open-Source-Lösung ist HAProxy auf einer separaten kleinen VM (oder zwei, mit Keepalived für den VIP), die den TCP-Port 6443 an alle drei Control-Plane-Knoten weiterleitet. Für dieses Tutorial gehen wir davon aus, dass Ihr Load Balancer unter api.production-edge.example.com.
Die HA-Topologie sieht wie folgt aus:
flowchart TD
Client["kubectl / workers"]
LB["Load balancer
api.production-edge.example.com:6443"]
Client --> LB
LB --> CP1["control-plane-1
203.0.113.10
kube-apiserver + etcd"]
LB --> CP2["control-plane-2
203.0.113.11
kube-apiserver + etcd"]
LB --> CP3["control-plane-3
203.0.113.12
kube-apiserver + etcd"]
CP1 <-.->|etcd raft| CP2
CP2 <-.->|etcd raft| CP3
CP1 <-.->|etcd raft| CP3
Warnung: Stellen Sie sicher, dass alle Server im privaten Netzwerk miteinander kommunizieren können. Die Firewall-Regeln müssen den Datenverkehr für die Kubernetes-API (6443), etcd (2379–2380) und kubelet (10250) zwischen den Knoten der Steuerungsebene sowie den Datenverkehr von Port 6443 vom Load Balancer zu jedem Knoten der Steuerungsebene zulassen.
Schritt 3: Erstellen der KubeOne-Konfiguration
apiVersion: kubeone.k8c.io/v1beta2
kind: KubeOneCluster
name: production-edge
versions:
kubernetes: "v1.30.2"
cloudProvider:
none: {}
apiEndpoint:
host: "api.production-edge.example.com"
port: 6443
controlPlane:
hosts:
- publicAddress: "203.0.113.10"
privateAddress: "10.0.0.10"
sshUser: "ubuntu"
- publicAddress: "203.0.113.11"
privateAddress: "10.0.0.11"
sshUser: "ubuntu"
- publicAddress: "203.0.113.12"
privateAddress: "10.0.0.12"
sshUser: "ubuntu"
Die API-Endpunkt Der Block ist das, was diesen Cluster tatsächlich hochverfügbar macht. KubeOne schreibt diesen Hostnamen in die generierte Kubeconfig-Datei und in die Kubelet-Konfiguration jedes Worker-Knotens, sodass jeder API-Aufruf den Load Balancer erreicht und jeden funktionsfähigen Knoten der Steuerungsebene ansprechen kann. Wenn man ihn weglässt, erhält man drei Knoten der Steuerungsebene, zwischen denen niemand ein Failover durchführen kann.
Schritt 4: Cluster bereitstellen
kubeone apply --manifest kubeone.yaml
KubeOne wird:
- Container-Laufzeitumgebung (containerd) installieren
- Den ersten Knoten der Steuerungsebene initialisieren
- Den verbleibenden Knoten der Steuerungsebene beitreten
- Netzwerk konfigurieren (standardmäßig Canal CNI)
- Maschinensteuerung für Worker-Knoten bereitstellen
Schritt 5: Überprüfen Sie Ihren Cluster
export KUBECONFIG=$PWD/production-edge-kubeconfig
kubectl get nodes
kubectl get pods -A
Sie sollten alle drei Knoten der Steuerungsebene in Bereit Zustand.
Nächste Schritte
- Worker-Knoten mithilfe von MachineDeployments hinzufügen
- Konfigurieren Sie persistenten storage einem CSI-Treiber
- Richten Sie die Überwachung mit Prometheus und Grafana ein
- Cluster-Autoskalierung aktivieren
Zusammenfassung
Sie haben mithilfe von KubeOne erfolgreich einen hochverfügbaren Kubernetes-Cluster auf Bare-Metal-Hardware bereitgestellt. Der Cluster ist produktionsbereit und verfügt über drei Control-Plane-Knoten, die für Fehlertoleranz sorgen.
