跳到主內容

Controller 基本概念

1. 什麼是 Controller

  • 在集群上管理和運行容器的對象

2. Pod 和 Controller 的關係

  • Pod 是通過 Controller 實現應用的運維,例如 伸縮滾動升級
  • Pod 和 Controller 之間通過 label 標籤 建立關係 (selector)

3. Deployment 的應用場景

  • 部署 無狀態應用
  • 管理 PodReplicaSet
  • 支援 滾動升級回滾彈性伸縮 等功能

應用場景:

  • Web 服務
  • 微服務

以下是圖片中的文字辨識及繁體中文翻譯:


以下是圖片中的文字辨識及繁體中文翻譯:


4. 使用 Deployment 部署應用(YAML)

spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web

說明:

  • selector:用於選擇符合特定標籤(matchLabels)的 Pod。
  • matchLabels:指定要匹配的標籤條件,此處為 app: web
  • labels:在模板中定義 Pod 的標籤,確保與 selector 中的標籤條件一致。

此 YAML 文件表示使用 Deployment 部署一個副本的應用,並將其標籤設置為 app: web,以便進行管理和選擇。


5. 應用升級回滾和彈性伸縮

應用升級

[root@k8smaster ~]# kubectl set image deployment web nginx=nginx:1.15
deployment.apps/web image updated

查看升級狀態

[root@k8smaster ~]# kubectl rollout status deployment web
deployment "web" successfully rolled out

查看升級版本

[root@k8smaster ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

回滾到上一個版本

[root@k8smaster ~]# kubectl rollout undo deployment web
deployment.apps/web rolled back
[root@k8smaster ~]# kubectl rollout status deployment web
Waiting for deployment "web" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "web" rollout to finish: 1 old replicas are pending termination...
deployment "web" successfully rolled out

回滾到指定的版本

[root@k8smaster ~]# kubectl rollout undo deployment web --to-revision=2
deployment.apps/web rolled back
[root@k8smaster ~]# kubectl rollout status deployment web
Waiting for deployment "web" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "web" rollout to finish: 1 old replicas are pending termination...
deployment "web" successfully rolled out

說明:

  • 使用 --to-revision=2 指定要回滾到的版本號。
  • kubectl rollout status 用於查看回滾的進度,確認部署是否成功完成。

以下是圖片中的文字辨識及繁體中文翻譯:


彈性伸縮

[root@k8smaster ~]# kubectl scale deployment web --replicas=10
deployment.apps/web scaled

說明:

  • 使用 kubectl scale 指令對 Deployment 進行彈性伸縮。
  • --replicas=10 表示將 Pod 副本數量調整為 10。

此操作用於根據業務需求動態調整應用的容器數量,實現資源的彈性管理。