您仅需将代码或镜像上传到SAE,即可部署应用服务。SAE会代您管理底层的计算资源,通过简单配置即可实现根据访问量自动扩缩容、跨可用区部署。
方案概览
您将部署一组微服务应用,实现服务的注册与发现、服务之间的方法调用,并且通过公网来访问应用。示例应用的架构如下:
尽管本文以Java微服务应用为例,但SAE对应用的技术栈语言和架构没有限制,能够适配多种业务场景,例如静态网站、前后端分离的网站、单体应用、微服务应用。
为实现本方案,您将:
部署应用:使用示例镜像部署provider应用与consumer应用。通过SAE内置的Nacos实现服务注册与发现,使得consumer应用可以调用provider应用提供的服务。
通过公网访问应用: 为consumer应用配置公网访问地址并访问应用。
准备工作
操作指引
SAE支持控制台、saectl工具(兼容kubectl)等多种操作方式,从中选择您熟悉的方式来完成本教程。
控制台
1. 部署应用
部署provider应用:登录SAE控制台,在左侧选择 ,在顶部选择应用部署的地域(本文以杭州为例),点击创建应用。配置以下参数,其余保持默认。点击一键创建应用(跳过高级设置)。
如果导航栏中没有
,请选择 。如果提示选择应用版本,请选择标准版。轻量版和专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。
自定义应用名称,例如
provider
。设置命名空间类型为
系统创建
,表示应用将会创建于当前地域的默认命名空间,且自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。设置应用部署方式为
选择镜像部署
。点击设置镜像,在Demo镜像标签页,找到微服务应用-提供者,选择镜像版本为microservice-java-provider-v1.0
,点击确定。在容量设置区域,自定义单实例规格和实例数,这决定了应用初始运行的实例数量、系统为每个实例分配多少计算资源。
部署consumer应用:重复上述步骤并调整以下参数来部署Consumer应用。
自定义应用名称,例如
consumer
。设置镜像时,找到微服务应用-消费者,选择镜像版本为
microservice-java-consumer-v1.0
。
查看应用部署结果:请耐心等待应用创建完成,大约需要1分钟。
您可以在应用列表中查看已创建的应用,点击其中某个应用可以进入其详情页面。
在左侧导航栏选择基础信息,在实例列表页签中,可以查看已创建的应用实例。
2. 通过公网访问应用
为了实现从公网访问consumer应用,一种简便的方式是为该应用绑定公网CLB实例。
为consumer应用绑定公网CLB实例:进入consumer应用的详情页面。在应用信息页签中,在应用访问设置区域选择基于CLB访问。点击添加公网CLB访问,配置如下参数,然后点击确定。
在CLB实例中,选择新建CLB实例。
在HTTP协议页签中,设置HTTP端口为
80
,容器端口为18082
。
验证结果:SAE将为您代购一个CLB实例并绑定到当前应用。等待创建完成,控制台将显示应用的公网访问地址。
通过浏览器访问
http://<公网访问地址>/consumer-echo/hello
(其中<公网访问地址>
需要替换为实际值),验证能够通过公网来访问应用。在
中,您可以查看consumer应用调用provider应用的拓扑视图。
3. 清理资源
在完成本教程后,建议清理相关资源,避免持续产生费用。
删除应用:进入provider应用和consumer应用的详情页面,点击
,并按照指引操作来删除上述应用。SAE代购的CLB实例将随应用删除而自动释放。
(可选)删除网络资源:在部署应用的过程中,系统自动创建了VPC、交换机、安全组。
查看VPC:在左侧导航栏选择
,点击默认,在基础信息页面查看VPC,点击链接跳转到VPC详情页。查看交换机、安全组:在VPC的资源管理标签页点击链接跳转到相应资源的详情页。
在各资源的详情页执行删除操作。
saectl工具
1. 安装与配置saectl工具
2. 部署应用
创建资源配置文件:在同一路径中创建以下文件。注意:将配置文件中的
image: ...cn-hangzhou...
替换为您的应用部署地域。deployment-provider.yaml
用于配置provider应用:apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # 选择应用版本,std表示标准版。轻量版和专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。 name: provider # 应用名称可自定义 namespace: default # 选择系统创建的默认命名空间,自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。 spec: replicas: 2 # 应用实例的数量 selector: matchLabels: sae.aliyun.com/app-name: provider # 必须与metadata中定义的应用名称保持一致 template: metadata: labels: sae.aliyun.com/app-name: provider # 必须与metadata中定义的应用名称保持一致 spec: containers: - name: main # 建议将containers的名称固定设置为main,避免冲突。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0 # 使用provider应用的示例镜像,其中,cn-hangzhou需要替换为您部署应用的地域。 resources: # 单个应用实例的规格。limits和requests需要保持相同的配置。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gi
deployment-consumer.yaml
用于配置consumer应用:apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # 选择应用版本,std表示标准版。轻量版和专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。 name: consumer # 应用名称可自定义 namespace: default # 选择系统创建的默认命名空间,自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。 spec: replicas: 2 # 应用实例的数量 selector: matchLabels: sae.aliyun.com/app-name: consumer # 必须与metadata中定义的应用名称保持一致 template: metadata: labels: sae.aliyun.com/app-name: consumer # 必须与metadata中定义的应用名称保持一致 spec: containers: - name: main # 建议将containers的名称固定设置为main,避免冲突。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-consumer-v1.0 # 使用consumer应用的示例镜像,其中,cn-hangzhou需要替换为您部署应用的地域。 resources: # 单个应用实例的规格。limits和requests需要保持相同的配置。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gi
执行部署:在上述配置文件所在路径执行
saectl apply -f deployment-provider.yaml -f deployment-consumer.yaml
。验证结果:
查看应用:执行
saectl get deployments -n default
。其中,-n default
表示查询默认命名空间。返回结果中:STATE
字段显示RUNNING
表示应用正常运行;如果显示PUBLISHING
表示应用正在部署,请等待部署完成后再查看。READY
字段显示n/m
代表已就绪的实例数/期望部署的实例数
。
查看应用实例:执行
saectl get pods -n default
。返回结果中:STATUS
字段显示RUNNING
表示实例中的容器正常运行;如果显示ContainerCreating
表示容器正在创建,请等待创建完成后再查看。READY
字段显示n/m
代表已就绪的容器数/总容器数
。
3. 通过公网访问应用
为了实现从公网访问consumer应用,一种简便的方式是为该应用绑定公网CLB实例。
创建资源配置文件:创建
svc.yaml
用于配置Service,即通过为consumer应用绑定公网CLB对外提供服务:apiVersion: v1 kind: Service metadata: annotations: sae.aliyun.com/loadbalancer-address-type: internet # 公网或私网类型, internet表示公网类型,intranet表示私网类型。 name: internet-consumer # 固定格式 ${公网或私网类型}-${应用名} spec: ports: - name: port-80 # 固定格式 port-${对外端口} port: 80 protocol: HTTP targetPort: 18082 # consumer应用的容器端口 selector: sae.aliyun.com/app-name: consumer # 应用名称 type: LoadBalancer
执行部署:在上述配置文件所在路径执行
saectl apply -f svc.yaml
。验证结果:
查看服务:执行
saectl get services -n default
。返回结果中:EXTERNAL-IP
字段显示访问应用的公网IP;如果显示<pending>
表示服务正在创建,请等待创建完成后再查看。PORT(S)
字段显示您配置的应用访问端口。
从公网访问应用:执行
curl http://<公网访问地址>:<访问端口>/consumer-echo/hello
(其中<公网访问地址>
、<访问端口>
需要替换为实际值)。从返回结果中,能够看到consumer应用通过调用provider应用来处理请求的过程。
4. 清理资源
在完成本教程后,建议清理相关资源,避免持续产生费用。
删除应用:执行saectl delete -f deployment-provider.yaml -f deployment-consumer.yaml
。
SAE代购的CLB实例将随应用删除而自动释放。
后续步骤
您已通过Demo镜像体验了部署应用的流程。SAE为您提供以下方式来部署实际的应用:
使用镜像部署应用(推荐):您可以将任何应用制作成镜像,然后将其推送到镜像仓库,最后将其部署到SAE。
使用代码包部署应用:SAE提供Java、PHP、Python、.NET Core特定版本的运行环境,如果与您的代码兼容,则可以使用代码包部署应用。您需要先制作符合SAE要求的代码包,然后将其部署到SAE。
本示例通过SAE内置Nacos实现了服务注册与发现,使得consumer应用能够访问provider应用并调用其方法。SAE还提供以下方式来实现应用间的互访,您可以根据实际情况灵活选取:
使用MSE的Nacos注册中心(推荐):如果您不希望自建服务注册中心,且追求注册中心的性能、扩展性、高可用性等方面,建议使用MSE的Nacos注册中心。
使用自建服务注册中心:如果您当前已部署了自建的服务注册中心(例如Nacos、Zookeeper等),且已能够满足使用需求,在您部署应用到SAE后,可以继续使用自建的服务注册中心。前提是确保应用和注册中心之间的网络联通性,并且需要手动在程序中配置注册中心的地址。
基于K8s ServiceName配置应用服务访问:在SAE集群内,为应用配置一个可以供其他应用访问的固定域名。
本示例通过为应用绑定CLB实例实现了从外部访问应用。您也可以通过为应用绑定NLB实例或配置网关路由来实现从外部访问应用。如果需要应用主动访问外部的资源和服务,则需要配置NAT网关或者为应用实例绑定EIP。
本示例使用系统创建的默认命名空间来部署应用。您也可以通过自定义命名空间来实现不同应用之间、开发/测试/生产环境之间的隔离。每个命名空间需要绑定一个VPC。部署应用时,需要为应用实例绑定该VPC中的交换机,选择不同可用区的交换机即可实现应用的跨可用区部署。
创建应用后,可以手动调整实例数量与实例规格,或通过配置弹性伸缩策略实现根据访问量、资源使用情况自动调整实例数量。还可以通过开启闲置模式来降低成本。