Ops ავტომატიზაცია და სკრიპტები
1) რატომ არის ოპერაციების ავტომატიზაცია
ამცირებს MTTR/ადამიანის შეცდომებს, აჩქარებს გამოშვებებს და რეაქციებს.
გახდის მოქმედებებს განმეორებითი და აუდიტი (შესაბამისობა).
ათავისუფლებს ინჟინრების დროს გაუმჯობესებისთვის და არა რუტინებისთვის.
2) ძირითადი პრინციპები
1. Idempotence: ხელახალი გაშვება - იგივე შედეგი.
2. უსაფრთხო მოაჯირები: dry-run, დადასტურება, ლიმიტები, ავტო-გამოტოვება.
3. დაკვირვება: logs/metrics/traces ინტეგრირებულია თითოეულ სკრიპტში/pypline.
4. კონფიგურაცია> კოდი მუდმივი: ყველაფერი პარამეტრების/მანიფესტების საშუალებით.
5. GitOps/Docs-as-Code: ოპერაციების კოდი არის ვერსირებული, revution, ტესტირება.
6. მცირე ნაბიჯები: კანარის აქციები, ბატები, ბიუჯეტებით რეაგირება.
7. საიდუმლო გარეშე რეპოში: მხოლოდ საიდუმლო საცავის საშუალებით.
3) ავტომატიზაციის ამოცანების კლასები
რემედიაცია და ინციდენტები: გამოტოვება, პროვაიდერების გადართვა, დეგრადაციის წინა დროშები.
დაგეგმილი სამუშაოები: სერთიფიკატების/კლავიშების როტაცია, მონაცემთა ბაზის მიგრაცია (ექსპედიცია - ფიგურა - კონტრაქტი).
ინფრასტრუქტურის მენეჯმენტი: IaC (Terraform), კონფიგურაცია (Ansible), K8s მანიფესტები.
მონაცემები და DataOps: ზურგჩანთები, ETL, ხარისხის შესაბამისობა.
Xaoc/DR სავარჯიშოები: უსაფრთხოების კარიბჭეებთან უარის თქმის სიმულაცია.
4) როგორ ავირჩიოთ ინსტრუმენტი
Bash არის მოკლე glue სკრიპტები, CLI ორკესტრი.
პითონი - ლოგიკა/SDK, retrai, API, მუშაობა JSON/YAML- სთან.
Ansible არის imempotent კონფიგურაცია, აგენტები არ არის საჭირო.
Terraform არის დეკლარაციული ინფრასტრუქტურა.
Kubernetes Jobs/CronJobs - პაკეტის დავალებები/დაგეგმვა.
Argo/Airflow - დამოკიდებული DAG და ორკესტრაცია.
ChatOps არის უსაფრთხო გაშვება ჩატიდან აუდიტით.
5) ავტომატიზაციის არქიტექტურა (რეფერენდუმი)
CLI/ChatOps - კონტროლერი (GitOps/ორკესტრი), შემსრულებლები (Ansible/Terraform/K8s Job) - მონიტორინგი (logs/მეტრიკა/ტრეისი), Audit/tiketing Artefacts (es).
6) Idempotence და სახელმწიფო მართვა
„შეამოწმე, შემდეგ შეცვალე“: detect-then-act (თუ OK უკვე - ნუ გააკეთებ არაფერს).
შეინახეთ გრძელი პროცედურები.
პროცედურები დაყოფილია ატომურ ნაბიჯებად, განმეორებითი გაძარცვის შესაძლებლობით.
7) შეცდომები, რეპრესიები და გამოტოვება
Retrai ექსპონენციალური შეფერხებით და ჯიტერი.
ოპერაციის დროის ბიუჯეტი (დავალებისთვის საერთო SLA).
გამოტოვება და „გაჩერების ღილაკი“ ყოველთვის არის გათვალისწინებული.
დაბრუნების აშკარა კოდები და სტრუქტურირებული შეცდომები.
8) უსაფრთხოება და საიდუმლოებები
RBAC/ABAC, მინიმალური პრივილეგიები, დროებითი ნიშნები (JIT/JEA).
საიდუმლოებები Vault/KMS/Cloud Secret Manager; გასაღებები ბრუნავს.
„პასუხისმგებლობის გამიჯვნა“: ვინც წერს - არა ის, ვინც ამტკიცებს და იწყებს გაყიდვას.
აუდიტის ჟურნალი: ვინ/როდის/რა/რა/რა შედეგი.
9) GitOps и ChatOps
PR - ტესტები - შურისძიება - მერჯი - მანქანის პრომოტაცია ოთხშაბათს.
ჩეთის ბრძანებები (მაგალითად, '/ops deploy checkout -- canary 5% ') იწვევს payplines; ბოტები იყენებენ evidence და ბმულებს დაშბორდებზე.
10) დაგეგმვა და ორკესტრი
CronJobs/DAG დამოკიდებულებითა და ვადებით.
კონკურენცია: 'Forbid', 'Replace', 'Allow' (K8s) დამოკიდებულია დავალებაზე.
რესურსების/კვოტების პოლიტიკოსები ისე, რომ არ ჭამოთ პროდ.
11) ავტომატიზაციის დაკვირვება
მეტრიკა: წარმატება/შეცდომა, ხანგრძლივობა, რესტავრაცია, დაზარალებული ობიექტები.
Logs: სტრუქტურირებული, correlation-ID, წითელი სტრიქონი შეცდომით.
ტრეისი: გრძელი ოპერაციების ნაბიჯები ჩანს განაწილებულ ტრეკებში.
ალერტები: სიმპტომების (SLO) და ტექნიკური მეტრიკის მიხედვით (ვადა, შეცდომების%).
12) ტესტირება და სიმულაცია
არტეფაქტების ლოგიკისა და პარსერების განყოფილება.
ინტეგრაციის ტესტები ქვიშის ყუთში და კანარზე.
„ტრენაჟორები“ (dry-run + ფიქტიური პროვაიდერები), რეალური სცენარების რეპლეი.
სავარჯიშოები: მკაფიო მიზნები, უსაფრთხოების კარიბჭეები, AAR - 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 + idempotence)
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 CronJob (დაგეგმილი როტაცია)
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 ტრიგერი)
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) განხორციელების სია
- თითოეული ოპერაციისთვის შეირჩა ინსტრუმენტი და აღწერილია runbook.
- არსებობს dry-run, დადასტურებები და ლიმიტები (მოაჯირები).
- ლოგოები სტრუქტურირებულია, მეტრიკა და ალერტები დაკავშირებულია.
- საიდუმლოებები საცავიდან, მინიმალური და დროებითი წვდომა.
- ჩატარდა ტესტები (ერთეული/ინტეგრაცია/კანარი) და სიმულაცია.
- GitOps/PR რევიზია სავალდებულოა, არის აუდიტი.
დაფიქსირებულია დაბრუნების გეგმა და წარმატების კრიტერიუმები.
- ავტომატიზაცია უკავშირდება SLO/შეცდომების ბიუჯეტებს.
15) ანტი შაბლონები
სკრიპტები იდემპოტენტურობისა და გამოტოვების გარეშე.
„საიდუმლოებები კოდში“, ანგარიშები-სუპერადინი ყველაფრისთვის.
სახელმძღვანელო კორექტირება გაყიდვაში აუდიტის გარეშე.
Bash Bash ზოოპარკი დეკლარაციული IaC- ის ნაცვლად.
კოდში „შეკერილი“ პარამეტრები არ არის ხელახალი გამოყენება.
არ არსებობს dry-run/canares, დიდი აფეთქებები.
ლოგიკა „ადამიანებისთვის“ სტრუქტურისა და კორელაციის გარეშე.
16) Ops ავტომატიზაციის სიმწიფის მეტრიკა
Coverage:% ოპერაცია ავტომატიზაციით და runbook.
Success rate/Retry ავტომატური დავალებები.
საშუალო დრო გადაადგილება (საშუალო ხანგრძლივობა) და დრო (ვადა).
Change failure ავტომატიზაციის შემდეგ.
აუდიტის სისრულე:% გარიგება სრული დროით.
Security: გასაღების/სერთიფიკატების ბრუნვის დრო, JIT წვდომის წილი.
17) შედეგი
Ops ავტომატიზაცია არ არის მიმოფანტული სკრიპტების ერთობლიობა, არამედ სისტემა: immpotent მოქმედებები, უსაფრთხო მოაჯირები, დაკვირვება, საიდუმლოებები და კონტროლი, GitOps/ChatOps, ტესტები და წვრთნები. ასეთ სისტემაში ოპერაციები ხდება სწრაფი, პროგნოზირებადი და აუდიტი - და ბიზნესი იღებს სტაბილურ გამოშვებებს და ინციდენტების დაბალ რისკს.