控制器
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