Zum Inhalt

k8s-1.27 (Foundation / On-Prem)

Installiert k3s auf Linux-Hosts (Controlplane- und Worker-VMs/Bare Metal). Das ist der Block für Foundation-Cluster: Hosts für Loadbalancer, Ceph/Rook, und die Umgebung, auf der k3s-server-Controlplanes laufen.

Host-Härtung, auditd und der Log-Collector (Vector → VictoriaLogs) liegen im Foundation-Block ayedo/linux/hardening — Howto: Logs ingestieren.

In der Polycrate API entspricht so ein Cluster typischerweise einer Region (Standort + Service-Angebot: S3, Edge, Controlplane-IPAM).

Block cargo.ayedo.cloud/ayedo/linux/k8s-1.27
Name historisch k8s-1.27 — unterstützt k3s ab 1.27 (config.k3s.version)
Inventory inventory.yml im Workspace-Root
Kubeconfig artifacts/secrets/kubeconfig.yml

Aktuelle Block-Version und Changelog: Hub bzw. CHANGELOG.poly im Block.

Wann dieser Block?

  • On-Premises, BYOC, Air-Gap
  • Foundation-/Infra-Cluster (nicht Tenant-Workload-CP)
  • Multi-Master k3s auf echten Nodes
  • Cilium statt Flannel (flannel.disabled: true bei Erstinstallation)

Tenant-Controlplanes auf einem bestehenden Host-Cluster: k3s-server.

Features

  • Multi-Node HA Controlplane + Worker (Ansible-Gruppen)
  • OIDC am kube-apiserver
  • Private Registry Mirrors (k3s.private_registries)
  • TLS SANs, Resource-Limits, Eviction, maxpods
  • Controlplane ohne Agent (k3s.controlplane.disable_agent) + Taints
  • Flannel aus für Cilium; kube-proxy aus für Cilium kube-proxy-replacement
  • Optional k3s ServiceLB / local-path-provisioner (Foundation oft aus — SDP bringt Cilium LB + CSI)
  • Externer Cloud-Provider (external_cloud_provider)
  • Actions: install, configure-cluster, join-cluster, show-ips, restart-k3s (Cordon/Drain), uninstall, hosts

Inventory

# inventory.yml (Workspace-Root)
all:
  children:
    k8s_controlplane:
      hosts:
        cp-1:
          ansible_host: 10.0.0.11
          ansible_user: ubuntu
          ansible_become: true
        cp-2:
          ansible_host: 10.0.0.12
          ansible_user: ubuntu
          ansible_become: true
        cp-3:
          ansible_host: 10.0.0.13
          ansible_user: ubuntu
          ansible_become: true
    k8s_worker:
      hosts:
        worker-1:
          ansible_host: 10.0.0.21
          ansible_user: ubuntu
          ansible_become: true

Gruppen-Namen müssen zu config.ansible_host_groups passen. inventory.from an der Block-Instanz ist Legacy.

Workspace

blocks:
  - name: k8s
    from: cargo.ayedo.cloud/ayedo/linux/k8s-1.27:0.3.7
    config:
      cluster_name: foundation
      cluster_ip_detection:
        enabled: true
      init:
        restart_nodes: true   # nach dem ersten Install auf false
      oidc:
        enabled: true
        issuer_url: "https://id.example.com/realms/kubernetes"
        client_id: "k8s-foundation"
        username_claim: "email"
        groups_claim: "groups"
      k3s:
        version: v1.34.4+k3s1
        token: mySecureTokenAtLeast10
        maxpods: "110"
        cidr: 10.42.0.0/16
        tlssans:
          - k8s-api.example.com
        private_registries:
          enabled: true
          content:
            mirrors:
              docker.io:
                endpoint:
                  - "https://registry.example.com:443"
      flannel:
        disabled: true          # Cilium folgt als SDP-Block
      kube_proxy:
        disabled: true          # wenn Cilium kube-proxy-replacement
      ansible_host_groups:
        controlplane: k8s_controlplane
        worker: k8s_worker
polycrate run k8s show-ips
polycrate run k8s install
polycrate run k8s configure-cluster
polycrate run k8s join-cluster
polycrate run k8s restart-k3s
Option Bedeutung
k3s.version k3s-Release (ab v1.27)
k3s.token Join-Secret, ≥ 10 Zeichen
k3s.cidr Pod-CIDR
k3s.tlssans extra API-SANs
oidc.enabled Enterprise-Login
flannel.disabled alternativer CNI (Cilium) — nur bei Erstinstallation
external_cloud_provider externer CCM; nachträglich nicht abschaltbar ohne Rebuild
cluster_ip_detection.enabled IPs automatisch; sonst Inventory-Werte

Einmalige Schalter

Flannel-Disable und external_cloud_provider gelten bei der ersten Installation. Wechsel = Cluster neu aufsetzen.

Foundation und Regionen

Nach dem Cluster:

  1. SDP-Blöcke auf diesem Cluster: Cilium (BGP/LB), Rook/Ceph, Envoy/NGINX, VictoriaMetrics / VictoriaLogs
  2. Foundation-Hosts härten und Host-Logs shippen: ayedo/linux/hardeningLogs ingestieren
  3. In der API eine Region an den Workspace/Cluster hängen
  4. Darauf K8sControlplane / S3 / Loadbalancer ausrollen

Die Distro endet am lauffähigen k3s. Storage- und Edge-Blöcke sind SDP.

Day-2

Thema Action / Hinweis
IPs prüfen polycrate run k8s show-ips
Config ohne Reinstall configure-cluster
Node-Restart restart-k3s (Cordon → Drain → Restart → Uncordon; k3s.restart.drain_disabled)
Version k3s.version setzen, install
Inventory polycrate run k8s hosts

Weiterführend