الضبط
يعتمد كل مخطط على مخطط مكتبة واحد، هو quench-common، فتبدو المقابض التشغيلية متشابهة أيًّا كانت قاعدة البيانات التي تُشغّلها. تعيش الإعدادات الخاصة بالتطبيق ضمن كتلة config: (وحيثما يلزم auth:) موثّقة في صفحة كل مخطط؛ وكل ما يلي مشترك.
الصورة (مثبّتة بالبصمة الرقمية)
يُشار إلى الصورة ببصمة sha256، لا بوسم. يرفض quench-common المرجع المعتمد على وسم وحده عن قصد، فلا يمكن لمخطط أبدًا أن ينشر شيئًا غير مثبّت. يعيد التكامل المستمر (CI) كتابة هذا إلى أحدث بصمة موقّعة عند كل بناء للصورة، لذا تتركه عادةً كما هو.
image: repository: ghcr.io/quenchworks/images/postgresql digest: "sha256:..." # set by CI; override to pin a specific build pullPolicy: IfNotPresentالاستمرارية
تُوفّر المخططات الحالة (Stateful) مطالبة PVC. عطّلها للاستخدام العابر، أو حدّد حجمها، أو اختر صنفًا، أو اربط مطالبة قائمة.
persistence: enabled: true size: 8Gi storageClass: "" # default class if empty accessModes: ["ReadWriteOnce"] existingClaim: "" # bind an existing PVC insteadالموارد
resources: requests: { cpu: 250m, memory: 256Mi } limits: { cpu: "1", memory: 1Gi }تحدّد بعض المحرّكات حجم كومتها (heap) أو ذاكرتها من هذه القيم (أو من قيمة مخصّصة)؛ وتشير صفحات مخططاتها إلى ذلك.
الجدولة والتوزيع
تمرّ ضوابط Kubernetes المعتادة مباشرةً: nodeSelector وaffinity وtolerations وtopologySpreadConstraints وpriorityClassName وschedulerName وterminationGracePeriodSeconds وupdateStrategy.
بيئة ووحدات تخزين إضافية
احقن الإعدادات دون تفريع المخطط:
extraEnvVars: - name: MY_FLAG value: "1"extraEnvVarsCM: "" # name of a ConfigMap to envFromextraEnvVarsSecret: "" # name of a Secret to envFromextraVolumes: []extraVolumeMounts: []initContainers: []sidecars: []سياق الأمان
تأتي الإعدادات الافتراضية المُحصّنة من quench-common: runAsNonRoot (uid/gid/fsGroup 1001)، وseccomp RuntimeDefault، ونظام ملفات جذر للقراءة فقط، ومنع تصعيد الصلاحيات، وإسقاط جميع الصلاحيات. أي شيء تضبطه يندمج فوق الإعدادات الافتراضية، فلا تتجاوز إلا ما تحتاج إليه.
podSecurityContext: {} # your keys win over the hardened defaultscontainerSecurityContext: {}الفحوص
يأتي كل مخطط مع فحوص حيوية وجاهزية معقولة. اضبط التوقيت، أو استبدل فحصًا كليًّا.
livenessProbe: { initialDelaySeconds: 30 } # merge timing overridesreadinessProbe: { periodSeconds: 10 }customLivenessProbe: {} # set to replace the probe entirelycustomReadinessProbe: {}customStartupProbe: {}الشبكات والإتاحة
تكون NetworkPolicy مفعّلة افتراضيًا وهي حدّ الثقة للمخططات التي تأتي دون مصادقة على مستوى التطبيق. ويحرس PodDisruptionBudget الاضطرابات الطوعية.
networkPolicy: enabled: true allowExternal: false # restrict ingress to same-namespace podspodDisruptionBudget: enabled: true minAvailable: 1serviceAccount: { create: true, name: "", annotations: {} }rbac: { create: false }اطّلع على المخطط (schema)
يأتي كل مخطط مع ملف values.schema.json، فيتحقّق Helm ممّا تمرّره ويستطيع محرّرك إكماله تلقائيًا. اقرأ قيم مخطط كاملة في السطر:
helm show values oci://ghcr.io/quenchworks/charts/postgresqlhelm show readme oci://ghcr.io/quenchworks/charts/postgresql