OpenTofu – HA Kubernetes-Installation
Eine hochverfügbare (HA) Kubernetes-Installation besteht aus mindestens drei Control-Plane Nodes, deren State in einer replizierten etcd-Datenbank (Raft-Konsensus) gespeichert wird.
main.tf (Auszug)
# Token für die Verbindung zwischen den Control-Planes
variable "k3s_server_token" {
type = string
default = "secret-master"
}
# Token für die Verbindung der Worker-Nodes zum Control-Plane
variable "k3s_agent_token" {
type = string
default = "secret-agents"
}
# Erster Control-Plane (master-0) – initialisiert den Cluster
resource "hcloud_server" "k3s-master-0" {
name = "k3s-master-0"
image = "debian-13"
server_type = "cx23"
location = "nbg1"
# ...
provisioner "remote-exec" {
inline = [
"curl -sfL https://get.k3s.io | K3S_TOKEN=${var.k3s_server_token} K3S_AGENT_TOKEN=${var.k3s_agent_token} sh -s - server --cluster-init"
]
}
}
# Weitere Control-Planes (master-1, master-2) – verbinden sich mit master-0
resource "hcloud_server" "k3s-master" {
for_each = { for server in range(1, 3) : server => "master-${server}" }
# ...
provisioner "remote-exec" {
inline = [
"curl -sfL https://get.k3s.io | K3S_TOKEN=${var.k3s_server_token} sh -s - server --server https://${hcloud_server.k3s-master-0.ipv4_address}:6443"
]
}
}
Befehle
cd ~/kubernetes-tutorial/src/opentofu/k3s-installation/k3s-installation-ha-load-balancer
tofu init
tofu plan
tofu apply
tofu state list
tofu state show hcloud_server.k3s-master-0 | grep "ipv4_address"
ssh -i ../../schulung root@[ip-master-0]
kubectl get nodes
exit
kubeconfig einrichten
scp -i ../../schulung root@[ip-master-0]:/etc/rancher/k3s/k3s.yaml ~/.kube/config
vim ~/.kube/config # server: https://[ip-master-0]:6443 eintragen
kubectl get nodes
tofu destroy