GH GambleHub

Kubernetes: მტევანი და Helm ქარტიები

Kubernetes: მტევანი და Helm ქარტიები

1) კლასტერის არქიტექტურა - ზემოდან ხედი

Control Plane: 'kube-apiserver', 'etcd', 'kube-scheduler', 'kube-Controller მენეჯერი', (კონტროლირებად ღრუბლებში, ნაწილი იმალება).
Worker: 'kubelet', CRI rantime (Containerd/CRI-O), CNI მოდულის, kube-proxy/ebpf-proxy.
Interclaster ქსელი: Pod-to-Pod, Service-VIP/ClusterIP, DNS CORDNS.
საცავი: CSI დრაივერები, დინამიური PVC-PV დრაივერი (StorageClass).
უარის თქმის საზღვრები: კვანძი/AZ/რეგიონი. განათავსეთ შენიშვნები ზონების მიხედვით (TopologySpreadConstraints/anti affinity).

ტიპიური როლები

პლატფორმის გუნდი: მტევანი, CNI/CSI/Ingress, პოლიტიკა და GitOps ქმნის/გაგრილდება.
სასურსათო გუნდები: ჩარტები/გამოშვებები, მიჰყვება უსაფრთხოების და რესურსების პოლიტიკოსებს.

2) ცხოვრების კლასტერის ციკლი

შექმნა: kOps, kubeadm, Rancher, EKS/AKS/GKE. დაუყოვნებლივ ჩართეთ OIDC ავთენტიფიკაცია და აუდიტი.
Apgrades: minor ვერსიები თავის მხრივ (control plane - კვანძები), რომელსაც აკონტროლებენ maxUnavailable, ტესტები staging.
Add-ons (ყველაფერი Helm/GitOps- ის საშუალებით): CNI (Calico/Cilium), CSI მძღოლი, Ingress კონტროლერი (NGINX/Gateway API/Contour/TraeFourour), MaNaTaNane, me, me, Med-st-Sed-Sed-Sed-SaSed, CaTiGiGiGiGiGanAutoscaler, Node-Local DNS, ლოგიკა/მეტრიკა/ტრეისი.
Bacaps: etcd snapshot (თუ self მენეჯმენტი), Velero for namespace/PVC.

3) ქსელები, მომსახურება და ინგრედიენტები

CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh-фичи).
სერვისი: 'ClusterIP', 'NodePort', 'LoadBalancer' (L4 ღრუბლის დაბალანსება), 'ExternalName'.
Ingress/Gateway API: L7 მარშრუტი, TLS, ანამნეზი საბინაო-ლიმიტი/WAF პერიმეტრზე.
ქსელის პოლიტიკა: სტანდარტულად, deny-all + აშკარა ალოუ namespace/label.
Headless Service ('clusterIP: None') for StatefulSet და discovery.

4) შენახვა (CSI) და მდგომარეობა

StorageClass: 'reclaimPolicy', 'volumeBindingMode' ('WaitForFirStSumer' უკეთესი განთავსებისთვის).
StatefulSet: სტაბილური სახელები/ტომი ('volumeClaimTemplates'), 'podSolicy Policy: Parallel' სწრაფი განლაგებისთვის.
ReadWriteMany: გამოიყენეთ განაწილებული ფაილები (EFS/Filestore) ფრთხილად - შეაფასეთ ლატენტობა.
სურათები: 'VolumeSnapshotClass' + cron-bacaps.

5) მრავალფეროვნება და პოლიტიკა

Namespaces საკვები/ოთხშაბათს.
RBAC: მინიმალური როლები, ინდივიდუალური სერვისული ანგარიშები, 'Role '/' RoleBinding' ნაცვლად 'ClusterRole ", სადაც შესაძლებელია.
PSA (Pod Security Admission): 'baseline '/' restricted' რეჟიმები (ჩანაცვლება PSP).
ResourceQuota / LimitRange: потолки CPU/Memory/PVC/LoadBalancer.
OPA Gatekeeper/Kyverno: დაშვების პოლიტიკა (მაგალითად, აკრძალვა ': latest', მოთხოვნა 'resources', 'readOnlyRootFilesystem').
ImagePolicy/webhuks: სურათების ხელმოწერის შემოწმება (cosign/პოლიტიკის კონტროლი).

6) დაკვირვება და ექსპლუატაცია

მეტრიკი: Prometheus-steck, kube-state-metrics, node-ექსპორტიორი.
Logs: Fluent Bit/Vector - ობიექტის/ES/OpenSearch, როტაცია კვანძებში.
ტრეისი: OpenTelemetry Collector.
SLO დაშბორდები: RED მოდელი ingress და საკვანძო სერვისებში.
Autoskale: HPA (პროგრამის მეტრიკის მიხედვით), VPA ფონი, Cluster-Autoscaler კვანძებისთვის.

7) მანიფესტების ნიმუშები (ყალბი ფურცელი)

გამოქვეყნება (ჩამკეტი):
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 (ფრაგმენტი):
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, მოკლედ):
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 - საფუძვლები და სტრუქტურა

სქემა = შაბლონები + მნიშვნელობები + მეტამონაცემები.


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 (მაგალითი):
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 შაბლონები - პრაქტიკა

გამოიყენეთ helpers in '_ helpers. tpl 'სახელების/ეტიკეტების/ვიდეოებისთვის.
ყველგან მიუთითეთ 'resources', 'Kontext', 'readiness/liveness'.
ჩამოაყალიბეთ labels სტანდარტიზებული სქემის მიხედვით ('app. kubernetes. io/`).
გააკეთეთ ჩიპები სურვილისამებრ 'values' (ingress/hpa/pdb/servicemonitor).
ჩართეთ 'values. schema. json '- არასწორი ჩამორთმევის გაჩერება.
მგრძნობიარე მონაცემებისთვის - საიდუმლოებები გარე ოპერატორებისგან (External Secrets, SOPS), და არა შენახვა ვალებში.

მაგალითი '_ helpers. tpl '(ფრაგმენტი):
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name      trunc 63      trimSuffix "-" -}}
{{- end -}}
Deployment. tpl (ფრაგმენტი):
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) დამოკიდებულება, საცავი და OCI

Helm v3 მხარს უჭერს OCI რეესტრებს: 'oci ://registry/org/charts'.
დამოკიდებულების ვერსიები ('^ 1. 2. 0`, `~1. 2 ') და გააფართოვეთ' helm dependence build '.
ხელი მოაწერეთ ჩარტს (prov), შეინახეთ ნივთები CI არტეფაქტურ საცავებში.
ბიბლიოთეკის ქარტიები: ზოგადი შაბლონები (ingress/servicemonitor) ხელახალი გამოყენებისთვის.

11) Hooks, CRD და ოპერაციების რიგი

Hooks: `pre-install`, `post-install`, `pre-upgrade`, `post-upgrade`, `test`. დაამატეთ პოლიტიკა ('before-hook-creation', 'hook-succeeded').
CRD: ჩადეთ 'crds/' - ში (დამონტაჟდება Templates- ზე), თავიდან აიცილეთ CRD apdates „ფრენაზე“ - გააკეთეთ ცალკე მიგრაცია.
BD მიგრაცია/ინიციალიზაცია - job-hook idempotence და Timauts.

12) სქემის და CI ტესტირება

'helm lint' + მიკროსქემის შესაბამისობა.
Helm unittest (unit), chart-testing (ct) - შეკრება/ინსტალაცია kind/minikube- ში CI- ში.
შაბლონების Snapshot ტესტები ('helm template' სტანდარტთან შედარებით).
Smoke ტესტები 'helm test' (აღმართეთ 'Pod' ჩეკებით).

13) GitOps (Argo CD/Flux)

ჭეშმარიტების წყარო საცავებია. სქემა ინახება როგორც HelmRelease/HelmChart (Flux) ან Application (Argo).
ცისფერი პოლიტიკოსები: auto-sync ერთად prune/self-heal, სტატუსები და ჯანმრთელობის შემოწმებები.
ვერსიების პოპულარიზაცია: tag-bots/semver-range, PR flow.
გაყოფილი რეპო (ჩარტები) და env (overrides/values).
საიდუმლო მენეჯმენტი: SOPS (age/KMS), ექსტრემალური საიდუმლოებები.

14) უსაფრთხოება: მინიმალური

PSA restricted: პრივილეგიების გარეშე, hostPath- ის გარეშე, შეზღუდული capabilities, read-only rootfs.
ImagePolicy: მხოლოდ ხელმოწერილი/სანდო სურათები.
ქსელის პოლიტიკა: „სტანდარტულად ჩაკეტილია“.
RBAC: სერვისული ანგარიში per-app, 'Role '/' RoleBinding' namespace- ში.
ადმისიის კონტროლი: Gatekeeper/Kyverno წესები (resources/limits, labels, no latest).
საიდუმლოებები: SOPS/External Secrets; არ დააყენოთ საიდუმლოებები values/plain Git.

15) ანტი შაბლონები

': latest' ჩარტებში და სურათებში; 'values- ის არარსებობა. schema. json`.
მოდულური ნაცვლად ერთი უზარმაზარი გრაფიკი „ყველაფრისთვის“.
CRD განახლებულია შაბლონებით 'templates/' - ზე.
მკაცრად დაცული სახელები/პორტი/namespace შაბლონებში.
რესურსების/ლიმიტების და ნიმუშების არარსებობა არის ლატენტობის დრიფტი და არასტაბილურობა.
არ არსებობს PDB - ნულოვანი დაშლა შეუძლებელია დალაგების/განახლებისთვის.
საიდუმლოებები Git- ში დაშიფვრის გარეშე; მანიფესტები პოლიტიკის შემოწმების გარეშე.

16) განხორციელების სიის სია (0-45 დღე)

0-10 დღე

დაიწყეთ ძირითადი ჩონჩხის ჩონჩხი '_ helpers- ით. tpl ', labels, probes, resources, PDB/Ingress სურვილისამებრ.
Включить PSA restricted, NetworkPolicy deny-all, ResourceQuota/LimitRange.
GitOps (Argo/Flux) კონფიგურაცია, პირადი რეესტრი, სურათების/ჩარტების ხელმოწერა.

11-25 დღე

დაყოფილი გრაფიკი მოდულებად/დამოკიდებულებად, დაამატეთ 'values. schema. json ', ტესტები (' helm lint ', unit, ct).
დაუკავშირდით ობსერვატორიას (დარეკეთ Monitor/PodMonitor), ლოგოს აგენტებს, OTel.
შემოიღეთ გაფართოების პროცესი: staging - canary, hook მიგრაცია rollback- დან.

26-45 დღე

დამოკიდებულების განახლებების ავტომატიზაცია (ბოტები/სემვერ-რანგები + PR).
დაამატეთ Gatekeeper/Kyverno პოლიტიკოსები და პოლიტიკური რეპორტები CI- ში.
კლასტერის runbook განახლება, DR პროცედურები (Velero/etcd snapshot).

17) სიმწიფის მეტრიკა

აპლიკაციების 100% გამოიყენება Helm/GitOps- ის საშუალებით, 'kubectl appy' ხელით.
ყველა გრაფიკს აქვს 'values. schema. json ', ტესტები, ხელმოწერა და დამოკიდებულების ჩაწერილი ვერსიები.
PSA restricted/NetworkPolicy შედის ყველა namespace- ში.
PDB და HPA წარმოდგენილია ყველა კრიტიკულ მომსახურებაში.
უსაფრთხო საიდუმლოებები (SOPS/External Secrets), პოლიტიკა „no latest“, სურათების ხელმოწერა.
კლასტერისა და გრაფიკის განახლება ხდება დაუცველობის გარეშე (კანარი/ცისფერი-მწვანე), რეგულარული ტესტები რეგულარულია.

18) დასკვნა

ძლიერი Kubernetes საძირკველი = საიმედო კლასტერის არქიტექტურა + მკაცრი პოლიტიკა + სამრეწველო ხარისხის Helm სქემები GitOps- ის კონტროლის ქვეშ. სტანდარტიზებული შაბლონები, დაიცავით გარემო PSA/NetworkPolicy/RBAC, დალაგება values და ავტომატიზირებული ტესტები, ხელმოწერა და პოპულარიზაცია. შემდეგ განახლება და გამოშვებები გახდება პროგნოზირებული, ხოლო პლატფორმა სტაბილური და მოსახერხებელია სასურსათო გუნდებისთვის.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.