Միգրացիաների ժառանգությունը
1) Ինչո՞ ւ է անհրաժեշտ խմբակցությունների ժառանգությունը
Հասուն ապրանքներում միգրացիոն վճարների թիվը աճում է ավելի արագ, քան ծառայությունների քանակը։ Ժառանգությունը թույլ է տալիս
Օգտագործեք ընդհանուր արժեքներ (տրամաբանություն, ռետրաններ, թայմաուտներ)։
Պատասխանատվությունը կիսելու համար պլատֆորմը հիմնական քաղաքականություններ է տալիս, ծառայությունների թիմերը միայն շեղումներ են։
Խուսափել հիվանդություններից և նվազեցնել ռասինխրոնիզացիայի ռիսկը։
Արագացնել օրինագծերը. Լռելյայն փոփոխությունները փոխանցվում են ծառի ներքև։
Պահպանել մուլտֆիլմ-միջավայրը և մուլտֆիլմի-տենանտիզմը միասնական մոտեցումով։
2) Ժառանգության մոդելները
2. 1 Հիերարխիկ (ծնող ռուսական երեխա)
Բազան (global) բացատրում է շրջակա միջավայրը (108/stage/dev) ռուսական տարածաշրջանը/կլաստերը տեղադրված են instans ծառայությունը։
Պարզ և թափանցիկ, բայց կարող է հանգեցնել «խորը շղթաների» և բարդ կարգաբերությունների։
2. 2 Շերտավոր (box/overlays)
Հիմնական շերտը + օվերլեների հավաքածու (feature-x, region-eu, 108-hardening)։
Լավ համադրվում է GitOps-ի և Kustomize-ի հետ։ հավատացյալները անկախ և կոմպոզիցիոն են։
2. 3 Կոմպոզիցիոն (մոդուլներ/փաթեթներ)
Կազմաձևումը պատրաստվում է մոդուլներից '«logging @ v2», «metrance @ v1», «http @ v3»։
Մոդուլների տարբերակների կառավարումը, սեմանտիկ համատեղելիությունը, ակնհայտ կախվածությունը։
2. 4 Քաղաքականություն արժեքների վերևում (Policy-as-Code)
Հիմնական «սահմանափակիչները» և ինվարանտները (OPA/Rego, Kyverno, Deltest)։
Ժառանգվում են ոչ թե արժեքները, այլ դրանց ընդունակության կանոնները։
3) Միաձուլման և առաջնահերթությունների ալգորիթմներ
Հիմնական հարցը հակամարտությունների լուծման կարգն է։ Խորհուրդ է տրվում ամրագրել ճշգրտության մեջ
1. Աղբյուրների կարգը 'ձախ կողմում (bentenv demengion)։
2. Կանոններ տեսակների համար
Սկալյար '«վերջինը հաղթեց» (last-write-ents)։
Օբյեկտ 'ռեքուրսիվ մանգը։
Տե՛ ս ՝ կամ փոխարինում ամբողջ, կամ ռազմավարություն
`append`/`prepend`
«uniqueBy (key)» (շատ բանալին)
«patch» (տարրի որոնումը «name» և մասնակի մերջ)։
3. Վերացված բանալիները (օրինակ ՝ «_ merge: replace '/_ merge: deep» հանգույցի մակարդակում)։
4. Ինտերակտիվ աղբյուրների գերակայությունը
Գործարկման դրոշները/ENV-2019> ռանտայմի գաղտնիքները> ֆայլերը կոդում լռելյայն արժեքով։
Օրինակ YAML-merga
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, patterns, սահմանափակումներ («minimum», «paternProperties»)։
Սխեմաների տարբերակումը (semver) 'major - կոտրող, minor - նոր դաշտեր, patch - ֆիքսներ։
Pre-merge և Post-merge-merge-ը 'valivation և բեկորներ, և արդյունքը։
Դեֆոլտներ 'տալ սխեմայի մակարդակում (wwww.aft-35+ աջակցում է «www.ru»)։
5) Շրջապատում և մոգության մատրիցա
Տիպիկ մատրիցա
env: dev, test, stage, prod region: eu-central-1, us-east-1 tier: batch, realtime, internal tenant: A/B/C (white-label, B2B)
Համադրությունները կազմում են օվերլեների ծառը։ խուսափեք ավելորդ խորությունից (3-4 մակարդակը բավարար է)։
6) Multi-tenanty
Մոտեցումներ
Կոշտ բաժանումը 'առանձին ֆայլեր/փաթեթներ ստվերով։
Դելբրիզացիա 'մեկ ձև + values per tenae։
Ժառանգված քաղաքականությունները 'ռեսուրսների/քվոտայի սահմաններ, SLO, rentenshn logs։
Կարևոր է, որ անվտանգության սահմանները (գաղտնիքները/բանալիները) չպետք է լինեն տենանտների միջև։
7) Գաղտնիքները և անվտանգությունը
Մի՛ ժառանգեք գաղտնիքները հստակ ձևով։ Հղումները ժառանգվում են ՝ «secretRef», «vig Path»։
KFC/VAST/SOPS: պահել ծածկագրված արժեքները Git-ում, բանալիները դուրս են։
Կիսեք պատասխանատվությունը 'պլատֆորմը ղեկավարվում է ճանապարհներով և քաղաքական գործիչներով, մրցույթի թիմը այն է, ինչ իսկապես անհրաժեշտ է։
Քաղաքական գործիչները 'CI ստուգումների ժամանակ «plaintext» գաղտնիքների արգելքը։
Rotation: Մի «վերաշարադրեք ներքև» - օգտագործեք alias/աբստրակցիաներ («db/primary/password @ 2025-Q4»)։
Օրինակ Vox-հղումով
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) Տարբերակումը և լուծումը
Կազմաձևման մոդուլների տարբերակները '"logging @ 2։ 3. 1`.
Changelog-ը սխեմաների համար 'jsonnet/ytt/castome ջութակների միջոցով։
Երկվորյակներ (up/down) անվտանգ արձագանքելու համար։
Երկար ճյուղեր 'խուսափել դրեյֆից։ պարբերաբար վերբեռնեք հավատալիքները բազայի վրա։
9) Գործիքներ և պրակտիկա
9. 1 Kubernetes
Kustomize (overlays) 'ժառանգության բնական մոդել' «bases »/« resources», «patchesStrategicMerge »/« patchesJSON6902» միջոցով։
Helm (values) 'հիերարխիա' values։ yaml '+ --set "(բայց զգույշ եղեք CI-ում վերափոխումներով)։
Kyverno/OPA 'քաղաքականությունը որպես «ապահովագրության ցանցեր»։
Kustomize-ի օրինակ
yaml overlays/prod/kustomization. yaml resources:
-../../base patchesStrategicMerge:
- patch-resources. yaml commonLabels:
env: prod
9. 2 Terraform
+ variables մոդուլները։ tf 'որպես պայմանագիր։
«www.als» հաշվարկային արժեքների համար, «override» ֆայլեր չկան, օգտագործեք ալյումինե շերտեր և աշխատանքային տարածություններ («workspaces»)։
Աղբյուրների կարգը 'լռելյայն արժեքներ Օրինակ 9. 3 Ansible Փոփոխականների հստակ հիերարխիա (առաջնահերթության աճով) 'role medaulation Ժառանգության համար '«group _ vars/+ env +/+ region _ yml» կառուցվածքը։ 9. 4 Jsonnet / ytt Հարուստ կոմպոզիա, գործառույթներ և «բանալին մտադրություններ» («overlay»)։ replace`, `overlay. merge`). 10) Պայմանագրեր և պատասխանատվության սահմաններ Պլատֆորմը (platform team), որոշում է սխեման, քաղաքականությունը, հիմնական արժեքները, մերգի տրամաբանությունը։ Ապրանքային թիմերը 'միայն պարտիզանները պայմանագրի սահմաններում։ MSE/Անվտանգություն ՝ աուդիտ, վալիդացիա, ազդանշաններ, enforcae։ 11) CI/CD и GitOps Դելպլինը բեմից 1. Lint (ձևաչափը, անհայտ տարածքների արգելքը)։ 2. Validate (JSON Schema/OpenAPI). 5. Diff-ի դեմ (kubectl diff/ArgoCD diff)։ 6. Progressive progressive-ivery-ը 'քարե օվերելներ, որոնք սահմանափակ են։ 7. Արտեֆակտների ստորագրությունը (Cosport, SLIM հավաստագրում)։ 12) Դիտողությունն ու կարգաբերումը Ծագման ուղին (provenae) 'ո՞ վ և երբ ներդրեց դաշտը, որի շերտը հասավ վերջնական կարևորությանը։ Մերջի վիզուալիզացիան '«հաղթողների» զեկույցը։ Runtime-էքսպորտը ակտիվ կազմաձևի (endpoint '/wwww.orld) հետ։ Ալբերտները դրեյֆի վրա 'տարբերություններ հայտարարված և իրական միջև։ 13) Anti-patterna «Մոգությունը» առանց ակնհայտ առաջնահերթությունների։ Խորը շղթաները (> 4-5 շերտեր), բարձրացնում են ճանաչողական բեռը։ Գաղտնիքները ժառանգված ֆայլերում։ Թաքնված վերագրանցումները «-set» -ի միջոցով CI-ում։ Ռենդերինգի սխեմայի և թեստերի բացակայությունը։ 14) Ներդրման չեկի ցուցակ 15) FAQ Q 'Ինչպե՞ ս հասկանալ, որ շերտը չափազանց խորը է։ Եվ եթե դուք պետք է բացեք> 3 ֆայլեր և «պտտեք»> 2 վերացական մակարդակ, վերանայեք կառուցվածքը։ Q 'Ի՞ նչ անել հակամարտող զանգվածների հետ։ Ա 'Մուտքագրեք հստակ ռազմավարություններ' «replace», «append», «uniqueBy (key)», «patchBy (name)» և դրանք գրանցեք փաստաթղթերում։ Q 'Հնարավո՞ ր է գաղտնիքները ժառանգել։ Ա 'Ոչ։ Միայն հղումները (URI/refa) ժառանգվում են գաղտնիության և հասանելիության քաղաքականության վրա։ Q 'Ինչպե՞ ս փորձարկել ժառանգությունը։ Ա 'Նկարահանեք «կտրվածքներ» օվերների հիմնական համադրությունների համար և ստուգեք golden ֆայլերը։ կանգնել CI-ում յուրաքանչյուր PR-ում։ Հավելված A: Mini-spect merga `scalars`: last-write-wins 'objects': deep-merge `append` `uniqueBy(key)` «patchBy (key)» -ը տարրերի ռեկուրսիվ չափսի հետ Հատուկ ռուսական հանգույցներ `_merge: replace|deep` `_strategy. array: replace|append|uniqueBy(name)|patchBy(name)` Հավելված B: Օրինակներ Ռենդերինգի թիմը Վերջին ֆայլի գերակայությունը «values» է։ prod. yaml`. Միգրացիաների ժառանգությունը + merge + անվտանգության քաղաքականության ալգորիթմ է, ոչ միայն «շատ YAML ֆայլեր»։ Հաջողությունը որոշվում է 1. պարզ մոդել և գերակայություններ, 2. առաջնորդող սխեմաներ և ինքնուրույն հավատալիքներ, 3. հրաժարվելով գաղտնիքների ժառանգությունից, 4. GitOps-interpline-ը www.y-run, policy-winks-links-ով, 5. բարդ արժեքների ծագման դիտարկումը։ Այս սկզբունքներին հետևելով ՝ կստանաք կանխատեսելի, մեծացված և ապահով կազմաձևեր ցանկացած միջավայրում և տեղաբանության համար։hcl module "svc" {
source = "./modules/svc"
replicas = var. env == "prod"? 4: 2 logging = local. logging_base
}
3. Dry-run/Render (helm template/kustomize build).
4. Policy check (OPA/Kyverno/Conftest).
Bull Helm values (box)
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. yamlB.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: 4B.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Արդյունքները