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

简介: 【7月更文第8天】阿里云容器服务Kubernetes版(ACK)作为业界领先的容器管理和编排服务,凭借其强大的技术实力和丰富的云服务生态,为企业级用户提供了一系列卓越的优势,助力现代化应用的快速构建、部署与运维。

话不多说,直接部署吧
先说说为什么选择ACK吧: 阿里云容器服务Kubernetes版(ACK)作为业界领先的容器管理和编排服务,凭借其强大的技术实力和丰富的云服务生态,为企业级用户提供了一系列卓越的优势,助力现代化应用的快速构建、部署与运维。

方案介绍:本方案介绍如何快速地在阿里云容器服务Kubernetes版(ACK)上部署应用,使用镜像在ACK中部署应用,使用ALB作为Ingress对外提供服务。 方案中包含两个应用,应用A和应用B,其中应用A依赖应用B,以此来模拟真实场景中应用依赖关系。整体的方案架构如下图所示。
001.png
本方案的技术架构包括以下基础设施和云服务:

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

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

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

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

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

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

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

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

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

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

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

在左侧导航栏,选择工作负载,在展开的菜单中选择无状态,点击右上角使用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/demos/MicroServiceOnAckDemoApp.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-b。

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

添加服务(Service)
在左侧导航栏,选择网络,在展开的菜单中选择服务,点击右上角使用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。

2在左侧导航栏,选择网络,在展开的菜单中选择服务,点击右上角使用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创建资源,在新页面中的模板输入框中填入如下内容:


apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name:  ecs-ack-test-alb-config
spec:
  config:
    name: ecs-ack-test-alb
    addressType: Internet
    zoneMappings:
    - vSwitchId: vsw-bp1******ups
    - vSwitchId: vsw-bp1******8xm
  listeners:
    - port: 80
      protocol: HTTP

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

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如遇到创建失败,可以考虑如下步骤处理已创建配置并尝试重新配置:

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

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

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

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

验证模拟应用
1.路由(Ingress)创建完成后,等待约1分钟,在左侧导航栏,选择网络,在展开的菜单中选择路由,查看ecs-ack-test-ingress的端点一列,获取端点域名,在浏览器中访问端点域名/a,查看返回值,例如:

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

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

写在最后
1)技术细节的充分性:该解决方案在介绍灵活调度、高效编排和容器化管理云上应用的过程中,提供了较为全面的技术概述,覆盖了容器化的基本概念、Kubernetes(或类似容器编排平台)的核心组件及其工作原理。然而,对于初学者来说,可能仍感觉某些技术环节的深度不够,特别是关于网络策略、存储解决方案和安全实践方面的详细配置与优化策略。增强这部分内容,加入更多实践案例分析,将有助于用户更深入地理解方案的实施细节。

2)引导与文档支持:体验过程中,文档资源丰富度和易用性是决定用户能否顺利实施的关键。大多数情况下,主流云服务商提供了详尽的文档和教程,但偶尔会发现某些高级功能或故障排查指南不够具体,缺乏逐步指导。例如,对于复杂的网络配置或自定义资源管理,可能需要更多实例演示和故障模拟解决步骤。此外,视频教程和交互式实验室的加入能显著提升学习效率。

3)部署过程与代码示例:代码示例通常是非常实用的,能够快速启动部署并作为进一步定制的基础。大多数解决方案提供的示例代码质量较高,易于理解和修改。但在实际操作中,可能会遇到与特定环境兼容性相关的问题,比如版本不匹配导致的配置错误或依赖冲突。遇到的具体报错可能包括服务启动失败、资源限制超限等,解决这些问题通常需要查阅更详细的错误日志或社区讨论。

4)容器化应用托管的优势:容器化应用托管的优势显著,包括但不限于环境一致性、资源利用率提升、快速部署与扩展、易于持续集成与交付(CI/CD)。它允许应用在不同环境间无缝迁移,减少了“在我机器上能运行”的问题。对于企业上云而言,容器化是一个提高运维效率、加速应用迭代的重要手段,因此大多数企业在云转型过程中都会倾向于采用容器化应用托管。

5)云产品体验分享:以主流云服务商的产品为例,如阿里云的容器服务ACK、AWS的Elastic Kubernetes Service (EKS)等,在体验中,这些产品普遍展现出强大的功能性和稳定性。产品界面友好,配置向导清晰,能满足大多数企业的云原生应用部署需求。性能方面,能够根据业务需求动态扩缩容,确保应用的高可用性。产品手册和API文档通常详尽,但对于某些高级特性的说明或最佳实践案例可以进一步丰富。另外,云服务商的技术支持响应速度和服务质量也是评价的重要组成部分,良好的客户支持能够大大提升整体体验。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
13天前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
1月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
102 24
|
1月前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
1月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
1月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
139 6
|
1月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
53 5
|
1月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
73 4
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
75 1
|
2月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
115 0