本文主要介紹 Kubernetes 環境部署運維,支持滾動升級、分批發布部署策略,支持環境部署、擴縮容、回滾等操作。
1. 部署原理
云效 AppStack 應用環境 K8s 部署運維操作采用 fabric8io Kubernetes Client 更新資源對象,支持 JSON Patch(覆蓋更新)和 JSON Merge Patch(合并更新)兩種策略,企業可按需配置使用。企業統一配置,對本企業下所有 AppStack 應用環境生效,生效時機為環境部署單創建時(部署單一旦創建,策略不會再隨企業配置變化)。
以下以一個簡單示例說明兩種策略的區別。
假設 K8s 集群上已有資源 YAML 描述如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
msePilotCreateAppName: myapp
spec:
containers:
- name: main
image: nginx
下一次部署 YAML 如下,差異在于去除了
msePilotCreateAppName: myapp
相關labels:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
# 去除了 msePilotCreateAppName 相關 label
spec:
containers:
- name: main
image: nginx
若采用 JSON Patch(覆蓋更新)策略部署,部署結束后集群資源不會保留
msePilotCreateAppName: myapp
屬性,與下發 YAML 保持一致,完全覆蓋更新。若采用 JSON Merge Patch(合并更新)策略部署,部署結束后集群資源仍然會保留msePilotCreateAppName: myapp
屬性,不會覆蓋已有屬性,僅做合并追加。更多原理參考:Use a JSON merge patch to update a Deployment 。
2. 部署策略
云效AppStack Kubernetes環境部署支持分批發布、滾動升級策略,支持設置批次數量之間暫停策略、部署超時時間等。進入應用,選擇
,可以按需設置部署策略。AppStack提供「托管復本數」和「非托管復本數」兩種部署策略:
托管復本數:針對環境下Deployment工作負載,「托管復本數」策略云效AppStack將對Deployment replicas進行強管控,部署策略中指定的「目標實例數」為準進行 patch下發,支持通過環境擴縮容操作調整復本數。該策略下請避免通過其他工具或平臺操作資源,以免環境基線不一致導致部署失敗。
非托管復本數:針對環境下Deployment工作負載,「非托管復本數」策略云效AppStack將使用應用編排+環境變量組渲染后的YAML直接下發部署, 以渲染后的 YAML中的replicas為準,不做復本數強管控。HPA等彈性水位場景建議使用該策略。
2.1 「托管復本數」策略
AppStack環境部署「托管復本數」策略,對本應用、本環境下的Deployment資源生效:
目標實例數:期望的Deployment replicas復本數,請填寫正整數。指定目標實例數后,會使用該數量patch到部署YAML中(以該數量替換YAML中的replicas值),以指定的目標實例數下發部署。后續可以通過環境上的擴縮容操作調整復本數。
部署策略:
滾動升級:以K8s原生滾動方式部署,逐步更新應用Pod實例,直到新版本數量達到指定的目標實例數。
分批發布:
分批數量:發布的分批數,請填寫正整數(需要小于等于目標實例數)。
分批詳情:每批次的更新的Pod數量,各批次數量相加之和等于目標實例數。
暫停策略:
不暫停:不暫停,每批次自動開始;上一批次結束,下一批次自動執行。
首批暫停:第 1 批部署結束后暫停,需要手動單擊「繼續」觸發第 2 批;第 3 及后續批次自動執行(如有)。
每批暫停:第 1 批部署結束后暫停,后續每一批次都需要手動單擊「繼續」觸發。
超時時間:每批次超時時間,單位分鐘,支持 1-30 的正整數。
以下示例,目標實例數 3,分 2 批,第一批 1 個復本,第二批 2 個復本,單批次超時時間 10 分鐘。可以按批次查看部署進度。
以下示例,目標實例數 3,滾動升級,逐步更新應用Pod實例。
2.2 「非托管復本數」策略
AppStack環境部署「非托管復本數」策略,對本應用、本環境下的Deployment資源生效:
部署策略:
滾動升級:以K8s原生滾動方式部署,逐步更新應用Pod實例。
分批發布:支持按比例分批發布。
分批數量:發布的分批數,請填寫正整數。
分批詳情:每批次的更新的Pod數量比例,各批次比例相加之和需要等于100%。
暫停策略:
不暫停:不暫停,每批次自動開始;上一批次結束,下一批次自動執行。
首批暫停:第 1 批部署結束后暫停,需要手動單擊「繼續」觸發第 2 批;第 3 及后續批次自動執行(如涉及)。
每批暫停:第 1 批部署結束后暫停,后續每一批次都需要手動單擊「繼續」觸發。
超時時間:每批次超時時間,單位分鐘,支持 1-30 的正整數。
若部署編排YAML中指定了replicas: n,則按策略逐步更新新版本Pod數量達到n。
若部署編排YAML中未指定replicas,且K8s集群上已存在該Deployment,且集群上復本數為m,則按策略逐步更新新版本Pod數量達到m。
3. 部署運維操作
3.1 部署
應用環境部署通常用于應用制品或配置變更時去更新環境服務。
提交部署單
進入目標
,在環境列表找到目標環境卡片,單擊部署 或進入目標環境詳情頁面,單擊右上角操作區域的部署。填寫部署內容。
部署單名稱:部署單名稱,默認填充:${秒級時間戳}-部署,可按需修改。
部署版本號:部署版本號,自動生成:${秒級時間戳}-${三位毫秒},不可修改。
鏡像列表:鏡像由Kubernetes部署編排里定義的鏡像占位符決定,可直接輸入鏡像地址(請確保待部署到的K8s集群可直接拉取到鏡像)。
自定義參數:自定義參數由Kubernetes部署編排定義,當占位符 部署時可改 開關打開時,可以在提交部署單時動態修改取值。
確認部署選項。
展示當前環境待部署的所有服務以及鏡像列表,單擊YAML可以查看各個組件的部署配置。
特別的是,針對Deployment工作負載類型的組件,可以直接單擊調整部署策略進行設置,詳見 2. 部署策略。
單擊 提交 部署單,生成部署工單,跳轉部署詳情頁面。
觀測部署過程
上述提交部署單后,跳轉部署單詳情頁面,可以觀測部署進度。也可以從 應用-部署單 列表頁面,找到目標部署單,單擊進入工單詳情觀測進度。
部署工單概要:展示 部署單名稱、部署單ID、組件類型、提交人、提交時間、結束時間等基本信息。
環境部署流程:按順序展示當前環境部署的所有組件,部署內容和部署順序由應用編排決定(云效AppStack當前按照helm chart默認順序執行),單擊卡片可以查看具體資源的部署詳情。
資源部署詳情:展示指定資源的部署詳情。
非工作負載
展示 資源名、部署版本、部署配置、以及其他資源類型相關信息。
工作負載(當前僅支持Deployment)
基本信息展示 資源名、制品、目標實例數、部署策略、部署配置等。
部署進度可以按批次展示實例部署狀態,單擊實例塊可以查看Pod更多 基本信息 和 關鍵事件,還可以查看容器日志等。
暫停/繼續
部署過程中,可以單擊 暫停 當前任務,可用于異常情況下暫停任務觀察服務狀態。
已手動暫停的任務或者受暫停策略控制暫停的任務,可以單擊 繼續 執行任務。
終止
部署過程中,可以手動 終止 當前部署任務,可選 置為成功 或 置為失敗 。可用于一些不需要繼續部署的特殊場景:如SRE通過手動管理集群,已部署應用服務到目標版本,無需工單繼續處理的情況。
回退
部署過程中,可以單擊 回退 ,回退當前環境到上次部署狀態。單擊 回退 后,當前部署任務將取消,并生成新的回退任務,回退任務將使用環境的最近的部署基線進行一次重新部署。 可用于當前部署版本不符合預期,需要快速恢復環境到上次可用狀態的場景。
查看執行日志
單擊 執行日志 可以查看工單部署的全部詳細日志,可以用于問題追溯和排查。
3.2 擴縮容
環境擴縮容通常用于環境工作負載過高或過低時,動態調整環境對外提供服務實例數。僅「托管復本數」策略支持在環境上提交擴縮容;「非托管復本數」策略請通過調整 YAML中的replicas調整復本數。
提交擴縮單
進入應用-環境 ,進入目標環境詳情頁面,單擊右上角操作區域的 擴縮 按鈕。
填寫擴縮單參數
工單名稱:默認填充:${秒級時間戳}-部署,可按需修改。
版本號:展示當前環境最近一次部署的版本號。
組件信息:展示當前環境待擴縮的工作負載組件信息。
鏡像列表:環境最近一次部署的鏡像,只讀不可改。
目標實例數:本次擴縮操作期望達到的環境目標實例數。
部署策略:指定擴縮容策略,可選滾動升級和分批發布。
滾動升級:以 K8s 原生滾動方式擴縮,逐步新增或縮減 Pod 實例。
分批發布:
分批數量:根據待擴容/縮容的實例數(增量),劃分合適的分批數,以及每批擴/縮數量。
分批詳情:根據待擴容/縮容的實例數、分批數,劃分每批擴/縮實例數量。
暫停策略 :針對待擴縮的批次可選暫停策略,支持 不暫停、首批暫停、每批暫停 三種策略。
超時時間:每批次超時時間,單位分鐘,支持 1-30 的正整數。
單擊 提交 ,生成擴縮容工單,跳轉工單詳情頁面。
觀測擴縮過程
擴縮單詳情頁,針對環境下的工作負載進行實例數擴縮容,可以查看實例擴縮進度。
如果環境部署策略為分批發布,則環境擴縮容成功后會自動調整分批詳情,調整批次數以及每批次數量,以適應下一次環境部署。
3.3 回滾
回滾可一次性將環境快速恢復到目標版本,適用于新版本發布后不符合預期,需要回滾到最近可用版本場景。回滾相當于使用歷史版本進行一次重新部署,請謹慎操作!
提交回滾單
進入
,在版本列表找到目標部署的版本,單擊回滾提交回滾工單;或者進入目標環境詳情,單擊右上角操作區域回滾提交回滾工單。填寫回滾單參數。
部署單名稱:默認填充:${秒級時間戳}-回滾。
回滾版本:選擇待回滾到的部署版本。
組件信息:展示目標回滾版本下環境待回滾的組件服務,其中工作負載類型展示待回滾的 Service 、Deployment、目標實例數, 您也可按實際情況調整部署策略,指定分批數和暫停策略。 請仔細核對待回滾的組件信息是否符合預期。
單擊 提交 ,生成回滾工單,跳轉工單詳情頁面。
觀測回滾過程
回滾進度顯示上一個版本和當前部署的目標版本,目標版本會把當前環境版本回滾到上一個歷史版本。
3.4 環境刪除
通常適用于開發、測試等線下環境聯調測試完畢后,不再使用了,可以使用刪除環境功能釋放資源。