概述
制品微服务是创建微服务应用中重要的一种接入类型。目前微服务云应用平台支持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”。
按需填写完以上内容后,点击下一步,进入到预览界面,确认信息无误后,点击创建。
创建成功后,点击查看实例详情按钮,来到实例详情界面,至此制品微服务已经创建完成。如何部署可查看微服务应用部署章节。