微服务容器化的运维

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【2月更文挑战第27天】

业务容器化后,运维面对的不再是一台台实实在在的物理机或者虚拟机,而是一个个Docker容器,它们可能都没有固定的IP,要想发布服务,需要用一个面向容器的新型运维平台。一个容器运维平台通常包含以下几个组成部分:镜像仓库、资源调度、容器调度、调度策略、服务编排。

1、镜像仓库

  • 权限控制

镜像仓库都设有两层权限控制:一是必须登录才可以访问,这是最外层的控制,它规定了哪些人可以访问镜像仓库;二是对镜像按照项目的方式进行划分,每个项目拥有自己的镜像仓库目录,并且给每个项目设置项目管理员、开发者及客人3个角色,只有项目管理员和开发者拥有自己镜像仓库目录下镜像的修改权限,而客人只拥有访问权限,项目管理员可以为这个项目设置哪些人是开发者。

  • 镜像同步

在实际的生产环境中,往往需要把镜像同时发布到几十台或者上百台集群节点上,单个镜像仓库实例往往受带宽限制无法同时满足大量节点的下载需求,此时就需要配置多个镜像仓库实例来做负载均衡,同时也会产生镜像在多个镜像仓库实例之间同步的问题。一般来说,有两种解决方案,一种是一主多从,主从复制的方案,比如开源镜像仓库Harbor采用了这种方案;另一种是P2P的方案,如阿里的容器镜像分发系统蜻蜓就采用了P2P方案。

  • 高可用性

一般而言,高可用性设计无非就是把服务部署在多个IDC,这样即使有IDC出现问题,也可以把服务迁移到其他正常的IDC中去。

2、资源调度

为了解决资源调度的问题,Docker官方提供了Docker Machine功能,通过Docker Machine可以在企业内部的物理机集群,或者虚拟机集群(如OpenStack集群),又或者公有云集群(如AWS集群)等上创建机器并且直接部署容器。Docker Machine的功能虽然很好,但是对于大部分已经发展了一段时间的业务团队来说,并不能直接拿来使用。

  • 物理机集群

大部分中小团队应该都拥有自己的物理机集群,并且大多按照集群—服务池—服务器这种模式进行运维。

  • 虚拟机集群

很多业务团队在使用物理机集群后,发现物理机集群存在使用率不高、业务迁移不灵活的问题,因此纷纷转向了虚拟化方向,构建自己的私有云。

  • 公有云集群

现在越来越多的业务团队,尤其是初创公司,因为公有云快速灵活的特性,纷纷在公有云上搭建自己的业务。公有云最大的好处除了快速灵活、分钟级即可实现上百台机器的创建,还有一个优点就是配置统一、便于管理,不存在机器配置碎片化问题。

3、容器调度

容器调度是指,假如现在集群里有一批可用的物理机或者虚拟机,当服务需要发布时,该选择哪些机器部署容器。

比如集群里只有10台机器,并且已经有5台机器运行着其他容器,剩余5台机器空闲着,如果此时有一个服务要发布,但只需要3台机器即可。这时可以靠运维人为地从5台空闲的机器中选取3台机器,然后把服务的Docker镜像下载下来,再启动Docker容器服务即可完成发布。

这时如果集群中有上百台机器,就需要有专门的容器调度系统,为此也诞生了不少基于Docker的容器调度系统,最后还是Kubernetes一统江湖了。

4、调度策略

调度策略主要是为了解决容器创建时选择哪些主机最合适的问题,一般都是通过给主机打分来实现的。具体选择哪种调度策略,还要综合实际的业务场景,通常的场景有以下几种。

  • 各主机的配置基本相同,并且使用也比较简单,一台主机上只创建一个容器。这样的话,每次创建容器时,直接从还没有创建过容器的主机中随机选择一台即可。
  • 在某些在线、离线业务混布的场景下,为了达到主机资源使用率最高的目标,需要综合考量容器中跑的任务的特点,比如在线业务主要使用CPU资源,而离线业务主要使用磁盘和I/O资源,这两种业务的容器大部分情况下适合混跑在一起。
  • 还有一种业务场景,主机上的资源都是充足的,每个容器只要划定了所用的资源限制,理论上跑在一起是没有问题的,但是有些时候会出现对某个资源的抢占,比如都是CPU密集型或者I/O密集型的业务,就不适合容器混跑在一台主机上。

5、服务编排

  • 服务依赖

大部分情况下,微服务之间是相互独立的,在进行容器调度时不需要考虑彼此。但有时也会存在一些场景,比如服务A调度的前提必须是先有服务B,这就要求在进行容器调度时,还需要考虑服务之间的依赖关系。

Docker官方提供了Docker Compose的解决方案,它允许用户通过一个单独的docker-compose.yaml文件来定义一组相互关联的容器组成一个项目,从而以项目的形式来管理应用。比如要实现一个Web项目,不仅要创建Web容器(如Tomcat容器),还需要创建数据库容器(如MySQL容器)、负载均衡容器(如Nginx容器)等,此时就可以通过docker-compose.yaml来配置这个Web项目里包含的3个容器。

  • 服务发现

容器调度完成以后,容器就可以启动了,但此时容器还不能对外提供服务,服务消费者并不知道这个新的节点,所以必须具备服务发现机制,使得新的容器节点能够加入到线上服务中去。

基于Nginx的服务发现主要是针对提供HTTP服务的,当有新的容器节点时,修改Nginx的节点列表配置,然后利用Nginx的重新加载机制,会重新读取配置,从而把新的节点加载进来。

基于注册中心的服务发现主要是针对提供RPC服务的,当有新的容器节点时,需要调用注册中心提供的服务注册接口。在使用这种方式时,如果服务部署在多个IDC,就要求容器节点分IDC进行注册,以便实现同IDC内就近访问。

  • 自动扩缩容

容器完成调度后,仅仅做到有容器不可用时故障自愈还不够,有时还需要根据实际服务的运行状况,做到自动扩缩容。

一个很常见的场景就是,大部分互联网业务的访问呈现出访问时间的规律性。以微博业务为例,白天和晚上的使用人数远远大于凌晨的使用人数;而白天和晚上的使用人数也不是平均分布的,午高峰12点半和晚高峰10点半是使用人数最多的时刻。这时就需要根据实际使用需求,在午高峰和晚高峰时刻,增加容器的数量,确保服务的稳定性;在凌晨以后减少容器的数量,减少服务使用的资源成本。

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
运维 Kubernetes 监控
提升运维效率:容器化技术在现代IT基础设施中的应用
本文将探讨容器化技术如何优化企业的IT基础设施,提高部署效率和资源利用率。我们将深入分析容器技术的优势、实现步骤以及在实际运维中的应用场景。通过实例展示,帮助读者更好地理解并应用这一前沿技术,助力企业实现高效运维。
|
2月前
|
Cloud Native 云计算 Docker
云原生之旅:从容器化到微服务架构
【9月更文挑战第27天】本文将引领读者进入云原生的世界,探索如何通过容器化技术实现应用的快速部署与扩展,并深入理解微服务架构的设计哲学。我们将一起见证代码如何转化为可在云端无缝运行的服务,同时讨论云原生生态中的最佳实践和面临的挑战。
|
1天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务的融合
【10月更文挑战第28天】 在数字化转型的浪潮中,云原生技术如星辰般璀璨,引领着企业IT架构的未来。本文将带你穿梭于云原生的世界,探索容器化技术和微服务架构如何携手共舞,打造灵活、高效的应用部署和运维模式。我们将通过实际代码示例,揭示这股力量背后的奥秘,并展现它们是如何为现代软件开发带来革新。准备好了吗?让我们启航,驶向云原生技术的深海。
|
1天前
|
Cloud Native 持续交付 云计算
云原生入门指南:从容器到微服务
【10月更文挑战第28天】在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本篇文章将带你了解云原生的基本概念,探索它如何通过容器化、微服务架构以及持续集成和持续部署(CI/CD)的实践来提升应用的可伸缩性、灵活性和可靠性。你将学习到如何利用这些技术构建和部署在云端高效运行的应用,并理解它们对DevOps文化的贡献。
7 2
|
8天前
|
Kubernetes 监控 数据中心
容器化与微服务:构建高效开发环境的双剑合璧
【10月更文挑战第20天】本文探讨了容器化技术(如Docker和Kubernetes)与微服务架构的结合,如何共同构建高效、灵活的开发环境。容器化解决了环境一致性、快速部署和资源隔离的问题,而微服务架构则提升了系统的可维护性和可扩展性。通过容器编排工具、CI/CD流程和服务网格,两者的结合进一步优化了开发和运维效率。文章还分享了实施这两项技术的最佳实践和职业心得。
|
9天前
|
Kubernetes Cloud Native 云计算
云原生之旅:从容器到微服务的探索之路
【10月更文挑战第20天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文将深入探讨云原生的核心概念、技术架构及其在现代软件开发中的应用,揭示如何通过云原生技术提升业务的灵活性和可扩展性。
|
10天前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
29 2
|
16天前
|
缓存 运维 Docker
容器化运维:Docker Desktop 占用磁盘空间过大?教你轻松解决!
Windows Docker Desktop 使用过程中,因镜像、容器数据及构建缓存的累积,可能导致磁盘空间占用过高。通过删除无用镜像与容器、压缩磁盘以及清理构建缓存等方法,可有效释放空间。具体步骤包括关闭WSL、使用`diskpart`工具压缩虚拟磁盘、执行`docker buildx prune -f`清理缓存等。这些操作能显著减少磁盘占用,提升系统性能。
157 4
|
29天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
29天前
|
运维 监控 Cloud Native
云原生之旅:从容器到微服务的演进之路
本文将引导您踏上云原生技术的探索之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。我们将一起揭开云原生的神秘面纱,探索它如何改变现代软件的开发、部署和运维方式。通过本文,您将获得对云原生技术基础的深刻理解,并激发您进一步探索和应用这些前沿技术的兴趣和灵感。