OpenShift开发指南(原书第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 Kubernetes简介

OpenShift是Kubernetes的一个发行版译注2。Kubernetes最初是一个始于谷歌的开源项目,自2014年发布以来,由一群公司和个人进行开发和维护。Kubernetes社区由云原生计算基金会(Cloud Native Computing Foundation,CNCF)(https://cncf.io)进行正式管理和控制。自项目开始以来,红帽公司一直是Kubernetes的主要贡献者,在OpenShift的开发过程中,OpenShift的开源社区译注3与Kubernetes社区进行了充分的协同工作。

Kubernetes之于OpenShift就好像Linux内核之于Linux发行版。Linux发行版将Linux内核与你直接使用的更熟悉的应用程序相结合,它还对你的登录方式、文件存储位置以及哪些软件是必要的做出了一些基本的裁剪选择,从而让你直接使用Linux发行版进行工作,避免从头开始构建操作系统。

Kubernetes定义了一组公共资源和操作它们的API。这些资源描述期望达到的状态译注4,并跟踪集群的实际状态译注5以及在集群上运行的内容。Kubernetes试图使一个资源的实际状态与它的期望状态相匹配,而且会一直在集群的生命周期内重复这样的操作。这种观察和处理的连续循环机制称为校正循环(reconcile loop)。

仅仅依靠Kubernetes还不足以在生产环境中运行应用软件。在你使用它做很多事情之前,还有很多决策要做,有很多组件需要配置。想象一下,你有一个应用程序的源代码,需要在Kubernetes集群上部署这个应用程序。你将如何编译源代码或将其与容器镜像中的解释器译注6配对打包?你的构建过程是否需要其他计算资源,比如专门的构建服务器?一旦镜像构建完成,它将存储在哪里,以便你的集群可以访问它?是Docker Hub(https://hub.docker.com)或Quay(https://quay.io)这样的公共容器镜像仓库(外部依赖项),还是你需要运行自己的私有镜像仓库?你的程序可能还依赖于其他程序,比如数据库或应用服务器。这些程序将在哪里以及如何运行?你是在容器集群上运行它们,还是必须维护另一个系统?这些都是基本的考虑。解决了这些问题,你可能就拥有了一个正在运行的pod,但同时这也带来了一组新的问题:你的应用程序应该如何与外部世界连接?如何管理和控制应用程序的按需伸缩或版本发布?