Yapılandırmaların kalıtımı
1) Yapılandırma mirasına neden ihtiyacım var?
Olgun ürünlerde, yapılandırma parametrelerinin sayısı hizmet sayısından daha hızlı büyür. Miras şunları sağlar:- Ortak değerleri yeniden kullanın (günlüğe kaydetme, geri alma, zaman aşımları).
- Sorumluluğu paylaşın: Platform temel politikaları, hizmet komutlarını - sadece sapmaları belirler.
- Tekrarlamaktan kaçının ve yanlış hizalama riskini azaltın.
- Bültenleri hızlandırın: Değişiklikler varsayılan olarak ağaçtan aşağı yayınlanır.
- Çoklu ortamları ve çoklu kiracılığı tek bir yaklaşımla destekleyin.
2) Miras desenleri
2. 1 Hiyerarşik (ebeveyn - çocuk)
Base (global) - çevre (prod/stage/dev) - bölge/küme - servis - örnek.
Basit ve şeffaf, ancak derin zincirleme ve karmaşık hata ayıklamaya yol açabilir.
2. 2 Katmanlı (taban/kaplamalar)
Temel katman + kaplama kümesi (feature-x, region-eu, security-harddening).
GitOps ve Kustomize ile iyi çalışır; Kaplamalar bağımsız ve bileşimseldir.
2. 3 Kompozit (modüller/paketler)
Yapılandırma modüllerden bir araya getirilmiştir: 'logging @ v2', 'metrics @ v1', 'http @ v3'.
Modül sürümleri, anlamsal uyumluluk, açık bağımlılıklar.
2. 4 Kod Olarak Politika
Temel "sınırlayıcılar've değişmezler (OPA/Rego, Kyverno, Conftest).
Değerlerin kendileri miras alınmaz, ancak kabul edilebilirliklerinin kuralları vardır.
3) Birleşme algoritmaları ve öncelikleri
Önemli olan, anlaşmazlıkları çözme prosedürüdür. Spesifikasyonda düzeltilmesi önerilir:1. Kaynak sırası: soldan sağa (base ← env ← region ← service ← instance).
2. Türler için kurallar:- Skaler: "Son-yazma-kazanır".
- Nesne: tuşlar üzerinde özyinelemeli birleştirme.
- 'ekle'/' ön ekleme'
- 'uniqueBy (key)' (anahtar tarafından ayarlanır)
- 'patch' (öğeyi 'name've kısmi birleştirme ile bulun).
- 3. Ayrılmış anahtarlar (örneğin, düğüm düzeyinde '_ merge: replace'/' _ merge: deep').
- Başlangıç bayrakları/ENV değişkenleri> çalışma zamanı sırları> diskteki dosyalar> koddaki varsayılan değerler.
YAML birleştirme örneği
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) Şemalar ve doğrulama
Bir şemanın varlığı, güvenli kalıtım için bir ön koşuldur.
JSON Schema/OpenAPI: türler, gerekli alanlar, enum, desenler, kısıtlamalar ('minimum', 'format', 'patternProperties').
Şema sürümü oluşturma (semver): major - breaking, minor - new fields, patch - fixes.
Ön birleştirme ve Post birleştirme denetimleri: hem parçaları hem de sonucu doğrulayın.
Varsayılanlar: şema düzeyinde ayarlanır (draft-07 + 'varsayılan'ı destekler).
5) Ortamlar ve dağıtım matrisi
Tipik matris:- env: dev, test, aşama, prod bölgesi: eu-central-1, us-east-1 katmanı: parti, gerçek zamanlı, dahili kiracı: A/B/C (beyaz etiket, B2B)
- Kombinasyonlar bindirme ağacını oluşturur; Aşırı derinlikten kaçının (3-4 seviye yeterlidir).
6) Çok kiracılık
Yaklaşımlar:- Sert bölme: kiracı başına ayrı dosyalar/klasörler.
- Parametrelendirme: bir şablon + kiracı başına değerler.
- Devralınan politikalar: kaynak/kota limitleri, SLO, günlük tutma.
- Önemli: Güvenlik sınırları (sırlar/anahtarlar) kiracılar arasında akmamalıdır.
7) Sırlar ve güvenlik
Sırları açıkça miras almayın. Kalıtsal referanslar: 'secretRef', 'vaultPath'.
KMS/Vault/SOP: Git'te şifrelenmiş değerleri depolayın, anahtarlar - dışarı.
Sorumluluğu paylaşın: Platform yolları ve politikaları yönetir, servis ekibi - gerçekten neye ihtiyacınız var.
Politikalar: CI kontrollerinde 'plaintext' sırlarını yasaklayın.
Rotasyon: "üzerine yazma" - takma ad/soyutlamalar kullanın ('db/primary/password @ 2025-Q4').
Vault Link Örneği
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) Sürüm ve göçler
Yapılandırma modülü sürümleri: 'logging @ 2. 3. 1`.
Şemalar için Changelog: jsonnet/ytt/özel komut dosyaları kullanarak geçişler.
Güvenli geri alma için yukarı/aşağı geçişler.
Uzun dallar: sürüklenmekten kaçının; Düzenli olarak tabana bindirmeleri eğriltir.
9) Araçlar ve uygulamalar
9. 1 Kubernetes
Kustomize (bindirmeler): 'bases'/' resources', 'patches' StrategicMerge'/' patchesJSON6902 'yoluyla doğal kalıtım modeli.
Dümen (değerler): hiyerarşi 'değerleri. yaml '+' --set '(ancak CI'daki geçersiz kılmalara dikkat edin).
Kyverno/OPA: "Güvenlik ağı'olarak politikacılar.
yaml overlays/prod/kustomization. yaml resources:
-../../base patchesStrategicMerge:
- patch-resources. yaml commonLabels:
env: prod
9. 2 Terraform
+ 'değişkenler modülleri. Tf'bir sözleşme olarak.
Hesaplanan değerler için 'locals', 'override' no files - dizin katmanlarını ve çalışma alanlarını ('workspaces') kullanın.
Kaynak sırası: varsayılanlar <tfvars-files <'-var'/' -var-file'.
hcl module "svc" {
source = "./modules/svc"
replicas = var. env == "prod"? 4: 2 logging = local. logging_base
}
9. 3 Ansible
Değişkenlerin net bir hiyerarşisi (artan öncelikte): rol varsayılanları <envanter group_vars <host_vars <ekstra varlar.
Kalıtım için - 'group _ vars/{ env }/{ region} .yml' yapısı.
9. 4 Jsonnet/ytt
Zengin kompozisyon, fonksiyonlar ve "anahtar-niyetler" ('overlay. ',' kaplamasını değiştir. birleştir ').
10) Sözleşmeler ve Pil Limitleri
Platform ekibi-Şemayı, ilkeleri, temel değerleri ve birleştirme mantığını tanımlar.
Ürün ekipleri: yalnızca sözleşme dahilindeki kaplamalar.
SRE/Güvenlik: denetim, doğrulama, imzalar, uygulama.
11) GitOps и CI/CD
Aşamalardan boru hattı:1. Lint (biçim, bilinmeyen anahtarların yasaklanması).
2. Doğrula (JSON Şeması/OpenAPI).
3. Kuru çalıştırma/Oluşturma (dümen şablonu/kustomize oluşturma).
4. Politika kontrolü (OPA/Kyverno/Conftest).
5. Hedef kümeye karşı diff (kubectl diff/ArgoCD diff).
6. Aşamalı teslimat: Sınırlı trafiğe sahip kanarya kaplamaları.
7. Eserlerin imzası (Cosign, SLSA tasdik).
12) Gözlemlenebilirlik ve hata ayıklama
Köken izi: tarlaya kimin ve ne zaman katkıda bulunduğu, nihai değerin hangi katmandan geldiği.
Birleştirme görselleştirme: "Kazanan" anahtarların bir raporu.
Etkin yapılandırmanın çalışma zamanı dışa aktarımı (gizli maskeleme ile uç nokta'/config ').
Sürüklenme uyarıları: Bildirilen ve gerçek arasındaki tutarsızlıklar.
13) Anti-desenler
Açık öncelik kuralları olmadan "büyü".
Derin zincirler (> 4-5 katman): bilişsel yükü arttırır.
Miras kalan dosyalardaki sırlar.
CI'da '--set' aracılığıyla gizli geçersiz kılmalar.
Şema ve oluşturma testlerinin eksikliği.
14) Uygulama kontrol listesi
- Modeli tanımlayın (hiyerarşi/katmanlar/kompozisyon).
- Birleştirme düzenini ve stratejilerini türe göre düzeltin.
- Şema ve sürüm yayınlama.
- Sırları paylaşın (yalnızca bağlantılar/refs).
- Politika kontrolleri ve eser imzaları ekleyin.
- Dry-run, diffuses ve origin görselleştirmesini etkinleştirin.
- Etkin yapılandırmayı çalışma zamanında dışa aktar.
- Yapılandırma değişiklikleri için aşamalı sürümleri yapılandırın.
15) SSS
S: Katmanın çok derin olduğu nasıl anlaşılır?
C: Parametreyi değiştirmek için> 3 dosya açmanız ve> 2 soyutlama düzeyini "kaydırmanız" gerekiyorsa, yapıyı gözden geçirin.
S: Çakışan dizilerle ne yapmalı?
C: Açık stratejiler girin: 'değiştir', 'ekle', 'benzersizBy (anahtar)', 'yamaBy (ad)' - ve bunları belgelere düzeltin.
S: Sırlar miras alınabilir mi?
A: Hayır. Yalnızca gizli depolara ve erişim politikalarına olan bağlantılar (URI/refs) miras alınır.
S: Miras nasıl test edilir?
C: Anahtar bindirme kombinasyonları için "dilimler" çekin ve altın dosyalarla kontrol edin; PR başına CI'de yarış oluşturma.
Ek A: Mini Speck Birleştirme
'skalar': son-yazma-kazanır
'nesneler': anahtarla derin birleştirme
'diziler':- öntanımlı 'yenileme'
- 'başvuru'
- 'uniqueBy (anahtar)'
- Özyinelemeli öğe birleştirme ile 'patchBy (key)'
- '_ merge: replace' deep '
- '_ stratejisi. array: replace 'adpend' uniqueBy (name) | patchBy (name) '
Ek B: Örnekler
B.1 Dümen değerleri (temel üzerinde prod)
yaml values. base. yaml replicas: 2 resources:
requests:
cpu: "100m"
memory: "128Mi"
logging:
level: info
values. prod. yaml replicas: 4 logging:
level: warn
Oluşturma komutu:
helm template svc chart/ -f values. base. yaml -f values. prod. yaml
Son dosyanın önceliği 'değerler'dir. prod. Yaml '.
B.2 Kustomize kaplamaları
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
Özet
Yapılandırma kalıtımı bir sözleşme + birleştirme algoritması + güvenlik politikasıdır, sadece "birçok YAML dosyası'değil. "Başarı şu şekilde tanımlanır:1. açık model ve öncelikler,
2. Doğrulama şemaları ve bağımsız kaplamalar,
3. Sırları miras almayı reddetme,
4. GitOps-pipeline ile kuru çalıştırma, ilke kontrolleri ve dağıtımları,
5. Nihai değerlerin kökeninin gözlemlenebilirliği.
Bu ilkeleri izleyerek, tüm ortamlar ve topolojiler için öngörülebilir, ölçeklenebilir ve güvenli yapılandırmalar elde edersiniz.