DeploymentConfig
是為了解決 Deployment 缺少的功能。 但隨著 K8s 原生 Deployment
已經成熟,為了減少重複功能,且讓 OCP 與上游的 K8s 一致,因此之後會建議讓 DeploymentConfig
改成 Deployment
。Deployment
和 OCP 特有的 DeploymentConfig
。副標題寫著: A Deployment manages a set of Pods to run an application workload, usually one that doesn't maintain state.
但他不會「真正去操控狀態」,因為是 「Deployment Controller」 去操控。
[Deployment Spec] (宣告式狀態)
│
▼
[Deployment Controller] ← 控制器邏輯 (在 kube-controller-manager 裡)
│
▼
[ReplicaSet(s)] ← 實際建立/刪除 Pods
│
▼
[Pods] (running containers)
Deployment 定義規則 (desired state)
Deployment Controller 負責管控 Pods 狀態(透過 ReplicaSet 來間接管理)
類別 | 特點 | 說明 |
---|---|---|
觸發機制 (Triggers) | ✅ Image Trigger ✅ Config Trigger ✅ Manual Trigger | - 當 ImageStream 裡的 image 有新版本,會自動觸發 DC rollout。- DeploymentConfig 內容(env/config 變更)會觸發新的 rollout。- 也可手動 oc rollout latest 觸發更新。 |
與 ImageStream/BuildConfig 整合 | ✅ 與 OCP CI/CD 深度整合 | - 可自動監聽 BuildConfig → ImageStream 的輸出,並自動更新 Deployment。- 形成「Build → ImageStream → DeploymentConfig」流水線。 |
回滾 (Rollback) | ✅ 可回滾到指定版本 | - 使用 oc rollout undo dc/<name> 回滾到先前版本。 |
版本歷史管理 | ✅ 自動保留多個版本 | - DC 會保留歷史記錄,可隨時檢查 rollout 狀態。 |
Replica 管理 | ✅ 使用 ReplicationController (RC)(而不是 ReplicaSet) | - 與 K8s Deployment 使用的 ReplicaSet 不同,DC 使用 RC 來維持副本數量。 |
更新策略 | 支援 Rolling、Recreate | - 與 Deployment 相似,但滾動更新常與 Trigger 結合使用。 |
命令與操作 | oc rollout latest dc/<name> oc rollout undo dc/<name> oc set triggers dc/<name> |
- 提供額外 oc 指令,專門控制 DeploymentConfig 的 rollout 與觸發行為。 |
項目 | Kubernetes Deployment | OpenShift Deployment (OCP) |
---|---|---|
基本定義 | K8s 提供的控制器,用於管理 Pod 副本數量、滾動更新、回滾等。 | OCP 內建支援 K8s Deployment,但也提供 DeploymentConfig (DC) 作為進階功能。 |
主要 API | apps/v1 → Deployment |
apps/v1 → Deployment (相容 K8s)apps.openshift.io/v1 → DeploymentConfig (OCP 特有) |
觸發更新方式 | 主要靠 滾動更新策略 (rolling update strategy),或手動 kubectl rollout restart 。 |
除了滾動更新策略外,DeploymentConfig 可透過 Trigger 機制(image 變更、自動程式碼變更、Config 變更)自動觸發更新。 |
內建 CI/CD 整合 | 無內建 CI/CD,需搭配 ArgoCD、Jenkins、Tekton 等外部工具。 | DeploymentConfig 可與 OCP BuildConfig、ImageStream 整合,做到自動化 CI/CD。 |
回滾 (Rollback) | kubectl rollout undo 可回滾到上一個版本。 |
oc rollout undo 同樣支援回滾,但 DeploymentConfig 提供更細粒度的 rollback(例如 image trigger rollback)。 |
資源管理 | 使用 ReplicaSet 管理 Pod 副本。 | Deployment → 使用 ReplicaSet;DeploymentConfig → 使用 ReplicationController (RC)。 |
鏡像更新 | 須手動更新 YAML 或使用外部工具監控 Registry。 | ImageStream 可自動偵測新版本 image 並觸發 DeploymentConfig 部署。 |
適用場景 | 標準 Kubernetes 環境,偏向基礎功能。 | 需要與 CI/CD、Image Registry 深度整合,或利用 OCP 生態系(BuildConfig、ImageStream)的場景。 |
DeploymentConfig
改成 K8s原生種 Deployment
,先用下表格來評估差異吧。項目 | DeploymentConfig (DC) | Deployment (K8s/OCP) | 遷移影響 |
---|---|---|---|
副本管理 | 使用 ReplicationController | 使用 ReplicaSet | 自動轉換,無需手動干預 |
更新策略 | Rolling / Recreate | Rolling / Recreate | 幾乎一致,可直接對應 |
觸發機制 | ✅ 支援 ImageStream Trigger ✅ 支援 Config Trigger | ❌ 無內建 trigger,需用外部工具 | 最大差異 |
與 CI/CD 整合 | OCP BuildConfig + ImageStream → 自動 rollout | 需搭配 Tekton、ArgoCD、Webhook | 需改接新工具 |
命令操作 | oc rollout latest dc/<name> |
oc rollout restart deploy/<name> |
操作習慣需調整 |
回滾 | oc rollout undo dc/<name> |
kubectl/oc rollout undo deploy/<name> |
幾乎一致 |
oc get dc -A
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: myapp
spec:
replicas: 3
strategy:
type: Rolling
template:
spec:
containers:
- name: myapp
image: image-registry.openshift-image-registry.svc:5000/myproj/myapp:latest
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
strategy:
type: RollingUpdate
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: image-registry.openshift-image-registry.svc:5000/myproj/myapp:latest
oc rollout restart deploy/<name>
oc apply -f myapp-deployment.yaml
oc rollout status deploy/myapp