部署第一个Serverless应用

您仅需将代码或镜像上传到SAE,即可部署应用服务。SAE会代您管理底层的计算资源,通过简单配置即可实现根据访问量自动扩缩容、跨可用区部署。

方案概览

您将部署一组微服务应用,实现服务的注册与发现、服务之间的方法调用,并且通过公网来访问应用。示例应用的架构如下:

image
尽管本文以Java微服务应用为例,SAE对应用的技术栈语言和架构没有限制,能够适配多种业务场景,例如静态网站前后端分离的网站单体应用微服务应用

为实现本方案,您将:

  1. 部署应用:使用示例镜像部署provider应用与consumer应用。通过SAE内置的Nacos实现服务注册与发现,使得consumer应用可以调用provider应用提供的服务。

  2. 通过公网访问应用: 为consumer应用配置公网访问地址并访问应用。

准备工作

领取免费试用额度

首次使用SAE,您可以领取免费试用额度

开通SAE服务并授权

建议您使用阿里云账号开通SAE服务,并通过RAM用户来管理SAE相关的资源。

为阿里云账号开通服务

进入SAE产品主页点击免费开通登录阿里云账号,根据页面提示开通SAE服务并创建服务关联角色。

重要

SAE服务开通后,超出免费试用额度期限的部分将按量计费。为节省费用,您可以购买资源包(预付费)

RAM用户授权

您需要通过阿里云账号RAM用户授权,授予SAE所需权限策略,RAM用户才能管理SAE服务相关的资源。

操作指引

SAE支持控制台saectl工具(兼容kubectl)等多种操作方式,从中选择您熟悉的方式来完成本教程。

控制台

1. 部署应用

  1. 部署provider应用:登录SAE控制台,在左侧选择应用管理 > 应用列表,在顶部选择应用部署的地域(本文以杭州为例),点击创建应用。配置以下参数,其余保持默认。点击一键创建应用(跳过高级设置)。

    如果导航栏中没有应用管理 > 应用列表,请选择应用管理 > 微服务应用
    如果提示选择应用版本,请选择标准版轻量版专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。
    1. 自定义应用名称,例如provider

    2. 设置命名空间类型系统创建,表示应用将会创建于当前地域的默认命名空间,且自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。

    3. 设置应用部署方式选择镜像部署。点击设置镜像,在Demo镜像标签页,找到微服务应用-提供者选择镜像版本microservice-java-provider-v1.0,点击确定

    4. 容量设置区域,自定义单实例规格实例数,这决定了应用初始运行的实例数量、系统为每个实例分配多少计算资源。

  2. 部署consumer应用:重复上述步骤并调整以下参数来部署Consumer应用。

    1. 自定义应用名称,例如consumer

    2. 设置镜像时,找到微服务应用-消费者选择镜像版本microservice-java-consumer-v1.0

  3. 查看应用部署结果:请耐心等待应用创建完成,大约需要1分钟。

    1. 您可以在应用列表中查看已创建的应用,点击其中某个应用可以进入其详情页面。

    2. 在左侧导航栏选择基础信息,在实例列表页签中,可以查看已创建的应用实例。

2. 通过公网访问应用

为了实现从公网访问consumer应用,一种简便的方式是为该应用绑定公网CLB实例。

  1. consumer应用绑定公网CLB实例:进入consumer应用的详情页面。在应用信息页签中,在应用访问设置区域选择基于CLB访问。点击添加公网CLB访问,配置如下参数,然后点击确定

    image

    1. CLB实例中,选择新建CLB实例

    2. HTTP协议页签中,设置HTTP端口80容器端口18082

  2. 验证结果:SAE将为您代购一个CLB实例并绑定到当前应用。等待创建完成,控制台将显示应用的公网访问地址

    image

    1. 通过浏览器访问http://<公网访问地址>/consumer-echo/hello(其中<公网访问地址>需要替换为实际值),验证能够通过公网来访问应用。

      image

    2. 应用监控 > 应用详情 > 拓扑视图中,您可以查看consumer应用调用provider应用的拓扑视图。

      image

3. 清理资源

在完成本教程后,建议清理相关资源,避免持续产生费用。

  1. 删除应用:进入provider应用和consumer应用的详情页面,点击更多 > 删除应用,并按照指引操作来删除上述应用。

    SAE代购的CLB实例将随应用删除而自动释放。
  2. (可选)删除网络资源:在部署应用的过程中,系统自动创建了VPC、交换机、安全组。

    1. 查看VPC:在左侧导航栏选择命名空间,点击默认,在基础信息页面查看VPC,点击链接跳转到VPC详情页。

    2. 查看交换机、安全组:在VPC资源管理标签页点击链接跳转到相应资源的详情页。

    3. 在各资源的详情页执行删除操作。

saectl工具

1. 安装与配置saectl工具

2. 部署应用

  1. 创建资源配置文件:在同一路径中创建以下文件。注意:将配置文件中的image: ...cn-hangzhou...替换为您的应用部署地域。

    1. 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: # 单个应用实例的规格。limitsrequests需要保持相同的配置。
                limits:
                  cpu: "2"
                  memory: 4Gi
                requests:
                  cpu: "2"
                  memory: 4Gi
      
    2. 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: # 单个应用实例的规格。limitsrequests需要保持相同的配置。
                limits:
                  cpu: "2"
                  memory: 4Gi
                requests:
                  cpu: "2"
                  memory: 4Gi
      
  2. 执行部署:在上述配置文件所在路径执行saectl apply -f deployment-provider.yaml -f deployment-consumer.yaml

  3. 验证结果

    1. 查看应用:执行saectl get deployments -n default。其中,-n default表示查询默认命名空间。返回结果中:

      1. STATE字段显示RUNNING表示应用正常运行;如果显示PUBLISHING表示应用正在部署,请等待部署完成后再查看。

      2. READY字段显示n/m代表已就绪的实例数/期望部署的实例数

    2. 查看应用实例:执行saectl get pods -n default。返回结果中:

      1. STATUS字段显示RUNNING表示实例中的容器正常运行;如果显示ContainerCreating表示容器正在创建,请等待创建完成后再查看。

      2. READY字段显示n/m代表已就绪的容器数/总容器数

3. 通过公网访问应用

为了实现从公网访问consumer应用,一种简便的方式是为该应用绑定公网CLB实例。

  1. 创建资源配置文件:创建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
    
  2. 执行部署:在上述配置文件所在路径执行saectl apply -f svc.yaml

  3. 验证结果

    1. 查看服务:执行saectl get services -n default。返回结果中:

      1. EXTERNAL-IP字段显示访问应用的公网IP;如果显示<pending>表示服务正在创建,请等待创建完成后再查看。

      2. PORT(S)字段显示您配置的应用访问端口。

    2. 从公网访问应用:执行curl http://<公网访问地址>:<访问端口>/consumer-echo/hello(其中<公网访问地址><访问端口>需要替换为实际值)。从返回结果中,能够看到consumer应用通过调用provider应用来处理请求的过程。

4. 清理资源

在完成本教程后,建议清理相关资源,避免持续产生费用。

删除应用:执行saectl delete -f deployment-provider.yaml -f deployment-consumer.yaml

SAE代购的CLB实例将随应用删除而自动释放。

后续步骤

  • 您已通过Demo镜像体验了部署应用的流程。SAE为您提供以下方式来部署实际的应用

  • 本示例通过SAE内置Nacos实现了服务注册与发现,使得consumer应用能够访问provider应用并调用其方法。SAE还提供以下方式来实现应用间的互访,您可以根据实际情况灵活选取:

    • 使用MSENacos注册中心(推荐):如果您不希望自建服务注册中心,且追求注册中心的性能、扩展性、高可用性等方面,建议使用MSENacos注册中心。

    • 使用自建服务注册中心:如果您当前已部署了自建的服务注册中心(例如Nacos、Zookeeper等),且已能够满足使用需求,在您部署应用到SAE后,可以继续使用自建的服务注册中心。前提是确保应用和注册中心之间的网络联通性,并且需要手动在程序中配置注册中心的地址。

    • 基于K8s ServiceName配置应用服务访问:在SAE集群内,为应用配置一个可以供其他应用访问的固定域名。

  • 本示例通过为应用绑定CLB实例实现了从外部访问应用。您也可以通过为应用绑定NLB实例配置网关路由实现从外部访问应用。如果需要应用主动访问外部的资源和服务,则需要配置NAT网关或者为应用实例绑定EIP

  • 本示例使用系统创建的默认命名空间来部署应用。您也可以通过自定义命名空间实现不同应用之间、开发/测试/生产环境之间的隔离。每个命名空间需要绑定一个VPC。部署应用时,需要为应用实例绑定该VPC中的交换机,选择不同可用区的交换机即可实现应用的跨可用区部署

  • 创建应用后,可以手动调整实例数量实例规格,或通过配置弹性伸缩策略实现根据访问量、资源使用情况自动调整实例数量。还可以通过开启闲置模式来降低成本。