创建有状态StatefulSet应用

本文介绍如何在EDAS控制台创建有状态StatefultSet类型的应用。

前提条件

背景信息

StatefulSet包括以下特性:

场景

说明

Pod一致性

包含次序(启动、停止次序)、网络一致性。此一致性与Pod相关,与被调度到哪个Node节点无关。

稳定的持久化存储

通过VolumeClaimTemplate为每个Pod创建一个PV。删除、减少副本,不会删除相关的卷。

稳定的网络标志

Pod的hostname模式为:(StatefulSet名称)-(序号)

稳定的次序

对于N个副本的StatefulSet,每个Pod都在 [0,N)的范围内分配一个数字序号,且是唯一的。

步骤一:创建容器服务Kubernetes集群

登录容器服务Kubernetes版控制台,创建容器服务Kubernetes集群。具体操作,请参见快速创建Kubernetes托管版集群

如果创建Serverless Kubernetes集群,专有网络请选择自动创建(选择已有网络,创建完毕后请查看集群资源是否包含VPC和交换机资源),服务发现请选择PrivateZone,以便Serverless Kubernetes集群在导入EDAS后可以使用服务网格。具体操作,请参见创建ASK集群

步骤二:在EDAS控制台中导入容器服务K8s集群

在EDAS控制台导入容器服务K8s集群时,会默认安装应用防护(限流降级)组件(ack-ahas-sentinel-pilot)、ARMS监控组件(ack-arms-pilot)以及Prometheus监控组件(ack-arms-prometheus)。

  1. 登录EDAS控制台,在左侧导航栏,选择资源管理 > 容器服务K8s集群

  2. 在顶部菜单栏选择地域,然后单击同步容器服务Kubernetes集群

  3. 在导入的容器服务K8s集群的操作列,单击导入

  4. 导入预检对话框,单击继续导入

  5. 导入Kubernetes集群对话框,从下拉列表中选择目标微服务空间,根据需要选择是否开启服务网格,然后单击导入

    当容器服务K8s集群状态显示为运行中,并且导入状态显示为导入成功时,表示容器服务K8s集群已成功导入到EDAS。

步骤三:在容器服务K8s集群中部署应用

  1. 登录EDAS控制台,在左侧导航栏单击应用管理 > 应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,然后在应用列表页面左上角单击创建应用

  2. 应用基本信息页面中设置应用的集群类型和应用运行环境,然后单击下一步

    配置项

    描述

    集群类型

    选择Kubernetes集群

    工作负载类型

    选择有状态(StatefulSet)

    应用运行环境

    托管应用类型

    本文介绍如何部署Java应用,所以选择Java。 如果需要部署PHP或多语言应用,请参见从源码构建PHP应用并部署至容器服务K8s集群

    选择应用

    本文介绍如何通过JAR包或WAR包部署Java应用,所以请根据应用类型和部署包,选择JavaTomcatEDAS-Container(HSF)。如果需要通过镜像部署应用,请参见在K8s集群中使用镜像部署Java微服务应用

    • Java:支持通用的JAR包部署,适用于Dubbo和Spring Boot应用。选择后,可设置Java环境

    • Tomcat:支持通用的WAR包部署,适用于Dubbo和Spring应用。选择后,可设置Java环境容器版本

    • EDAS-Container(HSF):适用于使用WAR或者FatJar部署HSF应用。选择后,可设置Java环境Pandora版本Ali-Tomcat版本

    说明

    OpenJDK 17支持2.7.14和3.0.6及以上版本的Dubbo。兼容性测试结果,请参见 OpenJDK 17兼容测试数据

  3. 应用配置页签中设置应用的环境信息、基本信息、部署方式和资源参数,设置完成后单击下一步

    配置项

    描述

    微服务空间

    应用所属空间。选择您创建的微服务空间,如果您未创建微服务空间或不做选择,微服务空间则设置为默认

    如果您没有创建微服务空间,或者需要创建新的微服务空间,您可以直接单击创建微服务空间,创建一个全新的微服务空间。具体操作,请参见使用控制台管理微服务空间

    集群

    在右侧下拉列表内选择已导入的容器服务K8s集群。

    如果您选择的K8s集群未导入到EDAS,请选中该集群在EDAS初次使用,勾选后,将会在应用创建时将该集群导入EDAS,因此会产生一定耗时。并确认是否开启服务网格。

    说明

    集群导入的微服务空间可以不是应用所属微服务空间。

    K8s Namespace

    K8s Namespace通过将系统内部的对象分配到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。

    • default:没有其他命名空间的对象的默认命名空间。

    • kube-system:系统创建的对象的命名空间。

    • kube-public:此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取。

    此处以选择default为例。

    如果您需要自定义创建K8s Namespace,请单击创建K8s Namespace并设置K8s Namespace名称。名称设置要求只能包含数字、小写字母和短划线(-),且首尾只能是字母或数字,长度为1~63个字符。

    应用名称

    输入应用名称,必须以字母开头,允许数字、字母、短划线(-)组合。最多可输入36个字符。

    应用描述

    输入应用描述 ,最大长度为128个字符。

    部署包来源

    自定义程序

    需选择文件上传方式

    • 上传JAR包:选择下载好的JAR包并上传。

    • JAR包地址:输入Demo包地址。

    官方Demo

    EDAS提供的Demo类型有Spring Cloud服务端应用Spring Cloud客户端应用Dubbo服务端应用Dubbo客户端应用,请依据实际需求选择。

    构建仓库类型

    说明
    • 构建仓库类型功能仅支持容器服务K8s集群下的Java、 Tomcat、EDAS-container(HSF)三种应用类型。暂不支持ASK集群。

    • 需要安装镜像免密拉取组件,具体操作,请参见使用免密组件拉取容器镜像

    • 使用您自己的阿里云镜像仓库企业版时,需要自行配置专有网络访问控制。具体操作,请参见配置专有网络的访问控制

    • 应用镜像构建过程是在您的集群内进行,并且会使用您的资源进行构建过程。单个构建任务的默认资源限制是1核1 GB。如何调整镜像构建资源限制,具体操作,请参见如何调整镜像构建资源限制?

    使用ACR个人版ACR企业版储存构建后的镜像时,构建任务会运行在集群中。构建任务拥有以下调度亲和性以及调度容忍策略。

    • 拒绝调度到有edas.image.build=disable标签的节点。

    • 偏向调度到有edas.image.build=enable标签的节点,但如果节点没有edas.image.build标签,构建任务也可能被调度到。

    • 容忍污点:key=edas.image.build, effect=NoSchedule

    说明
    • 对于不想要被构建任务调度到的节点,可以添加edas.image.build=disable标签。

    • 对于构建任务专用节点,可以添加edas.image.build=enable,以及污点key=edas.image.build, effect=NoSchedule标签,防止其他Pod被调度到该节点。

    ACR所属地域

    选择您的容器镜像所在的地域。该参数仅在构建仓库类型选择ACR企业版时需要配置。

    容器镜像服务

    选择您的容器镜像服务。该参数仅在构建仓库类型选择ACR企业版时需要配置。

    镜像仓库命名空间

    在下拉列表中选择您的镜像仓库所在的微服务空间,也可以单击单侧的+创建命名空间创建新的微服务空间。

    版本

    请输入版本,您可以自定义版本号,也可以单击右侧的用时间戳作为版本号自动生成版本号。

    时区

    设置应用的时区信息。

    OpenJDK基础镜像

    说明

    应用基本信息页面Java环境处,选择自定义OpenJDK时,参数OpenJDK基础镜像才会出现。

    配置镜像

    • 阿里云镜像服务选择当前账号

      选择镜像所属地域容器镜像服务镜像仓库命名空间镜像仓库名和镜像版本。

    • 阿里云镜像服务选择为其他阿里云账号。 如您的镜像存放在公开仓库中,那么您配置完整镜像地址即可。

      重要

      当前仅支持JDK7和JDK8,使用其他版本的JDK可能导致应用监控功能使用异常。EDAS服务端会拉取该镜像构建应用镜像,您需确保该镜像的拉取权限为公开。

    Pod总数

    设置该应用要部署的Pod个数。没有数量限制,上限取决于集群性能。

    单Pod资源配额

    设置单个Pod的CPU、内存和临时存储,如果您需要限额,请填写具体的数字,使用默认值0则代表不限额。没有配额限制,上限取决于集群性能。

  4. (可选)配置应用高级设置。

  5. 完成设置后单击创建应用,然后在应用创建完成页签,单击确定创建应用

  6. 应用变更预检确认对话框,单击开始预检

    1. 应用变更预检确认的下一页,确认预检项和预检结果,单击继续

    2. 可选:如您有更改以上预检项,请单击重新检测

    应用创建可能需要几分钟,创建过程中,可以通过查看变更记录跟踪应用的创建流程。创建完成后,返回应用总览页面,查看实例Pod的运行状态。若运行状态运行中,说明应用发布成功。单击Pod的运行状态可以查看应用实例的工作负载(Deployment)容器组(Pod)和高级配置信息。

后续步骤

应用创建完毕后,可以通过添加公网SLB实现公网访问,添加私网SLB实现同VPC内所有节点能够通过私网负载均衡访问您的应用。相关操作,请参见添加负载均衡CLB复用负载均衡CLB

OpenJDK 17兼容测试数据

Dubbo版本

Spring Boot版本

Nacos-Client版本

接口调用

ARMS监控

服务列表

2.7.14

2.7.9

1.4.4

正常

正常

正常

2.7.14

2.7.9

2.1.2

正常

正常

正常

2.7.14

2.7.9

2.2.0

正常

正常

正常

2.7.22

2.7.9

1.4.4

正常

正常

正常

2.7.22

2.7.9

2.1.2

正常

正常

正常

2.7.22

2.7.9

2.2.0

正常

正常

正常

3.0.6

2.7.9

1.4.4

正常

正常

正常

3.0.6

2.7.9

2.1.2

正常

正常

正常

3.0.6

2.7.9

2.2.0

正常

正常

正常

3.1.7

2.7.9

1.4.4

正常

正常

正常

3.1.7

2.7.9

2.1.2

正常

正常

正常

3.1.7

2.7.9

2.2.0

正常

正常

正常