穩!上千微服務接入 Zadig 的最佳姿勢(K8s YAML 篇)
雲原生微服務架構下,可以獲得更高的可用性和擴充套件性,以滿足業務快速迭代的需求,然而成百上千個服務的 YAML 配置管理問題成了老大難的事情:不同服務的配置差異極小,但是不得不復制貼上;針對多樣化部署環境(比如有開發環境、測試環境、預釋出環境...)定製的服務配置更是導致 YAML 檔案氾濫成災...
Zadig 提供了幾種高效管理服務配置的姿勢:
- 從現有 Kubernetes 批量匯入多個服務,一鍵將已有服務配置平滑遷移
- 將多個服務的配置檔案組織在程式碼庫中,從程式碼庫同步現有服務配置,實現服務的批量建立
- 將多個服務的配置檔案抽象成服務模板,工程師只需填寫和服務相關的少量引數,使用模板建立服務即可
下面將詳細闡述這幾種場景的具體接入方法。
從現有 Kubernetes 批量匯入服務
適用:K8s YAML 型別專案的場景,可以直接從現有 K8s 叢集的名稱空間批量匯入服務,幾乎無遷移成本。
批量匯入服務
進入專案的服務模組 -> 點選新建按鈕 -> 選擇 從 Kubernetes 匯入
。
選擇服務所在的叢集和名稱空間 -> 新增服務 -> 選擇配置型別及配置名稱後匯入。
支援匯入 deployment/statefulset/service/ingress/secret/configmap/pvc 資源
匯入成功後,可在 Zadig 平臺中按需修改服務配置。
將服務加入到環境
進入專案的環境 -> 點選 新增服務
-> 選擇從 NS 匯入的服務即可批量將服務加入到已有環境中。
檢視環境
從程式碼庫批量同步
適用:已存在大體量的 K8s YAML 服務,每個服務有單獨的 YAML 配置。
將服務的 YAML 配置按照一定目錄結構組織起來,通過 Zadig 批量同步,下面以 voting-demo
專案為例演示說明:
- 原始碼:zadig/voting-app [1]
- 服務:該專案包括 5 個微服務(
db
/redis
/result
/vote
/worker
) - 服務對應的配置檔案:上述 5 個微服務的 K8s YAML 配置檔案目錄,如下所示:
zadig/examples/voting-app/freestyle-k8s-specifications
├── db
│ ├── db-deployment.yaml
│ └── db-service.yaml
├── redis
│ ├── redis-deployment.yaml
│ └── redis-service.yaml
├── result
│ ├── result-deployment.yaml
│ └── result-service.yaml
├── vote
│ ├── vote-deployment.yaml
│ └── vote-service.yaml
└── worker
└── worker-deployment.yaml
批量同步服務
進入專案的服務模組 -> 點選 從程式碼庫同步
-> 選擇程式碼庫以及服務配置所在檔案目錄,點選 同步
。
本例中即為 Zadig 庫的
examples/voting-app/freestyle-k8s-specifications
目錄
將服務加入到環境
批量同步服務配置後系統會自動解析多個服務,效果如下圖左側邊欄所示。
進入專案的環境中 -> 點選 新增服務
-> 選擇從程式碼庫同步的服務即可批量將服務加入到已有環境中。
檢視環境
使用服務模板建立
適用:已存在大體量的 K8s YAML 服務配置,多個服務的配置結構同構,不同服務配置的值存在細微差異(比如:不同服務的埠不同、資料庫連線地址不同、所需 CPU/Memory 資源限制不同...)
下面以 multi-service-demo
專案的 服務配置[2]為例進行實踐。該專案中包括三個服務 service1
/ service2
/ service3
,通過分析這些服務的 K8s YAML 配置,抽象出服務模板,將不同服務有差異的配置提取為模板中的變數,即可得到服務模板 template.yaml[3]。
建立服務模板
在專案預覽頁點選右上角的 模板庫
-> K8s YAML
進入 K8s YAML 模板管理頁面。
點選 +
新建模板 -> 填寫模板名稱 multi-service-demo-template
-> 填寫模板內容 -> 填寫自定義變數的值對模板賦預設值 -> 儲存模板。
該例中的模板內容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: $T-Service$
labels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
spec:
selector:
matchLabels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
spec:
containers:
- name: $T-Service$
image: ccr.ccs.tencentyun.com/koderover-public/$T-Service$:latest
imagePullPolicy: Always
command:
- /workspace/$T-Service$
ports:
- protocol: TCP
containerPort: {{.port}}
resources:
limits:
memory: {{.memoryLimit}}
cpu: {{.cpuLimit}}
---
apiVersion: v1
kind: Service
metadata:
name: $T-Service$
labels:
app.kubernetes.io/name: $T-Project$
app.kubernetes.io/instance: $T-Service$
spec:
type: NodePort
ports:
- protocol: TCP
port: {{.port}}
targetPort: {{.port}}
使用模板新建服務
只需要填寫服務名稱,選擇模板,填寫若干變數即可快速建立服務。
進入 multi-service-demo
專案的服務模組,點選 使用模板新建
服務。
填寫服務名稱 service1
-> 選擇模板 multi-service-demo-template
-> 填寫 service1
服務在模板中的變數配置後新建即可。
重複上述步驟繼續新建服務 service2
、 service3
。
將服務加入到環境
至此這三個服務都被成功建立,進入專案的環境中 -> 點選 新增服務
-> 選擇服務即可批量將服務加入到已有環境中。
以上三種方式成功將服務接入 Zadig,接下來便可以使用 Zadig 強大的環境治理和工作流能力對服務進行構建部署、測試驗證、持續交付等,推薦閱讀:
- 使用 Zadig 工作流 [4]
- Zadig 環境 - K8s YAML 專案 [5]
結語
秉承著 do not block developers
的理念,Zadig 的批量接入能力及 K8s YAML 服務模板功能,極大程度降低服務 YAML 配置檔案維護的心智負擔,讓工程師從繁瑣的配置管理“髒活累活”中解放出來,進入雲原生持續交付快車道,更多時間創造業務價值。
參考連結:
[1] http://github.com/koderover/zadig/tree/main/examples/voting-app
[2] http://github.com/koderover/zadig/tree/main/examples/multi-service-demo/k8s-yaml/
[3] http://github.com/koderover/zadig/blob/main/examples/multi-service-demo/k8s-yaml/template.yaml
[4] http://docs.koderover.com/zadig/v1.12.0/project/workflow/
[5] http://docs.koderover.com/zadig/v1.12.0/project/env/k8s/
Zadig,讓工程師更專注創造。歡迎加入 開源吐槽群🔥
- 極速 Zadig 構建效率是這樣煉成的
- 主機基礎設施如何使用 Zadig 做持續交付
- Zadig 環境負載均衡:0 人工干預,極速部署
- 打通了!Jira Zadig 實現需求與研發過程追蹤
- 雲原生 DevOps 現狀調研問卷徵集:KodeRover 聯合 OSCHINA 推出
- Zadig v1.13.0 相信開放的力量,工作流連通一切價值
- 飛書影片會議端到端整合測試工程實踐經驗總結 - Zadig 應用案例
- 在解決了 2961 個使用者反饋後,我做出了這樣的改變...
- 基於 Ingress Controller 在叢集外訪問 Zadig 自測環境(最佳實踐)
- iMile 利用 Zadig 多雲環境周部署千次,跨雲跨地域持續交付全球業務
- 穩!上千微服務接入 Zadig 的最佳姿勢(Helm Chart 篇)
- 穩!上千微服務接入 Zadig 的最佳姿勢(K8s YAML 篇)
- Zadig 洞態 IAST:讓安全溶於持續交付
- TT 語音落地 Zadig:開源共創 Helm 接入場景,環境治理搞得定!
- 00後雲工程師用 Zadig 為企業研發開源節流
- Zadig 構建究竟有何強大?一起來實踐
- 妙盈科技全面實施 Zadig 擁抱雲原生
- Zadig SonarQube,為開發過程安全保駕
- Zadig v1.12.0 推出 VS Code 外掛,全面支援 GitOps ,好工具就要到最後一公里
- 鈦動科技:我們的 Zadig 落地之路