GH GambleHub

Kubernetes: Cluster und Helm-Charts

Kubernetes: Cluster und Helm-Charts

1) Clusterarchitektur - ein Blick von oben

Steuerebene: 'kube-apiserver', 'etcd', 'kube-scheduler', 'kube-controller-manager', (in verwalteten Wolken ist ein Teil versteckt).
Arbeiter: 'kubelet', CRI-rentime (containerd/CRI-O), CNI-Plugin, kube-proxy/ebpf-proxy.
Intra-Cluster-Netzwerk: Pod-to-Pod, Service-VIP/ClusterIP, DNS CoreDNS.
Speicher: CSI-Treiber, dynamisches PVC → PV (StorageClass).
Fehlergrenzen: Knoten/AZ/Region. Platzieren Sie Replikate in Zonen (TopologySpreadConstraints/anti-affinity).

Standardrollen

Plattformteam: Erstellt/aktualisiert Cluster, CNI/CSI/Ingress, Richtlinien und GitOps.
Produktteams: Deployment Charts/Releases, folgen Sicherheitsrichtlinien und Ressourcen.

2) Cluster-Lebenszyklus

Erstellung: kOps, kubeadm, Rancher, EKS/AKS/GKE. Aktivieren Sie OIDC-Authentifizierung und -Audit sofort.
Upgrades: Minor-Versionen der Reihe nach (Control Plane → Nodes), gesteuert von maxUnavailable, Stage-Tests.
Add-ons (alle über Helm/GitOps): CNI (Calico/Cilium), CSI-Treiber, Ingress-Controller (NGINX/Gateway API/Contour/Traefik), Metrics-Server, Cluster-Autoscaler, Node-Local DNS, logging/metrics/trace.
Backups: etcd snapshot (falls selbst verwaltet), Velero für namespace/PVC.

3) Netzwerke, Dienste und ingress

CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh-фичи).
Service: 'ClusterIP', 'NodePort', 'LoadBalancer' (L4 Cloud Balancing), 'ExternalName'.
Ingress/Gateway API: L7-Routing, TLS, Anamnese Rate-Limit/WAF am Perimeter.
NetworkPolicy: Standardmäßig deny-all + explizite allow durch namespace/label.
Headless-Service ('clusterIP: None') für StatefulSet und Service Discovery.

4) Speicher (CSI) und Zustände

StorageClass: 'reclaimPolicy', 'volumeBindingMode' ('WaitForFirstConsumer' zur besseren Platzierung).
StatefulSet: stabile Namen/Volumes ('volumeClaimTemplates'), 'podManagementPolicy: Parallel' für schnelle Rollouts.
ReadWriteMany: Verwenden Sie verteilte Dateien (EFS/Filestore) vorsichtig - bewerten Sie die Latenz.
Snapshots: 'VolumeSnapshotClass' + cron-Backups.

5) Multi-Leasing und Politik

Namespaces nach Produkt/Medium.
RBAC: Mindestrollen, einzelne Service-Accounts, 'Role '/' RoleBinding' statt 'ClusterRole', wo möglich.
PSA (Pod Security Admission): Modi 'baseline '/' restricted' (Ersatz für PSP).
ResourceQuota / LimitRange: потолки CPU/Memory/PVC/LoadBalancer.
OPA Gatekeeper/Kyverno: Zulassungspolitik (z.B. Verbot': neueste', Anforderung 'Ressourcen', 'readOnlyRootFilesystem').
ImagePolicy/Webhooks: Überprüfung der Bildsignatur (cosign/policy-controller).

6) Beobachtbarkeit und Betrieb

Metriken: Prometheus-Stack, Kube-State-Metriken, Node-Exporteure.
Protokolle: Fluent Bit/Vector → Objekt/ES/OpenSearch, Rotation auf Knoten.
Traces: OpenTelemetry Collector.
SLO-Dashboards: Das RED-Modell auf ingress und Key Services.
Autoscale: HPA (nach Anwendungsmetriken), VPA für Hintergrund, Cluster-Autoscaler für Knoten.

7) Manifestmuster (Spickzettel)

Deployment (Auszug):
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: api, labels: { app: api } }
spec:
replicas: 3 strategy: { type: RollingUpdate, rollingUpdate: { maxUnavailable: 0, maxSurge: 1 } }
selector: { matchLabels: { app: api } }
template:
metadata:
labels: { app: api }
spec:
serviceAccountName: api-sa securityContext: { runAsNonRoot: true, fsGroup: 2000 }
containers:
- name: api image: registry. example. com/api:1. 2. 3 ports: [{ containerPort: 8080 }]
resources: { requests: { cpu: "200m", memory: "256Mi" }, limits: { cpu: "1", memory: "512Mi" } }
readinessProbe: { httpGet: { path: /healthz, port: 8080 }, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez,  port: 8080 }, initialDelaySeconds: 20 }
StatefulSet (Fragment):
yaml apiVersion: apps/v1 kind: StatefulSet metadata: { name: db }
spec:
serviceName: db replicas: 3 podManagementPolicy: Parallel selector: { matchLabels: { app: db } }
template:
metadata: { labels: { app: db } }
spec:
containers:
- name: db image: postgres:16-alpine volumeMounts: [{ name: data, mountPath: /var/lib/postgresql/data }]
volumeClaimTemplates:
- metadata: { name: data }
spec:
accessModes: ["ReadWriteOnce"]
resources: { requests: { storage: 100Gi } }
storageClassName: fast-ssd
PDB (PodDisruptionBudget):
yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: { name: api-pdb }
spec:
minAvailable: 2 selector: { matchLabels: { app: api } }
Ingress (Nginx, kurz):
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/proxy-read-timeout: "30"
spec:
tls: [{ hosts: ["api. example. com"], secretName: api-tls }]
rules:
- host: api. example. com http:
paths:
- path: /
pathType: Prefix backend: { service: { name: api, port: { number: 80 } } }

8) Helm v3 - Grundlagen und Struktur

Chart = Muster + Werte + Metadaten.


mychart/
Chart. yaml     # name, version (semver), type (application/library), dependencies values. yaml # default values. schema. json # (recommended) validation values templates/# .yaml. gotmpl (Deployment, Service, Ingress, …)
templates/tests/  # helm tests (smoke)
charts/# local dependencies (or OCI dependencies)
Chart. yaml (Beispiel):
yaml apiVersion: v2 name: api description: API service type: application version: 1. 4. 0 # chart version (semver)
appVersion: "1. 2. 3" # dependencies application version:
- name: redis version: 17. x.x repository: "oci://registry. example. com/charts"

9) Helm Vorlagen - Praktiken

Verwenden Sie helpers in'_ helpers. tpl 'für Namen/Beschriftungen/Anmerkungen.
Geben Sie überall 'resources', 'securityContext', 'readiness/liveness' an.
Generieren Sie Labels nach einem standardisierten Schema ('app. kubernetes. io/`).
Machen Sie die Fichi optional über 'Werte' (ingress/hpa/pdb/servicemonitor).
Aktivieren Sie' Werte. schema. json'- Schluss mit untreuen Configs.
Für sensible Daten - Secrets von externen Betreibern (External Secrets, SOPS), nicht in Werten gespeichert.

Beispiel'_ helpers. tpl'(Fragment):
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name      trunc 63      trimSuffix "-" -}}
{{- end -}}
Deployment. tpl (Fragment):
gotmpl apiVersion: apps/v1 kind: Deployment metadata:
name: {{ include "api. fullname". }}
labels: {{- include "api. labels". nindent 4 }}
spec:
replicas: {{.Values. replicaCount }}
strategy:
rollingUpdate:
maxSurge: 1 maxUnavailable: 0 selector:
matchLabels: {{- include "api. selectorLabels". nindent 6 }}
template:
metadata:
labels: {{- include "api. selectorLabels". nindent 8 }}
spec:
serviceAccountName: {{ include "api. serviceAccountName". }}
securityContext: {{- toYaml. Values. podSecurityContext      nindent 8 }}
containers:
- name: {{.Chart. Name }}
image: "{{.Values. image. repository }}:{{.Values. image. tag }}"
imagePullPolicy: IfNotPresent ports: [{ containerPort: {{.Values. service. port }} }]
resources: {{- toYaml. Values. resources      nindent 10 }}
envFrom:
- secretRef: { name: {{.Values. secretsRef }} }

10) Abhängigkeiten, Repositories und OCI

Helm v3 unterstützt OCI-Register: 'oci ://registry/org/charts'.
Die Abhängigkeitsversionen ('^ 1. 2. 0`, `~1. 2') und den „Helm dependency build“ vertreiben.
Unterschreiben Sie die Karte (prov), speichern Sie die Artefakte im CI-Artefakt-Repository.
Bibliothekscharts: Allgemeine Vorlagen (ingress/servicemonitor) zur erneuten Verwendung.

11) Hooks, CRD und die Reihenfolge der Operationen

Hooks: `pre-install`, `post-install`, `pre-upgrade`, `post-upgrade`, `test`. Fügen Sie Richtlinien hinzu ('before-hook-creation', 'hook-succeeded').
CRD: Setzen Sie in 'crds/' (setzen Sie auf die Templates), vermeiden Sie CRD-Updates „on the fly“ - machen Sie Migrationen separat.
DB Migrationen/Initialisierung - Job-Hook mit Idempotency und Timeouts.

12) Chart- und CI-Tests

'helm lint' + Validierung des Schemas.
Helm unittest (Einheit), chart-testing (ct) - Montage/Installation in kind/minikube am CI.
Snapshot-Tests von Vorlagen („Helm-Vorlage“ → mit einer Referenz verglichen werden).
Smoke-Tests' Helm Test'(heben 'Pod' mit Kontrollen).

13) GitOps (Argo CD/Flux)

Die Quelle der Wahrheit ist das Repository. Die Karte wird als HelmRelease/HelmChart (Flux) oder Application (Argo) gespeichert.
Synk-Richtlinien: Auto-Sync mit Prune/Selbstheilung, Status und Gesundheitschecks.
Promotion-Versionen: Tag-Bots/Semver-Bereich, PR-Flow.
Teilen Sie Repo in Apps (Charts) und Env (Overrides/Werte).
Secret Management: SOPS (Alter/KMS), Externe Geheimnisse.

14) Sicherheit: das erforderliche Minimum

PSA restricted: keine Privilegien, kein hostPath, mit eingeschränkten Kapazitäten, read-only rootfs.
ImagePolicy: Nur signierte/vertrauenswürdige Images.
NetworkPolicy: „standardmäßig gesperrt“.
RBAC: Service-Account per-app, 'Role '/' RoleBinding' im Namespace.
Admission-Kontrolle: Gatekeeper/Kyverno Regeln (Ressourcen/Grenzen, Etiketten, keine neuesten).
Geheimnisse: SOPS/Externe Geheimnisse; keine Geheimnisse in Werte/plain Git.

15) Anti-Muster

': neueste' in Charts und Bildern; fehlende' Werte. schema. json`.
Eine riesige Karte „für alles“ statt modular.
CRDs werden mit Vorlagen in 'templates/' aktualisiert → Chaos bei Upgrades.
Hartgesottene Namen/Port/Namespace in Vorlagen.
Mangel an Ressourcen/Grenzen und Proben → Latenzdrift und Instabilität.
Keine PDB → Zero Downtime ist bei Drain/Upgrades nicht möglich.
Geheimnisse in Git ohne Verschlüsselung; Manifeste ohne Policy-Checks.

16) Implementierung Checkliste (0-45 Tage)

0-10 Tage

Starte das Basis-Chart-Skelett mit'_ helpers. tpl', Etiketten, Proben, Ressourcen, PDB/Ingress optional.
Включить PSA restricted, NetworkPolicy deny-all, ResourceQuota/LimitRange.
Konfigurieren Sie GitOps (Argo/Flux), privates Register, Signieren von Bildern/Charts.

11-25 Tage

Teilen Sie die Karte in Module/Abhängigkeiten, fügen Sie' Werte. schema. json', Tests ('helm lint', unit, ct).
Verbinden Sie observability (ServiceMonitor/PodMonitor), log agents, OTel.
Geben Sie den Prozess der Upgrades: staging → canary → prod, hook-Migration mit rollback.

26-45 Tage

Automatisieren Sie Abhängigkeitsupdates (Bots/semver-ranges + PR).
Hinzufügen Gatekeeper/Kyverno Politik und Politik-Berichte zu CI.
Dokumentieren Sie das Runbook des Cluster-Upgrades, DR-Prozeduren (Velero/etcd snapshot).

17) Reifegradkennzahlen

100% der Apps werden über Helm/GitOps deployed, ohne' kubectl apply 'manuell.
Alle Charts haben 'Werte. schema. json', Tests, Signaturen und festgeschriebene Versionen von Abhängigkeiten.
PSA restricted/NetworkPolicy ist in allen namespace enthalten.
PDB und HPA sind bei allen kritischen Diensten vorhanden.
Sichere Geheimnisse (SOPS/External Secrets), „no latest“ -Politik, Bildunterschrift.
Cluster und Chart-Upgrades finden ohne Downtime (Canary/Blue-Green) statt, Restore-Tests sind regelmäßig.

18) Schlussfolgerung

Starke Kubernetes-Stiftung = robuste Clusterarchitektur + strikte Richtlinien + von GitOps verwaltete Helm-Charts in Industriequalität. Standardisieren Sie Vorlagen, schützen Sie die PSA/NetworkPolicy/RBAC-Umgebung, validieren Sie Werte und automatisieren Sie Tests, Signaturen und Werbeaktionen. Dann werden Upgrades und Releases vorhersehbar und die Plattform ist nachhaltig und benutzerfreundlich für Produktteams.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Telegram
@Gamble_GC
Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.