微服务容器化的运维

本文涉及的产品
容器镜像服务 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代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
Kubernetes Cloud Native JavaScript
云原生之旅:从容器到微服务的探索之路
【9月更文挑战第15天】本文将带你踏上云原生技术的探险之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。文章不仅涵盖了云原生的理论基础,还通过实际案例展示了如何在真实世界中应用这些理念。无论你是初学者还是有经验的开发者,都能在这次旅程中获得宝贵的知识和启发。
|
3天前
|
Cloud Native Docker 微服务
云原生之旅:从容器化到微服务
【9月更文挑战第15天】在数字化转型的浪潮中,云原生技术如同一股清泉,为传统IT架构带来活力与创新。本文将深入浅出地探讨云原生的核心概念、关键技术及应用实践,带领读者踏上一段探索云原生世界的奇妙旅程。
31 9
|
8天前
|
Kubernetes Cloud Native Docker
探索云原生技术之旅:从容器到微服务
【8月更文挑战第42天】本文将带你踏上一场云原生技术的奇妙之旅,我们将从容器技术的基础出发,逐步深入到微服务架构的世界。你将了解到如何利用Docker和Kubernetes简化应用部署与管理,以及如何通过微服务设计原则构建可扩展、灵活的系统。准备好一起探索这些令人兴奋的技术了吗?让我们开始吧!
45 14
|
2天前
|
运维 Cloud Native 持续交付
云原生之旅:从容器化到微服务架构的探索
【9月更文挑战第16天】在数字化转型的浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将带你深入了解云原生的核心理念,从容器化技术的入门应用到微服务架构的设计实践,揭示如何利用这些先进技术构建更灵活、更可靠的系统。我们将通过具体案例,探讨云原生技术如何帮助企业实现快速迭代与持续交付,以及在这一过程中可能遇到的挑战和解决方案。
|
4天前
|
Kubernetes Cloud Native Docker
云原生技术之旅:从容器到微服务
【9月更文挑战第14天】随着云计算的蓬勃发展,云原生技术已成为现代软件开发的重要组成部分。本文将深入探讨云原生的核心概念,包括容器化、微服务架构以及它们如何共同推动企业快速创新。通过实际案例,我们将展示如何利用Kubernetes和Docker等工具构建和管理高效的云原生应用。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在云原生时代乘风破浪。
20 5
|
11天前
|
运维 Cloud Native 云计算
云原生之旅:从容器化到微服务架构的演进之路
在数字化浪潮中,云原生技术如同星辰大海中的灯塔,为航船指引方向。本文将带你穿梭于云计算的世界,探索从容器化技术到微服务架构的变革旅程。我们将一窥云原生如何助力企业灵活应对快速变化的市场需求,以及在这一过程中,开发者和运维人员是如何成为时代变革的弄潮儿。让我们一同启航,驶向云原生的广阔天地。
|
6天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
16 3
|
8天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务架构的融合之道
在数字化转型的浪潮中,云原生技术以其高效、灵活的特性成为企业IT架构升级的重要选择。本文将探讨云原生的核心概念——容器化和微服务架构,并阐述它们如何相互融合,共同推动现代应用的开发与部署。通过深入浅出的解释,我们将揭示云原生如何助力企业快速适应市场变化,实现业务的持续创新和价值最大化。
|
9天前
|
运维 Cloud Native 云计算
云原生之旅:从容器化到微服务架构
【9月更文挑战第9天】在数字化转型的浪潮中,云原生技术成为推动企业IT革新的关键力量。本文将通过浅显易懂的语言和生动的比喻,带领读者探索云原生的核心概念、关键技术及实践路径,揭示如何在云计算时代构建灵活、高效、可靠的应用系统。你将了解到,正如甘地所言“你必须成为你希望在世界上看到的改变”,在云原生的世界里,每一位开发者和技术决策者都扮演着塑造未来的角色。
|
10天前
|
Cloud Native Devops 持续交付
云原生之旅:从容器到微服务的演变
【9月更文挑战第8天】在这篇文章中,我们将一起探索云原生技术的魅力所在。通过深入浅出的方式,本文将引导读者了解云原生的基本概念、核心技术及其在实际业务中的应用价值。我们将从容器化技术的起步,逐步过渡到微服务架构的设计与实现,最后探讨如何利用这些技术来优化和创新现代应用开发流程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的视角和实践指南。