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

简介: 【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文档通常详尽,但对于某些高级特性的说明或最佳实践案例可以进一步丰富。另外,云服务商的技术支持响应速度和服务质量也是评价的重要组成部分,良好的客户支持能够大大提升整体体验。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
426 108
|
1月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
2月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
242 58
|
2月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
云原生信息提取系统:容器化流程与CI/CD集成实践
|
2月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
306 11
|
2月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
199 1
|
3月前
|
数据可视化 API UED
126. [HarmonyOS NEXT 实战案例二:SideBarContainer] 侧边栏容器实战:电商应用商品筛选侧边栏 进阶篇
在基础篇中,我们已经实现了电商应用商品筛选侧边栏的基本布局和功能。在本篇教程中,我们将深入探讨如何通过状态管理和数据绑定,实现更加复杂的交互功能,提升用户体验。
84 2
126. [HarmonyOS NEXT 实战案例二:SideBarContainer] 侧边栏容器实战:电商应用商品筛选侧边栏 进阶篇
|
2月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
248 57
|
3月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
1月前
|
安全 持续交付 Docker
Docker:重塑现代软件交付的容器引擎
Docker:重塑现代软件交付的容器引擎

热门文章

最新文章