無狀態工作負載不會儲存任何資料或狀態,例如Nginx。您可以通過鏡像、編排模板及命令列建立一個無狀態應用。通過私人鏡像建立應用時,您還可以通過Container Service控制台為私人鏡像設定密鑰,以確保鏡像安全。本文介紹如何在Container Service控制台上使用鏡像建立無狀態應用。
前提條件
已建立ACK Serverless叢集。具體操作,請參見建立ACK Serverless叢集。
步驟一:配置應用基本資料
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態頁面,單擊使用鏡像建立。
在應用基本資料頁面,設定應用的基本資料。
在配置Deployment負載之前,您需要在頁面頂部設定應用所在的命名空間。本例中設定命名空間為default,應用類型為無狀態(Deployment)。
配置項
描述
應用程式名稱
設定應用的名稱。
副本數量
應用程式套件含的Pod數量。
類型
定義資來源物件的類型,可選擇無狀態(Deployment)、有狀態(StatefulSet)、任務(Job)、定時任務(CronJob)。
標籤
為該應用添加一個標籤,標識該應用。
註解
為該應用添加一個註解(Annotation)。
單擊下一步。進入容器配置頁面。
步驟二:配置容器
在容器配置頁簽中,配置容器的鏡像與資源、連接埠、環境變數、健全狀態檢查、生命週期、資料卷等。
在容器配置頁簽上方,單擊添加容器為應用的Pod設定多個容器。
在基本配置地區,完成容器的基本配置。
配置項
描述
鏡像名稱
選擇鏡像
您可以單擊選擇鏡像,選擇所需的鏡像。支援選擇以下三種類型的鏡像。
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和記憶體兩種資源,即容器獨佔這些資源,防止因資源不足而被其他服務或進程爭奪資源,導致應用不可用。
容器啟動項
stdin:將控制台輸入發送到容器。
tty:將標準輸入控制台作為容器的控制台輸入。
初始化容器
選中該項,表示建立一個Init Container。Init Container包含一些實用的工具。更多資訊,請參見Init Containers。
在連接埠設定地區,單擊新增設定容器的連接埠。
名稱:設定容器連接埠名稱。
容器連接埠:設定暴露的容器訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。
協議:支援TCP和UDP。
在環境變數地區,單擊新增設定環境變數。
支援通過索引值對的形式為Pod配置環境變數。用於給Pod添加環境標誌或傳遞配置等。更多資訊,請參見Pod variable。
類型:設定環境變數的類型,支援自訂、配置項、保密字典、變數/變數引用和資源引用類型。配置項、密鑰支援全部檔案的引用。以密鑰為例,
選擇保密字典,選擇變數,預設全部檔案引用。
對應的YAML,則引用了整個Secret。

變數名稱:設定環境變數名稱。
變數/變數引用:設定變數引用的值。
在健全狀態檢查地區,根據需要開啟存活檢查、就緒檢查及啟動探測。
配置項
說明
存活檢查(Liveness Probes):用於判斷容器是否正常運行,出現多次檢查失敗後,kubelet將重啟容器。存活檢查可以捕獲導致容器仍處在運行狀態但無法正常響應的問題,例如死結。
就緒檢查(Readiness Probes):用來確定容器是否已準備好接受流量。通過就緒檢查後,Pod才會被掛載到Service後端。
啟動探測(Startup Probes):僅在容器啟動時執行,用於檢測容器是否啟動成功。探測成功後,才會執行存活檢查與就緒檢查。
說明僅Kubernetes叢集1.18及之後版本支援啟動探測。
在生命週期地區,設定容器的生命週期。
您可以為容器的生命週期配置啟動執行、啟動後處理和停止前處理。具體操作,請參見配置生命週期。
啟動執行:為容器設定啟動前置命令和參數。
啟動後處理:為容器設定啟動後的命令。
停止前處理:為容器設定預結束命令。
在資料卷地區,增加本機存放區、雲端儲存聲明PVC(Persistent Volume Claim)或NAS等。
在Log Service地區,配置日誌相關參數。具體操作,請參見使用鏡像建立。
單擊下一步,進行進階設定。
步驟三:完成進階配置
在進階配置頁簽中設定訪問、伸縮和標籤註解。
在訪問設定地區,設定暴露後端Pod的方式。
說明針對應用的通訊需求,您可靈活進行訪問設定:
內部應用:對於只在叢集內部工作的應用,您可以在建立服務時,根據需要選擇虛擬叢集IP或節點連接埠類型的服務,來進行內部通訊。
外部應用:對於需要暴露到公網的應用,您可以採用兩種方式進行訪問設定。
建立負載平衡類型的服務:您可以在建立服務時,選擇負載平衡類型的服務。通過阿里雲提供的負載平衡服務SLB(Server Load Balancer),使得該服務提供公網訪問能力。
建立路由(Ingress):通過建立路由(Ingress)提供公網訪問能力。更多資訊,請參見Ingress。
您可以設定暴露後端Pod的方式。本例中選擇虛擬叢集IP和路由(Ingress),構建一個公網可訪問的Nginx應用。
佈建服務(Service):在服務(Service)右側,單擊建立設定建立服務配置項。
配置項
描述
名稱
輸入服務的名稱。本例為nginx-svc。
類型
選擇服務類型,即服務訪問的方式。本例中選擇負載平衡。
虛擬叢集IP:即ClusterIP,指通過叢集的內部IP暴露服務,選擇該值,服務只能夠在叢集內部可以訪問,這也是預設的ServiceType。
說明您的服務類型為虛擬叢集IP時,才能設定執行個體間探索服務(Headless Service)。
負載平衡:即LoadBalancer,指阿里雲提供的負載平衡服務(SLB),可選擇公網訪問或私網訪問。阿里雲負載平衡服務可以路由到NodePort服務和ClusterIP服務。
建立SLB:您可以通過單擊修改,修改SLB規格。
使用已有SLB:您可以在已有的列表中選擇SLB規格。
說明負載平衡類型支援建立SLB和使用已有SLB,且多個Kubernetes Service可以複用同一個SLB,但是存在以下限制:
使用已有的Server Load Balancer執行個體會強制覆蓋已有監聽。
Kubernetes通過Service建立的SLB不能複用(會導致SLB被意外刪除)。只能複用您手動在控制台(或調用OpenAPI)建立的SLB。
複用同一個SLB的多個Service不能有相同的前端監聽連接埠,否則會造成連接埠衝突。
複用SLB時,監聽的名稱以及虛擬伺服器組的名稱被Kubernetes作為唯一識別碼。請勿修改監聽和虛擬伺服器組的名稱。
不支援跨叢集複用SLB。
連接埠映射
添加服務連接埠和容器連接埠。容器連接埠需要與後端的Pod中暴露的容器連接埠一致。本文樣本值為:
服務連接埠:80
容器連接埠:80
外部流量策略
Local:流量只發給原生Pod。
Cluster:流量可以轉寄到其他節點上的Pod。
說明您的服務類型為節點連接埠或負載平衡時,才能設定外部流量策略。
註解
為該服務添加一個註解(annotation),配置負載平衡的參數。例如設定
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20表示將該服務的頻寬峰值設定為20 Mbit/s,從而控制服務的流量。更多資訊,請參見通過Annotation配置傳統型負載平衡CLB。標籤
為該服務添加一個標籤,標識該服務。
配置路由(Ingress):在路由(Ingress)右側,單擊建立設定後端Pod的路由規則。
詳細的路由配置資訊,請參見路由配置說明。
重要通過鏡像建立應用時,您僅能為一個服務建立路由(Ingress)。本例中使用一個虛擬機器主機名稱作為測試網域名稱,您需要在Hosts檔案中添加一條網域名稱映射(Ingress外部端點 + Ingress網域名稱)。在實際工作情境中,請使用備案網域名稱。
101.37.XX.XX foo.bar.com #即Ingress的IP。Ingress的IP擷取方式:在應用詳情頁面,單擊訪問方式頁簽,外部端點顯示的IP即為Ingress的IP。
配置項
說明
名稱
輸入路由的名稱。本例為nginx-ingress。
規則
路由規則是指授權入站到達叢集服務的規則。更多資訊,請參見路由配置說明。
網域名稱:輸入Ingress網域名稱。本例中使用測試網域名稱
foo.bar.com。路徑:指定服務訪問的URL路徑,預設為根路徑/,本例中不做配置。每個路徑(Path)都關聯一個Backend(服務),在阿里雲SLB將流量轉寄到Backend之前,所有的入站請求都要先匹配網域名稱和路徑。
服務:選擇服務的名稱和對應連接埠。本例中為nginx-svc。
開啟TLS:配置安全的路由服務。更多資訊,請參見Nginx Ingress進階用法。
服務權重
設定該路徑下多個服務的權重。服務權重採用相對值計算方式,預設值為100。
灰階發布
開啟灰階發布開關。此處建議選擇社區版。
Ingress Class
自訂Ingress的類。
註解
單擊添加按鈕,輸入註解名稱和值,即Ingress的Annotation索引值對。關於Ingress的註解,請參見Annotations。
標籤
為Ingress添加對應的標籤,標示該Ingress的特點。
在訪問設定地區,您可以看到建立完畢的服務和路由,您可單擊變更和刪除進行二次配置。
在伸縮配置地區,勾選是否開啟指標伸縮和定時伸縮,從而滿足應用在不同負載下的需求。
Container Service支援容器組的Auto Scaling,即根據容器CPU和記憶體資源佔用情況自動調整容器組數量。
說明若要啟用自動調整,您必須為容器設定所需資源,否則容器自動調整無法生效。
配置項
說明
指標
支援CPU和記憶體,需要和設定的所需資源類型相同。
觸發條件
資源使用率的百分比,超過該使用量,容器開始擴容。
最大副本數
該應用可擴容的容器數量上限。
最小副本數
該應用可縮容的容器數量下限。
在標籤和注釋地區,單擊添加設定容器組的標籤和注釋。
Pod標籤:為該Pod添加一個標籤,標識該應用。
Pod註解:為該Pod添加一個註解(Annotation)。
單擊建立。
步驟四:查看應用
在建立完成頁簽中查看應用任務。
在建立完成頁簽中單擊查看應用詳情。您可以看到建立的serverless-app-svc出現在無狀態列表下。

在叢集管理頁左側導覽列中,選擇,可以看到建立的服務serverless-app-svc出現在服務列表下。

在瀏覽器中訪問外部端點或網域名稱,您可訪問Nginx歡迎頁面,本樣本為Nginx。
重要瀏覽器訪問時,需保證服務訪問的方式為負載平衡。
使用網域名稱訪問時,需配置Host檔案。具體操作,請參見說明。
