記錄

青瓦深巷發表於2024-12-10

控制器

Deployment   # 常用控制器,管理無狀態應用
StatefulSet  # 管理有狀態應用的控制器,保證每個Pod都有唯一的標識
DaemonSet    # 守護程序控制器,確保在叢集中的每個節點上執行一個Pod副本,適用於日誌收集、監控代理等

RBAC

# 針對單個名稱空間
role         # 在某個名稱空間內定義許可權
rolebinding  # 將角色繫結到使用者、組或服務賬戶,使其可以在該名稱空間內執行相應的操作
# 針對整個叢集 
clusterrole  # 在整個叢集範圍內定義許可權
clusterrolebinding # 將叢集角色繫結到使用者、組或服務賬戶,使其可以在叢集中執行相應的操作

儲存配置資訊和敏感資料

ConfigMap  # 儲存非敏感的配置檔案資訊或環境變數,不會加密
Secret     # 儲存敏感資料密碼、令牌等,會加密
# 都支援透過環境變數或掛載卷注入到容器中

儲存

本地儲存  # hostPath,將宿主機的檔案系統掛載到pod中
動態pv   # 基於storageclasses自動建立PV、PVC
靜態pv   # pv、pvc手動編寫,支援多種儲存型別,如hostPath、nfs等

排程策略

# 資源排程
nodeName     # 根據節點主機名排程,強制排程到指定節點
nodeSelector # 根據節點標籤排程Pod
affinity     # 親和性排程設定
    nodeAffinity     # 節點親和性排程,控制Pod是否應該排程到特定的節點上
    podAffinity      # pod親和性排程,控制Pod是否應該排程到具有相同標籤的Pod所在的節點
    podAntiAfffinity # pod反親和性排程,控制Pod是否應該避免排程到某些具有特定標籤的Pod所在的節點
tolerations  # 汙點容忍度排程,允許Pod被排程到有汙點(taints)的節點上

命令

command # 容器的啟動命令,會替代容器映象的預設啟動命令
args    # 跟在command命令後執行,傳遞給command的引數,執行順序是command -> args

探針

livenessProbe  # 存活探針,用於檢測容器是否需要重啟,容器崩潰或卡住的情況,需要重新啟動
    httpGet    # 透過發起 HTTP 請求檢查容器的健康狀況
    exec       # 透過在容器內執行命令來判斷健康
    tcpSocket  # 透過檢查容器是否監聽指定的埠來判斷容器的健康
readinessProbe # 就緒探針,用於檢測容器是否已準備好接受流量,如果失敗,則會將容器從負載均衡中移除
    httpGet    # 透過 HTTP 請求檢查容器是否準備好
    tcpSocket  # 透過檢查容器是否在某個埠上偵聽來判斷容器是否準備好
    exec       # 透過執行容器內部命令判斷容器是否準備好

資源限制

resources:  # 1核為1000m,Ti Gi Mi
  requests:  # 容器啟動時所需的資源最低值
    cpu: 1
    memory: 1Gi
  limits:    # 容器所能使用的最大資源值
    cpu: 2
    memory: 2Gi

HPA

kubectl autoscale deployment -n prometheus prometheus --cpu-percent=70 --min=1 --max=10 --dry-run=client -o yaml

更新策略

# 更新策略[所有控制器都是預設滾動更新,有些需要特殊設定使用重建更新]
# 如果應用支援平滑過渡,可以選擇 滾動更新。
# 如果應用必須從零開始(例如資料庫遷移),可以選擇 重建更新。
滾動:
strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1  # 表示更新時可以有多少 Pod 不可用
      maxSurge: 1        # 表示在更新過程中,可以額外啟動多少 Pod 來進行替代

重建:
strategy:
    type: Recreate

Service(服務)

# 服務用於在 Pod 之間提供穩定的網路訪問,透過標籤選擇器將請求路由到正確的 Pod
- ClusterIP:預設型別,服務只能在叢集內部訪問。
- NodePort:將服務暴露在每個節點的特定埠上,叢集外部可以訪問。
- LoadBalancer:使用雲平臺提供的負載均衡服務來暴露服務。
- ExternalName:將服務對映到外部的 DNS 名稱。

Ingress(入口控制器)

# 用於將 HTTP 和 HTTPS 請求路由到叢集內的服務。Ingress 需要配合 Ingress Controller 使用,可以提供外部訪問和一些高階功能(如 SSL/TLS 終止、反向代理等)
# 例如,定義路由規則:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

NetworkPolicy(網路策略)

# 用於控制 Pod 之間的通訊。透過指定入站和出站流量規則,可以精確地控制哪些 Pod 可以與其他 Pod 通訊
# 例如,限制只有來自特定標籤的 Pod 才能訪問服務:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-network-policy
spec:
  podSelector:
    matchLabels:
      role: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend