概述
源码微服务作为源码、制品和镜像这三种微服务接入方式中最为常见的一种类型,是创建微服务应用中最重要的一种。目前MSAP支持Java 语言Spring Cloud和Dubbo框架的微服务,创建微服务应用,可以使用微服务引擎MSE微服务服务治理相关能力以及应用性能监控APM的相关能力。在本章中,我们将会详细阐述创建源码微服务的完整步骤,也为后面创建制品微服务和镜像微服务做好铺垫。
填写应用基本信息
源码微服务应用基本信息包括:
-
应用名称。
-
应用来源。选择源码仓库。
-
代码源。目前,MSAP支持Gitee和Github这两种代码源。
-
代码仓库地址。
-
服务连接。此处的服务连接主要是为了编译阶段拉取代码。
-
应用描述。
填写应用配置信息
源码微服务应用配置信息包括:
-
部署环境。
-
集群类型。目前,MSAP只支持Kubernetes集群。
-
工作负载类型。目前仅支持无状态应用(Deployment)和有状态应用(StatefulSet)。
-
部署来源。源码类微服务部署来源在新建应用时,只有源码。
-
分支/Tag名称。编译时需要使用的分支/Tag。
-
编译环境。
-
程序包名称。编译成功时输出的程序包名称。
-
程序包路径。此处为相对路径,相对于编译时拉取下的代码仓库的路径,通常对于Java微服务,为“/target”。
-
运行环境。程序包的运行环境,实际上为镜像构建阶段使用的基础镜像。
-
部署版本。微服务每次部署都需要使用一个唯一的部署版本号。
-
Pod数量。
-
单Pod资源配额。这里的资源指CPU和内存资源。
填写应用高级配置
微服务应用高级配置包括:
- 微服务治理。设置服务注册与发现配置、无损上线等服务治理能力。
- 调度规则。设置应用实例的调度规则,如亲和性/反亲和性。
- 启动命令。设置容器启动和运行时需要的命令。
- 环境变量。设置容器运行环境中的一些变量,便于部署后灵活变更容器配置。
- 持久化存储。设置持久化存储数据、日志等,通过持久化存储可以支持应用使用文件存储NAS和对象存储OSS以及本地盘等。
- 本地存储。设置本地存储数据、日志等。
- 应用生命周期管理。设置应用健康检查。
- 日志收集管理。设置日志收集规则,能将业务日志输出到云日志服务,便于统一管理和分析。
- 配置管理。通过挂载文件的方式,向容器中注入配置信息。
- 标签配置。为应用设置Pod标签,便于部署后基于Pod标签对应用进行分组管理。
- DNS配置。为应用设置Pod的DNS策略及配置。
- Tomcat配置。设置Tomcat的端口、应用访问路径以及最大线程等参数信息。
- Java启动参数配置。设置GC策略和JVM内存配置等参数信息。
- 限流降级配置。设置应用是否启用限流降级功能。
- 注解(Annotation)配置。为应用设置Pod注解,为应用额外添加资源描述信息。
- Sidecar & InitContainer配置。为应用设置Sidecar容器和InitContainer。
下面对高级配置进行更加详细的说明。
应用高级配置——微服务治理
在MSAP中部署的SpringCloud和Dubbo应用能够无侵入对接云原生Stack中微服务治理中心MSC的能力。MSAP支持您在创建和部署应用时为应用配置注册中心实例和无损上线。
注册中心是在Java微服务架构中用于实现服务的注册与发现,能够屏蔽、解耦服务之间的相互依赖,以便对微服务进行动态管理的。目前MSAP只支持从云原生Stack中订购的注册配置中心NACOS产品实例。
无损上线是微服务治理中心产品提供的一种能力。针对应用启动的多个阶段提供了相应的保护能力,具体功能包含服务预热、服务延迟注册以及无损滚动发布等。
无损上线参数名称 | 无损上线参数含义 |
---|---|
预热时长 | 应用实例下一次启动的预热时间。 |
预热曲线 | 基于已配置的预热时长,被预热的应用流量权重会根据配置的预热曲线呈指数型增长。 在指定预热时长内,预热曲线值越大被预热应用刚启动时分配的流量权重越小,以满足需要较长时间进行预热的复杂应用的预热需求。 默认为2(适合于一般预热场景),表示在预热周期内服务提供者的流量接收曲线形状呈2次曲线形状。 预热曲线设置范围为0~20。相同预热时间,预热曲线值越大,表示预热开始将接收的流量越小,临近预热结束时接收的流量增幅越大。 |
延迟注册时间 | 延迟注册到注册中心实例的时长。 |
无损滚动发布 | 通过就绪检查前完成服务注册:为应用无侵入提供54199端口用于检查微服务是否已经完成注册,如果已注册完成,端口返回200,否则返回500。 通过就绪检查前完成服务预热:为应用无侵入提供54199端口用于检查微服务是否已经完成预热,如果已预热完成,端口返回200,否则返回500。 |
应用高级配置——调度规则
在MSAP使用部署微服务应用至k8s集群时,如果希望根据自己的需求自定义应用实例的调度规则,比如,将Pod尽可能部署在多个节点或者将Pod固定在某个节点等。调度规则通常建议只使用内置配置模式,如果要使用自定义模式,需要精通K8s相关技术原理。
调度规则分为两种模式,即内置配置模式和自定义配置模式。
选择内置配置模式
内置配置模式参数名称 | 内置配置模式参数含义 |
---|---|
节点调度 | 内置配置模式下的节点调度有2种选项: (1)默认调度:实例按照节点资源负载情况调度。 (2)尽量多节点部署:实例尽量分散到不同节点上部署,以实现应用高可用部署。 |
选择自定义配置模式
通常只需要使用内置配置模式即可,如果有更加复杂或者自定义的需求,可以使用自定义配置模式。自定义配置模式主要包含4部分,即:节点亲和性、应用亲和性、应用反亲和性和调度容忍。
添加节点亲和性调度规则
节点亲和性参数名称 | 节点亲和性参数含义 |
---|---|
选择器 | 需要在每个选择器下配置节点标签名、操作符号和节点标签值。 |
权重 | 在尽量满足的节点亲和性规则中才需要配置,权重范围为1-100,默认为1。 |
添加应用亲和性调度规则
应用亲和性参数名称 | 应用亲和性参数含义 |
---|---|
K8s命名空间 | 应用所在的K8s命名空间。 |
拓扑域 | K8s中一种表示“空间位置”关系的概念,目前MSAP只支持节点。 |
选择器 | 需要在每个选择器下配置应用标签名、操作符号和应用标签值。 |
权重 | 在尽量满足的应用亲和性规则中才需要配置,权重范围为1-100,默认为1。 |
添加应用反亲和性调度规则
应用反亲和性参数名称 | 应用反亲和性参数含义 |
---|---|
K8s命名空间 | 应用所在的K8s命名空间。 |
拓扑域 | K8s中一种表示“空间位置”关系的概念,目前MSAP只支持节点。 |
选择器 | 需要在每个选择器下配置应用标签名、操作符号和应用标签值。 |
权重 | 在尽量满足的应用反亲和性规则中才需要配置,权重范围为1-100,默认为1。 |
添加调度容忍规则
调度容忍是应用根据配置的 标签名 、标签值和操作符号以及效果这四部分去匹配合适的污点。
调度容忍参数名称 | 调度容忍参数含义 |
---|---|
标签名 | 标签的名称。 |
操作符号 | 有Equal和Exists共2种操作符号。 |
标签值 | 标签对应的值。 |
效果 | 匹配到节点对应污点后,应用运行的效果。有NoSchedule、NoExecute和PreferNoSchdule共3种效果可选择。 |
容忍时间(秒) | 当效果取值为NoExecute时,才能配置容忍时间,需要注意的是容忍时间的单位是秒。 当配置的规则匹配到节点对应污点时,容忍时间表示应用在节点上可以继续运行的时间。 |
应用高级配置——启动命令
在MSAP使用部署微服务应用至K8s集群时,如果希望在启动前进行特殊配置或不采用MSAP中预设的启动参数,可设置容器启动和运行时需要的命令。启动命令通常不建议使用,除非精通docker和K8s技术原理和细节。
启动命令参数名称 | 启动命令参数含义 |
---|---|
启动命令 | 启动命令,例如:nginx。 |
启动参数 | 启动参数,每个参数都需要单独一行。 例如:对于nginx -g daemon off,在文本框中输入-g,然后在新的参数行中增加参数daemon off。 |
应用高级配置——环境变量
应用运行需要配置特定的环境变量,都可以在创建或者部署应用时自定义环境变量。一个环境变量包含类型、变量名和变量值/变量引用(当类型为配置项或保密字典时,需要填写对应的变量应用数据)。
应用高级配置——持久化存储
MSAP的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是否准备好对外提供服务。MSAP通过云原生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日志输出到云日志服务,方便无限制行数地查看日志和自聚合分析日志。目前,云日志服务支持的采集日志类型为标准输出、文件日志,文件日志的采集路径支持配置为具体文件、文件夹。配置为具体文件时,系统只会采集该文件的日志;配置为文件夹时,系统会采集该文件夹下所有文件的日志。日志单元支持填写为空(系统自动创建名称为“msap_{应用名称}”的日志单元)、自定义新的日志单元、选择已有的日志单元。
需要注意的是,正常使用日志收集管理功能需要两个前提:
第一,需要开通云日志服务;
第二,需要在开通的云容器引擎实例中成功安装日志插件。
应用高级配置——配置管理
将创建好的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” 。
当填写完应用配置和应用高级配置后,点击“创建应用”,进入应用创建完成页面,确定应用创建信息无误,再点击“提交”,开始创建源码微服务应用。
随后页面跳转来到已发布应用菜单下的变更记录页面,等待源码微服务应用部署。
在应用管理的应用列表页面可以看到上面创建的微服务应用。
在已发布应用菜单可以看到上面创建的微服务应用。