概述
制品微服務是創建微服務應用中重要的一種接入類型。目前微服務云應用平臺支持Java 語言Spring Cloud和Dubbo框架的微服務,創建微服務應用,可以使用微服務治理以及應用性能監控的相關能力。在本章中,我們將會詳細闡述創建制品微服務的完整步驟。
前提條件
您已開通微服務云應用平臺
您已開通微服務治理中心
您已開通應用性能監控
您已訂購一個云容器引擎
您已訂購一個nacos注冊中心
創建應用實例
在左側導航欄,選擇容器應用實例 > 應用發布 > 應用實例。在應用實例左上角點擊創建應用實例。
基本信息填寫
項目/應用:選擇應用。
應用實例名稱:無需修改,使用默認名稱即可。
技術棧版本:jar包部署選擇1.0.0-j180-jar,war包部署選擇1.0.0-j180t818-war。
部署單元:選擇應用發布到的部署單元,平臺會根據選擇部署單元對應的可用區信息將pod平均調度到對應的可用區節點。
接入方式:選擇制品。
鏡像目標架構:云容器引擎是ARM架構勾選linux/arm64,云容器引擎是X86架構勾選linux/amd64或不勾。
應用實例版本:無需修改,使用默認版本即可。
企業項目:選擇default。
部署配置填寫
選擇集群:選擇導入到環境中的云容器引擎。
部署包來源:選擇官方demo。
Demo類型:任意選擇一個。
制品版本:輸入制品版本。
目標鏡像倉庫:測試體驗使用可選擇MSAP鏡像倉庫,MSAP鏡像倉庫提供10G存儲免費使用,超過10G需訂購容器鏡像倉庫,選擇自購倉庫。
Pod數量:輸入期望發布的pod個數。
單Pod資源配額:填寫pod cpu 和 內存 預留和限制數值信息。
監控及治理方案:勾選接入服務治理中心,應用發布成功后可在服務治理導航欄設置應用治理規則。勾選接入應用性能監控后,可在應用詳情界面查看應用監控信息。
高級配置——微服務治理
在微服務云應用平臺中部署的SpringCloud和Dubbo應用能夠無侵入對接云原生Stack中微服務治理中心的能力。微服務云應用平臺支持您在創建和部署應用時為應用配置注冊中心實例和無損上線。
注冊中心是在Java微服務架構中用于實現服務的注冊與發現,能夠屏蔽、解耦服務之間的相互依賴,以便對微服務進行動態管理的。目前微服務云應用平臺只支持從云原生Stack中訂購的注冊配置中心nacos產品實例。
無損上線是微服務治理中心產品提供的一種能力。針對應用啟動的多個階段提供了相應的保護能力,具體功能包含服務預熱、服務延遲注冊以及無損滾動發布等。
| 無損上線參數名稱 | 無損上線參數含義 |
|---|---|
| 預熱時長 | 應用實例下一次啟動的預熱時間。 |
| 預熱曲線 | 基于已配置的預熱時長,被預熱的應用流量權重會根據配置的預熱曲線呈指數型增長。 在指定預熱時長內,預熱曲線值越大被預熱應用剛啟動時分配的流量權重越小,以滿足需要較長時間進行預熱的復雜應用的預熱需求。 默認為2(適合于一般預熱場景),表示在預熱周期內服務提供者的流量接收曲線形狀呈2次曲線形狀。 預熱曲線設置范圍為0~20。相同預熱時間,預熱曲線值越大,表示預熱開始將接收的流量越小,臨近預熱結束時接收的流量增幅越大。 |
| 延遲注冊時間 | 延遲注冊到注冊中心實例的時長。 |
| 無損滾動發布 | 通過就緒檢查前完成服務注冊:為應用無侵入提供54199端口用于檢查微服務是否已經完成注冊,如果已注冊完成,端口返回200,否則返回500。 通過就緒檢查前完成服務預熱:為應用無侵入提供54199端口用于檢查微服務是否已經完成預熱,如果已預熱完成,端口返回200,否則返回500。 |
高級配置——調度規則
在微服務云應用平臺使用部署微服務應用至k8s集群時,如果希望根據自己的需求自定義應用實例的調度規則,比如,將Pod盡可能部署在多個節點或者將Pod固定在某個節點等。調度規則通常建議只使用內置配置模式,如果要使用自定義模式,需要精通K8s相關技術原理。
調度規則分為兩種模式,即內置配置模式和自定義配置模式。
選擇內置配置模式
| 內置配置模式參數名稱 | 內置配置模式參數含義 |
|---|---|
| 節點調度 | 內置配置模式下的節點調度有2種選項: (1)默認調度:實例按照節點資源負載情況調度。 (2)盡量多節點部署:實例盡量分散到不同節點上部署,以實現應用高可用部署。 |
選擇自定義配置模式
通常只需要使用內置配置模式即可,如果有更加復雜或者自定義的需求,可以使用自定義配置模式。自定義配置模式主要包含4部分,即:節點親和性、應用親和性、應用反親和性和調度容忍。
添加節點親和性調度規則
| 節點親和性參數名稱 | 節點親和性參數含義 |
|---|---|
| 選擇器 | 需要在每個選擇器下配置節點標簽名、操作符號和節點標簽值。 |
| 權重 | 在盡量滿足的節點親和性規則中才需要配置,權重范圍為1-100,默認為1。 |
添加應用親和性調度規則
| 應用親和性參數名稱 | 應用親和性參數含義 |
|---|---|
| K8s命名空間 | 應用所在的K8s命名空間。 |
| 拓撲域 | K8s中一種表示“空間位置”關系的概念,目前微服務云應用平臺只支持節點。 |
| 選擇器 | 需要在每個選擇器下配置應用標簽名、操作符號和應用標簽值。 |
| 權重 | 在盡量滿足的應用親和性規則中才需要配置,權重范圍為1-100,默認為1。 |
添加應用反親和性調度規則
| 應用反親和性參數名稱 | 應用反親和性參數含義 |
|---|---|
| K8s命名空間 | 應用所在的K8s命名空間。 |
| 拓撲域 | K8s中一種表示“空間位置”關系的概念,目前微服務云應用平臺只支持節點。 |
| 選擇器 | 需要在每個選擇器下配置應用標簽名、操作符號和應用標簽值。 |
| 權重 | 在盡量滿足的應用反親和性規則中才需要配置,權重范圍為1-100,默認為1。 |
添加調度容忍規則
調度容忍是應用根據配置標簽名 、標簽值和操作符號以及效果這四部分去匹配合適的污點。
| 調度容忍參數名稱 | 調度容忍參數含義 |
|---|---|
| 標簽名 | 標簽的名稱。 |
| 操作符號 | 有Equal和Exists共2種操作符號。 |
| 標簽值 | 標簽對應的值。 |
| 效果 | 匹配到節點對應污點后,應用運行的效果。有NoSchedule、NoExecute和PreferNoSchdule共3種效果可選擇。 |
| 容忍時間(秒) | 當效果取值為NoExecute時,才能配置容忍時間,需要注意的是容忍時間的單位是秒。 當配置的規則匹配到節點對應污點時,容忍時間表示應用在節點上可以繼續運行的時間。 |
高級配置——啟動命令
在微服務云應用平臺使用部署微服務應用至K8s集群時,如果希望在啟動前進行特殊配置或不采用微服務云應用平臺中預設的啟動參數,可設置容器啟動和運行時需要的命令。啟動命令通常不建議使用,除非精通docker和K8s技術原理和細節。
| 啟動命令參數名稱 | 啟動命令參數含義 |
|---|---|
| 啟動命令 | 啟動命令,例如:nginx。 |
| 啟動參數 | 啟動參數,每個參數都需要單獨一行。 例如:對于nginx -g daemon off,在文本框中輸入-g,然后在新的參數行中增加參數daemon off。 |
高級配置——環境變量
應用運行需要配置特定的環境變量,都可以在創建或者部署應用時自定義環境變量。一個環境變量包含類型、變量名和變量值/變量引用(當類型為配置項或保密字典時,需要填寫對應的變量應用數據)。
高級配置——持久化存儲
微服務云應用平臺的K8s集群支持PVC掛載功能,實現了應用實例數據持久化存儲和實例間多讀共享數據。
PVC掛載
展開持久化存儲,填寫PVC掛載信息。
| 參數名稱 | 參數含義 |
|---|---|
| 掛載名稱 | 掛載名稱由小寫字母、數字及-組成,且開始和結尾只能是數字和字母。 |
| 選擇PVC | 選擇已經建好的PVC,如需新建,請在云容器引擎控制臺新建即可。 |
| 掛載目錄 | 掛載文件目錄。 |
| 掛載模式 | 掛載模式分為只讀和可讀寫。 |
PVC模板
填寫PVC模板信息
| 參數名稱 | 參數含義 |
|---|---|
| 模板名稱 | PVC模板名稱由小寫字母、數字及-組成,且開始和結尾只能是數字和字母。 |
| 掛載目錄 | 掛載文件目錄。 |
| 存儲類型 | 選擇已有的存儲類型,如需新建請在云容器引擎控制臺創建即可。 |
| 容量 | 容量,單位為Gi,最小為1Gi。 |
| 訪問模式 | 訪問模式可為單節點讀寫掛載、多節點只讀掛載和多節點讀寫掛載。 |
高級配置——本地存儲
使用本地存儲可以把K8s宿主機上的文件或者目錄掛載到Pod中。本地存儲支持K8s宿主機本地文件和emptyDir兩種類型。
K8s宿主機本地文件掛載
K8s宿主機本地文件掛載到Pod中,主要需要選擇和填寫如下參數:
| K8s宿主機本地文件掛載參數名稱 | K8s宿主機本地文件掛載參數含義 |
|---|---|
| 文件類型 | 選擇文件類型。 |
| 宿主機文件路徑 | K8s宿主機文件路徑。 |
| 容器內文件路徑 | 掛載到容器內的文件路徑。 |
K8s宿主機本地文件掛載中支持的文件類型如下表所示,強烈推薦選擇準確的文件類型,不要去選擇默認的方式。
| 文件類型 | 文件類型說明 |
|---|---|
| 默認 | 不執行類型檢查,直接掛載。 |
| 文件目錄 | 文件目錄,不存在則容器啟動失敗。 |
| (新建)文件目錄 | 文件目錄,如果不存在,則會新建。 |
| 文件 | 文件,不存在則容器啟動失敗。 |
| (新建)文件 | 文件,如果不存在,則會新建。 |
| CharDevice | 字符設備文件,不存在則容器啟動失敗。 |
| BlockDevice | 塊儲存設備文件,不存在則容器啟動失敗。 |
| Socket | 標準Unix Socket文件,不存在則容器啟動失敗。 |
emptyDir掛載
emptyDir類型主要用于臨時空間或者不同容器之間的數據共享。
emptyDir類型掛載所需要選擇和填寫的參數如下表:
| emptyDir掛載參數名稱 | emptyDir掛載參數含義 |
|---|---|
| 掛載模式 | 2種模式,即:只讀和可讀寫。 |
| 掛載路徑 | 容器內的掛載路徑。 |
高級配置——應用生命周期管理
微服務應用部署到K8s集群時,需要讀取Pod的存活狀態并確定Pod是否準備好對外提供服務。微服務云應用平臺通過云原生Stack中的云容器引擎集成了配置Pod探針的功能,支持配置Liveness探針來確定何時重啟容器,以及配置Readiness探針來確定容器是否已經就緒可以接受流量。
| Liveness探針參數名稱 | Liveness探針參數含義 |
|---|---|
| InitialDelaySeconds | 容器啟動后到探針第一次執行的延遲時間。 |
| PeriodSeconds | 探測周期。 |
| SuccessThreshold | 探針探測失敗后,只有連續成功次數達到該閾值才被認為再次成功。在Liveness探針中,該值固定為1。 |
| TimeoutSeconds | 探針超時時間。 |
| FailureThreshold | 探針探測成功后,只有連續失敗次數達到該閾值才被認為探測失敗。 |
| 模式 | 有3種模式,即Exec,HttpGet和TcpSocket: 1,Exec:在容器中執行指定的命令,如果命令退出時返回碼為0則認為診斷成功。 2,HttpGet:對容器上的特定端點執行HTTP GET請求,如果響應的狀態碼大于等于200且小于400,則認為探測成功的。 3,TcpSocket:檢查容器的IP地址上的指定的TCP端口是否打開,如果打開則認為探測成功。 |
Readiness探針和Liveness探針的參數是幾乎是完全一樣的,這里不再贅述。唯一的不同在于如果在微服務治理中開啟了無損上線,并且開啟無損滾動發布,那么Readiness探針會多出一種模式:無損滾動發布模式。需要注意的是:此時不要去修改Readiness探針的模式,否則微服務治理中配置的無損滾動發布將失效。
高級配置——日志收集管理
應用部署到k8s集群時,可以開通云日志服務,把業務文件日志、容器標準輸出stdout、stderr日志輸出到云日志服務,方便無限制行數地查看日志和自聚合分析日志。目前,云日志服務支持的采集日志類型為標準輸出、文件日志,文件日志的采集路徑支持配置為具體文件、文件夾。配置為具體文件時,系統只會采集該文件的日志;配置為文件夾時,系統會采集該文件夾下所有文件的日志。添加采集規則需要選擇日志項目和日志單元,若不存在日志項目和日志單元可以點擊選擇框后面的創建按鈕進行創建。
需要注意的是,正常使用日志收集管理功能需要兩個前提:
需要開通云日志服務;
需要在開通的云容器引擎實例中成功安裝日志插件;
高級配置——配置管理
將創建好的K8s配置項或者K8s保密字典以文件的形式掛載到容器的指定目錄,從而向容器中注入配置信息。
| 配置管理參數名稱 | 配置管理參數含義 |
|---|---|
| 配置類型 | 目前支持K8s配置項和K8s保密字典。 |
| 掛載類型 | 支持掛載到文件。 |
| 掛載源 | 需要掛載到應用容器文件系統中的配置項名稱。 |
| 掛載主目錄 | 設置容器的掛載主目錄。路徑必須以正斜線(/)開頭。 |
| 文件掛載方式 | 保留原文件。保留原目錄下的文件,相同文件名將保留本次掛載文件,隱藏原目錄重名文件。 |
| 掛載配置 | 要掛載的key:需要掛載到應用容器文件系統中的配置項指定的Key。 掛載文件路徑:相對掛載主目錄的子路徑。 |
高級配置——標簽配置
給應用配置標簽,主要是為對配置了標簽的應用進行分組管理,可以在K8s主機上執行kubectl命令獲取相應標簽的應用Pod。應用標簽是由標簽名稱和值的鍵值對組成的。
高級配置——DNS配置
根據自己的業務需求為Pod配置DNS。
| DNS配置參數名稱 | DNS配置參數含義 |
|---|---|
| DNS策略 | 目前支持通過DNS策略 (dnsPolicy)字段為每個Pod配置不同的DNS策略。 ClusterFirst :通過CoreDNS來做域名解析,Pod內/etc/resolv.conf配置的DNS服務地址是集群DNS服務的kube-dns地址。該策略是集群工作負載的默認策略。 ClusterFirstWithHostNet :強制在hostNetWork網絡模式下使用ClusterFirst策略(默認使用Default策略)。 Default :Pod直接繼承集群節點的域名解析配置。即在集群直接使用ECS的/etc/resolv.conf文件。 None :忽略集群DNS策略,需要您提供DNS配置(dnsConfig)字段來指定DNS配置信息,暫不支持此能力。 |
| 域名別名 | 通過hostAliases允許為Pod中的hosts文件增加本地域名解析條目。 IP地址 :主機列表被解析到的目標IP地址。 主機名 :將指定的主機解析到IP地址,多個主機名通過半角逗號(,)拼接。 |
高級配置——Tomcat配置
以WAR包或JAR包方式創建或部署應用時,您可以配置應用端口、應用訪問路徑以及最大線程數等Tomcat參數信息。
| Tomcat配置參數名稱 | Tomcat配置參數含義 |
|---|---|
| 應用端口 | 端口范圍為1024~65535,小于1024的端口需要Root權限才能操作。 因為容器配置的是Admin權限,所以請填寫大于1024的端口。如果不配置,則默認為8080。 |
| Tomcat Context | 選擇應用的訪問路徑。 程序包名字 :無需填寫自定義路徑,應用的訪問路徑是JAR包或WAR包名稱。 根目錄 :無需填寫自定義路徑,應用的訪問路徑是/。 自定義 :需要在下面的自定義路徑中填寫自定義的路徑。 |
| 最大線程數 | 配置連接池的連接數大小,對應參數為maxThreads,默認大小是400。 |
| Tomcat編碼 | Tomcat的編碼格式,包括UTF-8、ISO-8859-1、GBK和GB2312。如果不設置則默認為ISO-8859-1。 |
高級配置——Java啟動參數配置
Java類型應用可以通過Java啟動參數對JVM進行內存、GC(垃圾回收)策略以及服務注冊與發現等配置。正確配置Java啟動參數有助于降低GC(垃圾回收)開銷,從而縮短服務器響應時間并提高吞吐量。
| Java啟動參數配置參數名稱 | Java啟動參數配置參數含義 |
|---|---|
| 內存配置 | 您可完成以下參數的配置: 初始堆內存 :初始化的堆大小,單位為MB,0表示不限制使用大小。 最大堆內存 :最大堆內存,單位為MB,可用范圍為0~0.85*應用容器的Limit內存。 初始年輕代 :初始化年輕代大小,單位為MB。 最大年輕代 :最大的年輕代的大小,單位為MB,填寫max_uintx意味著無上限的使用內存。 Eden/Survivor比例 :Eden/Survivor內存大小的比例。 老年代/新生代比例 :老年代/新生代內存大小的比例。 初始持久代 :永久代的初始化大小,單位為MB。 最大持久代:永久代的最大大小,單位為MB。 最大直接內存 :允許使用NIO類型的直接內存的最大值大小,單位為MB。 線程棧大小 :線程棧大小,單位為KB。 |
| GC策略 | 您可配置以下垃圾回收策略: 年輕代GC策略 :用于設置年輕代垃圾回收器。 老年代GC策略 :用于設置老年代垃圾回收器,必須先配置年輕代垃圾回收器。 并發GC線程數 :配置并發GC將使用的線程數。 并行GC線程數 :配置并行GC將使用的線程數。 |
| 工具 | 設置GC日志文件的日志目錄 、文件個數和文件大小 ,以及內存溢出時的Dump路徑。 |
| 自定義 | 當上述配置參數不能滿足您的配置需求時,您可以配置自定義參數,多個參數用空格分隔。 |
高級配置——限流降級配置
部署在K8s集群中的應用支持接入限流降級,并可在限流降級頁面中實時監控流量,全面可視化地保障您的應用可用性。
高級配置——注解(Annotation)本地存儲
注解可以將元數據附加到應用Pod上用于存儲額外的信息,以便工具和庫能夠獲取到有關對象的信息,同時不會影響Pod的運行。
高級配置——Sidecar & InitContainer 配置
為應用配置Sidecar容器可以幫助您運行輔助服務,例如日志收集、配置更新、網絡代理。此外,您還可以配置Init Container,幫助您執行一些應用容器啟動前的準備工作,例如設置配置文件、下載應用依賴、等待其他服務就緒或遷移數據庫。
注意
單個輸入框只能配置一個容器。如需配置多個容器,請單擊“+添加Sidecar Containers”。
按需填寫完以上內容后,點擊下一步,進入到預覽界面,確認信息無誤后,點擊創建。
創建成功后,點擊查看實例詳情按鈕,來到實例詳情界面,至此制品微服務已經創建完成。如何部署可查看微服務應用部署章節。