Konfiqurasiya irsi
1) Niyə konfiqurasiya miras lazımdır
Yetkin məhsullarda konfiqurasiya parametrlərinin sayı xidmətlərin sayından daha sürətli artır. Miras imkan verir:- Ümumi dəyərləri (log, retraj, taymaut) yenidən istifadə edin.
- Məsuliyyəti bölüşmək: platforma əsas siyasətləri təyin edir, xidmət komandaları - yalnız sapmalar.
- Dublyaj qarşısını almaq və raskronizasiya riskini azaltmaq.
- Buraxılışları sürətləndirin: Default dəyişikliklər ağacdan aşağı yayımlanır.
- Multi-mühit və multi-tenantlığı bir yanaşma ilə saxlayın.
2) Miras modelləri
2. 1 iyerarxik (valideyn → uşaq)
Baza (global) → mühit (prod/stage/dev) → region/klaster → xidmət → instans.
Sadə və şəffaf, lakin «dərin zəncirlərə» və mürəkkəb hata ayıklamalara səbəb ola bilər.
2. 2 Laylı (base/overlays)
Əsas təbəqə + overley dəsti (feature-x, region-eu, security-hardening).
GitOps və Kustomize ilə yaxşı birləşir; overley müstəqil və kompozisiya.
2. 3 Kompozit (modullar/paketlər)
Konfiqurasiya 'logging @v2', 'metrics @v1', 'http @v3' modullarından toplanır.
Modul versiyalarının idarə edilməsi, semantik uyğunluq, açıq asılılıqlar.
2. 4 Dəyərlərin üstündəki siyasət (Policy-as-Code)
Əsas «məhdudlaşdırıcılar» və invariantlar (OPA/Rego, Kyverno, Conftest).
Mənaların özləri deyil, onların uyğunluq qaydaları miras alır.
3) Birləşmə alqoritmləri və prioritetlər
Əsas məsələ münaqişələrin həlli qaydasıdır. Spesifikasiyada qeyd etmək tövsiyə olunur:1. Mənbələrin sırası: soldan sağa (base ← env ← region ← service ← instance).
2. Növlər üçün qaydalar:- Skalyar: «sonuncu qalib gəldi» (last-write-wins).
- Obyekt: açarlar üzrə rekursiv merj.
- `append`/`prepend`
- 'uniqueBy (key)' (açar çoxluğu)
- 'patch' ('name' elementi və qismən merj üçün axtarış).
- 3. Ayrılmış açarlar (məsələn, düyün səviyyəsində '_ merge: replace '/' _ merge: deep').
- Başlanğıc bayraqları/ENV dəyişənləri> kirayə sirləri> disk faylları> kodda varsayılan dəyərlər.
YAML-merja nümunəsi
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) Sxemlər və validasiya
Sxemin mövcudluğu təhlükəsiz varisliyin məcburi şərtidir.
JSON Schema/OpenAPI: növlər, məcburi sahələr, enum, nümunələr, məhdudiyyətlər ('minimum', 'format', 'patternProperties').
Sxemlərin versiyası (semver): major - qırıcı, minor - yeni sahələr, patch - fiks.
Pre-merge və Post-merge yoxlamaları: həm fraqmentləri, həm də nəticəni təsdiqləmək.
Defolt: sxem səviyyəsində təyin edin (draft-07 + 'default' dəstəkləyir).
5) Mühit və yerləşdirmə matrisi
Tipik matris:- env: dev, test, stage, prod region: eu-central-1, us-east-1 tier: batch, realtime, internal tenant: A/B/C (white-label, B2B)
- Kombinasiyalar overlay ağacını əmələ gətirir; həddindən artıq dərinlikdən qaçın (3-4 səviyyə kifayətdir).
6) Multi-tenant
Yanaşmalar:- Sərt bölmə: tenant üçün ayrı fayllar/qovluqlar.
- Parametrləşdirmə: bir şablon + values per tenant.
- Miras siyasətlər: resurs/kvota limitləri, SLO, log retenshn.
- Vacib: təhlükəsizlik sərhədləri (sirlər/açarlar) tenantlar arasında axmamalıdır.
7) Secrets və təhlükəsizlik
Sirləri açıq şəkildə miras qoymayın. Bağlantılar miras qalır: 'secretRef', 'vaultPath'.
KMS/Vault/SOPS: şifrələnmiş dəyərləri Git-də saxlayın, açarları çıxartın.
Məsuliyyəti bölüşün: platforma yolları və siyasətləri idarə edir, xidmət komandası həqiqətən lazım olanı idarə edir.
Siyasətçilər: CI-yoxlamalar zamanı «plaintext» sirlərinin qadağan edilməsi.
Rotation: «aşağı yazmayın» - alias/abstraksiyaları istifadə edin ('db/primary/password @ 2025-Q4').
Vault-link nümunəsi
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) Version və miqrasiya
Konfiqurasiya modullarının versiyaları: 'logging @ 2. 3. 1`.
Sxemlər üçün Changelog: jsonnet/ytt/xüsusi skriptlərlə miqrasiya.
Təhlükəsiz geri dönüş üçün iki yönlü miqrasiyalar (up/down).
Uzun budaqlar: sürüklənməyin; bazada müntəzəm overlay rebeyzing.
9) Alətlər və təcrübələr
9. 1 Kubernetes
Kustomize (overlays): 'bases '/' resources', 'patchesStrategicMerge '/' patchesJSON6902' vasitəsilə təbii miras modeli.
Helm (values): iyerarxiya 'values. yaml '+' --set '(lakin CI-də yenidən təyin olunmaqla diqqətli olun).
Kyverno/OPA: «sığorta şəbəkələri» kimi siyasətlər.
yaml overlays/prod/kustomization. yaml resources:
-../../base patchesStrategicMerge:
- patch-resources. yaml commonLabels:
env: prod
9. 2 Terraform
+ 'variables modulları. tf 'müqavilə kimi.
Hesablanan dəyərlər üçün 'locals', 'override' faylları yoxdur - kataloq qatlarından və iş yerlərindən ('workspaces') istifadə edin.
Mənbə sırası: default <tfvars-fayllar <'-var '/' -var-file'.
hcl module "svc" {
source = "./modules/svc"
replicas = var. env == "prod"? 4: 2 logging = local. logging_base
}
9. 3 Ansible
Dəyişənlərin aydın iyerarxiyası (üstünlük artımına görə): role defaults <inventory group_vars <host_vars <extra vars.
Miras üçün - 'group _ vars/{ env }/{ region} .yml' strukturu.
9. 4 Jsonnet / ytt
Zəngin kompozisiya, funksiyalar və «niyyət açarı» ('overlay. replace`, `overlay. merge`).
10) Müqavilələr və məsuliyyət sərhədləri
Platforma (platform team): sxemi, siyasəti, əsas dəyərləri, merj məntiqini müəyyən edir.
Məhsul komandaları: yalnız müqavilə çərçivəsində overley.
SRE/Təhlükəsizlik: audit, validasiya, işarələr, enforcement.
11) CI/CD и GitOps
Pipline mərhələləri:1. Lint (format, naməlum açarların qadağan edilməsi).
2. Validate (JSON Schema/OpenAPI).
3. Dry-run/Render (helm template/kustomize build).
4. Policy check (OPA/Kyverno/Conftest).
5. Diff vs hədəf klasteri (kubectl diff/ArgoCD diff).
6. Progressive delivery: məhdud trafik ilə kanarya overlay.
7. Artefaktların imzası (Cosign, SLSA-attestasiya).
12) Müşahidə və hata ayıklama
Mənşə izi (provenance): sahəni kim və nə vaxt təqdim etdi, son dəyər hansı təbəqədən gəldi.
Merj vizuallaşdırılması: «qalib» açarların hesabatı.
Aktiv konfiqurasiya Runtime-export (sirləri maskalamaqla endpoint '/config ').
Sürüklənmə üçün alertlər: elan edilmiş və faktiki arasında fərqlər.
13) Anti-nümunələr
«Sehr» açıq prioritet qaydaları olmadan.
Dərin zəncirlər (> 4-5 qat): idrak yükünü artırır.
İrsi fayllarda sirlər.
CI-də '--set' vasitəsilə gizli yenidən təyin.
Sxem və render testlərinin olmaması.
14) Giriş çek siyahısı
- Model müəyyən edin (iyerarxiya/laylar/kompozisiya).
- Türlərə görə merj və strategiya qaydasını düzəldin.
- Sxem və versiyanı dərc edin.
- Sirləri bölüşün (yalnız linklər/reflər).
- policy-checks və artefaktların imzaları əlavə edin.
- Dry-run, diffs və mənşə vizualizasiyasını daxil edin.
- Aktiv konfiqurasiya ixracını təmin edin.
- -dəyişikliklər üçün mütərəqqi buraxılışları konfiqurasiya edin.
15) FAQ
S: Təbəqənin çox dərin olduğunu necə başa düşmək olar?
A: Parametrin dəyişdirilməsi üçün> 3 fayl açmaq və> 2 abstraksiya səviyyəsini «sürükləmək» lazımdırsa, strukturu nəzərdən keçirin.
Q: münaqişə massivləri ilə nə etmək lazımdır?
A: Açıq strategiyaları daxil edin: 'replace', 'append', 'uniqueBy (key)', 'patchBy (name)' və onları sənədlərdə qeyd edin.
S: Sirləri miras almaq olarmı?
A: Yox. Yalnız gizli saxlama və giriş siyasətlərinə istinadlar (URI/reflar) miras qalır.
Q: miras test necə?
A: Əsas overlay kombinasiyaları üçün «kəsiklər» çıxarın və qızıl fayllarla yoxlayın; hər PR-də CI-yə render edin.
Əlavə A: Mini Merj Spec
`scalars`: last-write-wins
'objects': deep-merge açarları
`arrays`:- default 'replace'
- `append`
- `uniqueBy(key)`
- 'patchBy (key)' rekursiv element merjesi ilə
- `_merge: replace|deep`
- `_strategy. array: replace|append|uniqueBy(name)|patchBy(name)`
Əlavə B: Nümunələr
B.1 Helm values (base üzərində prod)
yaml values. base. yaml replicas: 2 resources:
requests:
cpu: "100m"
memory: "128Mi"
logging:
level: info
values. prod. yaml replicas: 4 logging:
level: warn
Render komandası:
helm template svc chart/ -f values. base. yaml -f values. prod. yaml
Son faylın prioriteti 'values. prod. yaml`.
B.2 Kustomize overlays
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
Nəticələr
Konfiqurasiya irsi müqavilə + merj alqoritmi + təhlükəsizlik siyasətidir, sadəcə «çox YAML faylları» deyil. Uğur müəyyən edilir:1. aydın model və prioritetlər,
2. valid sxemləri və müstəqil overleylər,
3. sirləri miras imtina,
4. dry-run, policy-checks və diffs ilə GitOps-payplayn,
5. son dəyərlərin mənşəyinin müşahidə edilməsi.
Bu prinsipləri izləyərək, hər hansı bir mühit və topologiyalar üçün proqnozlaşdırıla bilən, ölçülə bilən və təhlükəsiz konfiqurasiyalar əldə edəcəksiniz.