ירושה של תצורות
1) מדוע אני זקוק לתצורה ירושה?
במוצרים בוגרים, מספר פרמטרי ההגדרות גדל מהר יותר ממספר השירותים. ירושה מאפשרת:- השתמש מחדש בערכים משותפים (כריתת עצים, מגשים מחדש, פסקי זמן).
- חלק אחריות: הפלטפורמה קובעת מדיניות בסיסית, שירות מצווה - רק סטיות.
- הימנע משכפול ולהפחית את הסיכון של יישור שגוי.
- מהירות שחרור: השינויים משודרים במורד העץ כברירת מחדל.
- תומכת בריבוי סביבות וריבוי דירות בגישה אחת.
2) דפוסי ירושה
2. 1 היררכית (הורה * ילד)
Base (global) # sviety (prod/stage/dev) ac region/cluster ach service ac.
פשוט ושקוף, אבל יכול להוביל לשרשרת עמוקה ודיבוג מורכב.
2. 2 שכבות (בסיסים/כיסוי)
הגדרת שכבת בסיס + חפיפה (תכונה x, אזור-אירופה, התקשות-ביטחון).
עובד טוב עם GitOps ו Kustomize; כיסויים הם עצמאיים וקומפוזיציות.
2. 3 מרוכבים (מודולים/חבילות)
ההגדרות מורכבות ממודולים: ”logging @ v2”, ”metrics @ v1”, ”http @ v3”.
איתור מודולים, תאימות סמנטית, תלות מפורשת.
2. 4 מדיניות כקוד
מגבלות ואינווריאנטים בסיסיים (OPA/Rego, Kyverno, Confest).
הערכים עצמם אינם עוברים בירושה, אלא הכללים לקבילותם.
3) מיזוג אלגוריתמים וסדרי עדיפויות
הנושא המרכזי הוא הנוהל לפתרון סכסוכים. מומלץ לתקן את המפרט:1. סדר המקורות: משמאל לימין (בסיס env אזור שירות).
2. חוקים לסוגים:- סקלר: ”אחרון-לכתוב-מנצח”.
- אובייקט: מיזוג רקורסיבי על מפתחות.
- 'נספח '/' prependence &fost
- ”Un By (מפתח)” (מוגדר על ידי מפתח)
- 'patch' (למצוא פריט על ידי 'שם' ומיזוג חלקי).
- 3. מפתחות שמורים (לדוגמה, '_ מיזוג: החלף '/' _ מיזוג: עמוק' ברמת הצומת).
- דגלי התחלה/משתני ENV> סודות ריצה> קבצים בדיסק> ערכי ברירת מחדל בקוד.
דוגמה למיזוג YAML
yaml base. yaml http:
port: 8080 timeouts:
read: 2s write: 2s features:
- name: audit enabled: false
prod. yaml http:
timeouts:
read: 1s features:
- name: audit enabled: true
- name: billing enabled: true
Result (under policy: object = deep merge, array = uniqueBy (name) + patch)
http:
port: 8080 timeouts:
read: 1s write: 2s features:
- name: audit enabled: true
- name: billing enabled: true
4) מזימות ואימות
נוכחות של סכימה היא תנאי מוקדם לירושה בטוחה.
JSON Schema/OpenAPI: סוגים, שדות דרושים, enum, תבניות, אילוצים (”מינימום”, ”פורמט”, ” Properties”).
סכימה ורסיונינג (semver): שוברים ראשיים, שדות קטנים וחדשים, תיקוני טלאים.
לפני המיזוג ובדיקות שלאחר המיזוג: לאמת את שני השברים ואת התוצאה.
ברירת מחדל: להגדיר ברמת סכימה (טיוטה-07 + תומך 'ברירת מחדל').
5) סביבות ומטריצות פריסה
מטריצה טיפוסית:- ev: dev, test, stage, prod area: eu-central-1, us-east-1 tier: arch, realtime, internal derent: A/B/C (לבן-תווית, B2B)
- הצירופים יוצרים את עץ הכיסוי; הימנע מעומק מוגזם (3-4 רמות מספיקות).
6) עמידות מרובה
גישות:- פיצול קשה: קבצים/תיקיות נפרדות לדייר.
- פרמטריזציה: תבנית אחת + ערכים לדייר.
- מדיניות תורשתית: גבולות משאב/מכסה, SLO, שימור יומן.
- חשוב: גבולות ביטחון (סודות/מפתחות) אינם צריכים לזרום בין דיירים.
7) סודות וביטחון
אל תירש סודות במפורש. אזכורים תורשתיים: ” Ref”, ”ValastPath”.
KMS/Vault/SOPS: לאחסן ערכים מוצפנים ב ־ Git, מפתחות - החוצה.
חלק אחריות: הפלטפורמה מנהלת נתיבים ומדיניות, צוות השירות - מה שאתה באמת צריך.
מדיניות: לאסור 'טקסט' סודות בבדיקות CI.
סיבוב: אל ”לכתוב” - השתמש בכינויים/אבסטרקציות ('db/primary/pessword @ 2025-Q4').
קישור כספת דוגמה
yaml db:
host: postgres. service user: app passwordFrom:
vaultPath: "kv/prod/app-db"
key: "password" # secret is taken at the deploy stage, not stored in files
8) ורסינינג ונדידה
גרסאות מודול הגדרות: "regging @ 2. 3. 1`.
Changelog לתרשימים: הגירה באמצעות jsonnet/ytt/skript/מותאם אישית.
למעלה ולמטה נדודים עבור גלגול בטוח.
ענפים ארוכים: אל תיסחף; שיפוד קבוע מכסה לבסיס.
9) כלים ומנהגים
9. 1 קוברנטס
Kustomize (overlays): מודל ירושה טבעי באמצעות 'bases '/' resources', 'PattachMerge '/' path JSON6902'.
הגאים (ערכים): היררכיה 'values. yaml' '+' - להגדיר '(אבל להיות זהיר עם עקיפות ב CI).
קיוורנו/אופ "א: פוליטיקאים כ" רשתות ביטחון ".
yaml overlays/prod/kustomization. yaml resources:
-../../base patchesStrategicMerge:
- patch-resources. yaml commonLabels:
env: prod
9. 2 טרה ־ פורם
+ מודולים של משתנים. זה כמו חוזה.
'locals' לערכים ממוחשבים,' לעקוף 'no קבצים - להשתמש בשכבות ספרייה וחלל עבודה (' מרחב עבודה ').
סדר המקור: ברירת מחדל <tfvars-files <”- var '/' var-file”.
hcl module "svc" {
source = "./modules/svc"
replicas = var. env == "prod"? 4: 2 logging = local. logging_base
}
9. 3 בלתי אפשרי
היררכיה ברורה של משתנים (בעדיפות עולה): תפקיד מחדל <מלאי group_vars <host_vars <vars נוסף.
עבור ירושה - המבנה 'group _ vars/@ env/region'.
9. 4 jsonnet/ytt
הרכב עשיר, פונקציות ו ”כוונות מפתח” ('כיסוי. להחליף ”,” כיסוי. מיזוג ').
10) חוזים ומגבלות סוללה
הפלטפורמה מגדירה את התרשימים, המדיניות, ערכי הבסיס וההיגיון של המיזוג.
צוותי מוצר: רק מכסה במסגרת החוזה.
ביקורת, אימות, חתימות, אכיפה.
11) CI/CD -GitOps
צינור משלבים:1. מוך (תבנית, איסור על מפתחות לא ידועים).
2. תוקף (JSON Schema/OpenAPI).
3. הפעלה יבשה/רנדר (תבנית הגה/מבנה kustomize).
4. בדיקת מדיניות (OPA/Kyverno/Confest).
5. Diff נגד אשכול המטרה (kubectl diff/ArgoCD diff).
6. משלוח מתקדם: ציפוי כנרית עם תנועה מוגבלת.
7. חתימה של חפצים (Cosign, SLSA attestation).
12) יכולת תצפית ודיבוג
עקבות: מי תרם את השדה ומתי, מאיזו שכבה הגיע הערך הסופי.
הדמיית מיזוג: דו "ח של מפתחות" מנצח ".
הרצה-ייצוא של התצורה הפעילה (endpoint '/config 'עם מיסוך סודי).
התראות סחיפה: אי התאמות בין מוצהר וממשי.
13) אנטי דפוסים
”קסם” ללא כללי קדימות מפורשים.
שרשראות עמוקות (> 4-5 שכבות): הגדלת עומס קוגניטיבי.
סודות בתיקים תורשתיים.
מעקפים נסתרים דרך '- להגדיר' במודיעה.
חוסר סכימה וביצוע בדיקות.
14) רשימת מימושים
[ ] מגדיר את המודל (היררכיה/שכבות/קומפוזיציה).
[ ] לתקן את סדר המיזוג ואסטרטגיות לפי סוג.
[ ] פרסמו את התרשימים והאירועים.
[ ] שתף סודות (קישורים/שיפוצים בלבד).
[ ] הוסף בדיקות מדיניות וחתימות חפצים.
[ ] לאפשר הפעלה יבשה, דיפוזיות ודמיית מקור.
[ ] ייצוא התצורה הפעילה בזמן ריצה.
[ ] הגדרת שחרורים מתקדמים לשינויי הגדרות.
15) FAQ
ש: איך להבין שהשכבה עמוקה מדי?
א. אם אתה צריך לפתוח> 3 קבצים ו ”לגלול”> 2 רמות של אבסטרקציה כדי לשנות את הפרמטר, לשנות את המבנה.
ש: מה לעשות עם מערכים סותרים?
א ': הזן אסטרטגיות מפורשות: "החלף", "append'," By (מפתח) "," PatchBy (שם) "- ותתקן אותן בתיעוד.
ש: האם ניתן לרשת סודות?
א ': לא. רק קישורים (URI/refs) לחנויות סודיות ומדיניות גישה עוברים בתורשה.
קיו: כיצד לבחון ירושה?
א ': לירות ”פרוסות” עבור שילובי כיסוי מפתח ולבדוק עם קבצי זהב; רישום גזעי במצ "ח ליחסי ציבור.
נספח A: מיזוג מיני ספק
”סקלרים”: אחרון-לכתוב-winns
"ovenss': מיזוג עמוק על ידי מפתח
”מערכים”:- ברירת מחדל &pospos
- "נספח &ft
- ”Un By (מפתח)”
- ”PareBy (מפתח)” עם אלמנט רקורסיבי להתמזג
- "_ מיזוג: להחליף 'deepep.co.il
- '_ אסטרטגיה. מערך: להחליף 'append' un by (שם) (שם) "
נספח ב ': דוגמאות
B.1 ערכי הלם (לדבוק מעל בסיס)
yaml values. base. yaml replicas: 2 resources:
requests:
cpu: "100m"
memory: "128Mi"
logging:
level: info
values. prod. yaml replicas: 4 logging:
level: warn
ביצוע פקודה:
helm template svc chart/ -f values. base. yaml -f values. prod. yaml
העדיפות של הקובץ האחרון היא 'vallues. Prod. יאמל '.
B.2 Kustomize מכסה
yaml base/deployment. yaml apiVersion: apps/v1 kind: Deployment metadata:
name: app spec:
replicas: 2
overlays/prod/patch. yaml apiVersion: apps/v1 kind: Deployment metadata:
name: app spec:
replicas: 4
B.3 Ansible vars
group_vars/prod. yml # values of prod host_vars/prod-eu-1. yml # clarifications for extra vars host in CLI have highest priority
תקציר
ירושת הגדרות היא אלגוריתם התמזגות + מדיניות אבטחה, ולא רק "קבצי YAML רבים. "ההצלחה מוגדרת על ידי:1. מודל ברור וסדרי עדיפויות,
2. מזימות אימות וכיסויים עצמאיים,
3. סירוב לרשת סודות,
4. GitOps-צינור עם יבש לרוץ, מדיניות-בדיקות ודיפוסים,
5. תצפית על מקור הערכים הסופיים.
על ידי יישום העקרונות האלה, אתם מקבלים תצורות צפויות, ניתנות לאיזון ומאובטחות לכל הסביבות והטופולוגיות.