作者 | 刘鹏宇 中国农业银行研发中心
责编 | 李雪敬
出品 | CSDN云计算(ID:CSDNcloud)
今年以来,远程办公、远程会议走进了大多数人的日常工作中,各类云产品相继被人们所熟悉,例如石墨云”OFFice”办公软件、腾讯云平台、云课堂,为实现多人协同办公、远程操控等需求,提供多类渠道。这些应用可能在实现技术上,不是严格意义的上云,但“云”逐渐浸透各个领域,晕染出不一样的风采。
“上云”一词早已流行,各小中大企业为摆脱地域限制、减轻研发成本、实现安全可靠管理保障,纷纷研究“如何上云”。作为一个奔跑在新型IT时代的逐梦人,我踏上了寻找杰克魔豆的旅程,下面是我在探索道路上的所见所闻。
开始
云计算从2006年提出至今,经历了翻天覆地的发展变化,由IaaS到PaaS、SaaS,应用越来越广泛。在其发展初期,IT建设多围绕IaaS进行,包括计算虚拟化、网络虚拟化、存储虚拟化等,使用对象主要是虚拟机。但由于虚拟机承载的是操作系统,我们依然需要在操作系统中安装基础软件,并未减轻开发人员部署环境的压力。然而自Docker为代表的容器技术出现后,实现应用可以在容器中直接运行,切实减轻了程序员部署精力,促进了容器PaaS的迅速发展,并已逐渐形成云生态体系——以Docker、Kubernetes为核心,由Docker提供应用级的主机抽象,Kubernetes提供应用级的集群抽象。在此基础上涌现了红帽OpenShift等优秀企业级PaaS产品。
本文将着重对Docker、Kubernetes、Openshift的发展历史及架构进行分析,并分享“部署自研运维系统到云平台”的实践经验。
前文说,容器技术的诞生,为减轻开发人员部署环境压力,提供了可能。容器技术也打造了一套标准化的软件构建和分发流程,为降低运维成本、提高软件安全和运行稳定等方面提供便利。容器技术不仅仅打造一个运输用的“集装箱”,还保证软件在容器内能够运行,在操作系统上构成“独立的箱子”。这需要解决文件系统、网络、硬件等多方面的问题。经过长时间的发展,容器技术现已逐步成熟。使用容器技术后,开发者可以使用熟悉的编程语言开发软件,之后用容器技术打包构建,便可一键运行在所有支持该容器技术的平台上。
Docker是一个构建、发布、运行分布式应用的平台, Docker平台整体可以看成由 Docker引擎(运行环境+打包工具)、 Docker Registry(API+生态系统)两部分组成。包括Docker Client、Docker daemon、Docker Image、Docker Container等部分,如下图所示。
其中 Docker引擎可以分为守护进程和客户端两大部分。Docker引擎的底层是各种操作系统以及云计算基础设施,而上层则是各种应用程序和管理工具,每层之间都是通过API来通信的。详细介绍如下。
Docker Client 是 Docker 提供命令行界面 (CLI) 工具,是用户与 Docker 进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。
Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。
Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。
Docker提供了应用级的主机抽象,可以更容易地实现应用的快速申请和部署。
如果说Docker是容器时代的大船,Kubernetes就是指引船只的舵手。作为容器集群管理工具,Kubernetes有一套健壮的集群自恢复机制,包括容器的自动重启、自动重调度以及自动备份甚至负载等。
Kubernetes前身是谷歌大规模集群管理系统Brog,它基于容器技术,实现资源管理的自动化,以及跨数据中心资源利用的最大化。Kubernetes于2015年正式对外发布,经过4年多的发展,为容器编排提供强大的解决方案,成为云原生系统的重要支撑。
当前,国内外的很多企业都建立了基于Kubernetes的云平台,如OpenShift、阿里云等。下面分别简述阿里巴巴和美团点评的云平台发展实践历程。
图片来源:阿里巴巴云原生公众号
阿里巴巴于2013年开始探索由容器替换虚拟机,2018年开始自研容器调度系统向Kubernetes转型,2019年阿里业务全面上云,2019年双十一中,基于Kubernetes的生态体系支撑了阿里史上规模最大的集群。
图片来源:about云开发-aB7758133
美团点评于2013年开始搭建云计算平台,2016年基于Docker搭建自研容器管理平台,2018年引入Kubernetes到云平台中,提升了平台的稳定性和资源使用效率。
在Kubernetes中,Service是分布式集群架构的核心。它是一种抽象概念,每一个Service后端有多个Pod,所有的容器均在Pod中运行。下图是一个典型的Kubernetes架构图。
图片来源:Kubernetes官网
Kubernetes由两种节点组成:Master节点,为管理节点;Node节点,为容器运行结点。
Service是架构的核心,提供远程服务,它的后端有多个Pod,每个容器均在Pod中运行。一个Service可以横跨多个Node,也可能一个Node里包含多个Service,一个Pod里也可以包含多个Container(容器)。
Pod是Kubernetes的最小调度单位,所以在我行实际应用中,一般一个Pod中只部署一个容器,以提高稳定性,降低风险。一个Label是一对键/值对,用来传递用户定义的属性。例如,可以用“Taihangboot”来标记一个太行应用。
Replication Controller,用来确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定2个副本,它会创建2个Pod,并且持续监控它们。
Kubernetes是强大的云原生体系工具,对容器进行编排,实现了集群化的管理。
红帽OpenShift平台在Kubernetes的基础上,提高了平台运行稳定性,集成了Jeckins等工具,更易于实现Devops,可以为企业提供全面的应用上云服务。
OpenShift 是由红帽公司推出的 PaaS 云计算平台,它诞生于2011年,核心架构采用自研容器编排平台Gear。Kubernetes推出后,红帽决定对OpenShift进行重构。2015年6月,红帽推出了基于Kubernetes1.0的OpenShift3.0。2018年6月,OpenShift4.1发布,它与OpenShift3.0相比,较大的变化是引入了CoreOS作为默认操作系统。当前最新版本的OpenShift平台是2019年12月17日发布的4.2.11,新版系统进一步实现了混合云环境企业级服务的简化和自动化,同时可以让开发者通过云原生应用实现创新并提高业务价值。
OpenShift在 Kubernetes的基础上扩展提供了软件定义网络、软件定义存储、权限管理、企业级镜像仓库、统一入口路由、持续集成流程( S2/Jenkins统一管理控制台、监控日志等功能,形成覆盖整个软件生命周期的解决方案,提供了企业级的服务支持。当前其提供三种产品:OpenShift Online、OpenShift Enterprise 和 OpenShift Origin。其中,OpenShift Online 是面向普通开发者和小微企业的线上公有云平台;OpenShift Enterprise 是面向企业的私有云平台;OpenShift Origin 是一个开源项目,是构成前两个的基础。
OpenShift平台可以安装于几乎所有的基础平台上,例如裸机、虚拟机、私有云、公有云等。整个OpenShift平台可以分为Container Storage、CoreOS、Kubernetets、Automated operations、Services等几个层级。下面分别进行介绍。
OpenShift平台可以安装于几乎所有的基础平台上,例如裸机、虚拟机、私有云、公有云等。整个OpenShift平台可以分为Container Storage、CoreOS、Kubernetets、Automated operations、Services等几个层级。下面分别进行介绍。
Container Storage是持久化的存储结构,它为整个基于容器的环境提供存储支持。CoreOS是Linux的一个发行版,提供容器执行的基础操作系统。Kubernetes即容器编排的调度平台。Automated operations指的是对于集群上运行的容器宿主机、Kubernetes集群和应用等服务,进行自动化的更新、管理等功能。Services包含平台所提供的具体服务,如集群服务(监控、扩缩容、镜像仓库、日志系统),应用服务(融合中间件、基础软件服务),Service Mesh(管理微服务应用),开发服务(开发工具、自动构建、持续集成、持续交付)等。
可以看出,OpenShift在Kubernetes的基础上,提供了底层支持,扩展了应用功能,以提供更全面、更便捷的服务。
智能运维系统是一个全面的运维平台,可以实现监控相关系统的主要运行指标、发现异常后匹配应急方案、发起应急操作及验证、系统配置、用户管理等功能。
将该系统部署于OpenShift平台简要来说可分为3个步骤:创建容器、将生成的容器打好标签推送至镜像仓库、在OpenShift平台拉取镜像开始配置运行。介绍如下。
通过Dockerfile来组合基础镜像和软件,Dockerfile中包含的内容包括基本镜像、要安装的软件包,要复制到容器中的软件,网络端口和挂载的存储卷等信息。编写好Dockerfile后,可通过运行docker build 命令来创建一个存储在本地的容器镜像。
使用docker tag命令向新容器镜像添加标签,以标识其在镜像仓库的位置。然后,通过运行 docker push 命令将该镜像推送到镜像仓库。
在OpenShift平台配置Deployment、Service、Router等运行策略,即可从镜像仓库拉取相关镜像,自动分配Pod,相关应用即可对外提供服务。
如上图所示即为该系统运行情况。
到此,有关云平台技术的介绍已经分享完毕。从基础容器技术Docker,到集群容器编排Kubernetes,最后到企业级PaaS平台OpenShift,云技术越来越成熟,并逐步形成生态体系。云原生应用体系对于Devops、微服务等的实现也具有天然的优势,在持续集成、持续部署上更加高效、安全,极大的提高了生产效率,将在企业数字化转型中发挥巨大的作用。
作为一个奋战在一线的运维人员,经常遇到集群扩容、环境迁移、频繁的变更等等一系列繁杂的任务与问题,处理起来费时且容易出错。在接触到云原生应用后,被其标准化、轻量、高效的运行、部署模式所吸引,感受到应用上云对运维方式带来的巨大改变,故障自愈、一键迁移、一键部署等都轻易实现,随后对各个技术的官网文档、相关书籍、网络博客进行了研究,形成了本文,希望能对未来的系统建设添砖加瓦。
作者介绍:
刘鹏宇 中国农业银行研发中心
作为支持一线的“急诊科医生”,在快速响应、敏捷迭代的同时,也在探索更加高效、智能的运维方式,总结实践与优化经验,保障系统服务更可靠、更安全。
更多阅读推荐
该买哪家二手手机呢?程序员爬取京东告诉你
17 年安全界老兵,专注打造容器安全能行吗?
让安全威胁无所遁形,全方位掌握攻击“前世今生”的黑科技来了
多模、AI 齐上阵,Deepfake 换脸术克星驾到!
35 岁一刀切?任正非:华为没有年龄限制,如只看年龄自己早被淘汰