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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【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搭建和管理企业级网站应用
目录
相关文章
|
22天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
70 5
|
14天前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
192 69
|
9天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
18天前
|
容器 云栖大会
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
5天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
阿里云ACK容器服务生产级可观测体系建设实践
|
16天前
|
Kubernetes 监控 Cloud Native
云原生入门:从传统应用到容器化部署的旅程
【9月更文挑战第19天】在数字化浪潮中,企业正迅速将目光投向云原生技术,以实现更快的应用开发和更灵活的资源管理。本文将通过一个简单示例引导读者理解如何将传统应用转变为云原生应用,并部署至云端。我们将探索容器化技术的基础,以及它如何帮助企业解锁现代软件交付的速度和效率。准备好让你的应用乘上云原生的快车了吗?让我们开始这段令人兴奋的旅程吧!
|
10天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
17天前
|
运维 Ubuntu Linux
深入理解并实践Docker容器化技术
深入理解并实践Docker容器化技术
44 6
|
7天前
|
Cloud Native 持续交付 Docker
深入解析Docker容器化技术及其在生产环境中的应用
深入解析Docker容器化技术及其在生产环境中的应用
10 0
下一篇
无影云桌面