סולם האימות
1. Render
Section titled “1. Render”helm template <RELEASE> <CHART_DIR> -n <NS> -f <FILE> -f <FILE> -f <FILE>איך נראה טוב: YAML תקין, נתיב image אמיתי עם tag אמיתי, אין hosts ריקים. הצורה המלאה: helm/overview.
2. Pipeline
Section titled “2. Pipeline”GitLab, Pipelines: כל ה-jobs ירוקים. ה-registry מכיל image לכל service עם ה-candidate. ב-gitops:
git log --oneline -3איך נראה טוב: commit promote(<ENV>): <CANDIDATE>. פירוט: ci/overview.
3. Argo
Section titled “3. Argo”kubectl get applications -n argocdkubectl get application <APP> -n argocd -o jsonpath='{.status.sync.status}/{.status.health.status}'kubectl get application <APP> -n argocd -o jsonpath='{.status.conditions}'איך נראה טוב: Synced/Healthy ו-conditions ריק. Unknown = לא רונדר. Failed ב-operationState.phase: להשוות finishedAt ל-date -u לפני שקוראים את ההודעה. פירוט: argocd/operate.
4. Objects
Section titled “4. Objects”kubectl get pods,svc,ingress,pvc,secret -n <NS>איך נראה טוב: Pods Running ו-Ready, PVC Bound, Secrets קיימים בכל namespace.
5. Behaviour: /info
Section titled “5. Behaviour: /info”curl -k --resolve <HOST>:<PORT>:<VM_IP> https://<HOST>:<PORT>/info# TRIDENT: curl -k --resolve dev.trident.test:31651:192.168.242.130 https://dev.trident.test:31651/info<PORT> הוא ה-NodePort של HTTPS ב-ingress controller, מספר שונה בכל cluster. מגלים אותו: kubectl -n ingress-nginx get svc והמספר אחרי 443: (kubernetes/networking).
| שדה | איך קוראים |
|---|---|
version | = ה-candidate שקידמת. אחר = ה-env עדיין על גרסה ישנה |
environment | = ה-env ששאלת |
counters (accepted) | עולים בין שתי קריאות = נתונים זורמים. קבוע = שום דבר לא נכנס |
queue_depth | לא גדל ללא גבול (צרכן חי) |
| detections | 0 צפוי בים שקט, לא תקלה |
להוכיח את הנתיב עד ה-DB: להריץ את התרחיש quick-transit בסימולטור (פורט ops 9101). ב-image יש python ואין curl:
kubectl -n <NS> exec deploy/acoustic-simulator -- python -c "import urllib.request as u; u.urlopen(u.Request('http://127.0.0.1:9101/scenarios/quick-transit', method='POST'))"curl -k --resolve <HOST>:<PORT>:<VM_IP> https://<HOST>:<PORT>/infoאיך נראה טוב: אחרי התרחיש ה-detections כבר לא 0; אם לא, לקרוא logs של signal-processor.
לולאה על כל ה-envs (מניחה host בצורה <ENV>.<DOMAIN>):
for e in dev staging prod; do curl -ks --resolve "$e.<DOMAIN>:<PORT>:<VM_IP>" "https://$e.<DOMAIN>:<PORT>/info"; echodoneאיך נראה טוב: version ו-environment נכונים לכל env.
6. תכונות GitOps
Section titled “6. תכונות GitOps”kubectl scale deploy/<SERVICE> -n <NS> --replicas=0kubectl get deploy <SERVICE> -n <NS> -wאיך נראה טוב: Argo מחזיר את ה-replicas (selfHeal). בדיקת prune: מסירים קובץ משאב מ-Git, והמשאב נמחק מה-cluster. אל תנסה זאת על משהו שאתה צריך.
7. נתונים שורדים
Section titled “7. נתונים שורדים”kubectl delete pod -n <NS> -l trident.dev/service=postgreskubectl get pods -n <NS> -wאיך נראה טוב: ה-Pod חוזר ושאילתה על הטבלה מחזירה את אותן שורות (PVC על course-local-path).
בדיקת promotion מקצה לקצה
Section titled “בדיקת promotion מקצה לקצה”| שלב | פעולה | versions/<ENV>.yaml |
|---|---|---|
| 1 | push ל-dev | dev = dev-... (ה-candidate של dev) |
| 2 | merge ל-main + push | staging = main-... (ה-candidate של main) |
| 3 | בדוק STAGING (שלבים 3–5), ואז לחץ promote:prod | prod = אותו candidate של ה-pipeline |
מצב יציב תקין: DEV = dev-C, STAGING = main-B, PROD = main-A. ה-PROD מקבל את ה-candidate של ה-pipeline שאושר, לא מה ש-STAGING מחזיק עכשיו.
git pull --ff-onlycat apps/trident/versions/dev.yaml apps/trident/versions/staging.yaml apps/trident/versions/prod.yamlאיך מוודאים: שלושה ערכי defaultImageTag שונים כמצופה, ו-/info של כל env מראה את אותו ערך.
מצב סופי: הבדיקה האחרונה
Section titled “מצב סופי: הבדיקה האחרונה”kubectl -n argocd get applicationsfor e in dev staging prod; do kubectl -n <NS_PREFIX>-$e get pods; doneאיך נראה טוב: כל ה-Applications Synced + Healthy; כל ה-Pods 1/1 Running בכל namespace. אחר כך /info לכל env (לולאה למעלה).
המשך: cleanup וצ'קליסט.