Ops-Automatisierung und Skripte
1) Warum Operationen automatisieren
Reduziert MTTR/menschliche Fehler, beschleunigt Releases und Reaktionen.
Macht Aktionen wiederholbar und auditierbar (Compliance).
Gibt Ingenieuren Zeit für Verbesserungen, nicht für Routine.
2) Grundprinzipien
1. Idempotenz: Wiederholter Start → das gleiche Ergebnis.
2. Sicheres Geländer: Dry-Run, Bestätigungen, Limits, Auto-Rollbacks.
3. Beobachtbarkeit: Protokolle/Metriken/Traces sind in jedes Skript/Pipeline eingebettet.
4. Konfiguration> Konstanten im Code: alles über Parameter/Manifeste.
5. GitOps/Docs-as-Code: Der Operationscode wird versioniert, gebrüllt, getestet.
6. Kleine Schritte: kanarische Anteile, Batchi, Retrays mit Budgets.
7. Keine Geheimnisse im Repo: nur über Geheimspeicher.
3) Klassen von Automatisierungsaufgaben
Remediation und Vorfälle: Pullbacks, Anbieterwechsel, Ficha-Fahnen der Degradierung.
Geplante Arbeiten: Zertifikats-/Schlüsselrotationen, DB-Migrationen (expand→migrate→contract).
Infrastrukturmanagement: IaC (Terraform), Konfigurationen (Ansible), K8s Manifeste.
Daten und DataOps: Backfills, ETL, Qualitätsvalidierung.
Xaoc/DR-Übungen: Fehlersimulationen mit Sicherheitsgates.
4) Wie wählt man ein Werkzeug
Bash - kurze Glue-Skripte, CLI-Orchestrierung.
Python - Logik/SDK, Retrays, API, Arbeiten mit JSON/YAML.
Ansible ist eine idempotente Konfiguration, Agenten werden nicht benötigt.
Terraform ist eine deklarative Infrastruktur.
Kubernetes Jobs/CronJobs - Batch-Aufgaben/Planung.
Argo/Airflow - abhängige DAGs und Orchestrierung.
ChatOps - Sichere Ausführung von Chat mit Audit.
5) Automatisierungsarchitektur (Referenz)
CLI/ChatOps → Controller (GitOps/Orchestrator) → Interpreten (Ansible/Terraform/K8s Job) → Überwachung (Protokolle/Metriken/Traces) → Auditing/Ticketing → Dock-Artefakte (Evidence).
6) Idempotenz und Zustandsmanagement
„Check, dann change“: detect-then-act (wenn schon OK - nichts tun).
Speichern Sie „Ausführungsmarkierungen“ (state/lock) für lange Prozeduren.
Die Verfahren sind in atomare Schritte mit der Möglichkeit der Wiederholung unterteilt.
7) Fehler, Retrays und Pullbacks
Retrays mit exponentieller Verzögerung und Jitter.
Zeitbudget der Operation (Gesamt-SLA pro Aufgabe).
Rollbacks und ein „Stop-Button“ (Circuit Breaker) sind immer vorgesehen.
Explizite Rückgabecodes und strukturierte Fehler.
8) Sicherheit und Geheimnisse
RBAC/ABAC, Mindestprivilegien, temporäre Token (JIT/JEA).
Geheimnisse aus Vault/KMS/Cloud Secret Manager; Schlüssel rotieren.
„Aufgabenteilung“: Wer schreibt, ist nicht derjenige, der in der Produktion zustimmt und startet.
Audit-Log: wer/wann/was/mit welchem Ergebnis.
9) GitOps и ChatOps
PR → Tests → Revue → Merge → Auto-Promotion am Mittwoch.
Befehle im Chat (z.B. '/ops deploy checkout --canary 5%') rufen Pipelines auf; Bots wenden evidence und Links zu Dashboards an.
10) Planung und Orchestrierung
CronJobs/DAG mit Abhängigkeiten und Deadlines.
Wettbewerb: 'Forbid',' Replace', 'Allow' (K8s) je nach Aufgabe.
Ressourcenrichtlinien/Quoten, um nicht zu „fressen“ prod.
11) Beobachtbarkeit der Automatisierung
Metriken: Erfolg/Fehler, Dauer, Retrays, betroffene Objekte.
Logs: strukturiert, correlation-ID, rote Zeile auf Fehler.
Traces: Die Schritte langer Operationen sind in verteilten Traces sichtbar.
Alerts: nach Symptomen (SLO) und nach technischen Metriken (Deadline,% Fehler).
12) Tests und Simulationen
Unit-Tests von Logik und Artefakt-Parser.
Integrationstests im Sandkasten und am Kanarienvogel.
„Simulatoren“ (Dry-Run + fiktive Anbieter), Replay reale Szenarien.
Übungen: klare Ziele, Sicherheitstore, AAR→RCA→CAPA.
13) Codemuster
Bash (Skelett mit Geländer)
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 (Retrays + Idempotenz)
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 (idempotente Aufgabe)
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 (geplante Rotation)
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-Aktionen (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) Checkliste Umsetzung
- Für jede Operation wird ein Werkzeug ausgewählt und das Runbook beschrieben.
- Es gibt Dry-Run, Bestätigungen und Limits (Geländer).
- Die Protokolle sind strukturiert, die Metriken und Alerts sind miteinander verbunden.
- Geheimnisse aus dem Tresor, Zugriffe minimal und temporär.
- Tests (Einheit/Integration/Kanarienvogel) und Simulationen wurden durchgeführt.
- GitOps/PR-Revue sind Pflicht, es gibt ein Audit.
- Rollback-Plan und Erfolgskriterien sind dokumentiert.
- Die Automatisierung ist an SLOs/Fehlerbudgets gebunden.
15) Anti-Muster
Skripte ohne Idempotenz und Rollbacks.
„Secrets in Code“, Superadmins für alles.
Manuelle Bearbeitungen in der Produktion ohne Audit.
Klumpiger Bash-Zoo statt deklarativer IaC.
Parameter „genäht“ in den Code - keine Neubenutzung.
Keine dry-run/Kanarienvögel → große Explosionen.
Protokolle „für Menschen“ ohne Struktur und Korellation.
16) Reifegradmetriken der Ops-Automatisierung
Abdeckung:% der Operationen mit Automatisierung und Runbook.
Erfolgsrate/Retry Rate von automatischen Aufgaben.
Mean time to execute (durchschnittliche Dauer) und on-time (am Stichtag).
Änderungsfehlerrate vor/nach der Automatisierung.
Audit-Vollständigkeit:% der Transaktionen mit vollständiger Evidence.
Verbriefungen: Zeitpunkt der Schlüssel-/Zertifikatsrotation, Anteil der JIT-Zugriffe.
17) Das Ergebnis
Ops-Automatisierung ist keine Sammlung von verstreuten Skripten, sondern ein System: idempotente Aktionen, sichere Geländer, Beobachtbarkeit, Geheimnisse und Zugriffe unter Kontrolle, GitOps/ChatOps, Tests und Übungen. In einem solchen System wird der Betrieb schnell, vorhersehbar und auditierbar - und das Unternehmen erhält stabile Releases und ein geringes Risiko für Vorfälle.