Kubernetes: خوشه ها و نمودار هلم
Kubernetes: خوشه ها و نمودار هلم
1) معماری خوشه - نمای بالا
صفحه کنترل: 'kube-apiserver'، 'etcd'، 'kube-scheduler'، 'kube-controller-manager'، (بخشی در ابرهای کنترل شده پنهان است).
کارگر: 'kubelet'، CRI زمان اجرا (containerd/CRI-O)، پلاگین CNI، kube-proxy/ebpf-proxy.
شبکه داخلی: Pod-to-Pod، Service-VIP/ClusterIP، DNS CoreDNS.
ذخیره سازی: درایور CSI، پویا PVC → تامین PV (StorageClass).
محدودیت های شکست: گره/AZ/منطقه. کپی های مکان بر اساس منطقه (TopologySpreadConstraints/anti-affinity).
نقش های معمول
فرمان پلت فرم: ایجاد/ارتقاء خوشه ها، CNI/CSI/Ingress، سیاست و GitOps.
تیم های محصول: نمودار سپرده/انتشار، سیاست های امنیتی و منابع را دنبال کنید.
2) چرخه عمر خوشه
ایجاد: kOps، kubeadm، Rancher، EKS/AKS/GKE. تأیید هویت و حسابرسی OIDC را بلافاصله فعال کنید.
ارتقاء: نسخه های جزئی به نوبه خود (کنترل هواپیما → گره)، کنترل شده توسط maxUnavailable، تست در مرحله بندی.
افزونه ها (همه از طریق Helm/GitOps): CNI (Calico/Cilium)، درایور CSI، کنترل کننده Ingress (NGINX/Gateway API/Contour/Traefik)، Metrics-Server، Cluster-Autoscaler، Node-Local DNS، logging/metrics/trace.
پشتیبان گیری: etcd عکس فوری (اگر خود مدیریت)، Velero برای فضای نام/PVC.
3) شبکه ها، خدمات و ورود
CNI: Calico (NetworkPolicy)، Cilium (eBPF/servicemesh- фичи).
سرویس: 'ClusterIP'، 'NodePort'، 'LoadBalancer' (متعادل کننده ابر L4)، 'نام خارجی'.
ورود/دروازه API: مسیریابی L7، TLS، نرخ محدود/تاریخچه WAF در محیط.
NetworkPolicy: انکار همه + صریح اجازه می دهد توسط فضای نام/برچسب به طور پیش فرض.
سرویس بدون سر ('clusterIP: None') برای StatefulSet و کشف سرویس.
4) ذخیره سازی (CSI) و ایالات
StorageClass: 'reclaimPolicy', 'volumeBindingMode' ('WaitForFirstConsumer' برای قرار دادن بهتر).
StatefulSet: نام های پایدار/حجم («volumeClaimTemplates»)، «podManagementPolicy: Parallel» برای اسکن سریع.
ReadWriteMany: استفاده از فایل توزیع شده (EFS/Filestore) با دقت - ارزیابی تاخیر.
عکس های فوری: «VolumeSnapshotClass» + پشتیبان گیری cron.
5) چند اجاره و سیاست
فضاهای نام توسط محصول/محیط زیست.
RBAC: نقشهای مینیمال، حسابهای سرویس جداگانه، «نقش »/« RoleBinding» به جای «ClusterRole» در صورت امکان.
PSA (پذیرش امنیتی Pod): حالت های «پایه »/« محدود» (جایگزینی PSP).
ResourceQuota/LimitRange: потолки CPU/حافظه/PVC/LoadBalancer.
دروازه بان OPA/کیورنو: سیاست پذیرش (به عنوان مثال promotion ': latest', requirement 'resources', 'read' OnlyRootFilesystem ').
ImagePolicy/webhooks: تأیید امضای تصویر (cosign/policy-controller).
6) قابلیت مشاهده و عملکرد
معیارها: پشته Prometheus، معیارهای kube-state، صادرکنندگان گره.
سیاهههای مربوط: بیت/بردار → شیء/ES/OpenSearch، چرخش در گره.
مسیرهای پیاده روی: OpenTelemetry Collector.
داشبورد SLO: مدل RED در ورود و خدمات کلیدی.
مقیاس خودکار: 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 } }
ورود (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)
نمودار. 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) قالب هلم - شیوه
از Helpers در _ Helpers استفاده کنید. TPL 'برای نام/برچسب/حاشیه نویسی.
«منابع»، «زمینه امنیتی»، «آمادگی/زنده بودن» را در همه جا مشخص کنید.
برچسب ها را با توجه به یک طرح استاندارد ('app. kubernetes. IO/').
ویژگی های اختیاری را از طریق «values» (ورودی/hpa/pdb/servicemonitor) اختیاری کنید.
شامل "ارزش ها. طرح. json '- از تنظیمات نادرست جلوگیری کنید.
برای اطلاعات حساس - اسرار از اپراتورهای خارجی (اسرار خارجی، SOPS)، و در مقادیر ذخیره نمی شود.
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name trunc 63 trimSuffix "-" -}}
{{- end -}}
استقرار. 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 '.
نمودار (prov) را امضا کنید، مصنوعات را در مخزن مصنوعی CI ذخیره کنید.
نمودارهای کتابخانه: قالب های عمومی (ورودی/سرویس دهنده) برای استفاده مجدد.
11) قلاب، CRD و سفارش عملیات
قلاب: «قبل از نصب»، «پس از نصب»، «قبل از ارتقاء»، «پس از ارتقاء»، «تست». سیاست ها را اضافه کنید («قبل از ایجاد قلاب»، «قلاب موفق»).
CRD: قرار دادن در 'crds/' (تنظیم به قالب)، جلوگیری از به روز رسانی CRD در پرواز - مهاجرت به طور جداگانه.
مهاجرت پایگاه داده/مقداردهی اولیه - job-hook with idempointency and timeouts.
12) نمودار و تست CI
'helm lint' + اعتبارسنجی طرح.
Helm unittest (واحد)، نمودار تست (ct) - مونتاژ/نصب در نوع/minikube در CI.
آزمونهای تصویر لحظهای قالبها) «قالب سکان» → مقایسه با یک قالب (.
تست دود 'آزمون هلم' (بالا بردن 'Pod' با چک).
13) GitOps (Argo CD/Flux)
منبع حقیقت، مخزن است. نمودار به عنوان HelmRelease/HelmChart (Flux) یا Application (Argo) ذخیره می شود.
سیاست های سینک: خودکار همگام سازی با هرس/خود درمان، وضعیت و بررسی های بهداشتی.
نسخه های تبلیغاتی: tag-bots/semver-range، PR-flow.
repo را به برنامه ها (نمودارها) و env (overrides/values) تقسیم کنید.
مدیریت مخفی: SOPS (سن/KMS)، اسرار خارجی.
14) ایمنی: حداقل مورد نیاز است
PSA محدود شده: بدون امتیاز، بدون hostPath، قابلیت های محدود، rootfs فقط خواندنی.
ImagePolicy - فقط تصاویر امضا شده/قابل اعتماد.
NetworkPolicy: «قفل شده به طور پیش فرض».
RBAC: حساب سرویس هر برنامه، «Role »/« RoleBinding» در فضای نام.
کنترل پذیرش: قوانین Gatekeeper/Kyverno (منابع/محدودیت ها، برچسب ها، بدون آخرین).
اسرار: SOPS/اسرار خارجی ؛ اسرار را در مقادیر/Git ساده قرار ندهید.
15) ضد الگوهای
': آخرین' در نمودارها و تصاویر ؛ عدم وجود ارزش ها طرح. جی سون...
یک نمودار بزرگ «برای همه چیز» به جای مدولار.
CRD ها با قالب ها در «templates/» → هرج و مرج در ارتقاء به روز می شوند.
نام های سخت افزاری/پورت/فضای نام در قالب ها.
کمبود منابع/محدودیت ها و نمونه ها → رانش تاخیر و بی ثباتی.
بدون PDB → خرابی صفر با تخلیه/ارتقاء امکان پذیر نیست.
اسرار در Git بدون رمزگذاری ؛ بدون سیاست چک ظاهر می شود.
16) چک لیست پیاده سازی (0-45 روز)
0-10 روز
یک اسکلت نمودار پایه با "_ helpers ایجاد کنید. tpl '، برچسب ها، پروب ها، منابع، PDB/Ingress اختیاری است.
Включить PSA محدود شده، NetworkPolicy انکار همه، ResourceQuota/LimitRange.
پیکربندی GitOps (Argo/Flux)، ثبت نام خصوصی، امضای تصویر/نمودار.
11-25 روز
نمودار را به ماژول ها/وابستگی ها تقسیم کنید، add 'values. طرح. json ', tests (' helm lint ', unit, ct).
قابلیت مشاهده اتصال (ServiceMonitor/PodMonitor)، عوامل ورود به سیستم، OTel.
فرآیند ارتقا را وارد کنید: مرحله بندی → canary → prod، مهاجرت قلاب با برگشت.
26-45 روز
به روز رسانی وابستگی خودکار (رباتها/semver-ranges + PR).
اضافه کردن سیاست های Gatekeeper/Kyverno و گزارش های سیاست به CI.
سند runbook ارتقاء خوشه، روش DR (Velero/etcd snapshot).
17) معیارهای بلوغ
100٪ از برنامه های کاربردی از طریق Helm/GitOps، بدون 'kubectl اعمال' manually تخلیه می شود.
همه نمودارها ارزش دارند. طرح. json ', tests, signature, and committed dependency versions.
PSA محدود شده/NetworkPolicy در تمام فضای نام فعال است.
PDB و HPA در تمام خدمات بحرانی حضور دارند.
SOPS/اسرار خارجی، بدون آخرین سیاست، امضای تصویر.
ارتقاء خوشه و نمودار بدون خرابی انجام می شود (canary/blue-green)، تست های بازیابی منظم هستند.
18) نتیجه گیری
Strong Kubernetes foundation = strong cluster architecture + strict policies + نمودارهای هلم با کیفیت صنعتی که توسط GitOps مدیریت می شوند. قالب ها را استاندارد کنید، محیط PSA/NetworkPolicy/RBAC را ایمن کنید، مقادیر را تأیید کنید و تست ها، امضا و ارتقاء را خودکار کنید. سپس ارتقاء و انتشار قابل پیش بینی خواهد بود و پلت فرم برای تیم های محصول پایدار و راحت خواهد بود.