14 KiB
☸ Kubernetes — architektura, platformy, Cluster API
Přehled
Kubernetes (K8s) je open-source orchestrátor kontejnerů — de facto standard pro nasazování, škálování a správu containerizovaných aplikací. Postaven na modelu deklarativní konfigurace a control loopů (reconciliation).
Způsoby nasazení Kubernetes
| Metoda | Popis | Správa control plane | Vhodné pro |
|---|---|---|---|
| kubeadm | Oficiální nástroj pro bootstrap K8s clusteru | Self-managed (stacked/external etcd) | On-prem, lab, learning |
| K3s | Lightweight K8s (Rancher), single binary, embedded etcd/SQLite | Self-managed | Edge, IoT, low-resource, HA s embedded etcd |
| RKE2 | Rancher Kubernetes Engine 2, CIS-hardened, FIPS-ready | Self-managed | Enterprise on-prem, air-gapped, regulatory |
| OpenShift | Red Hat enterprise K8s + operator lifecycle + SDN + routing | Self-managed (RHCOS) | Enterprise, multicluster, platform engineering |
| Vanilla K8s (CAPI) | Cluster API — deklarativní provisioning a lifecycle management | Self-managed (CAPI managed) | Fleet management, GitOps, multi-provider |
| EKS (AWS) | Managed K8s | AWS managed | AWS cloud-native, nejméně ops |
| AKS (Azure) | Managed K8s | Azure managed | Azure cloud-native |
| GKE (GCP) | Managed K8s, auto-pilot, autopilot modes | GCP managed | GCP cloud-native |
| SKE (Sangfor) | Managed K8s on Sangfor HCI | Vendor managed | Sangfor HCI ekosystém |
Cluster API (CAPI)
Co je Cluster API
Cluster API je Kubernetes sub-projekt (SIG Cluster-Lifecycle), který přináší deklarativní API pro provisioning, upgrade a operace Kubernetes clusterů. Místo Terraform skriptů nebo manuálního kubeadm definujete cluster jako Kubernetes Custom Resources — Cluster, Machine, MachineDeployment atd.
Princip: Kubernetes cluster, který spravuje Kubernetes clustery.
Architektura
┌─────────────────────────────────────────┐
│ Management Cluster │
│ │
│ ┌──────────────────────────────────┐ │
│ │ CAPI Controllers │ │
│ │ ┌──────┐ ┌──────┐ ┌─────────┐ │ │
│ │ │ Infra│ │Bootstrap│ │Control │ │ │
│ │ │ Prov │ │ Prov │ │Plane Pr │ │ │
│ │ └──────┘ └──────┘ └─────────┘ │ │
│ └──────────────────────────────────┘ │
│ │
│ CR: Cluster, Machine, MachineDeployment│
│ ... │
└────────────────┬────────────────────────┘
│ CAPI controller
│ vytváří / spravuje
┌────────┴────────┐
▼ ▼
┌───────────────┐ ┌───────────────┐
│ Workload │ │ Workload │
│ Cluster (dev) │ │ Cluster (prod)│
│ ┌───┐ ┌───┐ │ │ ┌───┐ ┌───┐ │
│ │ CP│ │ W │ │ │ │ CP│ │ W │ │
│ └───┘ └───┘ │ │ └───┘ └───┘ │
└───────────────┘ └───────────────┘
- Management cluster — Kubernetes cluster, kde běží CAPI controllery. Může to být vyhrazený "admin" cluster (často velmi malý).
- Workload (managed) cluster — Kubernetes clustery, které CAPI spravuje. Každý je reprezentován jako CRD v management clusteru.
- Machine — abstrakce compute jednotky (VM, bare metal), která se stane K8s uzlem.
Klíčové CRD (Custom Resource Definitions)
| CRD | API skupina | Účel |
|---|---|---|
| Cluster | cluster.x-k8s.io |
Reprezentace clusteru (infra reference, control plane ref, networking) |
| Machine | cluster.x-k8s.io |
Jednotlivý uzel (VM/BM instance) |
| MachineDeployment | cluster.x-k8s.io |
Deklarativní škálování a rolling update workerů |
| MachineSet | cluster.x-k8s.io |
Replica set pro Machiny (lower-level) |
| MachineHealthCheck | cluster.x-k8s.io |
Auto-remediaci (automatické nahrazení unhealthy uzlu) |
| ClusterClass | cluster.x-k8s.io |
Šablona pro vytváření clusterů |
| KubeadmControlPlane | controlplane.cluster.x-k8s.io |
Control plane managed kubeadm (stacked/external etcd) |
| KubeadmConfig / KubeadmConfigTemplate | bootstrap.cluster.x-k8s.io |
Bootstrap konfigurace (kubeadm init/join) |
Provider model
CAPI používá třívrstvý provider model:
1. Infrastructure Provider
Vytváří a spravuje infrastrukturu (VM, sítě, LB, storage).
| Provider | Platforma | Status |
|---|---|---|
| AWS (CAPA) | AWS EC2, VPC, ELB, EKS | Stable, SIG-sponsored |
| Azure (CAPZ) | Azure VM, VNet, LB, AKS | Stable, SIG-sponsored |
| GCP (CAPG) | GCP Compute, VPC, GKE | Beta |
| vSphere (CAPV) | VMware vSphere | Stable |
| OpenStack (CAPO) | OpenStack compute/network | Stable |
| Metal3 | Bare metal (Ironic) | Stable |
| Docker (CAPD) | Docker containers (development) | Tilt/Dev only |
| Akamai (Linode) | Linode | Community |
| Azure Stack HCI | Azure Stack HCI | Community |
| cloudscale | cloudscale.ch | Community |
| Exoscale | Exoscale | Community |
| IBM Cloud | IBM Cloud | Community |
| Equinix Metal | Equinix (ex Packet) | Community |
| Hetzner | Hetzner Cloud | Community |
| OpenNebula | OpenNebula | Community |
2. Bootstrap Provider
Zajišťuje inicializaci K8s na node (kubeadm init/join, TLS certs, tokeny).
| Provider | Popis |
|---|---|
| Kubeadm (vestavěný) | Standardní kubeadm init/join, podpora stacked/external etcd |
| EKS | Bootstrap pro EKS managed control plane (AWS) |
| K3s | Lightweight K8s bootstrap (edge, IoT) |
| RKE2 | Rancher K8s bootstrap, CIS-hardened |
| Talos | API-driven bootstrap (Sidero Labs), immutable OS |
| k0smotron | K0s-based bootstrap + hosted control plane |
| MicroK8s | Canonical MicroK8s bootstrap |
| Canonical Kubernetes | Canonical K8s (snap-based) |
3. Control Plane Provider
Spravuje control plane uzly.
| Provider | Popis |
|---|---|
| KubeadmControlPlane (vestavěný) | Kubeadm-managed CP, stacked/external etcd |
| EKS | AWS EKS managed control plane |
| Kamaji | Hosted control plane (CP běží jako deployment v management clusteru) |
| K3s | K3s control plane (edge-optimized) |
| RKE2 | RKE2 control plane |
| Talos | Talos control plane, API-based management |
| k0smotron | Hosted control plane (k0s-based) |
| Nested | Nested virtualization control plane |
ClusterClass a Managed Topologies
ClusterClass (stabilní od CAPI v1beta1, CAPI v1.0+) umožňuje definovat šablonu clusteru:
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
name: standard-aws-cluster
spec:
controlPlane:
ref:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlaneTemplate
name: aws-cp-tmpl
machineInfrastructure:
ref:
kind: AWSMachineTemplate
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
name: aws-cp-machine-tmpl
workers:
machineDeployments:
- class: default-worker
template:
bootstrap:
ref:
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
name: aws-worker-bootstrap-tmpl
infrastructure:
ref:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSMachineTemplate
name: aws-worker-machine-tmpl
variables:
- name: instanceType
required: true
schema:
openAPIV3Schema:
type: string
enum: ["t3.large", "m5.large", "m5.xlarge"]
Pak lze vytvořit cluster s přetížením proměnných:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: dev-team-alpha
namespace: clusters
spec:
topology:
class: standard-aws-cluster
version: v1.30.2
controlPlane:
replicas: 1
workers:
machineDeployments:
- class: default-worker
name: md-0
replicas: 2
variables:
- name: instanceType
value: "m5.xlarge"
Životní cyklus clusteru s CAPI
| Fáze | Akce | CAPI mechanismus |
|---|---|---|
| Create | kubectl apply -f cluster.yaml |
Controller vytvoří infra (VM, network), provede bootstrap kubeadm init/join |
| Scale | Upravit replicas v MachineDeployment |
Controller vytvoří/odstraní Machine → VM → node join/drain |
| Upgrade | Změnit version v KubeadmControlPlane / MachineDeployment |
Rolling update: nový CP node → upgrade → starý drain a delete. Workers: MachineDeployment rolling update |
| Health check | MachineHealthCheck | Pokud node unhealthy > timeout, controller vytvoří náhradní Machine |
| Delete | kubectl delete cluster |
Controller provede drain, delete VMs, cleanup infrastruktury |
| Template update | Změna AWSMachineTemplate / KubeadmConfigTemplate | Stroj se vytvoří s novou šablonou; stávající Machiny se dotýká jen přes rolling update |
Auto-remediace (MachineHealthCheck)
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineHealthCheck
metadata:
name: prod-mhc
namespace: clusters
spec:
clusterName: prod-us-east
selector:
matchLabels:
cluster.x-k8s.io/deployment-name: prod-us-east-workers
unhealthyConditions:
- type: Ready
status: "False"
timeout: 5m
- type: Ready
status: Unknown
timeout: 5m
maxUnhealthy: "40%"
nodeStartupTimeout: 10m
CAPI + GitOps
CAPI se přirozeně integruje s GitOps:
- ArgoCD — Cluster a MachineDeployment manifesty v Git repozitáři, ArgoCD je aplikuje na management cluster
- Flux —
Kustomization+OCIRepositorypro CAPI objekty - Crossplane — lze kombinovat: Crossplane pro provisioning cloud resources (VPC, subnets), CAPI pro K8s cluster na nich
Vzor: vyhrazený "fleet management" cluster, na kterém běží CAPI + ArgoCD. Všechny workload clustery jsou definované jako YAML v Gitu.
CAPI pro on-prem
| Provider | Use case | Poznámka |
|---|---|---|
| Metal3 (Ironic) | Bare metal provisioning (PXE, IPMI, Redfish) | Automatické provisionování BM serverů jako K8s nodes |
| CAPV (vSphere) | VMware VM jako K8s nodes | Většina enterprise on-prem |
| CAPO (OpenStack) | OpenStack VM jako K8s nodes | OpenStack-native |
| Nutanix (CAPNX) | Nutanix AHV/Prism | Community provider |
CAPI pro edge
| Provider | Use case | Poznámka |
|---|---|---|
| K3s bootstrap + control plane | Lightweight K8s na edge zařízeních | Single binary, SQLite/embedded etcd |
| RKE2 bootstrap + control plane | Enterprise edge, air-gapped | CIS-hardened, FIPS |
| Talos | Immutable OS, API-driven | Minimal footprint, no SSH |
| k0smotron | Hosted control plane pro edge clustery | CP běží v management clusteru, worker na edge |
CAPI vs alternativy
| Nástroj | Přístup | CAPI výhoda | CAPI nevýhoda |
|---|---|---|---|
| Terraform/Pulumi | Imperativní/declarativní IaC | CAPI je K8s-native — stejný nástroj pro appky i clustery; GitOps ready | Terraform má širší podporu non-K8s resources |
| kubeadm | Manuální nebo skriptovaný | CAPI automatizuje celý lifecycle včetně upgradů a remediací | Vyšší komplexita, nutný management cluster |
| Rancher | Web UI + API pro správu K8s clusterů | CAPI je open-source, vendor-neutral | Rancher má GUI, monitoring, katalog appek |
| OpenShift Hive/ACM | Red Hat Advanced Cluster Management | CAPI je standardní (SIG) — širší provider ecosystem | ACM má governance, policy, compliance |
Limitations a maturity
- Management cluster je SPOF — musí mít vlastní HA a backup (etcd zálohy, certifikáty)
- CAPI není cluster autoscaler — řeší lifecycle clusterů, ne auto-scaling podů v rámci clusteru (používá se Cluster Autoscaler samostatně)
- Provider maturity se liší — AWS/Azure/vSphere stabilní, GCP/OpenStack beta, některé community providers alpha
- etcd backup není built-in — nutné řešit externě (Velero, etcd snapshot)
- CAPI neřeší aplikace — pouze lifecycle K8s clusterů (monitoring, logging, ingress si řídí uživatel)
- Learning curve — nutnost management clusteru, pochopení provider modelu, CRDs
- CAPI v1.13+ (2026) — stable release, v1beta1 API je GA, ClusterClass stable, EKS/AKS/GKE managed control plane podpora
Doporučený stack pro CAPI v produkci
| Komponenta | Doporučení |
|---|---|
| Management cluster | K3s (malý footprint) nebo kubeadm (3 nodes HA) |
| Infra provider | CAPA (AWS) / CAPV (vSphere) / CAPO (OpenStack) — dle platformy |
| Bootstrap/CP provider | Kubeadm nebo RKE2 |
| GitOps | ArgoCD nebo Flux |
| Backup | Velero + restic/Ceph |
| Cluster autoscaler | Cluster Autoscaler (přes CAPI integration) |
| Network | Cilium (CAPI-native, podpora) |
| Secrets | External Secrets Operator / Sealed Secrets |
| Monitoring | Prometheus + Grafana (kube-prometheus-stack) |
| Ingress | ingress-nginx / Kong / Traefik |
Zdroje
Odkazy, knihy a standardy: sources/infrastructure/sources.md
Poslední revize: 2026-06-18