GH GambleHub

Kubernetes: klasterlər və Helm charts

Kubernetes: klasterlər və Helm charts

1) Klasterin arxitekturası - yuxarıdan baxış

Control Plane: 'kube-apiserver', 'etcd', 'kube-scheduler', 'kube-controller-manager', (idarə olunan buludların bir hissəsi gizlədilir).
Worker: 'kubelet', CRI-rantaym (containerd/CRI-O), CNI-plugin, kube-proxy/ebpf-proxy.
Daxili şəbəkə: Pod-to-Pod, Service-VIP/ClusterIP, DNS CoreDNS.
Saxlama: CSI sürücüləri, dinamik PVC → PV (StorageClass) provizinq.
Imtina sərhədləri: qovşaq/AZ/region. Replikaları zonalara yerləşdirin (TopologySpreadConstraints/anti-affinity).

Tipik rollar

Platforma komandası: CNI/CSI/Ingress, siyasət və GitOps.
Məhsul komandaları: siyahıları/buraxılışları deployur, təhlükəsizlik siyasətlərini və resurslarını izləyir.

2) Klaster həyat dövrü

Yaradılması: kOps, kubeadm, Rancher, EKS/AKS/GKE. Dərhal OIDC autentifikasiyası və auditini açın.
Yeniləmələr: növbə ilə minor versiyaları (control plane → düyünlər), maxUnavailable tərəfindən idarə olunan, steycinq testləri.
Add-ons (hamısı - Helm/GitOps vasitəsilə): CNI (Calico/Cilium), CSI sürücüsü, Ingress-controller (NGINX/Gateway API/Contour/Traefik), Metrics-Server, Cluster Autoscaler, Node-Local DNS, log/metrika/trace.
Backup: etcd snapshot (self-managed), namespace/PVC üçün Velero.

3) Şəbəkələr, xidmətlər və ingress

CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh-фичи).
Service: 'ClusterIP', 'NodePort', 'LoadBalancer' (L4 bulud balansı), 'ExternalName'.
Ingress/Gateway API: L7-marşrutlaşdırma, TLS, perimetrdə rate-limit/WAF tarixi.
NetworkPolicy: default deny-all + namespace/label.
StatefulSet və Discovery Service üçün Headless-service ('clusterIP: None').

4) Anbarlar (CSI) və hallar

StorageClass: 'reclaimPolicy', 'volumeBindingMode' (daha yaxşı yerləşdirmə üçün 'WaitForFirstConsumer').
StatefulSet: sabit adlar/cildlər ('volumeClaimTemplates'), 'podManagementPolicy: Parallel'.
ReadWriteMany: paylanmış fayllardan (EFS/Filestore) diqqətlə istifadə edin - gizliliyi qiymətləndirin.
Şəkillər: 'VolumeSnapshotClass' + cron-backup.

5) Multi-icarə və siyasət

Məhsul/çərşənbə Namespaces.
RBAC: minimal rollar, fərdi xidmət hesabları, mümkün olan yerlərdə «ClusterRole» əvəzinə «Role »/« RoleBinding».
PSA (Pod Security Admission): 'baseline '/' restricted' (PSP əvəz) rejimləri.
ResourceQuota / LimitRange: потолки CPU/Memory/PVC/LoadBalancer.
OPA Gatekeeper/Kyverno: giriş siyasəti (məsələn, ': latest', 'resources', 'readOnlyRootFilesystem' tələbi).
ImagePolicy/Webhucks: Image imzasını yoxlamaq (cosign/policy-controller).

6) Müşahidə və istismar

Metriklər: Prometheus-yığını, kube-state-metrics, node-ixracatçıları.
Log: Fluent Bit/Vector → obyekt/ES/OpenSearch, düyünlərdə rotasiya.
Treys: OpenTelemetry Collector.
SLO-daşbordları: ingress və əsas xidmətlərdə RED-model.
Avtoskeyl: HPA (tətbiqin metriklərinə görə), arxa plan üçün VPA, qovşaqlar üçün Cluster-Autoscaler.

7) Manifestlərin nümunələri (şparqalka)

Deployment (çıxarış):
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 (fraqment):
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, qısaca):
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 - əsasları və strukturu

Chart = şablonlar + dəyərlər + metadata.


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 (nümunə):
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 şablonları - təcrübələr

Helpers in '_ helpers. tpl 'adlar/etiketlər/izahatlar üçün.
Hər yerdə 'resources', 'securityContext', 'readiness/liveness'.
Standartlaşdırılmış sxem ('app. kubernetes. io/`).
'values' (ingress/hpa/pdb/servicemonitor) vasitəsilə xüsusiyyətləri seçin.
'values daxil edin. schema. json '- səhv konfiqurasiya dayandırın.
Həssas məlumatlar üçün - xarici operatorların Secrets (External Secrets, SOPS) və values saxlamaq deyil.

Nümunə '_ helpers. tpl '(fraqment):
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name      trunc 63      trimSuffix "-" -}}
{{- end -}}
Deployment. tpl (fraqment):
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) Asılılıqlar, anbarlar və OCI

Helm v3 OCI registrlərini dəstəkləyir: 'oci ://registry/org/charts'.
Asılılıq versiyası ('^ 1. 2. 0`, `~1. 2 ') və' helm dependency build '.
Çartı imzalayın (prov), artefaktları CI artefakt-repozitorunda saxlayın.
Library charts: təkrar istifadə üçün ümumi şablonlar (ingress/servicemonitor).

11) Hooks, CRD və əməliyyat proseduru

Hooks: `pre-install`, `post-install`, `pre-upgrade`, `post-upgrade`, `test`. policies ('before-hook-creation', 'hook-succeeded') əlavə edin.
CRD: 'crds/' -ə qoyun (temperatur təyin olunana qədər), CRD yeniləmələrindən qaçın - ayrıca miqrasiya edin.
DB miqrasiyası/başlanğıc - idempotency və vaxt ilə job-hook.

12) Chart və CI test

'helm lint' + sxem validasiyası.
Helm unittest (unit), chart-testing (ct) - CI-də kind/minikube-də montaj/quraşdırma.
Snapshot şablon testləri ('helm template' → etalon ilə müqayisə).
Smoke testləri 'helm test' (yoxlamalarla 'Pod' qaldırın).

13) GitOps (Argo CD/Flux)

Həqiqətin mənbəyi anbardır. Chart HelmRelease/HelmChart (Flux) və ya Application (Argo) kimi saxlanılır.
Sink siyasətləri: prune/self-heal, status və health-checks ilə auto-sync.
Promosyon versiyası: tag-botlar/semver-range, PR-flow.
repo apps (hit) və env (overrides/values) bölünür.
Secret-menecment: SOPS (age/KMS), External Secrets.

14) Təhlükəsizlik: minimum zəruri

PSA restricted: heç bir imtiyaz, heç bir hostPath, məhdud capabilities, read-only rootfs.
ImagePolicy: Yalnız imzalanmış/etibarlı şəkillər.
NetworkPolicy: «Default kilidlidir».
RBAC: per-app xidmət hesabı, namespace-də 'Role '/' RoleBinding'.
Admission-Control: Gatekeeper/Kyverno qaydaları (resources/limits, labels, no latest).
Secrets: SOPS/External Secrets; values/plain Git sirləri qoymayın.

15) Anti-nümunələr

': latest' hit və şəkillərdə; yox 'values. schema. json`.
Modul əvəzinə bir nəhəng «hər şey» nizamnaməsi.
CRD 'templates/' → yenilənmiş xaos şablonları ilə yenilənir.
Şablonlarda sərt kodlanmış adlar/port/namespace.
Resursların/limitlərin və nümunələrin olmaması → gecikmə sürüklənməsi və qeyri-sabitlik.
No PDB → sıfır downtime drain/yeniləmə zamanı mümkün deyil.
şifrələmə olmadan Git sirləri; siyasət-checks olmadan manifestlər.

16) Giriş çek siyahısı (0-45 gün)

0-10 gün

c '_ helpers əsas çart-skelet başlayın. tpl ', labels, probes, resources, PDB/Ingress isteğe bağlıdır.
Включить PSA restricted, NetworkPolicy deny-all, ResourceQuota/LimitRange.
GitOps (Argo/Flux), şəxsi registrini, şəkillərin/siyahıların imzasını konfiqurasiya edin.

11-25 gün

Nizamnaməni modullara/asılılıqlara bölün, 'values əlavə edin. schema. json ', testlər (' helm lint ', unit, ct).
Observability (ServiceMonitor/PodMonitor), log agentləri, OTel.
Yeniləmə prosesini daxil edin: staging → canary → prod, rollback ilə hook-miqrasiya.

26-45 gün

Asılılıq yeniləmələrini avtomatlaşdırın (botlar/semver-ranges + PR).
CI Gatekeeper/Kyverno siyasət və siyasət Reports əlavə edin.
Klaster yeniləməsinin runbook sənədləşdirilməsi, DR prosedurları (Velero/etcd snapshot).

17) Yetkinlik metrikası

Tətbiqlərin 100% -i əl ilə «kubectl apply» olmadan Helm/GitOps vasitəsilə ödənilir.
Bütün hit-paradlarda 'values var. schema. json ', testlər, imza və sabit asılılıq versiyaları.
PSA restricted/NetworkPolicy bütün namespace daxildir.
PDB və HPA bütün kritik xidmətlərdə mövcuddur.
Secure Secrets (SOPS/External Secrets), no latest siyasəti, şəkillərin imzası.
Klaster və çartın yeniləmələri downtime (canary/blue-green) olmadan keçirilir, bərpa testləri müntəzəmdir.

18) Nəticə

Güclü Kubernetes-fundament = etibarlı klaster arxitekturası + ciddi siyasət + GitOps tərəfindən idarə olunan sənaye keyfiyyətli Helm charts. Şablonları standartlaşdırın, PSA/NetworkPolicy/RBAC mühitini qoruyun, values doğrulayın və testləri, imzaları və promosyonları avtomatlaşdırın. Sonra yeniləmələr və buraxılışlar proqnozlaşdırıla bilər, platforma isə davamlı və ərzaq komandaları üçün əlverişli olacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.