开源容器云OpenShift:构建基于Kubernetes的企业应用云平台(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-30 03:58:31

点击下载

作者:陈耿

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

开源容器云OpenShift:构建基于Kubernetes的企业应用云平台

开源容器云OpenShift:构建基于Kubernetes的企业应用云平台试读:

前言

云起之时开源有道

我仍然记得,在2000年年初,国内软件开发领域最热门的操作系统、语言、开发工具、数据库等基本上都是大型商业公司的产品。那时Linux已经存在,但是还不算主流。在我所工作的网络中心中,大部分服务器使用的是Windows Server或者Sun Solaris操作系统。市场上需求最火爆的开发平台是Visual C++、Visual Basic和已经基本消失不见的Delphi。然而17年后的今天,当再次审视当前所处的环境时,我们会惊讶地发现,开源社区的产品已然出现在各个领域:从操作系统、开发工具、编程语言,到中间件、数据库,再到虚拟化、基础架构云、应用平台云等。可以说当前的时代是名副其实的开源的时代,企业可以通过开源社区的创新构建一个完全开源的企业架构堆栈。

经过前几年云计算变革的推进,OpenStack目前已经成为了企业构建私有基础架构云的一个主流选择。当前,我们正处于容器变革的过程中。在我看来,容器在未来将会成为云计算一种重要的应用交付和部署格式,越来越多的应用会以容器的方式交付和部署在庞大的云计算集群中。在这种情况下,企业必须有一个如OpenStack一般健壮的平台肩负起大规模容器集群的部署、编排和管理等方面的任务。

作为Red Hat的一份子,我有幸在OpenShift容器云早期出现时就关注和负责相关的项目。我见证了OpenShift这个项目的发展,并为之取得的成绩感到骄傲。OpenShift作为一个容器云,它提供了众多契合企业大规模容器集群场景的功能,满足了企业在构建容器云方面的各种需求。在许多实际的项目中,我惊讶于OpenShift灵活的架构总能以某种方式解决用户所面对的问题。

作为一名开源社区的忠实粉丝,我为OpenShift项目取得的成绩感到骄傲,也对OpenShift这个平台充满了信心。因此,我希望通过书籍这个媒介让更多的人了解OpenShift,体验到OpenShift带来的价值。

本书主要内容

容器是当前IT业界的一个热门话题,因为容器以及围绕其展开的生态系统正在改变云计算的面貌。目前,许多用户已经不再处于讨论“要不要使用容器”的阶段,而是进入讨论“如何用好容器”的阶段。容器技术有许多优点,在许多应用场景中有着巨大的潜力,但是用好容器技术可能比容器技术本身更为复杂。在许多人的眼里,容器就是Docker。然而现实是,要在一个企业或组织里大规模地使用容器,除了容器引擎,我们还需要考虑容器编排、调度、安全、应用部署、构建、高可用、网络、存储等方方面面的问题。企业必须有一套整体的解决方案来应对这些挑战。

本书介绍的OpenShift是基于Docker和Kubernetes构建的开源的容器云,是为帮助企业、组织搭建及管理基于容器的应用平台而产生的解决方案。通过OpenShift,企业可以快速搭建稳定、安全、高效的容器应用平台。在这个平台上:

·可以构建企业内部的容器应用市场,为开发人员快速提供应用开发所依赖的中间件、数据库等服务。

·通过自动化的流程,开发人员可以快速进行应用的构建、容器化及部署。

·通过OpenShift,用户可以贯通从应用开发到测试,再到上线的全流程,开发、测试和运维等不同的角色可以在一个平台上进行协作。

·OpenShift可以提高应用从研发到上线的效率和速度,缩短产品上市的时间,可以有效地帮助企业推进DevOps,提升生产效率。

本书将通过深入浅出的方式一步步介绍如何通过OpenShift容器云构建企业容器云平台,并在这个平台上进行应用的开发和部署。我们将探讨在OpenShift上如何满足软件研发常见的需求,如持续集成和交付、微服务化、数据持久化等。同时,我们也将探讨OpenShift的软件定义网络、高可用、配额控制等与运维息息相关的话题。本书会从开发和运维两个视角来审视构建和应用企业容器云的注意事项。

全书分为基础篇、开发篇及运维篇。

·基础篇(第1~4章)介绍容器云、企业容器云建设及OpenShift容器云的情况,帮助读者快速了解相关领域的知识。

·开发篇(第5~9章)重点讲解如何使用OpenShift容器云满足应用研发重点关注的需求,如持续集成、微服务、数据持久化等话题,让读者了解如何通过容器云平台提升应用研发的效率。

·运维篇(第10~14章)介绍OpenShift容器云对运维需求的支持情况,涉及网络、安全、权限及二次开发等运维关注的话题。

希望通过本书让读者完整地了解构建企业容器云平台涉及的各个方面,以及如何使用OpenShift来满足各个方面的需求。

本书的亮点

·来自Red Hat资深技术顾问、认证架构师的一线经验和原创心得。

·不照搬或翻译官方文档堆砌文字,不空泛地讲理念。

·精心设计章节编排,语言通俗易懂,内容循序渐进,帮助你掌握容器云的理念。

·丰富的动手示例让你了解背后的技术细节并掌握实际的操作。

·兼顾开发和运维的不同关注点,探讨容器云如何助力企业IT。

需要注意的是,本书并不是OpenShift的产品手册,也不打算成为一本大而全的功能手册,所以不会枚举OpenShift的所有功能。如果你是要查找OpenShift某个功能的详细参数列表,OpenShift文档是你绝对的不二选择。本书的目的是通过循序渐进的方式,让你了解如何使用OpenShift构建一个企业的容器云,了解如何使用OpenShift解决在企业中碰到的关于开发、运维及DevOps的问题。

本书读者对象

本书适合作为从事云计算和容器技术的架构师、企业IT经理、研发工程师和运维工程师的参考资料,也适合作为希望了解云计算、容器技术的教师、学生及技术爱好者的学习指南。

如何阅读本书

如果你是初次接触OpenShift,建议按顺序从头开始阅读本书,系统地了解和掌握OpenShift容器云的相关知识。对于比较熟悉OpenShift及Kubernetes的读者,可以按需要直接从某一个特定主题的章节开始阅读。本书收录了许多实用的配置和代码示例,并附录了排错指南以方便读者查阅参考,解决实际项目中遇到的问题。

本书勘误

由于水平有限,书中难免有纰漏与谬误。如你发现了本书的不正之处,烦请不吝与笔者联系并指正(nicosoftware@msn.com)。让我们一同完善此书,并推动OpenShift社区不断进步。

祝你在探索OpenShift和容器云的旅程中旅途愉快,收获满满。致谢

当决定要撰写本书时,我并没有预料到这是一件需要耗费如此多时间和精力的事情。虽然我是本书的唯一作者,但是一本书从构想形成初稿到出版,需要许许多多的人兢兢业业地贡献和协助,没有这些幕后功臣,本书不可能得以出版问世。

首先,我必须要感谢我的妻子丽金对我的一贯支持,使我有足够的时间和空间投入我所热爱的事业和爱好中。本书大部分内容的雏形完成于我们的第二个宝宝刚出生的日子里。感谢她对我的理解和包容。

此外,十分感谢红帽的各位同事一直以来给予我的支持和建议,使我能在一个开放和乐于分享的环境里不断成长和进步。尤其要感谢红帽中国的刘长春先生和陈明仪先生给予我的大力支持,让我有机会在早期参与到许多激动人心的OpenShift项目中,了解这一优秀的开源项目。同时,红帽团队开放协助的氛围,也让我获益良多。

本书的大量内容源于我所参与的许多项目实践。许多优秀的客户及合作伙伴团队在使用和构建企业云平台过程中向我和我所在的团队提出了富有挑战性的问题。是他们孜孜不倦的追求,深化了我对容器、云及容器云的理解,进而丰富了本书的内容。在此,对曾经一起合作过的团队表示感谢。特别鸣谢中兴通讯上海研发中心的虚拟化团队。

最后,衷心感谢机械工业出版社的杨福川老师专业的策划和李艺老师细致的审阅,让本书的架构更加完备,内容更加规整,并最终得以顺利出版。

谨以此书献给我的妻子和两个宝宝,还有各位OpenShift项目的爱好者。陈耿基础篇

·第1章 开源容器云概述

·第2章 初探OpenShift容器云

·第3章 OpenShift架构探秘

·第4章 OpenShift企业部署第1章开源容器云概述1.1 容器时代的IT

进入21世纪,我们的社会和经济发生了巨大的变化,社会对各行业服务的要求越来越高、越来越细致。新的需求如洪水一样滔滔不绝地从市场的第一线喷涌到企业的产品部门和IT部门。企业想要在竞争中获取优势,就必须比竞争对手更快地把产品推出市场。为了缩短产品从概念到上市的时间,企业的各个流程和流程中的各个环节都要升级优化。企业在变革,企业IT自然不能独善其身,必须要跟上市场的节奏响应市场的需求。目标是明确的,就是速度要更快,成本要更低、质量要更好。但是现实的问题是,如何做到?

为了满足业务的要求,企业IT在不断地变革,而且从未停步。从客户端/服务器模型,变革为浏览器/服务端模型,从庞大的信息孤岛,变革为基于服务的架构(Service Oriented Architecture,SOA),从物理机,到虚拟化,再到基础架构云(Infrastructure as a Service,IaaS)和应用云(Platform as a Service,PaaS)。对比十几年前,如今IT的效率得到了极大的提升,尤其是进入云时代后,一切资源变得触手可及。以往应用上线需要的资源,从提出申请,到审批,到采购,到安装,再到部署往往需要至少几十天的时间。在云时代,这些事情往往在几天或几小时便可以准备到位。业界在还没有来得及对云的怀疑之声做出反击回应之前,云就已经征服了整个IT世界。

通过这些年云化的推进,大多数有一定规模的企业已经实现了基础架构资源的云化和池化,这里的资源指的是诸如虚拟机、数据库、网络、存储。用户可以用很短的时间获取业务应用所需的机器、存储和数据库。基础架构资源云化其实并不是目的,而是手段。最终的目标是让承载业务的应用可以更快地上线。但现实是,通过IaaS获取的大量基础架构资源并不能被我们的最终业务应用直接消费。应用还必须进行或繁或简的部署和配置,才可能运行在云化的虚拟机之上。部署涉及操作系统配置的修改、编程语言运行环境的安装配置以及中间件的安装配置等。部署的过程在一些企业仍然是通过手工完成,低效且容易出错。有的企业则是通过简单的自动化方式完成,提高了效率,但是满足不了后期更高级别的需求,如动态扩容,持续部署。即使勉强通过简单的自动化实现,后期随着部署平台类型的增多及复杂化,维护的难度将会陡然提高,无法真正做到随时随地持续交付、部署。

基于这个背景,业界需要有一种手段来填充业务应用和基础架构资源的这道鸿沟。让应用可以做到“一键式”快速地在基础架构资源上运行。不管底层的基础架构资源是物理机、虚拟化平台、OpenStack、Amazon Web service,还是Microsoft Azure,都能实现快速、顺畅地部署交付。为了实现这个目标,业界出现了多种不同的平台,即服务云的容器方案。最终命运之神的棒槌砸到了一个叫Docker的开源项目上。Docker通过对Linux内核已有机能的整合和强化,为业务应用提供了一个可靠的隔离环境。此外,层叠式的Docker镜像为应用环境的复用提供了一个绝妙的方案。最后其简单易用的用户命令行,让Docker快速地获取了巨大的用户基础,也成就了今日其在容器界的地位。

通过容器这个手段,下一步就是实现应用在大规模云环境进行应用部署。在以往的软件业中,软件的交付件往往是软件的二进制安装部署包,比如Java的WAR包、Windows的EXE、Linux的RPM包等。在容器时代,不难想象,未来软件的交付件将会以容器镜像作为载体。容器镜像中包含了软件应用本身,应用所依赖的操作系统配置、基础软件、中间件及配置。同时这些镜像将会设计得非常智能,能够自动获取依赖服务的相关信息,如网络IP地址、用户名、密钥等。在云的环境中部署这些应用,需要做的只是简单地启动容器镜像,实例化出相应的容器,然后业务应用快速启动,向最终用户提供服务。目前大量的企业正处于这个变革和转型的过程中。

随着容器成为了部署交付件的标准,大量的业务应用将会需要运行在容器环境中,或者换句话说,未来容器将会成为应用的标准运行环境。那么下一个问题就是,应用如何在容器的环境中运行得更高效、更稳定?为了更好地运行在容器环境中,应用的架构也必然要发生变化,变得契合容器的特性。正因为这个背景,最近,业界在热烈地探讨容器之余,也非常关注应用的微服务化。

如同第二次工业革命蒸汽机带来的冲击一样,容器给IT业界带来了巨大的冲击。面对这场变革,企业IT要做的不仅仅是技术的决策,而且是一个战略性的决策。企业要么主动拥抱它,要么等待来自竞争对手的压力后,再被动地接受并追赶其他的先行者。1.2 开源容器云

如前文所述,为了响应快速变化的业务需求,IT业界正在进行一场变革,在这场变革中,用户通过容器作为手段,在应用程序开发、测试、部署,在IT运维的各个环节进行方方面面的改进和提升。如同第二次工业革命,新技术的应用带来了生产效率和生产力的提升,意味着顺应变革的企业会有更强的竞争能力。它们的应用能更快地上线,想法能更快地变成现实,变成企业的现金收入。相反,没有拥抱新技术和变革的企业的竞争能力将会快速下滑。通过对社区及国内的几场大型容器会议的观察,可以明显感觉到经过了这些年的发展,目前容器技术的使用已经是不可逆转的趋势。企业现在的关注重点已经不再停留于容器技术可不可用,而转变到了如何使用容器,如何用好容器来提升自己IT的效率,提升企业的竞争能力。

既然决定要投入这场变革,拥抱新的技术,那么下一个问题就是:应该怎么做?通过Docker启动一个容器很简单,但是要管理好千千万万个容器,需要的不仅仅是热情和勇气。我们需要回答许多问题,如容器镜像从哪里来?怎么保证容器运行环境的安全?如何进行容器的调度?多主机上的容器如何通信?容器的持久化数据怎么解决?处理好这些问题,需要有切切实实可以落地的方案。一个企业要自行解决所有的这些问题,可以说是不可能完成的任务,其需要投入的人力、物力和时间成本,不是单纯一个企业可以接受的。通过现有的技术或平台快速构建企业自有的容器平台,从经济成本及技术难度角度考量,可以说是更为符合现状的合理选择。

现代容器技术的根据地是开源社区。开源社区提供了一个活跃的舞台,这个舞台凝聚来自世界各地的企业、团队及个人。可以说目前开源社区是IT行业创新发生最高度密集的地方。开源软件目前被应用在IT行业的方方面面,如我们的开发工具、编程语言、编程框架、中间件、数据库、操作系统、储存、网络、云等。通过开源社区的技术,完全可以构建出一个稳定可靠的企业IT技术堆栈。现今企业要基于已有的解决方案构建自有的容器云平台,我认为,开源的容器云平台是一个必然的选择。1.3 OpenShift图1-1 容器云OpenShift开源项目主页提示 OpenShift Origin项目主页:http://www.openshift.org。

OpenShift是一个开源容器云平台,是一个基于主流的容器技术Docker及Kubernetes构建的云平台。作为一个开源项目,OpenShift已有5年的发展历史,其最早的定位是一个应用云平台(Platform as a Service,PaaS)。在Docker时代来临之前,各个厂商和社区项目倾向构建自己的容器标准,如CloudFoundry的Warden、OpenShift的Gear,但是在Docker成为主流及社区的技术发展方向后,OpenShift快速地拥抱了Docker,并推出了市场上第一个基于Docker及Kubernetes的容器PaaS解决方案。OpenShift对Docker及Kubernetes的整合和OpenShift项目最大的贡献方红帽公司(Red Hat Inc.)有着很大的关系。Red Hat对于Linux和开源爱好者而言不用过多的介绍,在某个时代,Red Hat几乎成为了Linux的代名词,它是目前世界上最大的开源软件公司,是开源社区的领导者。Red Hat是OpenShift项目最大的贡献者,同时也是Docker和Kubernetes项目重要的贡献方。正是Red Hat对社区技术发展的敏锐触觉促成了OpenShift与Docker及Kubernetes的整合。事实证明这个决定非常明智。OpenShift前几年在容器和PaaS领域的经验积累,叠加上Docker和Kubernetes容器及容器编排上的特性,一经推出就受到了广泛的关注和好评,连续两年获得InfoWorld年度技术创新大奖。

通过OpenShift这个平台,企业可以快速在内部网络中构建出一个多租户的云平台,在这朵云上提供应用开发、测试、部署、运维的各项服务(如图1-2所示)。OpenShift在一个平台上贯通开发、测试、部署、运维的流程,实现高度的自动化,满足应用持续集成及持续交付和部署的需求;满足企业及组织对容器管理、容器编排的需求。通过OpenShift的灵活架构,企业可以以OpenShift作为核心,在其上搭建一个企业的DevOps引擎,推动企业的DevOps变革和转型。图1-2 OpenShift上运行的容器应用1.4 Docker、Kubernetes与OpenShift

许多刚接触OpenShift的朋友会有这样一个疑问:“Open-Shift与Docker及Kubernetes的关系究竟是什么?”OpenShift是基于容器技术构建的一个云平台。这里所指的容器技术即包含Docker及Kubernetes。如图1-3所示,OpenShift底层以Docker作为容器引擎驱动,以Kubernetes作为容器编排引擎组件。OpenShift提供了开发语言、中间件、自动化流程工具及界面等元素,提供了一套完整的基于容器的应用云平台。图1-3 OpenShift的技术堆栈

1.4.1 容器引擎

Docker的优势在于它可以构建一个隔离的、稳定的、安全的、高性能的容器运行环境。目前,OpenShift使用原生的Docker作为平台的容器引擎,为上层组件及用户应用提供可靠安全的运行环境具有十分重要的价值:

·Docker有非常大的用户基础。以Docker为基础引擎,降低了用户学习的成本。熟悉Docker的用户可以非常容易地上手。

·Docker Hub上有海量的镜像资源。我们日常使用的绝大部分软件,都可以在Docker-Hub上找到官方的或社区贡献的镜像。所有的这些镜像都可以无缝地运行在OpenShift平台上。

·Red Hat本身就是Docker的一个主要贡献者,它们对社区有着很强的影响力,对这个技术的发展也有着很强的领导力。这一点对企业用户来说非常关键,因为谁也不想投资在一个没有前景或过时的技术上。

这里值得关注的一点是OpenShift使用的Docker是原生的Docker,没有任何闭源的修改。因为历史的原因,有些应用云平台如CloudFoundry的选择是兼容Docker的。通过拷贝Docker的部分源代码加入它们的容器引擎中,以读取Docker镜像的内容,然后启动一个非Docker的容器实例。这种兼容的做法,我个人认为是值得商榷的。这让我联想起了当年安卓崛起后,为了挽回颓势,黑莓手机(BlackBerry)推出在自家系统中兼容运行安卓应用的做法。作为曾经黑莓Z10的用户,我非常喜欢那款精致的手机,但不得不说,在黑莓系统上运行安卓应用,简直就是一个噩梦。

1.4.2 容器编排

Docker的流行使得当下每每提起容器时,大家更容易想到的是Docker,甚至说是只有Docker。但是现实是,Docker其实只是容器技术中的一个点。Docker是一款非常优秀和受欢迎的容器引擎,但是当企业或者某一个组织要大规模地将容器技术应用到生产中时,除了有优秀的容器引擎提供稳定可靠及高效的运行环境之外,还需要考虑集群管理、高可用、安全、持续集成等方方面面的问题。单凭一个容器引擎,并不能满足容器技术在生产环境中的需求,尤其是规模较大的生产环境。

在大规模的容器部署环境中,往往涉及成百上千台物理机或者运行于IaaS之上的虚拟机。面对数量庞大的机器集群,用户面临着巨大的管理挑战。举个简单的例子,假设我们需要在100台机器上启动100个容器实例,通过手工的方式在100台机器上执行docker run命令将会是一件疯狂的事情。又比如,我们希望20个容器部署在美国机房、20个容器部署在上海机房、20个容器部署在深圳机房有SSD的服务器上,20个容器部署在深圳机房带万兆网卡的机器上,通过人工或者传统的自动化工具来实现复杂的部署需求将会十分低效。现实是,为了满足容器集群所需的调度、网络、储存、性能及安全的需求,我们必须有专业的工具和平台。这些关于容器集群管理的问题,其实就是容器编排的问题,即Kubernetes要解决的问题。

Kubernetes是Google十多年容器使用经验的总结,虽然Google使用的容器是Docker时代之前的容器,但是业务应用对安全、性能、隔离、网络、储存及调度方面的需求,在最原始的本质上其实并没有发生变化。Google选择和Red Hat一同开源了Kubernetes,且目前在GitHub上的关注程度远远高于其他同类的平台,未来非常可能在容器编排领域成为类似Docker一样的“事实标准”。提示 Kubernetes项目GitHub仓库:https://github.com/kubernetes。

OpenShift集成了原生的Kubernetes作为容器编排组件。OpenShift通过Kubernetes来管理容器集群中的机器节点及容器,为业务应用提供:

·容器调度:按业务的要求快速部署容器至指定的目标。

·弹性伸缩:按业务的需要快速扩展或收缩容器的运行实例数量。

·异常自愈:当容器实例发生异常,集群能自动感知、处理并恢复服务状态。

·持久化卷:为散布在集群不同机器上的容器提供持久化卷的智能对接。

·服务发现:为业务微服务化提供服务发现及负载均衡等功能。

·配置管理:为业务应用提供灵活的配置管理及分发规则。

1.4.3 容器应用云

前文谈到了容器引擎及容器编排,这两项是容器技术的重要基石。掌握这两个基石,用户就具备了运维大规模容器集群的能力。现实中用户考虑使用容器应用平台的一个最终的目的就是提高生产效率。容器引擎及容器编排组件是两项关键的技术,但是光有技术还不能满足生产效率的要求。在这些技术及框架的基础上,必须有更丰富的内容以及更友好的用户接入方式,把这些技术转化成实实在在的生产力。

OpenShift在Docker和Kubernetes的基础上提供了各种功能,以满足业务应用、研发用户及运维用户在生产效率上的诉求。

·应用开发框架及中间件。OpenShift提供了丰富的开箱即用的编程开发框架及中间件,如Java、PHP、Ruby、Python、JBoss EAP、Tomcat、MySQL、MongoDB及JBoss系列中间件等。

·应用及服务目录。OpenShift提供了如软件市场式的服务及应用目录,可以实现用户一键部署各类应用及服务,比如一键部署Hadoop集群和Spark集群。

·自动化流程及工具。OpenShift内置了自动化流程工具S2I(Source to Image),帮助用户自动化完成代码的编译、构建及镜像发布。

·软件自定义网络。通过OpenVSwitch,OpenShift为用户提供了灵活强健的软件定义网络。实现跨主机共享网络及多租户隔离网络模式。

·性能监控及日志管理。OpenShift提供了开箱可用的性能监控及日志管理的组件。通过平台,业务能快速获取运行状态指标,对业务日志进行收集及分析。

·多用户接口。OpenShift提供了友好的Web用户界面、命令行工具及RESTful API。

·自动化集群部署及管理。OpenShift通过Ansible实现了集群的自动化部署,为集群的自动化扩容提供了接口。

通过前面的介绍,我们可以了解到OpenShift在Docker及Kubernetes的基础上做了方方面面的创新,最终目的就是为用户及业务应用提供一个高效、高生产力的平台。1.5 OpenShift社区版与企业版

OpenShift是一个开源项目,所有的源代码都可以在GitHub仓库上查阅及下载。企业和个人都可以免费下载和使用OpenShift构建属于自己的容器云平台。我们也可以加入OpenShift的社区成为一名光荣的OpenShift社区贡献者。提示

·OpenShift项目主页:https://www.openshift.org。

·OpenShift GitHub仓库:https://github.com/openshift。

开源软件的一大好处在于,用户可以自由选择和免费使用。缺点是没有人会对软件的使用提供支持保障。对于个人用户来说,这不是问题。但是对于企业来说,更多是希望有人能在出现问题的时候提供专业的支持和保障。这种需求给一些公司提供了机会,他们在开源软件的基础上进行定制、测试、修复及优化,推出企业版本,并对之进行支持。这种软件称为开源商业软件。Red Hat就是开源软件商业模式的奠基人,而且是目前世界上最大的开源软件公司。OpenShift的开源社区版本叫OpenShift Origin,Red Hat在OpenShift Origin的基础上推出了OpenShift的企业版本,其中包含了公有云服务OpenShift Online及私有云产品OpenShift Container Platform(以前也称为OpenShift Enterprise)。更多关于OpenShift企业版的信息可以访问OpenShift企业版的主页:http://www.openshift.com。

OpenShift的企业版和社区版在代码上十分相似,功能上可以说是基本一致。企业版是基于某个社区版版本产生的。作为一个开源软件公司,Red Hat所有产品的企业版的源代码也是完全公开的。就我个人的经验而言,企业版往往会更稳定,因为社区版的代码变化会更频繁。

经常会被问到这样一个问题:“究竟我们是使用社区版还是企业版比较好?”这个问题没有唯一的答案,要视用户所处的使用场景而言。对于个人用户的开发测试及出于研究目的而言,社区版会是一个不错的选择,但是其实OpenShift的企业版也对个人用户免费开放。对于企业的关键业务应用的部署而言,企业版自然会是更好的选择,企业版除了稳定以外,还有专业的售后支持。

目前一些OpenShift的企业客户,在使用OpenShift企业版的同时,也会将他们的需求以提案或代码的方式提交到社区,在被社区评审接纳以后融入成为OpenShift产品未来版本的核心特性。这样做的好处是,企业所需的功能往后就由社区进行维护,不存在如自定义的修改在未来版本还需要进行测试及匹配,从而带来不可预知的工作量和风险。企业用户参与到开源社区,可以对产品的发展方向发表自己的看法。从而避免在传统的闭源商业软件时代用户只能被厂商牵着鼻子走的窘境。

本书的内容将以OpenShift社区版OpenShift Origin进行探讨及讲解。相关的经验也适用于OpenShift的企业版OpenShift Container Platform。在一般情况下,本书将直接使用OpenShift来指代OpenShift的社区版和企业版。在企业版和社区版存在差异的情况下,将会特别标注。

接下来让我们扬帆起航,开启一段通往企业容器云的旅程。第2章初探OpenShift容器云

在前面的章节我们一起探讨了容器云的概念以及OpenShift容器云项目的情况。理论联系实际,为了对OpenShift容器云有更直接的认识,本章将会帮助你快速地在自己的个人电脑上搭建一个可用的OpenShift环境,并在这个环境上运行我们的第一个容器应用。这里假设你对Linux及Docker已经有了基本的了解,并掌握了基本的使用命令。对Docker不熟悉的读者,请参考dockone.io的Docker入门教程(http://dockone.io/article/111)。2.1 启动OpenShift Origin

OpenShift支持运行在基础架构之上,同时支持多种安装方式。

·手工安装。用户下载OpenShift的二进制包,手动进行配置和启动。

·快速安装。通过OpenShift提供的交互式Installer进行安装。

·高级安装。在多节点集群的环境中,OpenShift可通过Ansible对多台集群主机进行自动化安装和配置。

·Docker镜像。通过运行OpenShift的Docker镜像启动一个All-in-One的OpenShift容器实例。这适合开发测试人员快速部署和验证。提示 OpenShfit Origin 1.3.0提供了一个全新的命令oc cluster up帮助开发用户快速启动一个可用的OpenShift集群。

为了尽可能了解OpenShift的细节,这里使用手动安装方式快速启动一个可用的Open-Shift Origin实例,这个方法也适用于开发和测试。在实际的多节点集群环境中,OpenShift的安装一般会通过高级安装完成,即通过Ansible完成。关于安装的更多信息可以参考OpenShift Origin的安装文档。提示 OpenShift Origin的安装文档:https://docs.openshift.org/latest/install_config/index.html。

2.1.1 准备主机

为了运行OpenShift Origin,需要一台运行Linux操作系统的主机,可以是物理机或是虚拟机。为了试验方便,推荐使用虚拟机。KVM、VMWare或VirtualBox的虚拟机均可。表2-1是推荐的最低配置。表2-1 主机硬件配置

2.1.2 准备操作系统

请至CentOS Linux主页下载CentOS Linux 7.2的ISO镜像。如果镜像下载的网速太慢,也可从中国科技大学提供的开源镜像站点下载。提示

·CentOS主页:https://www.centos.org/download/。

·中国科技大学镜像站点:https://mirrors.ustc.edu.cn/centos/7.2.1511/isos/x86_64/。

按提示为主机安装CentOS操作系统。安装时选择最小安装模式(Minimal模式)。

2.1.3 操作系统配置

操作系统安装完毕后,以root用户登录系统。请确认主机已经获取了IP地址。本例中,笔者使用的主机的IP地址为192.168.172.167。[root@master ~]# ip a1: lo: mtu 65536 qdiscnoqueue state UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: eno16777736: mtu 1500 qdiscpfifo_fast state UP qlen 1000 link/ether 00:0c:29:df:3e:cb brdff:ff:ff:ff:ff:ffinet 192.168.172.167/24 brd 192.168.172.255 scope global dynamic eno16777736valid_lft 1286sec preferred_lft 1286sec inet6 fe80::20c:29ff:fedf:3ecb/64 scope link

OpenShift集群的正常运行需要一个可被解析的主机名。本例配置的主机名为master.example.com。[root@master ~]# hostnamectl set-hostname master.example.com

确认主机名是否能被正常解析。如不能解析,请修改/etc/hosts文件添加主机名的解析,将主机名指向实验主机的IP地址。

2.1.4 安装Docker

OpenShift平台使用的容器引擎为Docker,因此需要安装Docker软件包。[root@master ~]# yum install -y docker

安装完毕后启动Docker服务,并配置为开机自启动。[root@master ~]# systemctl start docker[root@master ~]# systemctl enable docker

由于国内访问DockerHub下载镜像的速度过于缓慢,可以使用中国科技大学的Docker-Hub镜像服务器进行加速。编辑/etc/sysconfig/docker文件,为DOCKER_OPTS变量追加参数--registry-mirror=https://docker.mirrors.ustc.edu.cn。修改后变量值大致如下:OPTIONS='--selinux-enabled --log-driver=journald --registry-mirror=https://docker.mirrors.ustc.edu.cn'

修改完Docker配置文件后,重启Docker进程使修改的配置生效。[root@master ~]# systemctl restart docker

此时可以尝试运行一个DockerHub上的镜像,测试Docker是否正常工作。在下面的例子里,笔者运行了一个名为hello-openshift的镜像。这个镜像中运行了一个用go语言编写的小程序。如果一切正常,容器将成功启动,并监听8080及8888端口。[root@master ~]# docker run -it openshift/hello-openshiftUnable to find image 'openshift/hello-openshift:latest' locallyTrying to pull repository docker.io/openshift/hello-openshift ...latest: Pulling from docker.io/openshift/hello-openshifta3ed95caeb02: Pull completea8a87b6280f5: Pull completeDigest: sha256:fe89d47f566947617019a15eef50d97c8c20d6c9a5aba0d3cb45f84d2085e4e3Status: Downloaded newer image for docker.io/openshift/hello-openshift:latestserving on 8888serving on 8080

测试完毕后,按Ctrl+c组合键停止运行中的容器。如果Docker无法找到容器镜像或者出现了其他错误,则检查前序执行的安装配置步骤。

2.1.5 下载OpenShift Origin安装包

从OpenShift Origin的GitHub仓库中下载OpenShift Origin的二进制执行文件。本书示例所用的OpenShift Origin版本为1.3.0,文件为openshift-origin-server-v1.3.0-3ab7af3d097b57f933eccef684a714f2368804e7-linux-64bit.tar.gz

将下载好的OpenShift二进制包拷贝到主机的/opt目录下。提示 本例中使用的OpenShift Origin二进制执行文件包的下载地址如下:https://github.com/openshift/origin/releases/download/v1.3.0/openshift-origin-server-v1.3.0-3ab7af3d097b57f933eccef684a714f2368804e7-linux-64bit.tar.gz。

2.1.6 安装及启动OpenShift Origin

进入/opt目录,解压下载好的OpenShift Origin二进制安装包。[root@master /]# cd /opt/[root@master opt]# tar zxvf openshift-origin-server-v1.3.0-3ab7af3d097b57f933eccef684a714f2368804e7-linux-64bit.tar.gz[root@master opt]# ln -s openshift-origin-server-v1.3.0-3ab7af3d097b57f933eccef684a714f2368804e7-linux-64bit /opt/openshift

将OpenShift的相关命令追加至系统的PATH环境变量中。编辑/etc/profile文件,添加如下文本内容至文件末尾。PATH=$PATH:/opt/openshift/

执行source命令使修改的配置生效。[root@master opt]# source /etc/profile

修改完毕后,可以测试Shell能否找到openshift命令。执行openshift version命令查看当前OpenShfit的版本。通过下面的输出可以看到当前使用的OpenShift版本是1.3.0,搭配的Kubernetes的版本为1.3.0,etcd为2.3.0。[root@masteropenshift]# openshift versionopenshift v1.3.0kubernetes v1.3.0+52492b4etcd 2.3.0+git

进入/opt/openshift目录。执行openshift start命令启动OpenShift Origin。[root@master opt]# cd /opt/openshift[root@masteropenshift]# openshift start

命令执行后控制台将有日志输出,当日志输出停止后即表示OpenShift服务启动完毕。

2.1.7 登录OpenShift Origin控制台

OpenShift Origin启动完毕后,在浏览器中访问网址https://master.example.com:8443,即可看见OpenShift的Web控制台,如图2-1所示。图2-1 OpenShift Web控制台登录界面注意 如浏览器提示证书不可信,请忽略此告警并继续。推荐使用FireFox及Chrome浏览器访问Web控制台。

请使用系统用户dev登录,用户密码为dev。成功登录后将可以看到OpenShift的欢迎页面,如图2-2所示。图2-2 OpenShift Origin Web控制台欢迎页面

恭喜您!您已经成功踏入了容器云的世界!2.2 运行第一个容器应用

OpenShift服务成功启动后,现在可以尝试运行你的第一个容器应用了!

2.2.1 创建项目

在部署应用前,先要为应用创建一个项目,即Project对象。项目是OpenShift中的一种资源组织方式。对一般用户而言,不同类型的相关资源可以被归属到某一个项目中进行统一管理。对管理员来说,项目是配额管理和网络隔离的基本单位。

以dev用户登录OpenShift的Web控制台。单击页面中的New Project按钮创建一个新的项目。在创建项目页面输入项目名hello-world,展示名称填入Hello World。单击Create按钮创建项目,如图2-3所示。图2-3 创建Hello World项目

2.2.2 部署Docker镜像

现在马上可以部署你的第一个容器应用了。前文曾介绍到OpenShift是以原生的Docker作为平台的容器引擎,因此只要是有效的Docker镜像,均可以运行于OpenShift容器云平台之上。提示 Docker默认允许容器以root用户的身份执行容器内的程序。OpenShift对容器的安全比Docker有更谨慎的态度。OpenShift默认在启动容器应用时使用非root用户。这可能会导致一些Docker镜像在OpenShift平台上启动时报出Permission denied的错误。别担心,其实只需要稍稍修改OpenShift的安全配置,即可解决这个问题。具体修改我们会在后面的章节介绍。但是请记住,在制作自己的Docker镜像时,建议避免使用root用户启动容器内的应用,以降低安全风险。

下面在OpenShift上运行DockerHub上的hello-openshift镜像。单击页面上方的Deploy Image页签,如图2-4所示。

在部署镜像页面,单击Image Name单选按钮,并输入镜像名称openshift/hello-openshift,然后单击放大镜按钮,如图2-5所示。单击按钮后OpenShift将根据输入的镜像名称在DockerHub及配置了的镜像仓库中查找该名称的容器镜像。图2-4 部署容器镜像图2-5 输入容器镜像名称注意 请保证实验用的虚拟机能连接上互联网,以访问DockerHub仓库下载所需镜像。

片刻之后,OpenShift将找到我们指定的镜像,并加载镜像的信息。浏览信息后,单击页面下方的Create按钮进行部署,如图2-6所示。此时OpenShift将会在后台创建部署此容器镜像的相关对象。

确认部署后,页面将转跳到一个部署完成页面,如图2-7所示。单击页面上的Continueto overview链接转跳到Hello World项目的主页。

在Hello World项目的主页,你会看到界面上有一个空心的圆圈,圆圈中间有一个大大的数字0,如图2-8所示。这表示OpenShift正在部署容器镜像并实例化容器,当前就绪的容器数量为0。图2-6 确认部署容器镜像图2-7 部署完成确认页面图2-8 Hello World项目主页

当第一次部署某个容器应用时,由于需要到DockerHub上下载镜像文件,所以需要等待一定的时间。所需时间视实验主机所在网络的网速而定。如果在创建容器应用的过程中出现了Image Pull Error的状态,可以尝试手工下载镜像。检查Docker能否正常连接上DockerHub及其镜像站点。docker pull docker.io/openshift/hello-openshiftdocker pull docker.io/openshift/origin-deployer:v1.3.0docker pull docker.io/openshift/origin-pod:v1.3.0

稍等片刻后,hello-openshift容器会成功启动。可以看到项目主页上的圆圈变成了蓝色,容器计数从“0”变成了“1”,如图2-9所示。这说明容器已经成功启动了,当前有“1”个在运行的实例。图2-9 hello-openshift容器成功启动

恭喜,您已经成功在OpenShift上运行了您的第一个容器应用!

2.2.3 访问容器应用

容器启动后,用户就可以尝试访问这个容器实例中运行的应用服务了。当容器启动后,每个容器实例都会被赋予一个内部的IP地址,用户可以通过这个地址访问容器。

单击界面上的圆圈将转跳到hello-open-shift容器的实例列表,单击列表中的容器进入容器详情页面。在详情页面可以看到当前的容器被分配了一个IP地址,如图2-10中的172.17.0.3。图2-10 hello-openshift容器的详情页面

回到实验的主机上,执行下面的命令就可以访问hello-openshift容器提供的服务。hello-openshift中运行着一个简单的用Go语言编写的应用。其监听在8080端口,并为所有请求返回字符串Hello Open-Shift!。[root@masteropenshift]# curl 172.17.0.3:8080Hello OpenShift!

如上面的输出所示,容器应用成功返回了Hello OpenShift!。这表明,我们的容器应用工作正常。

2.2.4 一些疑问

在实验的主机上,我们通过命令curl 172.17.0.3:8080成功访问了应用。但是如果在另一台主机上执行相同的命令,就会发现无法访问到这个服务。别着急,这是因为172.17.0.3是一个内部的IP地址,只存在于OpenShift集群当中。OpenShift集群之外的机器将无法识别这个IP地址。那么,集群外的机器该如何访问我们的容器服务呢?这里先买个关子,在后面的章节里,我们将会慢慢揭晓答案。

此外,本例的安装只是针对一台主机,这样的环境适合作为开发环境使用。对于多主机集群的安装,请参考第11章。

至此,我们安装了一个单节点的OpenShift集群,并运行了一个名为hello-openshift的容器镜像。hello-openshift是一个非常简单的容器应用。在hello-openshift的容器启动时会运行一个用Go语言编写的程序,这个程序将会持续监听在8080端口,响应任何输入请求并返回字符串“Hello OpenShift!”。接下来,我们将部署一个更加复杂且有趣的容器应用,并一起探索OpenShift为部署的容器应用提供了哪些后台支持。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载