操作場景
在運行過程中會保存數據或狀態的工作負載稱為“有狀態工作負載(statefulset)”。例如Mysql,它需要存儲產生的新數據。
因為容器可以在不同主機間遷移,所以在宿主機上并不會保存數據,這依賴于CCE提供的高可用存儲卷,將存儲卷掛載在容器上,從而實現有狀態工作負載的數據持久化。
前提條件
- 在創建容器工作負載前,您需要存在一個可用集群。若沒有請參照購買混合集群中內容創建。
- 若工作負載需要被外網訪問,請確保集群中至少有一個節點已綁定彈性IP,或已購買負載均衡實例。
- 創建多個工作負載時,請確保容器使用的端口不沖突 ,否則部署會失敗。
通過控制臺創建
云容器引擎提供了多種創建工作負載的方式,您可以通過如下方式進行創建:
1. 基于“我的鏡像”創建工作負載,用戶首先需要將鏡像上傳至容器鏡像服務。
2. 基于“共享鏡像”創建工作負載,即其它租戶通過“容器鏡像服務”共享給您的鏡像。
3. 若您希望通過YAML方式創建工作負載,您可在“創建有狀態工作負載”頁面單擊界面右側的“YAML創建”,通過yaml的方式創建工作負載。YAML的說明請參見通過kubectl命令行創建。YAML編寫完成后,可單擊“創建”,直接創建工作負載。
YAML文件是和界面保持同步的,您也可以通過界面和YAML互動完成工作負載的創建。例如:
- 界面中填寫工作負載名稱后,YAML文件會自動關聯該名稱。
- 界面中添加完鏡像后,YAML中也會自動關聯該鏡像。
控制臺界面右側的“YAML創建”不支持多個YAML混合,請分別創建,否則創建時將會報錯。
步驟 1 登錄CCE控制臺,在左側導航欄中選擇“工作負載 > 有狀態負載 StatefulSet”,單擊“創建有狀態工作負載”。在打開的創建有狀態工作負載頁面中,參照下表設置工作負載基本信息,其中帶“*”標志的參數為必填參數。
工作負載基本信息
參數 | 參數說明 |
* 工作負載名稱 | 新建工作負載的名稱,命名必須唯一。 請輸入4到52個字符的字符串,可以包含小寫英文字母、數字和中劃線(-),并以小寫英文字母開頭,小寫英文字母或數字結尾。 |
* 集群名稱 | 新建工作負載所在的集群。 |
* 命名空間 | 在單集群中,不同命名空間中的數據彼此隔離。使應用可以共享同個集群的服務,也能夠互不干擾。若您不設置命名空間,系統會默認使用default命名空間。 |
* 實例數量 | 工作負載的實例數量。工作負載可以有一個或多個實例,用戶可以設置具體實例個數,默認為2,可自定義設置為1。 每個工作負載實例都由相同的容器部署而成。設置多個實例主要用于實現高可靠性,當某個實例故障時,工作負載還能正常運行。若使用單實例,節點異常或實例異常會導致服務異常。 |
時區同步 | 單擊 須知 時區同步功能開啟后,在“數據存儲 > 本地磁盤”中,將會自動添加HostPath類型的磁盤,請勿修改刪除該磁盤。 |
工作負載描述 | 工作負載描述信息。 |
步驟 2 單擊“下一步:容器設置”,添加容器。
1. 單擊“添加容器”,選擇需要部署的鏡像。
? 我的鏡像:展示了您創建的所有鏡像倉庫。
? 第三方鏡像:CCE支持拉取第三方鏡像倉庫(即鏡像倉庫之外的鏡像倉庫)的鏡像創建工作負載。使用第三方鏡像時,請確保工作負載運行的節點可訪問公網。第三方鏡像的具體使用方法請參見如何使用第三方鏡像。
- 若您的鏡像倉庫不需要認證,密鑰認證請選擇“否”,并輸入“鏡像名稱”,單擊“確定”。
- 若您的鏡像倉庫都必須經過認證(帳號密碼)才能訪問,您需要先創建密鑰再使用第三方鏡像,具體操作請參見如何使用第三方鏡像。
? 共享鏡像:其它租戶通過“容器鏡像服務”共享給您的鏡像將在此處展示,您可以基于共享鏡像創建工作負載。
2. 配置鏡像基本信息。
工作負載是Kubernetes對一組Pod的抽象模型,用于描述業務的運行載體,一個Pod可以封裝1個或多個容器,您可以單擊右上方的“添加容器”,添加多個容器鏡像并分別進行設置。
鏡像參數說明
參數 | 說明 |
鏡像名稱 | 導入的鏡像,您可單擊“更換鏡像”進行更換。 |
* 鏡像版本 | 選擇需要部署的鏡像版本。 |
* 容器名稱 | 容器的名稱,可修改。 |
特權容器 | 特權容器是指容器里面的程序具有一定的特權。 若選中,容器將獲得超級權限,例如可以操作宿主機上面的網絡設備、修改內核參數等。 |
容器規格 | CPU配額: 申請:容器需要使用的最小CPU值,默認0.25Core。 限制:允許容器使用的CPU最大值。建議設容器配額的最高限額,避免容器資源超額導致系統故障。 內存配額: 申請:容器需要使用的內存最小值,默認512MiB。 限制:允許容器使用的內存最大值。如果超過,容器會被終止。 申請和限制的具體請參見設置容器規格。 GPU配額:當集群中包含GPU節點時,才能設置GPU,無GPU節點不顯示此選項。 容器需要使用的GPU百分比。勾選“使用”并設置百分比,例如設置為10%,表示該容器需使用GPU資源的10%。若不勾選“使用”,或設置為0,則無法使用GPU資源。 GPU顯卡:工作負載實例將被調度到GPU顯卡類型為指定顯卡的節點上。 若勾選“不限制”,容器將會隨機使用節點中的任一顯卡。您也可以勾選某個顯卡,容器將使用特定顯卡。 |
3. 生命周期:用于設置容器啟動和運行時需要執行的命令。
? 啟動命令:設置容器啟動時執行的命令,具體請參見設置容器啟動命令。
? 啟動后處理:設置容器成功運行后執行的命令,詳細配置方法請參見設置容器生命周期。
? 停止前處理:設置容器結束前執行的命令,通常用于刪除日志/臨時文件等,詳細配置方法請參見設置容器生命周期。
4. 健康檢查:CCE提供了存活與業務兩種探針,用于判斷容器和用戶業務是否正常運行。詳細配置方法請參見設置容器健康檢查。
? 工作負載存活探針:檢查容器是否正常,不正常則重啟實例。
? 工作負載業務探針:檢查用戶業務是否就緒,不就緒則不轉發流量到當前實例。
5. 環境變量:在容器中添加環境變量,一般用于通過環境變量設置參數。
在“環境變量”頁簽,單擊“添加環境變量”,當前支持三種類型:
? 手動添加:輸入變量名稱、變量/變量引用。
? 密鑰導入:輸入變量名稱,選擇導入的密鑰名稱和數據。您需要提前創建密鑰,具體請參見創建密鑰。
? 配置項導入:輸入變量名稱,選擇導入的配置項名稱和數據。您需要提前創建配置項,具體請參見創建配置項。
對于已設置的環境變量,單擊環境變量后的“編輯”,可對該環境變量進行編輯。單擊環境變量后的“刪除”,可刪除該環境變量。
6. 數據存儲:給容器掛載數據存儲,支持本地磁盤和云存儲,適用于需持久化存儲、高磁盤IO等場景。具體請參見存儲管理。
有狀態工作負載只能在創建時添加數據存儲,創建完成后無法再添加。
7. 安全設置:對容器權限進行設置,保護系統和其他容器不受其影響。
請輸入用戶ID,容器將以當前用戶權限運行。
8. 容器日志:設置容器日志采集策略、配置日志目錄。用于收集容器日志便于統一管理和分析。詳細配置請參見采集容器標準輸出日志、采集容器內路徑日志。
步驟 3 單擊“下一步:工作負載訪問設置”,設置“實例間發現服務”和工作負載訪問方式。
設置“實例間發現服務”,如下表:
參數 | 參數說明 |
服務名稱 | 輸入工作負載所對應的服務名稱,用于集群內工作負載間的互相訪問。該服務主要用于實例的內部發現,不需要有單獨的IP地址,也不需要做負載均衡。 |
端口名稱 | 端口名稱用于給容器端口命名,通常以端口用途命名。 |
容器端口 | 輸入容器的監聽端口。 |
單擊“添加服務”,設置工作負載訪問方式。
若工作負載需要和其它服務互訪,或需要被公網訪問,您需要添加服務,設置工作負載訪問方式。
工作負載訪問的方式決定了這個工作負載的網絡屬性,不同訪問方式的工作負載可以提供不同網絡能力,具體請參見網絡概述。
步驟 4 單擊“下一步:高級配置”,配置更多高級策略。
- 升級策略:僅支持“滾動升級”。
滾動升級將逐步用新版本的實例替換舊版本的實例,升級的過程中,業務流量會同時負載均衡分布到新老的實例上,因此業務不會中斷。
- 實例管理策略:支持“有序策略”和“并行策略”兩種。
有序策略:默認策略,有狀態負載會逐個的、按順序的進行部署、刪除、伸縮實例, 只有前一個實例部署Ready或刪除完成后,有狀態負載才會操作后一個實例。
并行策略:支持有狀態負載并行創建或刪除所有的實例,有狀態負載發生變更時立刻在實例上生效。
- 縮容策略:為工作負載刪除提供一個時間窗,預留給生命周期中PreStop階段執行命令。若超過此時間窗,進程仍未停止,該工作負載將被強制刪除。
? 縮容時間窗 (s):請輸入時間,該時間為工作負載停止前命令的執行時間窗(0-9999秒),默認30秒。
? 縮容優先級:可根據業務需要選擇“優先減少新實例”或“優先減少老實例”。
- 調度策略:您可以根據需要自由組合靜態的全局調度策略或動態的運行時調度策略來實現自己的需求。具體請參見調度策略概述。
- Pod高級設置
? Pod標簽:內置app標簽在工作負載創建時指定,主要用于設置親和性與反親和性調度,暫不支持修改。您可以單擊下方的“添加標簽”增加標簽。

- 客戶端DNS配置:CCE集群內置DNS插件CoreDNS,為集群內的工作負載提供域名解析服務。詳細使用方法請參見Kubernetes集群內置DNS配置說明。
? DNS策略:
- 追加域名解析配置:選擇該配置后,將保留默認配置,以下“IP地址”和“搜索域”配置可能不生效。
- 替換域名解析配置:選擇該配置后,將僅使用以下“IP地址”和“搜索域”配置進行域名解析。
- 繼承Pod所在節點域名解析配置:將繼承Pod所在節點的域名解析配置。
? IP地址:您可對自定義的域名配置域名服務器,值為一個或一組DNS IP地址,如“1.2.3.4”。
? 搜索域:定義域名的搜索域列表,當訪問的域名不能被DNS解析時,會把該域名與搜索域列表中的域依次進行組合,并重新向DNS發起請求,直到域名被正確解析或者嘗試完搜索域列表為止。
? 超時時間(s):查詢超時時間,請自定義。
? ndots:表示域名中必須出現的“.”的個數,如果域名中的“.”的個數不小于ndots,則該域名為一個FQDN,操作系統會直接查詢;如果域名中的“.”的個數小于ndots,操作系統會在搜索域中進行查詢。
- 自定義指標監控:是指監控系統提供的一種指標收集機制,該機制允許工作負載在部署時自定義需要上報的指標名稱以及獲取這些指標數據的接入點信息,在應用運行時由監控系統按固定的頻率訪問接入點進行指標的收集。
- 性能管理配置:的性能管理服務可協助您快速進行工作負載的問題定位與性能瓶頸分析。
步驟 5 配置完成后,單擊“創建”,單擊“返回工作負載列表”。在工作負載列表中,當工作負載狀態為“運行中”時,表示工作負載創建成功。如果工作負載狀態未實時更新,請刷新頁面查看。
- 節點不可用時,pod狀態變為“未就緒”,此時需要手工刪除有狀態工作負載的pod,pod實例才會遷移到正常節點上。
- 工作負載列表頁在超過500條以上時,將采用Kubernetes的分頁機制進行分頁。Kubernetes的分頁機制:僅支持回到第一頁和查看下一頁,不支持查看上一頁,且在分頁顯示的情況下,資源總數顯示的是批量查詢出的數目而不是真實總數。
通過kubectl命令行創建
本節以etcd為例來進行說明。
前提條件
請參見通過kubectl操作CCE集群配置kubectl命令,使彈性云主機連接集群。
操作步驟
步驟 1 登錄已配置好kubectl命令的彈性云主機。
步驟 2 創建一個名為etcd-statefulset.yaml的文件。
其中,etcd-statefulset.yaml為自定義名稱,您可以隨意命名。
vi etcd-statefulset.yaml
以下內容僅為示例,若需要了解statefulset的詳細內容,請參考kubernetes官方文檔。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: etcd
spec:
replicas: 2
selector:
matchLabels:
app: etcd
serviceName: etcd-svc
template:
metadata:
labels:
app: etcd
spec:
containers:
- env:
- name: PAAS_APP_NAME
value: tesyhhj
- name: PAAS_NAMESPACE
value: default
- name: PAAS_PROJECT_ID
value: 9632fae707ce4416a0ab1e3e121fe555
image: etcd
imagePullPolicy: IfNotPresent
name: container-0
updateStrategy:
type: RollingUpdate
vi etcd-headless.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: etcd
name: etcd-svc
spec:
clusterIP: None
ports:
- name: etcd-svc
port: 3120
protocol: TCP
targetPort: 3120
selector:
app: etcd
sessionAffinity: None
type: ClusterIP
步驟 3 創建工作負載以及對應headless服務。
kubectl create -f etcd-statefulset.yaml
回顯如下,表示有狀態工作負載(stateful)已創建成功。
statefulset.apps/etcd created
kubectl create -f etcd-headless.yaml
回顯如下,表示對應headless服務已創建成功。
service/etcd-svc created
步驟 4 若工作負載需要被訪問(集群內訪問或節點訪問),您需要設置訪問方式,具體請參見“網絡管理”并創建對應服務。
