Ops-ավտոմատիզացիա և ջութակներ
1) Ինչո՞ ւ ավտոմատացնել վիրահատությունը
Նվազեցնում է MTTR/մարդու սխալները, արագացնում ալգորիթմները և արձագանքը։
Նա գործողություններ է կատարում կրկնվող և աուդիացված (կոմպլացիա)։
Ազատում է ինժեներների ժամանակը բարելավման համար, ոչ թե ռուտինի համար։
2) Հիմնական սկզբունքները
1. Idempotention 'երկրորդ գործարկումը նույն արդյունքն է։
2. Ապահով փետուրներ ՝ www.y-run, հաստատում, լիմիտներ, ավտո-արձագանքներ։
3. Դիտարկումը 'լոգեր/մետրիկներ/թրեյսներ ներկառուցված են յուրաքանչյուր ջութակի/wwww.pline։
4. Կազմաձևումը> կոդի կայունությունը 'բոլորը պարամետրերի/մանիֆեստի միջոցով։
5. GitoPs/Docs-as-Code: Վիրահատությունների կոդը տարբերակվում է, հեղափոխվում, փորձարկվում։
6. Փոքր քայլերը 'կանացի բաժնետոմսեր, մարտեր, ռելսեր։
7. Առանց ռեպոյի գաղտնիքների 'միայն secret-2019-ի միջոցով։
3) Ավտոմատացման խնդիրների դասերը
Ռեմեդիացիան և միջադեպերը 'արձագանքներ, պրովայդերներ, ֆիչի դրոշներ և դեգրադացիաներ։
Պլանավորված աշխատանք 'հավաստագրերի/հաշվարկների հաշվարկներ, BD (expand www.migrate .ract)։
Ենթակառուցվածքի կառավարումը ՝ IaC (Terraform), կազմաձևը (Ansible), K8s մանիֆեստները։
Տվյալները և WinoPs: backfils, ETL, որակի վալիդացիա։
Xaoc/DR ուսուցումները 'սիմվոլիկ հրաժարումներ անվտանգության խաղացողների հետ։
4) Ինչպես ընտրել գործիքը
Bash-ը կարճ glue-ջութակները, CLI նվագախումբը։
Python-ը/MSK, retrai, API-ն, JSON/YAML-ի հետ աշխատելը։
Ansible-ը idempotent կազմաձևն է, որը պետք չէ։
Terraform-ը կառավարական ենթակառուցվածքն է։
Kubernetes Jobs/Case Jobs-ը փաթեթային առաջադրանքներ/պլանավորում է։
Argo/Airflow-ը կախված DAG-ն և նվագախումբը։
ChatOps-ը անվտանգ արձակումն է չատից աուդիտի հետ։
5) Ավտոմատիկայի ճարտարապետությունը (հանրաքվե)
CLI/ChatOps International (GitOps/նվագարկիչ) - Կատարողներ (Ansible/Terraform/K8s Job) - Logs (Logs/metrics/Tracketing/Tiketing/Dok-արտեֆակտներ)։
6) Իդեմպոտենտալությունը և վիճակը կառավարելը
«Ստուգիր, ապա փոխիր» ՝ detron-then-act (եթե արդեն OK-ն ոչինչ չի անում)։
Պահպանեք «կատարման նշանները» (state/24k) երկար ընթացակարգերի համար։
Ընթացակարգերը բաժանեք ատոմային քայլերին, որոնք կարող են վերաարտադրել։
7) Սխալներ, ակնարկներ և արձագանքներ
Ռետրոյին էքսպոնենցիալ ուշացումով և ջիտթերի հետ։
Վիրահատության ժամանակի բյուջեն (ընդհանուր SLA առաջադրանքի համար)։
Մատնահետքերը և «կանգառի կոճակը» (circuit breaker) միշտ տեղադրված են։
Հստակ չափանիշներ և կառուցվածքային սխալներ։
8) Անվտանգությունն ու գաղտնիքները
RBAC/ABAC, նվազագույն արտոնություններ, ժամանակավոր հոսանքներ (JIT/JLS)։
Գաղտնիքները Vox/KFC/Cloud Secret Line-ից; բանալիները պտտվում են։
«Պարտականությունների բաժանումը», ով գրում է, ոչ թե մեկը, ով հավանություն է տալիս և սկսում է վաճառել։
Աուդիտ ամսագիրը 'ով/երբ/ինչ/որ արդյունք։
9) GitOps и ChatOps
PR-ի թեստերը հակադրվում են միջավայր։
Զրույցի թիմերը (օրինակ ՝ ') առաջացնում են plins; բոտերը կիրառում են evidence և հղում dashbords։
10) Պլանավորումը և նվագախումբը
Cast Jobs/DAG կախվածությամբ և dedlins։
Մրցակցությունը '«Forbid», «Replace», «Allow» (K8s) կախված առաջադրանքից։
Ռեսուրսների/քվոտայի քաղաքական գործիչները, որպեսզի «ուտեն» այլն։
11) Ավտոմատացման դիտարկումը
Մետրիկները 'հաջողությունը/սխալը, տևողությունը, ռետերանները, որոնք ազդում են օբյեկտների վրա։
Լոգները 'կառուցվածքային, direrelation-ID, կարմիր տող սխալների վրա։
Հետքեր ՝ երկար վիրահատությունների քայլերը տեսանելի են բաշխված ուղիներում։
Ալերտներ 'ախտանիշներով (SLO) և ռուսական մետրիկներով (dedline, սխալների տոկոսը)։
12) Փորձարկումներ և սիմվոլներ
Yunit-թեստերը և արտեֆակտների պարսերը։
Ինտեգրացիոն թեստերը ավազում և կանարեյքում։
«Սիմուլյատորներ» (wwww.y-run + ֆիքսված պրովայդերներ), իրական պարամետրեր։
Ուսուցումներ ՝ հստակ նպատակներ, անվտանգության խաղացողներ, AAR no RCA, CAPA։
13) Կոդի ձևանմուշները
Բաշ (կմախք կրակոցներով)
bash
!/usr/bin/env bash set -Eeuo pipefail trap 'echo "[ERR] line $LINENO"; exit 1' ERR
log(){ printf '%s %s\n' "$(date -Iseconds)" "$"; }
DRY=${DRY_RUN--true}
ensure_dep(){ command -v "$1" >/dev/null { echo "need $1"; exit 2; }; }
apply_change(){
local target="$1"
if [[ "$DRY" == "true" ]]; then log "[DRY] would update $target"
else kubectl apply -f "$target"
fi
}
main(){
ensure_dep kubectl for f in manifests/.yaml; do apply_change "$f"
done log "done"
}
main "$@"
Python (retrai + idempotention)
python import argparse, time, json, sys from pathlib import Path import requests
def with_retries(fn, attempts=5, base=0. 2):
for i in range(attempts):
try:
return fn()
except Exception as e:
sleep = base (2i)
time. sleep(sleep)
raise
def already_done(marker):
return Path(marker). exists()
def mark_done(marker):
Path(marker). write_text("ok")
def main():
ap = argparse. ArgumentParser()
ap. add_argument("--endpoint", required=True)
ap. add_argument("--marker", default="/tmp/op. marker")
args = ap. parse_args()
if already_done(args. marker):
print("idempotent: nothing to do"); return
def call():
r = requests. post(args. endpoint, json={"action":"rotate"})
r. raise_for_status()
return r. json()
resp = with_retries(call)
print(json. dumps(resp))
mark_done(args. marker)
if __name__ == "__main__":
sys. exit(main())
Ansible (գաղափարական խնդիր)
yaml
- hosts: web become: true tasks:
- name: Ensure nginx present and enabled ansible. builtin. package:
name: nginx state: present
- name: Deploy config ansible. builtin. template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: '0644'
notify: restart nginx handlers:
- name: restart nginx ansible. builtin. service:
name: nginx state: restarted
Kubernetes Cast Job (պլանավորված ռոտացիա)
yaml apiVersion: batch/v1 kind: CronJob metadata:
name: cert-rotate spec:
schedule: "0 3 "
concurrencyPolicy: Forbid jobTemplate:
spec:
template:
spec:
serviceAccountName: ops-automation restartPolicy: OnFailure containers:
- name: rotator image: registry/ops/rotator:1. 2. 3 args: ["--rotate", "--budget-ms=60000"]
envFrom:
- secretRef: { name: rotator-secrets }
GitHub Actions (ChatOps Stuger)
yaml name: ops-deploy on:
workflow_dispatch:
inputs:
service: {required: true}
canary: {required: false, default: "5"}
jobs:
deploy:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- run:./scripts/deploy. sh "${{ inputs. service }}" --canary "${{ inputs. canary }}"
14) Ներդրման չեկի ցուցակ
- Յուրաքանչյուր վիրահատության համար ընտրվում է գործիք և www.runbook։
- Կան www.y-run, հաստատություններ և սահմաններ (փետուր)։
- Լոգները կառուցվածքային են, մետրերը և ալերտները միացված են։
- Գաղտնիքները կղզիներից, մատչելի են նվազագույն և ժամանակային։
- Թեստերը (յունիտ/ինտեգրում/կանարեյկա) և սիմուլյացիան կատարեցին։
- GitOps/PR-revie պարտադիր է, կա աուդիտ։
- Արձագանքման պլանը և հաջողության չափանիշները մեկնաբանվում են։
- Ավտոմատիզացիան կապված է SLO/սխալի թողարկումների հետ։
15) Anti-patterna
Ջութակները առանց կուռքի և մատնահետքերի։
«Գաղտնիքները կոդում», գերծանրքաշային սալիկներ ամեն ինչի համար։
Ձեռքի ձեռքերը վաճառվում են առանց պահանջների։
Կուսկի Bash-կենդանաբանական պարկը IaC-ի փոխարեն։
«Պարամետրերը» կոդի մեջ չեն։
Չկա www.y-run/kanareks մեծ պայթյուններ։
Լոգները «մարդկանց համար» առանց կառուցվածքի և կորստի։
16) Ops-ավտոմատացման հասունության մետրերը
Coverage-ը ավտոմատիզացիայի և runbook վիրահատությունների տոկոսն է։
Success rate/Retry rate ավտոմատ խնդիրներ։
Mean to execom (միջին տևողությունը) և on-time (dedline)։
Change failure rate-ից մինչև/ավտոմատացումից հետո։
Աուդիտ-ամբողջական 'ամբողջ evidence վիրահատությունների տոկոսը։
Սեկուրիտին 'մրցույթի/հավաստագրերի ռոտացիայի ժամանակը, JIT-հասանելի մասը։
17) Արդյունքը
Ops-ավտոմատիզացիան ոչ թե ցրված ջութակների հավաքածու է, այլ համակարգ 'idempotent գործողություններ, անվտանգ փետուրներ, դիտողություններ, գաղտնիքներ և հասանելի, GitOps/ChatOps, թեստեր և ուսմունքներ։ Վիրահատության այս համակարգում դառնում են արագ, կանխատեսելի և աուդիո, իսկ բիզնեսը ստանում է կայուն օրինագծեր և ցածր ռիսկեր։