容器化运维镜像仓库和资源调度

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【2月更文挑战第14天】容器运维平台的两个关键组成,镜像仓库和资源调度。

业务容器化后,运维面对的不再是一台台实实在在的物理机或者虚拟机了,而是一个个 Docker 容器,它们可能都没有固定的 IP,这个时候要想服务发布该怎么做呢?


这时候就需要一个面向容器的新型运维平台,它能够在现有的物理机或者虚拟机上创建容器,并且能够像运维物理机或者虚拟机一样,对容器的生命周期进行管理,通常我们叫它“容器运维平台”。


一个容器运维平台通常包含以下几个组成部分:镜像仓库、资源调度、容器调度和服务编排。

镜像仓库

Docker 容器运行依托的是 Docker 镜像,也就是说要发布服务,首先必须把镜像发布到各个机器上去,这个时候问题就来了,这个镜像该放在哪?如何把镜像发布到各个机器上去?这时候你就要依靠镜像仓库了。


镜像仓库的概念其实跟 Git 代码仓库类似,就是有一个集中存储的地方,把镜像存储在这里,在服务发布的时候,各个服务器都访问这个集中存储来拉取镜像,然后启动容器。


对于大部分业务团队来说,出于安全和访问速度的需要,都会搭建一套私有的镜像仓库。那么具体该如何搭建一套私有的镜像仓库呢?

1)权限控制

镜像仓库首先面临的第一个问题就是权限控制的问题,也就是说哪些用户可以拉取镜像,哪些用户可以修改镜像。


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


这个权限控制就跟大厦办公楼的管理类似,你要进入大厦里的一个办公室,首先必须具备进入大厦的权限,这个权限是在大厦里所有办公的人都有的。然后你还得具备大厦里你办公室所在楼层的门禁,这样才能进入办公室。不同楼层的人权限不同,只能进入自己楼层的办公室。如果某个办公室有新来的员工,首先要给他分配大厦的进入权限,然后还要这个办公室的管理员给他分配办公室的权限。


2)镜像同步

在实际的生产环境中,往往需要把镜像同时发布到几十台或者上百台集群节点上,单个镜像仓库实例往往受带宽原因限制无法同时满足大量节点的下载需求,这个时候就需要配置多个镜像仓库实例来做负载均衡,同时也就产生镜像在多个镜像仓库实例之间同步的问题了。


一般来说,有两种方案,一种是一主多从,主从复制的方案,比如开源镜像仓库Harbor采用了这种方案;另一种是 P2P 的方案,比如阿里的容器镜像分发系统蜻蜓采用了 P2P 方案。


Harbor 所采取的主从复制的方案是,把镜像传到一个主镜像仓库实例上去,然后其他从镜像仓库实例都从主镜像仓库实例同步,它的实现就像下图所描述的一样。

image.png

除此之外,Harbor 还支持层次型的发布方式,如果集群部署在多个 IDC,可以先从一个主 IDC 的镜像仓库同步到其他从 IDC 的镜像仓库,再从各个从 IDC 同步给下面的分 IDC,它的实现就像下图所描述的一样。

image.png

3)高可用性

既然 Docker 镜像是 Docker 容器运行的基础,那么镜像仓库的高可用性就不言而喻了。一般而言,高可用性设计无非就是把服务部署在多个 IDC,这样的话即使有 IDC 出问题,也可以把服务迁移到别的正常 IDC 中去。同样对于镜像仓库的搭建,也可以采用多 IDC 部署,那么需要做到的就是不同 IDC 之间的镜像同步。


比如镜像仓库会部署在永丰、土城两个内网 IDC 内,两个 IDC 内的镜像同步采用 Harbor 的双主复制策略,互相复制镜像,这样的话即使有一个 IDC 出现问题,另外一个 IDC 仍然能够提供服务,而且不丢失数据。

image.png

资源调度

Docker 镜像要分发到哪些机器上去?这些机器是从哪里来的?这其实涉及的是资源调度的问题。


服务部署的集群主要包括三种:


1、物理机集群。大部分中小团队应该都拥有自己的物理机集群,并且大多按照集群  -  服务池  -  服务器这种模式进行运维。物理机集群面临的问题,主要是服务器的配置不统一,尤其对于计算节点来说,普遍存在的一种情况就是几年前采购的机器的配置可能还是 12 核 16G 内存的配置,而近些年采购的机器都至少是 32 核 32G 内存的配置,对于这两种机器往往要区别对待,比如旧的机器用于跑一些非核心占用资源量不大的业务,而新采购的机器用于跑一些核心且服务调用量高的业务。


2、虚拟机集群。不少业务团队在使用物理机集群之后,发现物理机集群存在使用率不高、业务迁移不灵活的问题,因此纷纷转向了虚拟化方向,构建自己的私有云,比如以 OpenStack 技术为主的私有云集群在国内外不少业务团队都有大规模的应用。它的最大好处就是可以整合企业内部的服务器资源,通过虚拟化技术进行按需分配,提高集群的资源使用率,节省成本。


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

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


这主要是因为资源调度最大的难点不在于机器的创建和容器的部署,而在于如何对接各个不同的集群,统一管理来自不同集群的机器权限管理、成本核算以及环境初始化等操作,这个时候就需要有一个统一的层来完成这个操作。这个对有历史包袱的团队,比如公司内网的物理机集群已经有一套运维体系来说,挑战不小,需要针对新的模式重新开发这套运维平台。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
运维 Kubernetes 监控
构建高效自动化运维系统:基于容器技术的策略与实践
【4月更文挑战第19天】随着云计算和微服务架构的兴起,传统的运维模式正逐渐向自动化、智能化转型。本文将探讨如何利用容器技术构建一个高效、可靠的自动化运维系统,涵盖系统设计原则、关键技术选型以及实践经验分享。通过引入容器技术,我们可以实现应用的快速部署、弹性伸缩和故障自愈,从而提高运维效率,降低系统维护成本。
|
4天前
|
运维 监控 Kubernetes
构建高效自动化运维体系:基于容器技术的持续集成与持续部署(CI/CD)实践
【5月更文挑战第15天】 随着云计算和微服务架构的普及,传统的IT运维模式面临转型压力。为提高软件交付效率并降低运维成本,本文探讨了利用容器技术实现自动化运维的有效策略。重点分析了在持续集成(CI)和持续部署(CD)流程中,容器如何发挥作用,以及它们如何帮助组织实现敏捷性和弹性。通过具体案例研究,文章展示了容器化技术在自动化测试、部署及扩展中的应用,并讨论了其对系统稳定性和安全性的影响。
|
4天前
|
运维 监控 安全
构建高效自动化运维系统:基于容器技术的持续集成与持续部署(CI/CD)实践
【5月更文挑战第14天】 随着DevOps文化的深入人心,持续集成与持续部署(CI/CD)已成为现代软件工程不可或缺的组成部分。本文将探讨如何利用容器技术,尤其是Docker和Kubernetes,构建一个高效、可扩展的自动化运维系统。通过深入分析CI/CD流程的关键组件,我们将讨论如何整合这些组件以实现代码从提交到生产环境的快速、无缝过渡。文章还将涉及监控、日志管理以及安全性策略等运维考量,为读者提供一个全面的自动化运维解决方案蓝图。
|
4天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与部署实践
【5月更文挑战第13天】 在现代软件开发周期中,持续集成(CI)和持续部署(CD)已成为提升开发效率、保障产品质量的关键环节。随着云计算和微服务架构的普及,容器技术如Docker和Kubernetes为运维领域带来了革命性的变革。本文旨在探讨如何利用容器技术构建一个高效、可靠的自动化运维体系,实现从代码提交到产品发布的全过程自动化管理。通过深入分析容器化技术的核心原理,结合实际案例,我们将阐述如何优化持续集成流程、确保自动化测试的覆盖率、以及实现无缝的持续部署。
26 2
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。
|
4天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。
|
4天前
|
运维 Kubernetes 持续交付
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】 在快速发展的云计算时代,传统的运维模式已无法满足敏捷开发和快速迭代的需求。本文将介绍如何利用容器技术搭建一套高效自动化运维系统,实现软件的持续集成(CI)与持续部署(CD)。文章首先探讨了现代运维面临的挑战,接着详细阐述了容器技术的核心组件和工作原理,最后通过实际案例展示了如何整合这些组件来构建一个可靠、可扩展的自动化运维平台。
|
4天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署(CI/CD)实践
【4月更文挑战第29天】 随着云计算和微服务架构的兴起,自动化运维已成为提升企业IT效率、确保系统稳定性的关键因素。本文旨在探讨如何利用容器技术构建一套高效的自动化运维体系,实现软件开发过程中的持续集成(CI)与持续部署(CD)。文章首先分析了传统运维模式面临的挑战,然后详细介绍了基于Docker和Kubernetes等容器技术的CI/CD流程设计与实施策略,并通过一个实际案例来展示该方案在提高部署频率、降低人力成本及提升系统可靠性方面的显著优势。
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
4天前
|
存储 运维 Kubernetes
构建高效稳定的容器化运维环境:Docker与Kubernetes的协同
【4月更文挑战第14天】 在当今快速发展的云计算时代,容器技术以其轻量级、快速部署和易于管理的优势,成为现代应用交付的标准。本文将深入探讨如何通过Docker和Kubernetes的整合使用来构建一个高效且稳定的容器化运维环境。我们将分析Docker容器的基本概念,探索Kubernetes在容器编排方面的强大能力,以及两者结合所带来的益处。文章还将讨论在实际部署中可能遇到的挑战,并提出相应的解决方案。