全部產品
Search
文件中心

Container Service for Kubernetes:建立有狀態工作負載StatefulSet

更新時間:Jun 26, 2024

有狀態工作負載在運行中會儲存資料或狀態。您可以通過Container Service控制台建立StatefulSet類型的應用,滿足您快速建立有狀態應用的需求。本文介紹如何建立一個Nginx的有狀態應用並驗證該有狀態應用的資料持久化特性。

前提條件

使用鏡像建立有狀態的StatefulSet應用前,請確保您已經進行以下操作:

背景資訊

StatefulSet包括以下特性:

情境

說明

Pod一致性

包含次序(啟動、停止次序)、網路一致性。此一致性與Pod相關,與被調度到哪個節點無關。

穩定的持久化儲存

通過VolumeClaimTemplate為每個Pod建立一個PV。刪除或減少副本不會刪除相關的儲存卷。

穩定的網路標誌

Pod的hostname模式為:(StatefulSet名稱)-(序號)

穩定的次序

對於N個副本的StatefulSet,每個Pod都在[0,N)的範圍內分配一個唯一的數字序號。

建立有狀態StatefulSet應用

步驟一:配置應用基本資料

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 有狀態

  3. 有狀態頁面,單擊使用鏡像建立

  4. 應用基本資料頁簽中,設定應用的基本資料,其中類型選擇為有狀態(StatefulSet)。

    配置項

    描述

    應用程式名稱

    應用的名稱。

    副本數量

    即應用程式套件含的Pod數量,預設數量為2。

    類型

    定義資來源物件的類型,可選擇無狀態(Deployment)有狀態(StatefulSet)任務(Job)定時任務(CronJob)守護進程集(DaemonSet)

    標籤

    為該應用添加一個標籤,標識該應用。

    註解

    為該應用添加一個註解(Annotation)。

    時區同步

    容器與節點是否使用相同的時區。

  5. 單擊下一步進入容器配置頁簽。

步驟二:配置容器

容器配置嚮導頁面,配置容器的鏡像、資源、連接埠、環境變數、健全狀態檢查、生命週期、資料卷和日誌。

說明

容器1頁簽右側,單擊添加容器可以為應用的Pod設定多個容器。

  1. 基本配置地區,完成容器的基本配置。

    參數

    描述

    鏡像名稱

    • 選擇鏡像

      您可以單擊選擇鏡像,選擇所需的鏡像。支援選擇以下三種類型的鏡像。

      • Container Registry企業版:可以選擇託管在Container RegistryACR中的企業版鏡像。需要選擇鏡像所屬地區,以及鏡像服務執行個體。關於ACR的更多資訊,請參見什麼是Container RegistryACR

      • Container Registry個人版:可以選擇託管在Container RegistryACR中的個人版鏡像。需要選擇鏡像所屬地區,以及鏡像服務執行個體。

      • 製品中心:包含應用程式容器化基礎OS鏡像、基礎語言鏡像、AI/巨量資料相關鏡像,本樣本以製品中心的Nginx鏡像為例說明。關於製品中心的更多資訊,請參見製品中心

        說明

        Container RegistryACR提供製品中心便於您的基礎鏡像使用,這些基礎鏡像由阿里雲或者龍蜥社區做版本更新及安全修複。如果您有額外的鏡像需求或者問題,請加入DingTalk群33605007047進行諮詢。

      您還可以填寫私人鏡像。填寫的格式為domainname/namespace/imagename:tag

    • 選擇鏡像拉取策略

      ACK支援以下三種鏡像拉取策略(imagePullPolicy):

      • 優先使用本地鏡像(IfNotPresent):如果本地有該鏡像(之前拉取過該鏡像至宿主機中),則使用本地鏡像,本地不存在時拉取鏡像。

      • 總是拉取鏡像(Always):表示每次部署或擴容都會從Container Registry重新拉取鏡像,而不會從本地拉取鏡像。

      • 僅使用本地鏡像(Never):僅使用本地鏡像。

      說明

      當您選中鏡像拉取策略時,預設不設定鏡像拉取策略。

    • 設定鏡像密鑰

      您可以單擊設定鏡像密鑰,為私人鏡像設定密鑰以確保安全。

      • 對於ACR個人版執行個體,您可以通過設定鏡像密鑰的方式拉取容器鏡像。設定密鑰的更多資訊,請參見建立保密字典

      • 對於ACR企業版執行個體,您可以通過免密組件拉取鏡像。具體操作,請參見使用免密組件拉取容器鏡像

    資源限制

    可指定該應用所能使用的資源上限,包括CPU、記憶體和Ephemeral-Storage三種資源,以防止佔用過多資源。關於設定資源限制的更多資訊,請參見資源畫像

    所需資源

    為該應用預留資源額度,包括CPU、記憶體和Ephemeral-Storage三種資源,即容器獨佔這些資源,防止因資源不足而被其他服務或進程爭奪資源,導致應用不可用。關於設定所需資源的更多資訊,請參見資源畫像

    容器啟動項

    • stdin:表示為該容器開啟標準輸入。

    • tty:表示為該容器分配一個虛擬終端,以便於向容器發送訊號。

    通常這兩個選項是一起使用的,表示將終端(tty)綁定到容器的標準輸入(stdin)上。例如,一個互動程式從使用者擷取標準輸入,並顯示到終端中。

    特權容器

    • 選擇特權容器,則privileged=true,開啟特權模式。

    • 不選擇特權容器,則privileged=false,關閉特權模式。

    初始化容器

    選中該選項,表示建立一個初始化容器。

    初始化容器提供了一種機制來阻塞或延遲應用程式容器的啟動,初始化容器執行成功後,Pod內的應用程式容器會並行啟動。例如,檢測依賴服務的可用性。初始化容器可以包括一些應用鏡像中不存在的工具 + 生產力和安裝指令碼,用來初始化應用程式容器的運行環境,例如設定核心參數、組建組態檔案。更多資訊,請參見Init Containers

  2. 可選:連接埠設定地區,單擊新增設定容器的連接埠。

    參數

    描述

    名稱

    設定容器連接埠名稱。

    容器連接埠

    設定暴露的容器訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。

    協議

    支援TCP和UDP。

  3. 可選:環境變數地區,單擊新增設定環境變數。

    支援通過索引值對的形式為Pod配置環境變數。用於給Pod添加環境標誌或傳遞配置等,具體操作,請參見Pod variable

    參數

    描述

    類型

    設定環境變數的類型,支援以下類型:

    • 自訂

    • 配置項

    • 保密字典

    • 變數/變數引用

    • 資源引用

    配置項、保密字典支援對全部檔案的引用,以保密字典為例。選擇保密字典類型,只選擇目標保密字典,則預設引用全部檔案。環境變數

    對應的YAML,也引用了整個密鑰(Secret)。yaml

    選擇資源引用,主要使用resourceFieldRef參數,從Pod規範中引用容器已經聲明的資源值,然後將這些值作為環境變數傳遞給容器。對應的YAML如下:

    image

    變數名稱

    設定環境變數名稱。

    變數/變數引用

    設定變數引用的值。

  4. 可選:健全狀態檢查地區,根據需要開啟存活檢查就緒檢查啟動探測

    更多資訊,請參見配置存活、就緒和啟動探測器

    參數

    請求類型

    配置說明

    • 存活檢查(Liveness):用於檢測何時重啟容器。

    • 就緒檢查(Readiness):確定容器是否已經就緒,且可以接受流量。

    • 啟動探測(Startup Probes):用於檢測何時啟動容器。

      說明

      僅Kubernetes叢集1.18及之後版本支援啟動探測。

    HTTP請求

    即向容器發送一個HTTP GET請求,支援的參數包括:

    • 協議HTTP/HTTPS

    • 路徑:訪問HTTP Server的路徑。

    • 連接埠:容器暴露的訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。

    • Http頭:即HTTP Headers,HTTP請求中自訂的要求標頭,HTTP允許重複的Header。支援索引值對的配置方式。

    • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為3秒。

    • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10秒,最小為1秒。

    • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。

    • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。

    • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3,最小值是1。

    TCP串連

    即向容器發送一個TCP Socket,Kubelet將嘗試在指定連接埠上開啟容器的通訊端。如果可以建立串連,容器被認為是健康的,如果不能就認為是失敗的。支援的參數包括:

    • 連接埠:容器暴露的訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。

    • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為15秒。

    • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10秒,最小為1秒。

    • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。

    • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。

    • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3,最小值是1。

    命令列

    通過在容器中執行探針檢測命令,來檢測容器的健康情況。支援的參數包括:

    • 命令列:用於檢測容器健康情況的探測命令。

    • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為5秒。

    • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10秒,最小為1秒。

    • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。

    • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。

    • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3,最小值是1。

  5. 可選:生命週期地區,設定容器的生命週期。

    您可以為容器的生命週期配置啟動執行、啟動後處理和停止前處理。具體操作,請參見配置生命週期生命週期

    參數

    描述

    啟動執行

    為容器設定啟動前置命令和參數。

    啟動後處理

    為容器設定啟動後的命令。

    停止前處理

    為容器設定預結束命令。

  6. 可選:資料卷地區,增加本機存放區或雲端儲存聲明PVC(Persistent Volume Claim)。

    參數

    描述

    增加本機存放區

    本機存放區:支援主機目錄(HostPath)、配置項(ConfigMap)、保密字典(Secret)和臨時目錄,將對應的掛載源掛載到容器路徑中。更多資訊,請參見volumes

    增加雲端儲存聲明(PersistentVolumeClaim)

    支援通過PVC掛載雲端儲存卷。在選擇目標掛載源前,您需要建立雲端儲存聲明。具體操作,請參見建立持久化儲存卷聲明

    本例中配置了一個雲端儲存類型的資料卷聲明disk-ssd,將其掛載到容器的/tmp路徑下。配置資料卷

  7. 可選:日誌配置地區,進行採集配置和自訂Tag設定。

    重要

    請確保已部署Kubernetes叢集,並且在此叢集上已安裝日誌外掛程式。

    配置項

    描述

    採集配置

    日誌庫:即在Log Service中產生一個對應的Logstore,用於儲存採集到的日誌。

    容器內日誌路徑:支援Stdout和文本日誌。

    • Stdout:表示採集容器的標準輸出日誌。

    • 文本日誌:表示收集容器內指定路徑的日誌,本例中表示收集/var/log/nginx下所有的文本日誌,也支援萬用字元的方式。

    自訂Tag

    您還可以設定自訂Tag,設定Tag後,會將該Tag一起採集到容器的日誌輸出中。自訂Tag可協助您給容器日誌打上Tag,方便進行日誌統計和過濾等分析操作。

  8. 單擊下一步,進入進階設定精靈頁面。

步驟三:完成進階配置

進階配置嚮導頁面中設定訪問、伸縮、調度和標籤註解。

  1. 訪問設定地區,設定暴露後端Pod的方式。

    說明

    針對應用的通訊需求,您可靈活進行訪問設定:

    • 內部應用:對於只在叢集內部工作的應用,您可以在建立服務時,根據需要選擇虛擬叢集IP節點連接埠類型的服務,來進行內部通訊。

    • 外部應用:對於需要暴露到公網的應用,您可以採用兩種方式進行訪問設定。

      • 建立負載平衡類型的服務:您可以在建立服務時,選擇負載平衡類型的服務。通過阿里雲提供的負載平衡服務SLB(Server Load Balancer),使得該服務提供公網訪問能力。

      • 建立路由(Ingress):通過建立路由(Ingress)提供公網訪問能力。更多資訊,請參見Ingress

    您可以設定暴露後端Pod的方式。本例中選擇虛擬叢集IP和路由(Ingress),構建一個公網可訪問的Nginx應用。

    • 佈建服務(Service):在服務(Service)右側,單擊建立設定服務的配置項。

      配置項

      描述

      服務名稱

      輸入Service(服務)的名稱。

      服務類型

      選擇Service類型,Service網路支援以下模式,分別對接不同來源和類型的用戶端的訪問,包括:

      虛擬叢集IP(ClusterIP)

      虛擬叢集IP(ClusterIP)主要服務於叢集內部通訊,僅當服務類型設定為虛擬ClusterIP時,才支援服務執行個體之間的發現。通過使用無頭服務Headless Service,您可以與其他服務發現機制互動,而不必依賴Kubernetes預設提供的基於ClusterIP的服務發現和負載平衡。

      負載平衡(LoadBalancer)

      說明

      建立NLB和使用已有NLB功能,目前處於灰階發布中。如需使用,請提交工單申請。

      負載平衡提供了一種方法,通過整合阿里雲負載平衡器CLB(Classic Load Balancer)及網路型負載平衡NLB(Network Load Balancer),可以將叢集內部應用對外暴露。相比於NodePort方式,能夠顯著提升應用的可用性和效能。

      建立CLB

      建立CLB(Classic Load Balancer)時,您可以選擇CLB的網路訪問模式(公網或私網)和計費方式(按規格計費或按使用量計費)。更多資訊,請參見建立和管理CLB執行個體

      負載平衡更多配置

      名稱:自訂CLB的名稱。僅建立CLB需要配置。

      IP版本:根據需要可選擇IPv4IPv6

      調度演算法:支援輪詢(RR)或加權輪詢(WRR)兩種策略。RR(預設取值):按照訪問順序依次將外部請求依序分發到後端伺服器;WRR:權重值越高的後端伺服器,被輪詢到的次數(機率)也越高。

      存取控制:提供監聽層級的存取控制。詳細資料,請參見存取控制

      健全狀態檢查:支援TCP和HTTP協議。開啟健全狀態檢查後,您可以通過健全狀態檢查來判斷後端伺服器的業務可用性。健全狀態檢查原理,請參見CLB健全狀態檢查工作原理

      其他:您還可以通過Annotation配置傳統型負載平衡。詳細資料,請參見通過Annotation配置傳統型負載平衡CLB

      使用已有CLB

      您可以從下拉式功能表中選擇已有的CLB(Classic Load Balancer)執行個體進行複用。

      重要

      複用CLB執行個體存在一些限制,以及相關的注意事項,詳細資料請參見哪些負載平衡可以被複用?

      負載平衡更多配置

      調度演算法:支援輪詢(RR)或加權輪詢(WRR)兩種策略。RR(預設取值):按照訪問順序依次將外部請求依序分發到後端伺服器;WRR:權重值越高的後端伺服器,被輪詢到的次數(機率)也越高。

      存取控制:提供監聽層級的存取控制。詳細資料,請參見存取控制

      健全狀態檢查:支援TCP和HTTP協議。開啟健全狀態檢查後,您可以通過健全狀態檢查來判斷後端伺服器的業務可用性。健全狀態檢查原理,請參見負載平衡健全狀態檢查工作原理

      其他:您還可以通過Annotation配置傳統型負載平衡。詳細資料,請參見通過Annotation配置傳統型負載平衡CLB

      建立NLB

      建立NLB(Network Load Balancer )時,您可以選擇NLB的網路訪問模式(公網或私網)。更多資訊,請參見建立和管理NLB執行個體

      負載平衡更多配置

      名稱:自訂NLB的名稱。僅建立NLB需要配置。

      IP版本:根據需要可選擇IPv4雙棧

      調度演算法:選擇一種調度演算法。

      • 輪詢:按照訪問順序依次將外部請求分發到後端伺服器。

      • 加權輪詢(預設):權重值越高的後端伺服器,被輪詢到的次數(機率)也越高。

      • 源IP雜湊:基於源IP的一致性雜湊,相同的源地址會調度到相同的後端伺服器。

      • 四元組雜湊:基於四元組(源IP、目的IP、源連接埠和目的連接埠)的一致性雜湊,相同的流會調度到相同的後端伺服器。

      • QUIC ID雜湊:基於QUIC ID的一致性雜湊,支援將同一個QUIC ID的請求雜湊到同一台後端伺服器上。

      • 加權最小串連數:除了根據每台後端伺服器設定的權重值來進行輪詢,同時還考慮後端伺服器的實際負載(即串連數)。當權重值相同時,當前串連數越小的後端伺服器被輪詢到的次數(機率)也越高。

      健全狀態檢查:開啟或關閉健全狀態檢查。

      • TCP(預設):通過發送SYN握手報文來檢測伺服器連接埠是否存活。

        • 健康響應逾時時間:輸入接收來自健全狀態檢查的響應需要等待的時間。如果後端伺服器在指定的時間內沒有正確響應,則判定為健全狀態檢查失敗。

        • 健康間隔時間:輸入進行健全狀態檢查的時間間隔。

        • 健康閾值:健全狀態檢查連續成功多少次後,將後端伺服器的健全狀態檢查狀態由失敗判定為成功的次數。

        • 不健康閾值:健全狀態檢查連續失敗多少次後,將後端伺服器的健全狀態檢查狀態由成功判定為失敗的次數。

      • HTTP:通過發送HEAD或GET請求類比瀏覽器的訪問行為來檢查伺服器應用是否健康。

        • 網域名稱:輸入健全狀態檢查的網域名稱。

          • 使用後端伺服器內網IP(預設):使用後端伺服器的內網IP地址作為健全狀態檢查的網域名稱。

          • 指定特定網域名稱:輸入一個網域名稱。

        • 路徑:輸入健全狀態檢查頁面的URL。

        • 健康狀態返回碼:可以選擇http_2xx(預設)、http_3xxhttp_4xxhttp_5xx

      其他:您還可以通過Annotation配置網路型負載平衡。詳細資料,請參見通過Annotation配置網路型負載平衡NLB

      使用已有NLB

      您可以從下拉式功能表中選擇已有的NLB(Network Load Balancer)執行個體進行複用。

      重要

      複用NLB執行個體存在一些限制,以及相關的注意事項,詳細資料請參見哪些負載平衡可以被複用?

      負載平衡更多配置

      調度演算法:選擇一種調度演算法。

      • 輪詢:按照訪問順序依次將外部請求分發到後端伺服器。

      • 加權輪詢(預設):權重值越高的後端伺服器,被輪詢到的次數(機率)也越高。

      • 源IP雜湊:基於源IP的一致性雜湊,相同的源地址會調度到相同的後端伺服器。

      • 四元組雜湊:基於四元組(源IP、目的IP、源連接埠和目的連接埠)的一致性雜湊,相同的流會調度到相同的後端伺服器。

      • QUIC ID雜湊:基於QUIC ID的一致性雜湊,支援將同一個QUIC ID的請求雜湊到同一台後端伺服器上。

      • 加權最小串連數:除了根據每台後端伺服器設定的權重值來進行輪詢,同時還考慮後端伺服器的實際負載(即串連數)。當權重值相同時,當前串連數越小的後端伺服器被輪詢到的次數(機率)也越高。

      健全狀態檢查:開啟或關閉健全狀態檢查。

      • TCP(預設):通過發送SYN握手報文來檢測伺服器連接埠是否存活。

        • 健康響應逾時時間:輸入接收來自健全狀態檢查的響應需要等待的時間。如果後端伺服器在指定的時間內沒有正確響應,則判定為健全狀態檢查失敗。

        • 健康間隔時間:輸入進行健全狀態檢查的時間間隔。

        • 健康閾值:健全狀態檢查連續成功多少次後,將後端伺服器的健全狀態檢查狀態由失敗判定為成功的次數。

        • 不健康閾值:健全狀態檢查連續失敗多少次後,將後端伺服器的健全狀態檢查狀態由成功判定為失敗的次數。

      • HTTP:通過發送HEAD或GET請求類比瀏覽器的訪問行為來檢查伺服器應用是否健康。

        • 網域名稱:輸入健全狀態檢查的網域名稱。

          • 使用後端伺服器內網IP(預設):使用後端伺服器的內網IP地址作為健全狀態檢查的網域名稱。

          • 指定特定網域名稱:輸入一個網域名稱。

        • 路徑:輸入健全狀態檢查頁面的URL。

        • 健康狀態返回碼:可以選擇http_2xx(預設)、http_3xxhttp_4xxhttp_5xx

      其他:您還可以通過Annotation配置網路型負載平衡。詳細資料,請參見通過Annotation配置網路型負載平衡NLB

      節點連接埠(NodePort)

      節點連接埠(NodePort)提供了一種便捷的方式,使得外部使用者可以通過節點的IP地址和指定的連接埠來訪問叢集中的服務。通過訪問 <NodeIP>:<NodePort>,使用者能夠串連到NodePort服務,但是實現負載平衡的配置則需要使用者自己手動完成。

      外部流量策略

      您的服務類型為節點連接埠負載平衡時,才能設定外部流量策略。關於外部流量策略的詳細介紹,請參見Service快速入門

      • Local:流量只發給本節點的Pod。

      • Cluster:流量可以轉寄到叢集中其他節點上的Pod。

      服務關聯

      選擇服務要綁定的後端應用。若不進行關聯部署,則不會建立相關的Endpoints對象。關於服務關聯的詳細介紹,請參見services-without-selectors

      連接埠映射

      添加服務連接埠(對應Service YAML檔案中的port)和容器連接埠(對應Service YAML檔案中的targetPort),容器連接埠需要與後端的Pod中暴露的容器連接埠一致。

      註解

      為該服務添加一個註解(Annotation),配置負載平衡的參數。更多參數,請參見通過Annotation配置傳統型負載平衡CLB通過Annotation配置網路型負載平衡NLB

      重要

      請勿複用叢集的API Server的Server Load Balancer執行個體,否則將導致叢集訪問異常。

      標籤

      為該服務添加一個標籤,標識該服務。

    • 配置路由(Ingress):在路由(Ingress)右側,單擊建立設定後端Pod的路由規則。

      配置項

      描述

      名稱

      輸入路由的名稱。

      規則

      路由規則是指授權入站到達叢集服務的規則。更多資訊,請參見配置路由資訊

      • 網域名稱:輸入Ingress網域名稱。

      • 路徑:指定服務訪問的URL路徑,預設為根路徑/,本例不作配置。每個路徑 (path)都關聯一個backend(服務),在阿里雲SLB將流量轉寄到backend之前,所有的入站請求都要先匹配網域名稱和路徑。

      • 服務:選擇服務的名稱和對應連接埠。

      • 開啟TLS:配置安全的路由服務。具體操作,請參見Nginx Ingress進階用法

      灰階發布

      開啟灰階發布開關。此處建議選擇社區版。

      Ingress Class

      自訂Ingress的類。

      註解

      您可以自訂註解名稱和值,也可以根據名稱選擇或搜尋需要配置的註解。Ingress的註解請參見Annotations

      單擊+添加,可對Ingress無上限地添加註解。

      標籤

      標籤的作用是為Ingress添加對應的標籤,表示該Ingress的特點。

      單擊+添加,可對Ingress無上限地添加標籤。

    訪問設定地區,您可以看到已建立的服務和路由,您可以單擊變更刪除進行二次配置。

  2. 可選:伸縮配置地區,配置是否開啟指標伸縮定時伸縮,從而滿足應用在不同負載下的需求。

    • Container Service支援容器組的指標伸縮,即根據容器的CPU和記憶體資源佔用情況自動調整容器組的數量。

      說明

      若要啟用自動調整,您必須為容器設定所需資源,否則容器自動調整無法生效。

      參數

      描述

      指標

      支援CPU和記憶體,需要和設定的所需資源類型相同。

      觸發條件

      資源使用率的百分比,超過該使用量,容器開始擴容。

      最大副本數

      該負載類型可擴容的容器數量上限。

      最小副本數

      該負載類型可縮容的容器數量下限。

    • Container Service支援容器組的定時伸縮,即定時地對Container ServiceKubernetes叢集進行擴縮容。開啟定時伸縮前,需先安裝ack-kubernetes-cronhpa-controller組件。關於定時伸縮的詳細說明,請參見步驟二:建立CronHPA任務

  3. 可選:調度設定地區,設定升級方式節點親和性應用親和性應用反親和性,更多資訊,請參見Affinity and anti-affinity

    說明

    親和性調度依賴節點標籤和Pod標籤。您可以使用內建的標籤進行調度,也可以預先為節點、Pod配置相關的標籤。

    配置項

    描述

    升級方式

    升級方式包括Rollingupdate升級和OnDelete升級。更多資訊,請參見StatefulSet

    節點親和性

    設定節點親和性,通過Worker節點的Label標籤進行設定。

    節點調度支援硬約束和軟約束(Required/Preferred),以及豐富的匹配運算式(In, NotIn, Exists, DoesNotExist. Gt, and Lt):

    • 必須滿足,即硬約束,一定要滿足,對應requiredDuringSchedulingIgnoredDuringExecution,效果與NodeSelector相同。本例中Pod只能調度到具有對應標籤的Worker節點。您可以定義多條硬約束規則,但只需滿足其中一條。

    • 盡量滿足,即軟約束,不一定滿足,對應preferredDuringSchedulingIgnoredDuringExecution。調度會盡量調度Pod到具有對應標籤的Node節點。您還可以為軟約束規則設定權重,具體調度時,若存在多個合格節點,權重最大的節點會被優先調度。您可以定義多條軟約束規則,但必須滿足全部約束,才會進行調度。

    應用親和性

    決定應用的Pod可以和哪些Pod部署在同一拓撲域。例如,對於相互連信的服務,可通過應用親和性調度,將其部署到同一拓撲域(如同一個主機)中,減少它們之間的網路延遲。

    根據節點上啟動並執行Pod的標籤(Label)來進行調度,支援硬約束和軟約束,匹配的運算式有:In, NotIn, Exists, DoesNotExist

    • 必須滿足,即硬約束,一定要滿足,對應requiredDuringSchedulingIgnoredDuringExecution,Pod的親和性調度必須要滿足後續定義的約束條件。

      • 命名空間:該策略是依據Pod的Label進行調度,所以會受到命名空間的約束。

      • 拓撲域:即topologyKey,指定調度時範圍,這是通過Node節點的標籤來實現的,例如指定為kubernetes.io/hostname,那就是以Node節點為區分範圍;如果指定為beta.kubernetes.io/os,則以Node節點的作業系統類型來區分。

      • 選取器:單擊選取器右側的加號按鈕,您可以添加多條硬約束規則。

      • 查看應用列表:單擊應用列表,彈出對話方塊,您可以在此查看各命名空間下的應用,並可以將應用的標籤匯入到親和性配置頁面。

      • 硬約束條件:設定已有應用的標籤、操作符和標籤值。本例中,表示將待建立的應用調度到該主機上,該主機啟動並執行已有應用具有app:nginx標籤。

    • 盡量滿足,即軟約束,不一定滿足,對應preferredDuringSchedulingIgnoredDuringExecution。Pod的親和性調度會盡量滿足後續定義的約束條件。對於軟約束規則,您可以配置每條規則的權重,其他配置規則與硬約束規則相同。

      說明

      權重:設定一條軟約束規則的權重,介於1~100,通過演算法計算滿足軟約束規則的節點的權重,將Pod調度到權重最大的節點上。

    應用反親和性

    決定應用的Pod不與哪些Pod部署在同一拓撲域。應用非親和性調度的情境包括:

    • 將一個服務的Pod分散部署到不同的拓撲域(如不同主機)中,提高服務本身的穩定性。

    • 給予Pod一個節點的獨佔存取權限來保證資源隔離,保證不會有其他Pod來分享節點資源。

    • 把可能會相互影響的服務的Pod分散在不同的主機上。

    說明

    應用非親和性調度的設定方式與親和性調度相同,但是相同的調度規則代表的意思不同,請根據使用情境進行選擇。

    調度容忍

    容忍被應用於Pod,允許這個Pod被調度到相應的汙點上。

    調度到虛擬節點

    設定是否調度到虛擬節點,僅ACK叢集Pro版支援,如果您的叢集中沒有虛擬節點,則無法設定該配置項。關於如何將Pod調度至虛擬節點,請參見指定ECS和ECI的資源分派

  4. 可選:標籤和注釋地區,單擊添加設定容器組的標籤和注釋。

    參數

    描述

    Pod標籤

    為該Pod添加一個標籤,標識該應用。

    Pod註解

    為該Pod添加一個註解(Annotation)。

  5. 單擊建立

步驟四:查看應用

  1. 建立成功後,預設進入建立完成頁面,會列出應用程式套件含的對象,您可以單擊查看應用詳情進行查看。

  2. 單擊左上方返回列表,進入有狀態複本集列表頁面,查看建立的StatefulSet應用。

相關操作

查看有狀態工作負載詳情

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 有狀態

  3. 有狀態頁面頂部,選擇待查看應用的命名空間,即可查看對應命名空間下的有狀態工作負載。

  4. 有狀態頁面,單擊目標應用程式名稱或目標應用操作列下的詳情,即可查看有狀態工作負載詳情。

說明

在有狀態列表中單擊標籤欄位,輸入對應應用標籤的keyvalue,單擊確定後可過濾列表中的應用。

在應用詳情頁面,您可以編輯、伸縮、查看YAML、重新部署、重新整理應用。

操作項

描述

編輯

在應用詳情頁面單擊編輯,您可以修改應用資訊。

伸縮

在應用詳情頁面單擊伸縮,您可以修改所需容器組數量。

以建立的Nginx應用為例,驗證服務的伸縮性。

  1. 選擇目標Nginx應用,單擊右側伸縮

  2. 在彈出的對話方塊中,將容器組數量設定為3,您可發現擴容時,擴容容器組的排序依次遞增;反之,進行縮容時,先按Pod次序從高到低進行縮容。這體現StatefulSet中Pod的次序穩定性。

  3. 單擊左側導覽列中的儲存捲來滿足Pod的需求 > 儲存聲明,會顯示隨著應用擴容,會隨著Pod建立新的雲端儲存卷。縮容後,已建立的PV和PVC不會被刪除。

查看YAML

在應用詳情頁面單擊查看Yaml,您可以更新下載另存新檔YAML檔案。

重新部署

在應用詳情頁面單擊重新部署,您可以重新部署應用。

重新整理

在應用詳情頁面單擊重新整理,您可以重新整理應用。

在左側導覽列單擊叢集,單擊目的地組群名稱或目的地組群操作列下的詳情,選擇工作負載 > 有狀態,在有狀態頁面單擊目標應用程式名稱或目標應用操作列下的詳情

說明

在無狀態列表中單擊標籤欄位,輸入對應應用標籤的keyvalue,單擊確定後可過濾列表中的應用。

在應用詳情頁面,您可以編輯、伸縮、查看YAML、重新部署、重新整理應用。

編輯已建立的有狀態工作負載

有狀態頁面的目標應用操作列下,單擊更多後,您可以進行以下操作:

操作項

描述

查看Yaml

查看應用的YAML內容。

重新部署

重新部署應用。

節點親和性

為應用設定節點親和性。更多資訊,請參見調度配置

調度容忍

設定應用的容忍策略。更多資訊,請參見調度配置

日誌

查看應用的日誌資訊。

刪除

刪除應用。

批量重新部署應用

有狀態頁面下方,通過選擇批量重新部署可以實現多個應用的重新部署。

驗證StatefulSet應用的持久化儲存特性

串連到Master節點,執行以下命令,驗證持久化儲存特性。

  1. 執行以下命令在雲端硬碟中建立臨時檔案。

    kubectl exec nginx-1 -- ls /tmp            #列出該目錄下的檔案lost+found。
    kubectl exec nginx-1 -- touch /tmp/statefulset         #增加一個臨時檔案statefulset。
    kubectl exec nginx-1 -- ls /tmp

    預期輸出:

    lost+found
    statefulset
  2. 執行以下命令刪除Pod,驗證資料持久性。

    kubectl delete pod nginx-1

    預期輸出:

    pod"nginx-1" deleted
  3. 過一段時間,待Pod自動重啟後,驗證資料持久性,證明StatefulSet應用的高可用性。

    kubectl exec nginx-1 -- ls /tmp   #資料持久化儲存lost+found。

    預期輸出:

    statefulset

相關文檔