Kubernetes: مجموعات ومخططات Helm
Kubernetes: مجموعات ومخططات Helm
1) بنية المجموعة - أعلى منظر
Control Plane: «kube-apiserver»، «etcd»، «kube-scolerer»، «kube-controller-manager»، (الجزء مخفي في السحب الخاضعة للرقابة).
العامل: "kubelet'، وقت تشغيل CRI (الحاوية/CRI-O)، ملحق CNI، kube-proxy/ebpf-proxy.
Intracluster network: Pod-to-Pod, Service-VIP/ClusterIP, DNS CoreDNS.
التخزين: سائقي CSI، توفير PVC → PV (StorageClass).
حدود الفشل: العقدة/المنطقة/المنطقة. وضع نسخ طبق الأصل حسب المنطقة (TopologySpreadRestrictions/anti-affinity).
الأدوار النموذجية
قيادة المنصة: إنشاء/ترقية المجموعات، CNI/CSI/Ingress، السياسة و GitOps.
فرق المنتجات: مخططات/إصدارات الإيداع، تتبع السياسات والموارد الأمنية.
2) دورة حياة العنقود
الإنشاء: kOps، kubeadm، Rancher، EKS/AKS/GKE. تمكين OIDC المصادقة والتدقيق على الفور.
الترقيات: الإصدارات الصغيرة بدورها (مستوى التحكم → العقد)، التي يتحكم فيها maxUnavailable، اختبارات على التدريج.
الإضافات (كلها عبر Helm/GitOps): CNI (Calico/Cilium)، سائق CSI، وحدة تحكم الدخول (NGINX/Gateway API/Contour/Traefik)، Metrics-Server، Culter-Auter، Node-Local DNS, loging/metrics/trace.
النسخ الاحتياطية: etcd shapshot (إذا تم إدارتها ذاتيًا)، Velero لمساحة الاسم/PVC.
3) الشبكات والخدمات والدخول
CNI: Calico (NetworkPolicy)، Cilium (eBPF/servicemesh- фичи).
الخدمة: "ClusterIP" و "NodePort' و" LoadBalancer "(توازن السحابة L4) و" الاسم الخارجي ".
الدخول/بوابة واجهة برمجة التطبيقات: توجيه L7، TLS، حد السعر/تاريخ WAF في المحيط.
NetworkPolicy: رفض كل شيء + السماح الصريح بمساحة الاسم/التسمية افتراضيًا.
خدمة مقطوعة الرأس («clusterIP: None») لمجموعة StatefulSet واكتشاف الخدمة.
4) التخزين (CSI) والدول
فئة التخزين: «reclaimPolicy»، «VolumeBindingMode» («WaitForFirstConsumer» للحصول على وضع أفضل).
StatefulSet: أسماء/مجلدات مستقرة ("VolumeClaimTemplates")، "PodManagementPolicy: Parallel' لإجراء فحوصات سريعة.
ReadWrite العديد: استخدم الملف الموزع (EFS/Filestore) بعناية - قم بتقييم زمن الوصول.
اللقطات: نسخ احتياطية من "VolumeSnapshotClass' + cron.
5) تعدد الحيازات والسياسة
مساحات الأسماء حسب المنتج/البيئة.
RBAC: الحد الأدنى من الأدوار، وحسابات خدمة منفصلة، و «Role »/« RoleBinding» بدلاً من «ClusterRole» حيثما أمكن ذلك.
PSA (قبول أمان Pod): أوضاع «خط الأساس »/« المقيدة» (استبدال PSP).
ResourceCuta/LimiteRange: потолки CPU/Memory/PVC/LoadBalancer.
حارس بوابة OPA/Kyverno: سياسة القبول (على سبيل المثال الحظر ": آخر"، اشتراط "الموارد"، "اقرأ OnlyRootFilesystem').
ImagePolicy/webooks: image signature review (cosign/policy-controller).
6) إمكانية الرصد والتشغيل
المقاييس: Prometheus stack، kube-state-metrics، العقدة المصدرة.
Logs: Fluent Bit/Vector → object/ES/OpenSearch, duration on nodes.
المسارات: 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 (PodDistructionBudget):
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 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) قوالب هيلم - ممارسات
استخدم مساعدين في '_ مساعدين. tpl' للأسماء/التسميات/الشروح.
حدد «الموارد» و «السياق الأمني» و «الاستعداد/الحيوية» في كل مكان.
توليد العلامات وفقا لنظام موحد ('app. kubernetes. io/').
اجعل الميزات اختيارية من خلال «القيم» (الدخول/hpa/pdb/servicemonitor).
تضمين 'القيم. مخطط. جسون - توقف عن التكوينات غير الصحيحة.
للبيانات الحساسة - أسرار المشغلين الخارجيين (الأسرار الخارجية، 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 ') وتشغيل «بناء التبعية للقيادة».
وقع على الرسم البياني (pom)، قم بتخزين القطع الأثرية في مستودع القطع الأثرية CI.
مخططات المكتبة: قوالب عامة (دخول/خدمة) لإعادة الاستخدام.
11) الخطافات واتفاقية حقوق الطفل ونظام العمليات
الخطافات: «التثبيت المسبق»، «ما بعد التثبيت»، «الترقية المسبقة»، «ما بعد الترقية»، «الاختبار». إضافة سياسات («قبل إنشاء الخطاف»، «نجاح الخطاف»).
CRD: ضع "crds' (ضبط على القوالب)، تجنب تحديثات CRD أثناء الطيران - هاجر بشكل منفصل.
هجرات/استهلال قاعدة البيانات - الخطاف الوظيفي مع الاستخفاف والمهل الزمنية.
12) اختبار الرسم البياني و CI
"helm lint' + التحقق من صحة المخطط.
Helm unitest (وحدة)، اختبار الرسم البياني (ct) - التجميع/التركيب العيني/minikube في CI.
لقطة اختبارات القوالب ('helm complate' → مقارنة مع قالب).
اختبارات الدخان «اختبار الدفة» (ارفع 'Pod' بالفحوصات).
13) GitOps (Argo CD/Flux)
مصدر الحقيقة هو المستودع. يتم تخزين الرسم البياني على شكل HelmRelease/HelmChart (Flux) أو Application (Argo).
سياسات الإغراق: المزامنة التلقائية مع التقليم/الشفاء الذاتي والحالات والفحوصات الصحية.
إصدارات الترويج: tag-bots/semver-range، PR-flow.
قسّم إعادة الشراء إلى تطبيقات (مخططات) و env (تجاوزات/قيم).
الإدارة السرية: SOPS (العمر/KMS)، الأسرار الخارجية.
14) السلامة: الحد الأدنى المطلوب
تم تقييد PSA: لا امتيازات، لا مسار مضيف، قدرات محدودة، أسطح للقراءة فقط.
ImagePolicy - الصور الموقعة/الموثوقة فقط.
NetworkPolicy: «مغلق افتراضيًا».
RBAC: حساب خدمة لكل تطبيق، «Role »/« RoleBinding» في مساحة الاسم.
التحكم في القبول: قواعد Gatekeeper/Kyverno (الموارد/الحدود، الملصقات، لا أحدث).
الأسرار: SOPS/الأسرار الخارجية ؛ لا تضع الأسرار في القيم/Git البسيط.
15) الأنماط المضادة
': أحدث' في الرسوم البيانية والصور ؛ عدم وجود «قيم». مخطط. json '.
مخطط ضخم «لكل شيء» بدلاً من المعيار.
يتم تحديث CRDs بقوالب في «قوالب/» فوضى → عند الترقيات.
أسماء مشفرة/منفذ/مساحة أسماء في قوالب.
الافتقار إلى الموارد/الحدود والعينات → الانجراف في زمن الانتقال وعدم الاستقرار.
لا يمكن تعطيل → PDB صفرًا مع التجفيف/التحسينات.
أسرار في Git بدون تشفير ؛ دون ضوابط.
16) قائمة التنفيذ المرجعية (0-45 يوما)
0-10 أيام
قم بإنشاء هيكل عظمي أساسي للرسم البياني مع '_ المساعدين. tpl'، الملصقات، المجسات، الموارد، PDB/Ingress اختياري.
Включить تقييد PSA، تنكر NetworkPolicy كل شيء، ResourceCuta/LimiteRange.
اضبط GitOps (Argo/Flux)، سجل خاص، توقيع الصورة/الرسم البياني.
11-25 يومًا
قسّم الرسم البياني إلى وحدات/تبعيات، أضف «قيم». مخطط. json ', tests (' helm lint', unit, ct).
ربط قابلية الرصد (ServiceMonitor/PodMonitor)، وسجل العوامل، OTEL.
أدخل عملية الترقية: تنظيم → → الكناري، وربط الهجرة بالتراجع.
26-45 يومًا
أتمتة تحديثات التبعية (الروبوتات/نطاقات النصف + العلاقات العامة).
إضافة تقارير سياسات وسياسات Gatekeeper/Kyverno إلى CI.
قم بتوثيق دفتر تشغيل ترقية المجموعة وإجراءات DR (لقطة Velero/etcd).
17) مقاييس النضج
يتم استنفاد 100٪ من التطبيقات عبر Helm/GitOps، دون «تطبيق kubectl» يدويًا.
كل المخططات لها قيم. مخطط. ، والاختبارات، والتوقيع، ونسخ التبعية الملتزمة.
تم تمكين PSA المقيدة/NetworkPolicy في جميع الأسماء.
ويتواجد مصرف التنمية الشعبي ووكالة الصحة للبلدان الأمريكية في جميع الخدمات الحيوية.
SOPS/الأسرار الخارجية، لا توجد سياسة حديثة، توقيع الصورة.
يتم إجراء ترقيات العنقود والرسم البياني دون توقف (الكناري/الأزرق الأخضر)، وتكون اختبارات الاستعادة منتظمة.
18)
مؤسسة Strong Kubernetes = بنية عنقودية قوية + سياسات صارمة + مخططات Helm للجودة الصناعية تديرها GitOps. توحيد النماذج، وتأمين بيئة PSA/NetworkPolicy/RBAC، والتحقق من القيم، وأتمتة الاختبارات والتوقيع والترويج. ثم تصبح الترقيات والإصدارات قابلة للتنبؤ، وستصبح النظام الأساسي مستقرًا ومريحًا لفرق المنتج.