GH GambleHub

Kubernetes: кластерлер мен Helm charts

Kubernetes: кластерлер мен Helm charts

1) Кластер архитектурасы - жоғарыдан көрініс

Control Plane: 'kube-apiserver', 'etcd', 'kube-scheduler', 'kube-controller-manager', (басқарылатын бұлттардың бір бөлігі жасырылған).
Worker: 'kubelet', CRI-рантайм (containerd/CRI-O), CNI-плагин, kube-proxy/ebpf-proxy.
Кластер ішіндегі желі: Pod-to-Pod, Service-VIP/ClusterIP, DNS CoreDNS.
Сақтау орындары: CSI драйверлері, динамикалық провижининг ПВХ → PV (StorageClass).
Бас тарту шегі: торап/AZ/өңір. Аймақтар бойынша репликаларды орналастырыңыз (TopologySpreadConstraints/anti-affinity).

Типтік рөлдер

Платформалық команда: кластерлер, CNI/CSI/Ingress, саясат және GitOps жасайды/жаңартады.
Азық-түлік командалары: чарттарды/релиздерді сақтайды, қауіпсіздік саясаты мен ресурстарды ұстанады.

2) Кластердің өмірлік циклі

Жасау: kOps, kubeadm, Rancher, EKS/AKS/GKE. OIDC аутентификациясы мен аудитін бірден қосыңыз.
Апгрейдтер: кезек бойынша minor-нұсқалар (control plane → тораптар), бақыланатын maxUnavailable, стейджинг тестілері.
Add-ons (барлығы - Helm/GitOps арқылы): CNI (Calico/Cilium), CSI драйвер, Ingress-контроллер (NGINX/Gateway API/Contour/Traefik), Metrics-Server, Cluster -Autoscaler, Node-Local DNS, логика/метрика/трейс.
backaps: etcd snapshot (егер self-managed), namespace/PVC үшін Velero.

3) Желілер, сервистер және ingress

CNI: Calico (NetworkPolicy), Cilium (eBPF/servicemesh-фичи).
Service: 'ClusterIP', 'NodePort', 'LoadBalancer' (L4 бұлтты теңдестіру), 'ExternalName'.
Ingress/Gateway API: L7-маршруттау, TLS, периметрдегі rate-limit/WAF анамнезі.
NetworkPolicy: әдепкі deny-all + namespace/label бойынша анық allow.
StatefulSet және дискавери қызметі үшін Headless-service ('clusterIP: None').

4) Сақтау орындары (CSI) және жай-күйлер

StorageClass: 'reclaimPolicy', 'volumeBindingMode' (үздік орналастыру үшін 'WaitForFirstConsumer').
StatefulSet: тұрақты атаулар/томдар ('volumeClaimTemplates'), 'podManagementPolicy: Parallel' жылдам өрістерге арналған.
ReadWriteMany: таратылған файлдарды (EFS/Filestore) сақтықпен пайдаланыңыз - жасырындылықты бағалаңыз.
Суреттер: 'VolumeSnapshotClass' + cron-бэкаптар.

5) Көп жалға алу және саясат

Өнімдер/орталар бойынша Namespaces.
RBAC: мүмкіндігінше «ClusterRole» орнына «Role »/« RoleBinding» минималды рөлдері, жеке сервис-аккаунттары.
PSA (Pod Security Admission): 'baseline '/' restricted' (PSP ауыстыру) режимдері.
ResourceQuota / LimitRange: потолки CPU/Memory/PVC/LoadBalancer.
OPA Gatekeeper/Kyverno: рұқсат ету саясаты (мысалы, ': latest', 'resources', 'readOnlyRootFilesystem' талабы).
ImagePolicy/Вебхактар: кескін қолтаңбасын тексеру (cosign/policy-controller).

6) Бақылау және пайдалану

Метриктер: Prometheus-стек, kube-state-metrics, node-экспорттаушылар.
Логи: Fluent Bit/Vector → объектілік/ES/OpenSearch, тораптардағы ротация.
Трейдерлер: OpenTelemetry Collector.
SLO-дашбордтар: ingress және негізгі сервистерде RED-моделі.
Автоскейл: HPA (қосымшаның өлшемдері бойынша), бэкграундқа арналған VPA, түйіндерге арналған Cluster-Autoscaler.

7) Манифесттердің үлгілері (шпаргалка)

Deployment (үзінді):
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 '_ helpers. атаулар/белгілер/аңдатпалар үшін tpl '.
Барлық жерде 'resources', 'securityContext', 'readiness/liveness' деп көрсетіңіз.
Стандартты схема ('app. kubernetes. io/`).
'values' (ingress/hpa/pdb/servicemonitor) арқылы фичтерді опциондық етіңіз.
'values' дегенді қосыңыз. schema. json '- дұрыс емес конфигурациялардан тоқта.
Сезімтал деректер үшін - сыртқы операторлардың Secrets (External Secrets, SOPS), values сақтау емес.

Мысал '_ 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 dependency build '.
Чартқа (prov) қол қойыңыз, артефактілерді CI артефакт-репозиторийінде сақтаңыз.
Library charts: қайта пайдалануға арналған жалпы үлгілер (ingress/servicemonitor).

11) Hooks, CRD және операциялардың тәртібі

Hooks: `pre-install`, `post-install`, `pre-upgrade`, `post-upgrade`, `test`. policies ('before-hook-creation', 'hook-succeeded') қосыңыз.
CRD: 'crds/' -ге (темплейттерге дейін орнатылады) қойыңыз, CRD «ұшу кезінде» жаңартуларын болдырмаңыз - жеке көші-қон жасаңыз.
ДБ көші-қоны/бастамашылдандыру - idempotency және таймауттары бар job-hook.

12) Чарт пен CI тестілеу

'helm lint' + схема валидациясы.
Helm unittest (unit), chart-testing (ct) - CI-дегі kind/minikube-дегі құрастыру/инсталляция.
Үлгілердің snapshot тестілері ('helm template' → эталонымен салыстыру).
Smoke-тесттер 'helm test' (тексерулермен 'Pod' көтереді).

13) GitOps (Argo CD/Flux)

Шындықтың көзі - репозиторий. Чарт HelmRelease/HelmChart (Flux) немесе Application (Argo) ретінде сақталады.
Синк саясаты: prune/self-heal бар auto-sync, мәртебелер және health-checks.
Нұсқалар промоушені: tag-botlar/semver-range, PR-флоу.
REPO-ны apps (чартлар) және env (overrides/values) деп бөліңіз.
Secret-менеджмент: SOPS (age/KMS), External Secrets.

14) Қауіпсіздік: ең аз қажетті

PSA restricted: артықшылықтары жоқ, hostPath жоқ, шектеулі capabilities, read-only rootfs.
ImagePolicy: тек қол қойылған/сенімді бейнелер.
NetworkPolicy: «әдепкі жабылған».
RBAC: per-app сервис-аккаунты, namespace-те 'Role '/' RoleBinding'.
Admission-бақылау: Gatekeeper/Kyverno ережелері (resources/limits, labels, no latest).
Құпиялар: SOPS/External Secrets; values/plain Git.

15) Қарсы үлгілер

': latest' парақтары мен бейнелерінде; 'values. schema. json`.
Модульдік чарттың орнына бір үлкен «барлығына» чарт.
CRD 'templates/' → апгрейдтеріндегі хаос үлгілерімен жаңартылады.
Үлгілерде қатты кодталған атаулар/порт/namespace.
Ресурстар/лимиттер мен сынамалардың жоқтығы → жасырындылық дрейфі және тұрақсыздық.
drain/жаңарту кезінде PDB → нөлдік жеткізу мүмкін емес.
Шифрланбаған Git құпиялары; саясатсыз манифесттер-checks.

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).
observability (ServiceMonitor/PodMonitor), лог-агенттерді, OTel қосыңыз.
Апгрейдтер процесін енгізу: staging → canary → prod, rollback-пен hook-көшіру.

26-45 күн

Тәуелділік жаңартуларын автоматтандыру (боттар/semver-ranges + PR).
CI-ге Gatekeeper/Kyverno саясатын және саяси репорттарын қосу.
Кластер апгрейдінің runbook бағдарламасын, DR-процедураларын құжаттау (Velero/etcd snapshot).

17) Жетілу метрикасы

100% қосымшалар Helm/GitOps арқылы, 'kubectl apply' қолмен жіберіледі.
Барлық диаграммаларда 'values' бар. schema. json ', тесттер, қолтаңба және тәуелділіктің бекітілген нұсқалары.
PSA restricted/NetworkPolicy барлық namespace бағдарламасында қосылған.
PDB және HPA барлық сындарлы сервистерде бар.
Қауіпсіз құпиялар (SOPS/External Secrets), «no latest» саясаты, бейнелердің қолтаңбасы.
Кластер мен чарттың апгрейдтері даунтаймсыз (canary/blue-green) өтеді, restore-тестілер тұрақты түрде өткізіледі.

18) Қорытынды

Күшті Kubernetes-іргетас = кластердің сенімді архитектурасы + қатаң саясат + GitOps басқаратын өнеркәсіптік сападағы Helm-чарталар. Үлгілерді стандарттаңыз, PSA/NetworkPolicy/RBAC ортасын қорғаңыз, values валидациялаңыз және тестілерді, қолтаңбаларды және жарнамаларды автоматтандырыңыз. Сонда жаңартулар мен релиздер болжамды болады, ал платформа - азық-түлік командалары үшін тұрақты және ыңғайлы болады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.