Ops automatizare și scripturi
1) De ce să automatizați operațiunile
Reduce eroarea MTTR/umană, accelerează eliberările și reacțiile.
Face acțiunile repetabile și auditabile (conformitate).
Eliberează timpul inginerilor pentru îmbunătăţire, nu pentru rutină.
2) Principii de bază
1. Idempotența: reluarea → același rezultat.
2. Balustrade de siguranță: uscat, confirmări, limite, auto-rollback.
3. Observabilitate: jurnalele/metricile/traseele sunt încorporate în fiecare script/conductă.
4. Configurare> constante în cod: toate prin parametri/manifeste.
5. GitOps/Docs-as-Code: codul tranzacției este versionat, revizuit, testat.
6. Pași mici: lobi canari, loturi, retribuții cu bugete.
7. Fără secrete în repo: doar prin depozite secrete.
3) clase de sarcini de automatizare
Remediere și incidente: rollback-uri, comutatoare furnizor, steaguri caracteristică degradare.
Lucrări planificate: rotirea certificatelor/cheilor, migrarea bazelor de date (expand→migrate→contract).
Managementul infrastructurii: IaC (Terraform), configurații (Ansible), manifestări K8s.
Date și DataOps: backfills, ETL, validarea calității.
Exerciții Xaoc/DR: simularea eșecurilor cu porțile de securitate.
4) Cum de a alege un instrument
Bash - scripturi de lipici scurte, orchestrație CLI.
Python - logică/SDK, retrai, API, lucrează cu JSON/YAML.
Configurație ansibilă - idempotentă, fără agenți necesari.
Terraform este o infrastructură declarativă.
Kubernetes Jobs/CronJobs - sarcini de lot/programare.
Argo/Airflow - DAG-uri dependente și orchestrație.
ChatOps - lansare sigură din chat cu audit.
5) Arhitectura de automatizare (referință)
CLI/ChatOps → Controller (GitOps/orchestrator) → Interpreți (Ansible/Terraform/K8s Job) → Monitorizare (busteni/metrici/trasee) → Auditare/ticketing → Andocare artefacte (dovezi).
6) Gestionarea idempotenței și a stării
„Verificați, apoi schimbați”: detectați-apoi-acționați (dacă deja OK - nu faceți nimic).
Păstrați „stare/blocare” pentru proceduri lungi.
Împărțiți procedurile în pași atomici cu posibilitatea de rulare repetată.
7) Bug-uri, retrageri și rollback-uri
Retrai cu întârziere exponențială și jitter.
Bugetul de timp de funcționare (total SLA pe sarcină).
Rollback-uri și întrerupător de circuit sunt întotdeauna furnizate.
Coduri de returnare explicite și erori structurate.
8) Securitate și secrete
RBAC/ABAC, privilegii minime, jetoane temporare (JIT/JEA).
Secretele de la Vault/KMS/Cloud Secret Manager; cheile sunt rotite.
„Separarea sarcinilor”: cine scrie nu este cel care aprobă și lansează în prod.
Jurnal de audit: cine/când/ce/cu ce rezultat.
9) GitOps и ChatOps
Testele de → PR → revizuirea → îmbinarea → auto-promovare în medii.
Comenzi în chat (de exemplu, '/ops implementa checkout --canary 5% ') cauza conducte; roboții aplică dovezi și link-uri către tablouri de bord.
10) Planificarea și orchestrarea
CronJobs/DAG cu dependențe și termene limită.
Concurență: 'Interzice', 'Înlocuiește', 'Permite' (K8s) în funcție de sarcină.
Politici/cote de resurse pentru a nu „mânca” prod.
11) Observabilitatea automatizării
Valori: succes/eroare, durata, retroactive, obiecte afectate.
Jurnale: structurat, corelație-ID, linia roșie pe eroare.
Urme: Etapele operațiunilor lungi sunt vizibile în urme distribuite.
Alerte: prin simptome (SLO) și prin valori tehnice (termen limită,% din erori).
12) Testare și simulări
Testele unitare ale parserelor logice şi artefacte.
Teste de integrare în sandbox și canar.
„Simulatoare” (dry-run + furnizori de manechine), reluarea scenarii reale.
Exerciții: obiective clare, porți de securitate, AAR→RCA→CAPA.
13) Șabloane de cod
Bash (schelet cu balustrade)
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 + Idempotency)
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 (sarcină idempotentă)
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 CronJob (rotație planificată)
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 }
Acțiuni GitHub (ChatOps trigger)
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) Lista de verificare a implementării
- Un instrument este selectat pentru fiecare operație și este descris un runbook.
- Există uscat-run, confirmări și limite (balustrade).
- Jurnalele sunt structurate, metrica și alertele sunt conectate.
- Secretele de stocare, acces minim și temporar.
- Teste (unitate/integrare/canar) și simulări efectuate.
- Sunt necesare recenzii GitOps/PR, există un audit.
- Planul rollback și criteriile de succes documentate.
- Automatizarea este legată de bugetele SLO/eroare.
15) Anti-modele
Scripturi fără idempotență și rollback-uri.
„Secrete în cod”, superadmin reprezintă totul.
Editări manuale în vânzări fără audit.
Chunky Bash Zoo în loc de IaC declarativ.
Parametrii „protejat” în codul - nici o reutilizare.
Fără canari → explozii mari.
Jurnalele „pentru oameni” fără structură și corelație.
16) Ops măsurători de maturitate de automatizare
Acoperire:% din operațiunile de automatizare și runbook.
Rata de succes/Rata de încercare a sarcinilor automate.
Timpul mediu de executat şi la timp.
Modificarea ratei de defectare înainte/după automatizare.
Audit-completitudine:% din operațiunile cu dovezi complete.
Securitate: timp de rotație cheie/certificat, cota de accesuri JIT.
17) Linia de jos
Automatizarea ops nu este un set de scripturi disparate, ci un sistem: acțiuni idempotente, balustrade securizate, observabilitate, secrete și acces sub control, GitOps/ChatOps, teste și exerciții. Într-un astfel de sistem, operațiunile devin rapide, previzibile și auditabile - iar afacerea primește versiuni stabile și un risc scăzut de incidente.