GH GambleHub

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.
Dizi: ya tüm değiştirme ya da stratejiler:
  • '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').
4. Etkileşimli kaynakların önceliği:
  • 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.

Kustomize örneği:
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'.

Örnek:
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'
İzin verilen:
  • 'başvuru'
  • 'uniqueBy (anahtar)'
  • Özyinelemeli öğe birleştirme ile 'patchBy (key)'
Özel düğüm etiketleri:
  • '_ 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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.