您可以在安全沙箱Kubernetes集群中使用鏡像創建一個可公網訪問的Nginx應用。
索引
前提條件
創建一個安全沙箱集群。詳情請參見創建安全沙箱節點池。
步驟一:登錄容器服務控制臺
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面,單擊使用鏡像創建。
步驟二:配置應用基本信息
在應用基本信息頁簽中,設置應用的基本信息。
說明本例中選擇無狀態(Deployment)類型。
配置項
描述
應用名稱
應用的名稱。
副本數量
即應用包含的Pod數量,默認數量為2。
類型
定義資源對象的類型,可選擇無狀態(Deployment)、有狀態(StatefulSet)、任務(Job)、定時任務(CronJob)、守護進程集(DaemonSet)。
標簽
為該應用添加一個標簽,標識該應用。
注解
為該應用添加一個注解(Annotation)。
時區同步
容器與節點是否使用相同的時區。
單擊下一步。
步驟三:配置容器
在容器配置頁簽上方,單擊添加容器為應用的Pod設置多個容器。
在容器配置頁簽,設置容器相關的配置。
基本配置
參數
描述
鏡像名稱
選擇鏡像
您可以單擊選擇鏡像,選擇所需的鏡像。支持選擇以下三種類型的鏡像。
容器鏡像服務企業版:可以選擇托管在容器鏡像服務ACR中的企業版鏡像。需要選擇鏡像所屬地域,以及鏡像服務實例。關于ACR的更多信息,請參見什么是容器鏡像服務ACR。
容器鏡像服務個人版:可以選擇托管在容器鏡像服務ACR中的個人版鏡像。需要選擇鏡像所屬地域,以及鏡像服務實例。
制品中心:包含應用容器化基礎OS鏡像、基礎語言鏡像、AI/大數據相關鏡像,本示例以制品中心的Nginx鏡像為例說明。關于制品中心的更多信息,請參見制品中心。
說明容器鏡像服務ACR提供制品中心便于您的基礎鏡像使用,這些基礎鏡像由阿里云或者龍蜥社區做版本更新及安全修復。如果您有額外的鏡像需求或者問題,請加入釘釘群33605007047進行咨詢。
您還可以填寫私有鏡像。填寫的格式為
domainname/namespace/imagename:tag
。選擇鏡像拉取策略
ACK支持以下三種鏡像拉取策略(imagePullPolicy):
優先使用本地鏡像(IfNotPresent):如果本地有該鏡像(之前拉取過該鏡像至宿主機中),則使用本地鏡像,本地不存在時拉取鏡像。
總是拉取鏡像(Always):表示每次部署或擴容都會從容器鏡像服務重新拉取鏡像,而不會從本地拉取鏡像。
僅使用本地鏡像(Never):僅使用本地鏡像。
說明當您選中鏡像拉取策略時,默認不設置鏡像拉取策略。
設置鏡像密鑰
您可以單擊設置鏡像密鑰,為私有鏡像設置密鑰以確保安全。
對于ACR個人版實例,您可以通過設置鏡像密鑰的方式拉取容器鏡像。設置密鑰的更多信息,請參見創建保密字典。
對于ACR企業版實例,您可以通過免密組件拉取鏡像。具體操作,請參見使用免密組件拉取容器鏡像。
資源限制
可指定該應用所能使用的資源上限,包括CPU、內存和Ephemeral-Storage三種資源,以防止占用過多資源。關于設置資源限制的更多信息,請參見資源畫像。
所需資源
為該應用預留資源額度,包括CPU、內存和Ephemeral-Storage三種資源,即容器獨占這些資源,防止因資源不足而被其他服務或進程爭奪資源,導致應用不可用。關于設置所需資源的更多信息,請參見資源畫像。
容器啟動項
stdin:表示為該容器開啟標準輸入。
tty:表示為該容器分配一個虛擬終端,以便于向容器發送信號。
通常這兩個選項是一起使用的,表示將終端(tty)綁定到容器的標準輸入(stdin)上。例如,一個交互式的程序從用戶獲取標準輸入,并顯示到終端中。
特權容器
選擇特權容器,則privileged=true,開啟特權模式。
不選擇特權容器,則privileged=false,關閉特權模式。
初始化容器
選中該選項,表示創建一個初始化容器。
初始化容器提供了一種機制來阻塞或延遲應用容器的啟動,初始化容器執行成功后,Pod內的應用容器會并行啟動。例如,檢測依賴服務的可用性。初始化容器可以包括一些應用鏡像中不存在的實用工具和安裝腳本,用來初始化應用容器的運行環境,例如設置內核參數、生成配置文件。更多信息,請參見Init Containers。
(可選)端口設置
設置容器的端口。
參數
描述
名稱
設置容器端口名稱。
容器端口
設置暴露的容器訪問端口或端口名,端口號必須介于1~65535。
協議
支持TCP和UDP。
(可選)環境變量
支持通過鍵值對的形式為Pod配置環境變量。用于給Pod添加環境標志或傳遞配置等。
參數
描述
類型
設置環境變量的類型,支持以下類型:
自定義
配置項
保密字典
變量/變量引用
資源引用
配置項、保密字典支持對全部文件的引用,以保密字典為例。選擇保密字典類型,只選擇目標保密字典,則默認引用全部文件。
對應的YAML,也引用了整個密鑰(Secret)。
選擇資源引用,主要使用
resourceFieldRef
參數,從Pod規范中引用容器已經聲明的資源值,然后將這些值作為環境變量傳遞給容器。對應的YAML如下:變量名稱
設置環境變量名稱。
變量/變量引用
設置變量引用的值。
(可選)健康檢查
支持存活檢查(liveness)、就緒檢查(Readiness)和啟動探測。關于健康檢查的更多信息,請參見Configure Liveness, Readiness and Startup Probes。
參數
請求類型
配置說明
存活檢查(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。
生命周期
您可以為容器的生命周期配置啟動執行、啟動后處理和停止前處理。具體信息,請參見配置生命周期。
參數
描述
啟動執行
為容器設置預啟動命令和參數。
啟動后處理
為容器設置啟動后的命令。
停止前處理
為容器設置預結束命令。
(可選)數據卷
支持增加本地存儲和云存儲聲明(PVC)。本例中配置了一個云存儲類型的數據卷聲明disk-ssd,將其掛載到容器的/tmp路徑下。
參數
描述
增加本地存儲
本地存儲:支持主機目錄(HostPath)、配置項(ConfigMap)、保密字典(Secret)和臨時目錄,將對應的掛載源掛載到容器路徑中。更多信息,請參見volumes。
增加云存儲聲明(PersistentVolumeClaim)
支持通過PVC掛載云存儲卷。在選擇目標掛載源前,您需要創建云存儲聲明。具體操作,請參見創建持久化存儲卷聲明。
(可選)日志配置
配置日志服務,您可進行采集配置和自定義Tag設置。
重要請確保已部署Kubernetes集群,并且在此集群上已安裝日志插件。
配置項
描述
采集配置
日志庫:即在日志服務中生成一個對應的Logstore,用于存儲采集到的日志。
容器內日志路徑:支持Stdout和文本日志。
Stdout:表示采集容器的標準輸出日志。
文本日志:表示收集容器內指定路徑的日志,本例中表示收集/var/log/nginx下所有的文本日志,也支持通配符的方式。
自定義Tag
您還可以設置自定義Tag,設置Tag后,會將該Tag一起采集到容器的日志輸出中。自定義Tag可幫助您給容器日志打上Tag,方便進行日志統計和過濾等分析操作。
完成容器配置后,單擊下一步。
(可選)步驟四:高級配置
在高級配置頁簽,設置高級配置參數,完成后單擊創建。
訪問設置
針對應用的通信需求,您可靈活進行訪問設置:
內部應用:對于只在集群內部工作的應用,您可以在創建服務時,根據需要選擇虛擬集群IP或節點端口類型的服務,來進行內部通信。
外部應用:對于需要暴露到公網的應用,您可以采用兩種方式進行訪問設置。
創建負載均衡類型的服務:您可以在創建服務時,選擇負載均衡類型的服務。通過阿里云提供的負載均衡服務SLB(Server Load Balancer),使得該服務提供公網訪問能力。
創建路由(Ingress):通過創建路由(Ingress)提供公網訪問能力。更多信息,請參見Ingress。
您可以設置暴露后端Pod的方式。本例中選擇ClusterIP服務和路由(Ingress),構建一個公網可訪問的Nginx應用。
配置項 | 描述 |
服務(Service) | 在服務(Service)右側,單擊創建設置創建服務配置項。配置項的詳情,請參見Service快速入門。本例中服務類型選擇ClusterIP。 |
路由(Ingress) | 在路由(Ingress)右側,單擊創建。在彈出的對話框中,為后端Pod配置路由規則。詳細的路由配置信息,請參見路由配置說明。 說明 通過鏡像創建應用時,您僅能為一個服務創建路由(Ingress)。本例中使用一個虛擬主機名稱作為測試域名,您需要在hosts中添加一條記錄。在實際工作場景中,請使用備案域名。
|
在訪問設置區域中,您可看到創建完畢的服務和路由,您可單擊變更和刪除進行二次配置。
伸縮配置
在伸縮配置區域,配置是否開啟指標伸縮和定時伸縮,從而滿足應用在不同負載下的需求。
若要啟用自動伸縮,您必須為容器設置所需資源,否則容器自動伸縮無法生效。
容器服務支持容器組的指標伸縮,即根據容器CPU和內存資源占用情況自動調整容器組數量。
參數 | 描述 |
指標 | 支持CPU和內存,需要和設置的所需資源類型相同。 |
觸發條件 | 資源使用率的百分比,超過該使用量,容器開始擴容。 |
最大副本數 | 該負載類型可擴容的容器數量上限。 |
最小副本數 | 該負載類型可縮容的容器數量下限。 |
調度設置
您可設置升級方式、節點親和性、應用親和性、應用反親和性和調度容忍,詳情請參見Affinity and anti-affinity。
親和性調度依賴節點標簽和Pod標簽。您可使用內置的標簽進行調度,也可預先為節點、Pod配置相關的標簽。
配置項 | 描述 |
升級方式 | 選擇升級方式。包括滾動升級(rollingupdate)和替換升級(recreate),關于升級方式的更多信息,請參見Deployments。 |
節點親和性 | 設置節點親和性,通過Worker節點的Label標簽進行設置。 節點調度支持硬約束和軟約束(Required/Preferred),以及豐富的匹配表達式(In, NotIn, Exists, DoesNotExist. Gt, and Lt):
|
應用親和性 | 決定應用的Pod可以和哪些Pod部署在同一拓撲域。例如,對于相互通信的服務,可通過應用親和性調度,將其部署到同一拓撲域(如同一個主機)中,減少它們之間的網絡延遲。 根據節點上運行的Pod的標簽(Label)來進行調度,支持硬約束和軟約束,匹配的表達式有:
|
應用反親和性 | 決定應用的Pod不與哪些Pod部署在同一拓撲域。應用非親和性調度的場景包括:
說明 應用非親和性調度的設置方式與親和性調度相同,但是相同的調度規則代表的意思不同,請根據使用場景進行選擇。 |
調度容忍 | 容忍被應用于Pod,允許這個Pod被調度到相應的污點上。關于如何配置污點(鍵對值及效果Effect)與容忍,請參見Kubernetes官方文檔污點與容忍。 |
調度到虛擬節點 | 設置是否調度到虛擬節點,僅ACK集群Pro版支持,如果您的集群中沒有虛擬節點,則無法設置該配置項。關于如何將Pod調度至虛擬節點,請參見指定ECS和ECI的資源分配。 |
標簽和注釋
參數 | 描述 |
Pod標簽 | 為該Pod添加一個標簽,標識該應用。 |
Pod注解 | 為該Pod添加一個注解(Annotation)。 |
查看結果
創建成功后,默認進入創建完成頁面,會列出應用包含的對象。您可以單擊查看應用詳情查看nginx-deployment的詳情。
執行結果
在集群管理頁左側導航欄中,選擇網絡>路由。
可以看到路由列表下出現一條規則。
在瀏覽器中訪問路由測試域名,您可訪問Nginx歡迎頁。