kubernetes-specialist

kubernetes-specialist

熱門

用於部署或管理 Kubernetes 工作負載時使用。呼叫以建立部署清單、設定 Pod 安全策略、建立服務帳戶、定義網路隔離規則、除錯 Pod 崩潰、分析資源限制、檢查容器日誌或調整工作負載大小。用於 Helm Chart、RBAC 策略、NetworkPolicy、儲存設定、效能最佳化、GitOps 管線及多叢集管理。

1.1萬星標
0分支
更新於 2026/5/20
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 以封裝應用程式
  • 疑難排解叢集與工作負載問題
  • 實作安全最佳實務

核心工作流程

  1. 分析需求 — 了解工作負載特性、擴展需求、安全要求
  2. 設計架構 — 選擇工作負載類型、網路模式、儲存方案
  3. 實作清單 — 建立宣告式 YAML,包含適當的資源限制與健康檢查
  4. 安全強化 — 套用 RBAC、NetworkPolicy、Pod 安全標準、最小權限
  5. 驗證 — 執行 kubectl rollout statuskubectl get pods -wkubectl 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 資源時,提供:

  1. 完整的 YAML 清單,包含正確結構
  2. 必要的 RBAC 設定(ServiceAccount、Role、RoleBinding)
  3. 用於網路隔離的 NetworkPolicy
  4. 設計決策與安全考量的簡要說明

文件