Ops Notes:實戰踩坑筆記

這個目錄的軸是**「實戰踩坑」**。每篇文章格式:

症狀(見到什麼錯)
   ↓
診斷(排除什麼、怎麼找到問題)
   ↓
原因(真正的根因)
   ↓
修法(commit 連結)
   ↓
可推廣教訓

跟教學類文章不同軸:

  • infra/ = 系統原理教學(網路/TLS/container/CI/CD 怎麼運作)
  • ops-notes/(本目錄)= 實戰踩過什麼坑、怎麼修的
  • process/04-incident-management = 事件處理流程方法論(不是具體案例)
  • case-studies/ = 拆解別人家系統(不是自己踩的坑)

資料來源

主要取自 proto/infra 專案真實 commit 歷史:

  • C:/Users/home/work/proto/infra/micro-service/ (微服務壓測平台)
  • C:/Users/home/work/proto/infra/gitlab/
  • C:/Users/home/work/proto/infra/monitor/

未來其他專案(quartz-blog GitHub Actions、K8s 壓測平台、本機 Docker 環境)的坑也可進來。

Stage:🌱 seed(還沒寫) / 🌿 growing / 🌳 mature

子目錄規劃(5+ 案例的主題群預先開)

每個 O 主題群有 3~8 案例。案例數 ≥ 5 的群,按 skill「預先開子目錄」規則,寫第一篇就建子目錄:

主題群案例數子目錄路徑
O01 K8s 部署阻斷5ops-notes/k8s-deploy/
O02 Kong Gateway8ops-notes/kong/
O03 Ingress 路由5ops-notes/ingress/
O04 Docker / Registry5ops-notes/docker/
O05 Probe 健康檢查4先扁平(未達 5)
O06 Env / Secret5ops-notes/env-secret/
O07 CI/CD5ops-notes/cicd/
O08 資源限制可靠性4先扁平
O09 可觀測性5ops-notes/observability/
O10 前端部署坑3先扁平
O11 Submodule4先扁平
O12 壓測調校3先扁平

案例數 < 5 的群先扁平,累積到 5 再搬進子目錄。


O01 K8s 部署阻斷排除

部署上不去、Pod 起不來、Service 連不通的系列。

#案例症狀來源 commitstage
01PVC 名稱與 NetworkPolicy 缺漏P0 部署阻斷3a99526🌱
02SecurityContext、Migration Job、Loki config部署驗證失敗3bc972c🌱
03Init Container resources 不足Migration 跑不起來ef48204🌱
04emptyDir 沒設 sizeLimit + hostPath 沒驗證 type安全性問題8f5b610🌱
05RabbitMQ SecurityContext 過嚴寫入權限錯誤72145bc🌱

O02 Kong Gateway 實戰坑

→ 子目錄:kong

#案例症狀來源 commitstage
01Kong ConfigMap YAML 縮進錯誤kustomize build 失敗1367e7byaml-indent 🌿
02Kong RSA Key 縮排 + YAML block scalarJWT plugin 載入失敗f422f66🌱
03Kong ConfigMap 被 kustomize 覆蓋為 placeholder路由失效a3ec1e9🌱
04Kong Sandbox 不允許 cjsonpost-function 失敗50fdb56🌱
05Kong ConfigMap Big5/ISO-8859 編碼載入失敗c4b5083🌱
06Kong 健康路由 + CORS origin 設定NodePort 連不通deb0ec7🌱
07Kong public key injectionJWT 驗證失敗b9469f7🌱
08Kong Metrics Port 與 Prometheus scrape指標收不到4ce0436🌱

O03 Ingress 與路由

#案例症狀來源 commitstage
01Ingress 綁 host 導致 OrbStack / IP 直連失敗無法直接 IP 連ab1eb5f🌱
02Ingress SSL redirect 先關閉(TLS 未備)連線迴圈a1dece6🌱
03Host-based routing + proxy-redirectbackstage 路由錯1e312da🌱
04backstage SPA base path 修正靜態資源 404aa656e8🌱
05frontstage SSR healthcheck 調整liveness probe 失敗7000cab🌱

O04 Docker / Registry 問題

#案例症狀來源 commitstage
01地端 Registry imagePullPolicy IfNotPresent拉不到 image10f6682🌱
02Migration Job image source 改地端CI 失敗d0b538c🌱
03DinD insecure registry + TLS 關閉Docker login 失敗c252a03🌱
04Frontend Docker build:.dockerignore + env schemabuild 時爆2d22aa6🌱
05Wait for DinD daemon before docker login時序 race175a612🌱

O05 Probe 與健康檢查

#案例症狀來源 commitstage
01Fluent-bit HTTP server 沒啟用liveness probe 失敗760d9c4🌱
02Smoke test 改用 busybox podkubectl exec 失敗7ff47cf🌱
03Health check 路由修正/api/health 錯路徑0cb095f🌱
04FE startupProbe + Ingress TLS 預備啟動時探測過早af0b7b4🌱

O06 Env / Secret 管理

#案例症狀來源 commitstage
01Redis 密碼 $$ 跳脫(Docker Compose 提前展開)密碼變空419ed88🌱
02env 檔案 .env.example 對齊欄位漏掉08e41fd🌱
03env_file 管理(移除 environment)secret 洩漏風險dd9db1f🌱
04SecretGenerator + Staging Overlay環境隔離df802e1🌱
05CI variables 注入 secrets不走 file4ec506b🌱

O07 CI/CD Pipeline

#案例症狀來源 commitstage
01Typo bse64base64 in rollback stagerollback 失敗d0d93a6🌱
02地端 CI/CD 適配:lint + deployGitLab runner 設定4ec506b🌱
03Blue-green deploy + —no-switch 選項切換控制66ed6dc🌱
04藍綠部署腳本自動化人工切換風險642573e🌱
05Discord 部署通知無法得知部署狀態98a5281🌱

O08 資源限制與可靠性

#案例症狀來源 commitstage
01HPA / PDB 設計(auth-service stress test)擴容不及3fc8ba8🌱
02Resource requests + DB pool 壓測調校OOM / 連線 timeoutcf96a90🌱
03Migration TTL 設定Job 殘留ef48204🌱
04FE HPA/PDB + Kong HPA流量波動應對e307265🌱

O09 可觀測性修補

#案例症狀來源 commitstage
01Prometheus scrape + NP port 限制指標丟失4ce0436🌱
02Grafana 穩定性 + PVC 註解重啟資料丟失2ba4871🌱
03Kong Prometheus plugin + Grafana dashboards缺 Kong 儀表板5dd4456🌱
04OTEL env vars 注入 backendtrace 不完整ec61ede🌱
05fluent-bit RBAC 加固日誌收集缺權限eb59114🌱

O10 前端部署坑

#案例症狀來源 commitstage
01SPA base path 修正資源 404aa656e8🌱
02SSR healthcheck 調整probe 失敗7000cab🌱
03.dockerignore + env schema 對齊build 時 env 缺2d22aa6🌱

O11 Submodule 與多 repo 協作

#案例症狀來源 commitstage
01auth-service 從 tracked files 改 submodule單 repo 太大5f80b21🌱
02switch-gitlab.sh 切換 remote本機 / 雲端 GitLab 切換5f80b21🌱
03Submodule 同步時機主 repo / sub repo 版本錯dbde1b9🌱
04b2e/f2e 前綴命名統一submodule 命名衝突5f5c2e1🌱

O12 壓測驅動的調校

#案例症狀來源 commitstage
01HPA/PDB 調整(壓測 MS.2/MS.5/MS.8)負載下 scale 不夠3fc8ba8🌱
02Resource requests / DB pool tune壓測發現瓶頸cf96a90🌱
03Rate limit 調高(k6 壓測)壓測自己 rate limit 被擋e97c980🌱

寫作流程

每篇 ops-note 的標準模板:

---
title: "..."
tags: [ops-notes, k8s, kong, ...]
description: "..."
date: YYYY-MM-DD
severity: P0 / P1 / P2
time-to-fix: X hours / days
commits: [sha1, sha2]
---
 
# 症狀
(錯誤訊息、觀察到的現象)
 
# 診斷
(我試過什麼、排除了什麼)
 
# 原因
(真正的根因)
 
# 修法
(commit 連結 + diff 摘要)
 
# 可推廣教訓
(這類問題以後怎麼避免)

進度統計

  • 主題群:12(O01~O12)
  • 案例總數:約 55
  • 全部 🌱(等待從 commit 萃取內容)
  • 🌳 mature:0

下一步

  1. 先從 O01(K8s 部署阻斷)、O02(Kong 坑)開始,這兩類最多人會踩
  2. 每篇以「症狀驅動」寫,讓 Google 搜尋症狀時能找到
  3. 抽離真實 commit 內容,去敏感化(密碼、internal URL 等)

此資料夾下有 1 條筆記。