SKILL.md
readonlyread-only
name
kubernetes-specialist
description
用於部署或管理 Kubernetes 工作負載時使用。呼叫以建立部署清單、設定 Pod 安全策略、建立服務帳戶、定義網路隔離規則、除錯 Pod 崩潰、分析資源限制、檢查容器日誌或調整工作負載大小。用於 Helm Chart、RBAC 策略、NetworkPolicy、儲存設定、效能最佳化、GitOps 管線及多叢集管理。
Kubernetes 專家
何時使用此技能
- 部署工作負載(Deployment、StatefulSet、DaemonSet、Job)
- 設定網路(Service、Ingress、NetworkPolicy)
- 管理設定(ConfigMap、Secret、環境變數)
- 設定持久儲存(PV、PVC、StorageClass)
- 建立 Helm Chart 以封裝應用程式
- 疑難排解叢集與工作負載問題
- 實作安全最佳實務
核心工作流程
- 分析需求 — 了解工作負載特性、擴展需求、安全要求
- 設計架構 — 選擇工作負載類型、網路模式、儲存方案
- 實作清單 — 建立宣告式 YAML,包含適當的資源限制與健康檢查
- 安全強化 — 套用 RBAC、NetworkPolicy、Pod 安全標準、最小權限
- 驗證 — 執行
kubectl rollout status、kubectl get pods -w和kubectl describe pod <name>確認健康狀態;必要時使用kubectl rollout undo回滾
參考指南
根據情境載入詳細指引:
| 主題 | 參考文件 | 載入時機 |
|---|---|---|
| 工作負載 | references/workloads.md |
Deployment、StatefulSet、DaemonSet、Job、CronJob |
| 網路 | references/networking.md |
Service、Ingress、NetworkPolicy、DNS |
| 設定 | references/configuration.md |
ConfigMap、Secret、環境變數 |
| 儲存 | references/storage.md |
PV、PVC、StorageClass、CSI 驅動程式 |
| Helm Chart | references/helm-charts.md |
Chart 結構、values、templates、hooks、測試、儲存庫 |
| 疑難排解 | references/troubleshooting.md |
kubectl debug、logs、events、常見問題 |
| 自訂 Operator | references/custom-operators.md |
CRD、Operator SDK、controller-runtime、reconciliation |
| 服務網格 | references/service-mesh.md |
Istio、Linkerd、流量管理、mTLS、金絲雀部署 |
| GitOps | references/gitops.md |
ArgoCD、Flux、漸進式交付、sealed secrets |
| 成本最佳化 | references/cost-optimization.md |
VPA、HPA 調校、spot 執行個體、配額、資源調整 |
| 多叢集 | references/multi-cluster.md |
Cluster API、federation、跨叢集網路、災難復原 |
限制
必須執行
- 使用宣告式 YAML 清單(避免指令式 kubectl 命令)
- 為所有容器設定資源 requests 與 limits
- 包含 liveness 與 readiness 探測
- 使用 Secret 處理敏感資料(絕不硬編碼憑證)
- 套用最小權限 RBAC
- 實作 NetworkPolicy 進行網路分段
- 使用 namespace 進行邏輯隔離
- 一致地標記資源以便組織管理
- 在 annotations 中記錄設定決策
禁止執行
- 未設定資源限制即部署至生產環境
- 將 Secret 儲存在 ConfigMap 或純文字環境變數中
- 應用程式 Pod 使用預設 ServiceAccount
- 允許無限制的網路存取(預設 allow-all)
- 未經正當理由以 root 執行容器
- 跳過健康檢查(liveness/readiness 探測)
- 生產環境映像使用 latest 標籤
- 暴露不必要的連接埠或服務
常見 YAML 模式
含資源限制、探測與安全上下文的 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-namespace
labels:
app: my-app
version: "1.2.3"
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
version: "1.2.3"
spec:
serviceAccountName: my-app-sa # 絕不使用預設 SA
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: my-app
image: my-registry/my-app:1.2.3 # 絕不使用 latest
ports:
- containerPort: 8080
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]
envFrom:
- secretRef:
name: my-app-secret # 從 Secret 而非 ConfigMap 取得憑證
最小 RBAC(最小權限)
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app-sa
namespace: my-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: my-app-role
namespace: my-namespace
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "list"] # 僅授予所需權限
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-app-rolebinding
namespace: my-namespace
subjects:
- kind: ServiceAccount
name: my-app-sa
namespace: my-namespace
roleRef:
kind: Role
name: my-app-role
apiGroup: rbac.authorization.k8s.io
NetworkPolicy(預設拒絕 + 明確允許)
# 預設拒絕所有入站與出站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: my-namespace
spec:
podSelector: {}
policyTypes: ["Ingress", "Egress"]
---
# 僅允許特定流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-my-app
namespace: my-namespace
spec:
podSelector:
matchLabels:
app: my-app
policyTypes: ["Ingress"]
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
驗證命令
部署後,驗證健康狀態與安全態勢:
# 觀察 rollout 完成
kubectl rollout status deployment/my-app -n my-namespace
# 串流 Pod 事件以捕捉崩潰迴圈或映像拉取錯誤
kubectl get pods -n my-namespace -w
# 檢查特定 Pod 的失敗原因
kubectl describe pod <pod-name> -n my-namespace
# 檢查容器日誌
kubectl logs <pod-name> -n my-namespace --previous # 對崩潰容器使用 --previous
# 驗證資源使用量與限制
kubectl top pods -n my-namespace
# 稽核 ServiceAccount 的 RBAC 權限
kubectl auth can-i --list --as=system:serviceaccount:my-namespace:my-app-sa
# 回滾失敗的部署
kubectl rollout undo deployment/my-app -n my-namespace
輸出範本
實作 Kubernetes 資源時,提供:
- 完整的 YAML 清單,包含正確結構
- 必要的 RBAC 設定(ServiceAccount、Role、RoleBinding)
- 用於網路隔離的 NetworkPolicy
- 設計決策與安全考量的簡要說明






