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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【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搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
运维 Kubernetes 监控
|
7天前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
9天前
|
监控 负载均衡 开发者
掌握容器化技术:从零基础到实战应用
容器化技术正在快速改变软件开发和部署的方式。在这篇文章中,我们将从基础知识出发,逐步探讨容器化的核心概念、常用工具以及实际应用场景。无论你是刚接触容器化技术的新手,还是希望将现有知识应用到实际项目中的开发者,本文都将为你提供一个全面的入门指南和实战技巧。
|
13天前
|
运维 Kubernetes 开发者
使用容器化技术优化你的应用:从理论到实践
【8月更文挑战第7天】容器化技术通过提供一致的运行环境、高效的部署与扩展能力以及资源优化,为现代应用的开发和运维带来了显著的便利。通过本文的介绍,你应该对如何使用Docker来优化你的应用有了初步的了解。从编写Dockerfile到构建镜像,再到运行容器和使用Docker Compose管理多容器应用,每一步都是向更高效、更可靠的应用交付迈进的坚实步伐。
|
15天前
|
运维 Kubernetes 开发者
容器化管理云上应用解决方案评测
容器化管理云上应用解决方案评测
34 2
|
3天前
|
人工智能 Kubernetes 开发者
容器化技术在AI开发流程中的应用
【8月更文第17天】随着人工智能(AI)技术的快速发展,如何高效地开发、测试和部署AI模型成为了一个重要的课题。容器化技术,如Docker和Kubernetes,为解决这一问题提供了强大的工具。本文将探讨这些技术如何简化AI应用程序的开发流程,并提高模型的可移植性和可扩展性。
10 0
|
5天前
|
Kubernetes Cloud Native Devops
云原生之旅:从容器化到微服务的实践之路
随着云计算时代的深入发展,传统的软件开发与部署模式已逐渐不能满足现代业务的需求。云原生技术以其灵活性、可扩展性和高效率成为新的发展方向。本文将通过浅显易懂的语言,带领读者一探云原生世界的大门,从容器化技术的起步,到微服务架构的构建,再到DevOps文化的融入,逐步揭示云原生技术如何助力企业快速迭代和高效运维。无论你是云原生领域的新手,还是希望深化理解的开发者,这篇文章都将为你提供有价值的信息和启示。
11 0
|
13天前
|
容器
解决方案评测|容器化管理云上应用获奖名单
容器化管理云上应用获奖名单已正式公布!
|
9天前
|
Docker 容器
Docker cp 将宿主机上的文件复制到容器中
Docker cp 将宿主机上的文件复制到容器中
11 0
|
4天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程

热门文章

最新文章