首页 灵活调度,高效编排,容器化管理云上应用

灵活调度,高效编排,容器化管理云上应用

更新时间: 2024-11-15 10:16:14

手动部署

90

https://www.aliyun.com/solution/tech-solution/ack-services

方案概览

本方案旨在通过基于阿里云容器服务Kubernetes版(ACK)实现微服务的部署,借助容器技术和Kubernetes的强大功能,实现资源的高效利用、更高扩展性和弹性、快速迭代部署及DevOps流程优化,从而全面提升业务灵活性与竞争力。通过本方案,企业能够实现应用部署的容器化转型,提升运维效率、优化资源利用,并加速业务创新步伐,为企业的数字化升级奠定坚实基础。

方案架构

本方案介绍如何基于ACK,实现微服务应用部署,提升运维效率、优化资源利用,加速业务创新和市场响应速度。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。image

模拟应用服务对外提供 APIa和APIb,APIa依赖APIb。APIb返回服务名称以及一个UUID;APIa返回服务名称和一个UUID以及通过HTTP请求的APIb的返回值。

本方案的技术架构包括以下基础设施和云服务:

  • 1个专有网络VPC:为应用型负载均衡ALB、云服务器ECS、阿里云容器服务Kubernetes版ACK集群等云资源构建云上私有网络

  • 2台交换机:使多可用区的3台云服务器ECS、阿里云容器服务Kubernetes版ACK集群和应用型负载均衡ALB能够在同一网络上进行通信,并提供基本的网络分段和隔离功能。

  • 1个公网应用型负载均衡ALB:对外提供访问,作为ACK集群的Ingress实现。

  • 1个阿里云容器服务Kubernetes版ACK集群

  • 3台云服务器ECS:用于部署模拟应用服务,为ACK使用。

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值。本方案的云资源支持按量付费,且默认设置均采用按量付费引导操作。如果确定任何一个云资源采用按量付费方式部署,账户余额都必须大于等于100元。

规划网络和资源

5

网络规划

规划项

数量

说明

地域

1

您的云服务部署的地域。选择地域的基本原则请参见地域和可用区

专有网络VPC

1

在部署过程中新建一个VPC作为本方案的专有网络。

交换机

2

本方案需要至少2台交换机,用来连接不同的云资源实例。

应用型负载均衡ALB

1

阿里云容器服务Kubernetes版ACK集群创建Ingress时,自动创建。

弹性公网IP

1

阿里云容器服务Kubernetes版ACK集群创建Ingress时,自动为应用型负载均衡ALB实例创建1个弹性公网IP。

安全组

1

用于限制专有网络VPC下云服务器ECS和其他资源的网络流入和流出规则。

规划云资源

规划项

数量

说明

云服务器ECS

3

本方案需要3台云服务器ECS实例,为ACK集群使用。

阿里云容器服务Kubernetes版ACK集群

1

本方案需要1个阿里云容器服务Kubernetes版ACK集群,用于同时运行3个API服务。

创建ACK集群

30

规划好资源后,请按照以下步骤部署方案中的所有资源。

创建专有网络VPC和交换机

您需要创建1个专有网络和2个交换机。

  1. 登录专有网络管理控制台

  2. 在顶部菜单栏,选择华东1(杭州)地域。

  3. 在左侧导航栏,单击专有网络

  4. 专有网络页面,单击创建专有网络

  5. 创建专有网络页面,配置1个专有网络和2台交换机。配置交换机时,请确保交换机所属的可用区的ECS、ALB是可用状态。

    分类

    项目

    说明

    示例值

    VPC

    VPC名称

    建议您在部署过程中新建一个VPC作为本方案的专有网络。在部署过程中填写VPC名称即可创建对应名称的VPC。

    长度为2~128个字符,以英文大小写字母或中文开头,可包含数字、下划线(_)和连字符(-)。

    vpc_ecs_ack_test

    IPv4网段

    在创建VPC时,您必须按照无类域间路由块(CIDR block)的格式为您的专有网络划分私网网段。阿里云VPC支持的网段信息请参见组成部分

    在网络规划时可以按照管理网段-开发网段-测试网段-生产网段等规则做好规划。网段一旦投入使用,调整过程复杂,因此规划十分重要。

    192.168.0.0/16

    交换机

    vSwitch名称

    建议您在部署过程中在新建的VPC内创建虚拟交换机。在部署过程中填写交换机名称即可创建对应名称的虚拟交换机。

    长度为2~128个字符,以英文大小写字母或中文开头,可包含数字、下划线(_)和连字符(-)。

    • 可用区 J

    vsw_ecs_ack_test_j

    • 可用区 K

    vsw_ecs_ack_test_k

    可用区

    在规划的地域内选择2个可用区,2台虚拟交换机分别部署在2个可用区。

    建议选择排序靠后的,一般此类可用区较新。新可用区资源更充沛,新规格也会在新的可用区优先上线。

    • 可用区 J

    • 可用区 K

    IPv4网段

    每台虚拟交换机需要一个IPv4网段

    • 可用区 J

    192.168.1.0/24

    • 可用区 K

    192.168.2.0/24

创建安全组

您已经在1个专有网络VPC下的2个可用区分别创建1台交换机。接下来您需要创建1个安全组,用于限制该专有网络VPC下的1台交换机的网络流入和流出。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择网络与安全>安全组

  3. 在顶部菜单栏,选择华东1(杭州)地域。

  4. 安全组页面,单击创建安全组

  5. 创建安全组页面,创建1个安全组。

    项目

    说明

    示例值

    名称

    设置安全组的名称。

    sg_ecs_ack_test

    网络

    选择之前规划的专有网络VPC。

    vpc_ecs_ack_test

    安全组类型

    本方案需从公网拉取博客网站服务镜像,因此选择普通安全组,以实现公网出方向所有地址可访问。实际部署时,建议您选择安全性更高的企业级安全组。

    普通安全组

    入方向

    入方向除默认的端口号外,本方案还需添加8080端口号。

    8080

创建ACK集群

您已经创建1个专有网络VPC。接下来您需要在2个可用区分别创建3个云服务器ECS实例,来实现服务跨可用区的高可用。

  1. 登录容器服务ACK管理控制台

  2. 在左侧导航栏,选择集群,点击右上角创建集群按钮。

  3. 创建集群集群配置页面,配置一个ACK托管版集群:

    项目

    说明

    示例值

    集群

    长度为1~63个字符,可包含数字、下划线(_)或中划线(-),需以英文大小写字母、中文或数字开头

    ecs_ack_test

    地域

    ACK集群所在地域

    华东1(杭州)

    专有网络

    使用原先创建的专有网络即可

    vpc_ecs_ack_test

    专有网络交换机vSwitch

    使用原先创建的vSwitch即可

    • 可用区 J

    vsw_ecs_ack_test_j

    • 可用区 K

    vsw_ecs_ack_test_k

    Pod虚拟交换机

    使用原先创建的vSwitch即可

    • 可用区 J

    vsw_ecs_ack_test_j

    • 可用区 K

    vsw_ecs_ack_test_k

    其他选项保持默认即可。进入下一步:节点池配置

  4. 创建集群节点池配置页面,配置一个ACK托管版集群节点池:

    项目

    说明

    示例值

    实例规格

    选择集群节点所需节点规格

    ecs.u1-c1m2.xlarge

    期望节点数

    如遇到“请先授权 CS 获取云资源的权限”字样的提示,点击显示为AliyunOOSLifecycleHook4CSRole的链接进行授权操作。新页面授权完成后,回到当前页面点击重新检查,重复上述操作直到重新检查按钮消失。

    3

    系统盘

    配置节点系统盘大小。

    ESSD云盘

    120GiB

    操作系统

    Alibaba Cloud Linux 3.2104

    安全加固

    阿里云OS加固

    登录方式

    可使用登录ECS服务器的密码。8~30 个字符,且同时包含三项(大写字母、小写字母、数字和特殊符号)

    password***(请勿直接使用,请自行生成新密码)

    其他选项保持默认即可。进入下一步:组件配置

  5. 创建集群组件配置页面,配置各类组件:

    项目

    说明

    示例值

    Ingress

    是否配置集群Ingress

    选择ALB Ingress

    ALB云原生网关实例来源选择暂不创建

    容器监控

    是否使用阿里云可观测监控Prometheus版。在解决方案演示环节可以取消勾选,生产场景中请根据实际情况选择。

    取消勾选

    成本套件

    是否开启ACK成本套件-成本洞察功能。在解决方案演示环节可以取消勾选,生产场景中请根据实际情况选择。

    取消勾选

    集群巡检

    是否使用集群巡检定时扫描集群状态,识别潜在风险。在解决方案演示环节可以取消勾选,生产场景中请根据实际情况选择。

    取消勾选

    其他选项保持默认即可。进入下一步:确认配置

  6. 创建集群确认配置页面,检查各项配置是否如预期设定。在依赖检查部分,如果遇到未通过状态,跟随说明部分进行处理。例如需要授权角色权限的,跟随引导到新页面完成授权,完成后回到当前页面点击重新检查,直到状态变为通过

    所有配置符合预期,依赖检查全部通过后,请阅读并确认服务条款免责声明,随后点击创建集群,开始等待集群创建完成。Kubernetes 集群创建需要约 10 分钟,您可以跳转到集群列表查看状态。

  7. 等待约10分钟并刷新,直到列表中的集群状态变为运行中

应用部署

25

创建无状态工作负载(Deployment)

完成运行前的准备工作后,需要创建多个服务的无状态工作负载(Deployment),用于承载原测试应用中的各个服务。

  1. 登录容器服务ACK管理控制台

  2. 在左侧导航栏,选择集群,点击创建的ecs_ack_test集群,点击名称开始操作。

  3. 在左侧导航栏,选择节点管理,在展开的菜单中选择节点,查看各个节点是否处于就绪状态,如有节点不是就绪状态,等待1分钟后刷新,直至所有节点处于就绪状态。

  4. 在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: ecs-ack-test-service-a
      labels:
        app: ecs-ack-test-service-a
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: ecs-ack-test-service-a
      template:
        metadata:
          labels:
            app: ecs-ack-test-service-a
        spec:
          initContainers:
            - name: download-jar
              image: dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-alinux
              command:
              - "/bin/sh"
              - "-c"
              - "curl -o /app/app.jar https://help-static-aliyun-doc.aliyuncs.com/tech-solution/MicroServiceOnAckDemo-1.0.1.jar && echo 'Download jar OK!'"
              volumeMounts:
              - name: app-jar
                mountPath: /app
          containers:
            - args:
                - '-DbHost=http://ecs-ack-test-service-b:8080'
                - '-jar'
                - '/app/app.jar'
              command:
                - java
              name: ecs-ack-test-service-a
              image: dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-alinux
              ports:
                - containerPort: 8080
              resources:
                limits:
                  cpu: '2'
                  ephemeral-storage: 40Gi
                  memory: 2Gi
                requests:
                  cpu: '1'
                  ephemeral-storage: 20Gi
                  memory: 1Gi
              volumeMounts:
                - name: app-jar
                  mountPath: /app
          volumes:
            - name: app-jar
              emptyDir: {}
    

    点击创建ecs-ack-test-service-a

  5. 在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,等待约1分钟点击右上角刷新图标按钮,查看ecs-ack-test-service-a是否创建成功,当容器组数量显示为2/2,并且没有其他错误信息时,可以认为ecs-ack-test-service-a创建成功。

  6. 在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: ecs-ack-test-service-b
      labels:
        app: ecs-ack-test-service-b
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: ecs-ack-test-service-b
      template:
        metadata:
          labels:
            app: ecs-ack-test-service-b
        spec:
          initContainers:
            - name: download-jar
              image: dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-alinux
              command:
              - "/bin/sh"
              - "-c"
              - "curl -o /app/app.jar https://help-static-aliyun-doc.aliyuncs.com/tech-solution/MicroServiceOnAckDemo-1.0.1.jar && echo 'Download jar OK!'"
              volumeMounts:
              - name: app-jar
                mountPath: /app
          containers:
            - args:
                - '-DbHost=http://ecs-ack-test-service-b:8080'
                - '-jar'
                - '/app/app.jar'
              command:
                - java
              name: ecs-ack-test-service-b
              image: dragonwell-registry.cn-hangzhou.cr.aliyuncs.com/dragonwell/dragonwell:8-alinux
              ports:
                - containerPort: 8080
              resources:
                limits:
                  cpu: '2'
                  ephemeral-storage: 40Gi
                  memory: 2Gi
                requests:
                  cpu: '1'
                  ephemeral-storage: 20Gi
                  memory: 1Gi
              volumeMounts:
                - name: app-jar
                  mountPath: /app
          volumes:
            - name: app-jar
              emptyDir: {}
    

    点击创建ecs-ack-test-service-b

  7. 在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,等待约1分钟点击右上角刷新图标按钮,查看ecs-ack-test-service-b,当容器组数量显示为2/2,并且没有其他错误信息时,可以认为ecs-ack-test-service-aecs-ack-test-service-b创建成功。

添加服务(Service)

  1. 在左侧导航栏,选择网络,在展开的菜单中选择服务,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

apiVersion: v1
kind: Service
metadata:
  name: ecs-ack-test-service-a
spec:
  selector:
    app: ecs-ack-test-service-a
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

点击创建ecs-ack-test-service-a

  1. 在左侧导航栏,选择网络,在展开的菜单中选择服务,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

apiVersion: v1
kind: Service
metadata:
  name: ecs-ack-test-service-b
spec:
  selector:
    app: ecs-ack-test-service-b
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

点击创建ecs-ack-test-service-b

添加路由(Ingress)

  1. 在左侧导航栏,选择网络,在展开的菜单中选择路由,检查ALB组件是否安装。点击右上角创建Ingress,在右侧弹出的创建Ingress面板中,网关类型点击ALB Ingress,如提示ALB组件未安装,则点击开始安装,否则点击面板右上角关闭按钮即可。

  2. 在左侧导航栏,选择网络,在展开的菜单中选择路由,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下代码:

    请注意:其中zoneMappings配置的vSwitchId使用的是创建集群时选择的2台交换机实例ID,不能使用交换机名称,可以在专有网络VPC控制台查找。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name:  ecs-ack-test-alb-config
    spec:
      config:
        name: ecs-ack-test-alb
        addressType: Internet
        zoneMappings:
        - vSwitchId: 交换机实例ID
        - vSwitchId: 交换机实例ID
      listeners:
        - port: 80
          protocol: HTTP
  3. 在左侧导航栏,选择网络,在展开的菜单中选择路由,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: ecs-ack-test-alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: ecs-ack-test-alb-config

    此处配置了名为ecs-ack-test-alb的IngressClass配置。

  4. 在左侧导航栏,选择网络,在展开的菜单中选择路由,点击右上角使用YAML创建资源,在新页面中的模板输入框中填入如下内容:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ecs-ack-test-alb-ingress
    spec:
      ingressClassName:  ecs-ack-test-alb 
      rules:
       - http:
          paths:
          - path: /a
            pathType: ImplementationSpecific
            backend:
              service:
                name: ecs-ack-test-service-a
                port:
                  number: 8080
          - path: /b
            pathType: ImplementationSpecific
            backend:
              service:
                name: ecs-ack-test-service-b
                port: 
                  number: 8080

    点击创建ecs-ack-test-ingress

  5. 如遇到创建失败,可以考虑如下步骤处理已创建配置并尝试重新配置:

    1. 在左侧导航栏,选择网络,在展开的菜单中选择路由,找到名为ecs-ack-test-alb-ingress的配置,在右侧下拉菜单中点击删除,等待删除成功。

    2. 在左侧导航栏,选择工作负载,在展开的菜单中选择自定义资源,点击资源对象浏览器标签页,在API组下方的输入框中,输入Ingress,在搜索结果中,点击树形结构中v1目录下的Ingress配置,如存在名为ecs-ack-test-alb的配置,点击右侧删除按钮,等待删除成功。

    3. 在搜索结果中,点击树形结构中v1目录下的IngressClass配置,如存在名为ecs-ack-test-alb的配置,点击右侧删除按钮,等待删除成功。

    4. API组下方的输入框中,输入AlbConfig,如存在名为AlbConfig的配置,在搜索结果中,点击树形结构中v1目录下的AlbConfig配置,如存在名为ecs-ack-test-alb-config的配置,点击右侧删除按钮,等待删除成功。

    5. 等待1分钟后,重复步骤1到步骤4.

验证与资源清理

20

方案验证

一、通过访问ALB Ingress,验证服务可用性

完成了部署之后,登录ACK控制台,通过创建的ALB Ingress发起访问,以验证服务是否成功部署。

  1. 登录容器服务ACK管理控制台

  2. 在左侧导航栏,选择集群,点击创建的集群,点击名称开始操作。

  3. 在左侧导航栏,选择网络,在展开的菜单中选择路由,找到创建的ALB Ingress的端点一列,获取端点域名,在浏览器中访问端点域名/a,查看返回值,例如:

[
    {
        "serviceName": "a",
        "uuid": "f1b99e7a-e731-4a3b-aa22-5e8a3abd577c"
    },
    {
        "serviceName": "b",
        "uuid": "d1eee41e-3259-4eb2-a018-43b7df64589b"
    }
]

说明模拟应用服务正常运行。

二、通过配置手动和自动弹性伸缩,验证服务扩缩容

  1. 手动弹性伸缩

容器服务ACK管理控制台选择目标集群,在左侧导航栏中,选择节点管理 > 节点池,点击去配置

image

为了快速看到扩缩容现象,修改如下参数。

image完成后,点击当前节点池操作栏中的编辑按钮,在弹出的窗口中,找到并勾选开启自动弹性伸缩

image

在左侧导航栏中,选择工作负载>无状态。点击“ecs-ack-test-service-a”应用操作栏中的伸缩按钮。将所需容器组数量设置为 8。

image

等待集群完成扩容,在“容器组”列表中可以看到当前无状态工作负载的容器组数量变为8。

image

在左侧导航栏中,选择工作负载>无状态。点击“ecs-ack-test-service-a”应用操作栏中的伸缩按钮。将所需容器组数量设置为 2。

image在“容器组”列表中可以看到当前无状态工作负载的容器组数量变为2。image

  1. 基于 Ingress 的弹性伸缩

在左侧导航栏中,选择工作负载>无状态。点击“ecs-ack-test-service-a”名称进入详情页。点击容器伸缩标签,点击创建指标伸缩(HPA)。

image

参考下图完成HPA配置。

image

我们使用负载测试工具 Locust(参考官方文档安装) 进行测试。以下是详细的操作步骤和测试结果分析。

创建文件locustfile.py,完整代码如下:

from locust import HttpUser, TaskSet, task, between

class UserBehavior(TaskSet):
    @task(1)
    def query_department_with_cache(self):
        self.client.get("/a")

class WebsiteUser(HttpUser):
    tasks = [UserBehavior]
    wait_time = between(1, 5)

if __name__ == "__main__":
    import os
    os.system("locust -f <this_script_name>.py")

在命令行中运行locust启动 Locust。打开浏览器,访问 Locust Web 界面 http://localhost:8089,如图所示填写测试参数。

image

可以观察到当前CPU的使用率和容器组数量的增加。

image

节点池中的节点数也有变化,自动触发了扩容。

image

通过上述步骤,成功验证了服务的部署,并演示了手动弹性伸缩和基于 Ingress 的自动弹性伸缩功能。在负载增加时,HPA自动扩展 Pod 数量,而 ALB作为 Ingress 控制器,将外部流量均匀分配到这些新增的 Pod 上,实现流量管理和负载均衡。

清理资源

在本方案中,您创建了3台云服务器ECS实例、1个应用型负载均衡ALB实例、2个交换机、1个专有网络VPC、1个容器服务ACK集群实例。测试完方案后,您可以参考以下规则处理对应产品的实例,避免继续产生费用:

  1. 释放1个容器服务ACK集群实例,3台由ACK集群使用的云服务器ECS实例以及集群创建的应用型负载均衡ALB实例:

    登录容器服务ACK控制台集群列表页面,找到目标ACK集群实例,在操作列点击更多,然后在下拉菜单栏点击删除,按照界面提示释放实例,应用型负载均衡 ALB(集群 Ingress)默认不会删除,在弹出菜单中需要主动勾选。删除ACK集群后会自动释放云服务器ECS实例,可以在删除成功后登录ECS控制台,在实例页面检查是否成功是否,如未成功,找到目标实例,然后在操作列选择216更多-竖向..png>释放设置,根据界面提示释放实例。

  2. 释放2台交换机:

    登录专有网络控制台,在交换机页面,找到目标交换机,然后在操作列单击删除,按照界面提示释放实例。

  3. 释放1个专有网络VPC:

    登录专有网络控制台,在专有网络页面,找到目标VPC,然后在操作列单击删除,按照界面提示释放实例。

一键部署

60

https://www.aliyun.com/solution/tech-solution/ack-services

方案概览

本方案旨在通过基于阿里云容器服务Kubernetes版(ACK)实现微服务的部署,借助容器技术和Kubernetes的强大功能,实现资源的高效利用、更高扩展性和弹性、快速迭代部署及DevOps流程优化,从而全面提升业务灵活性与竞争力。通过本方案,企业能够实现应用部署的容器化转型,提升运维效率、优化资源利用,并加速业务创新步伐,为企业的数字化升级奠定坚实基础。

方案架构

本方案介绍如何基于ACK,实现微服务应用部署,提升运维效率、优化资源利用,加速业务创新和市场响应速度。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。image

模拟应用服务对外提供 APIa和APIb,APIa依赖APIb。APIb返回服务名称以及一个UUID;APIa返回服务名称和一个UUID以及通过HTTP请求的APIb的返回值。

本方案的技术架构包括以下基础设施和云服务:

  • 1个专有网络VPC:为应用型负载均衡ALB、云服务器ECS、阿里云容器服务Kubernetes版ACK集群等云资源构建云上私有网络

  • 2台交换机:使多可用区的3台云服务器ECS、阿里云容器服务Kubernetes版ACK集群和应用型负载均衡ALB能够在同一网络上进行通信,并提供基本的网络分段和隔离功能。

  • 1个公网应用型负载均衡ALB:对外提供访问,作为ACK集群的Ingress实现。

  • 1个阿里云容器服务Kubernetes版ACK集群

  • 3台云服务器ECS:用于部署模拟应用服务,为ACK使用。

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值。本方案的云资源支持按量付费,且默认设置均采用按量付费引导操作。如果确定任何一个云资源采用按量付费方式部署,账户余额都必须大于等于100元。

一键部署

30

ROS一键部署

  1. 打开一键配置模板链接前往ROS控制台,系统自动打开使用新资源创建资源栈的面板,并在模板内容区域展示YAML文件的详细信息。

    说明

    ROS控制台默认处于您上次访问控制台时所在的地域,请根据您创建的新资源所在地域修改对应地域后再执行下一步

  2. 确认好地域后,系统自动刷新出配置模板参数页面。

  3. 配置模板参数页面修改资源栈名称,可用区,配置ECS实例(推荐使用通用算力型ecs.u1-c1m2.xlarge)。填写完所有必选信息并确认后单击创建开始一键配置。

    说明

    防止可用区资源不足情况导致ALB无法访问,这里建议选择可用区J和可用区K。

  4. 资源栈信息页面的状态显示为创建成功时表示一键配置完成。说明:

    image

验证与资源清理

20

方案验证

一、通过访问ALB Ingress,验证服务可用性

完成了一键部署之后,登录ACK控制台,通过创建的ALB Ingress发起访问验证服务是否成功部署。

  1. 登录容器服务ACK管理控制台

  2. 在左侧导航栏,选择集群,点击创建的集群,点击名称开始操作。

  3. 在左侧导航栏,选择网络,在展开的菜单中选择路由,找到创建的ALB Ingress的端点一列,获取端点域名,在浏览器中访问端点域名/a,查看返回值,例如:

[
    {
        "serviceName": "a",
        "uuid": "f1b99e7a-e731-4a3b-aa22-5e8a3abd577c"
    },
    {
        "serviceName": "b",
        "uuid": "d1eee41e-3259-4eb2-a018-43b7df64589b"
    }
]

说明模拟应用服务正常运行。

二、通过配置手动和自动弹性伸缩,验证服务扩缩容

  1. 手动弹性伸缩

容器服务ACK管理控制台选择目标集群,在左侧导航栏中,选择节点管理 > 节点池,点击去配置

image

为了快速看到扩缩容现象,修改如下参数。

image完成后,点击当前节点池操作栏中的编辑按钮,在弹出的窗口中,找到并勾选开启自动弹性伸缩

image

在左侧导航栏中,选择工作负载>无状态。点击“ecs-ack-test-service-a”应用操作栏中的伸缩按钮。将所需容器组数量设置为 8。

image

等待集群完成扩容,在“容器组”列表中可以看到当前无状态工作负载的容器组数量变为8。

image

在左侧导航栏中,选择工作负载>无状态。点击“ecs-ack-test-service-a”应用操作栏中的伸缩按钮。将所需容器组数量设置为 2。

image在“容器组”列表中可以看到当前无状态工作负载的容器组数量变为2。image

  1. 基于 Ingress 的弹性伸缩

在左侧导航栏中,选择工作负载>无状态。点击“ecs-ack-test-service-a”名称进入详情页。点击容器伸缩标签,点击创建指标伸缩(HPA)。

image

参考下图完成HPA配置。

image

我们使用负载测试工具 Locust(参考官方文档安装) 进行测试。以下是详细的操作步骤和测试结果分析。

创建文件locustfile.py,完整代码如下:

from locust import HttpUser, TaskSet, task, between

class UserBehavior(TaskSet):
    @task(1)
    def query_department_with_cache(self):
        self.client.get("/a")

class WebsiteUser(HttpUser):
    tasks = [UserBehavior]
    wait_time = between(1, 5)

if __name__ == "__main__":
    import os
    os.system("locust -f <this_script_name>.py")

在命令行中运行locust启动 Locust。打开浏览器,访问 Locust Web 界面 http://localhost:8089,如图所示填写测试参数。

image

可以观察到当前CPU的使用率和容器组数量的增加。

image

节点池中的节点数也有变化,自动触发了扩容。

image

通过上述步骤,成功验证了服务的部署,并演示了手动弹性伸缩和基于 Ingress 的自动弹性伸缩功能。在负载增加时,HPA自动扩展 Pod 数量,而 ALB作为 Ingress 控制器,将外部流量均匀分配到这些新增的 Pod 上,实现流量管理和负载均衡。

清理资源

在本方案中,您创建了3台云服务器ECS实例、1个应用型负载均衡ALB实例、2个交换机、1个专有网络VPC、1个阿里云容器服务Kubernetes版ACK集群。测试完方案后,您可以参考以下规则处理对应产品的实例,避免继续产生费用:

  1. 释放资源栈下的资源,即3台云服务器ECS实例、1个应用型负载均衡ALB实例、2个交换机、1个专有网络VPC、1个阿里云容器服务Kubernetes版ACK集群。

    1. 登录ROS控制台

    2. 在左侧导航栏,选择资源栈

    3. 资源栈页面的顶部选择部署的资源栈所在地域,找到资源栈,然后在其右侧操作列,单击删除

    4. 删除资源栈对话框,选择删除方式释放资源,然后单击确定,根据提示完成资源释放。