OpenShiftRedHat公司基于开源的云平台,是平台即服务(Paas),是一个开源容器平台,是一个基于主流的容器技术Docker和Kubernetes构建的云平台。底层以Docker作为容器引擎驱动,以Kubernetes作为容器编排引擎组件,并提供了开发语言,中间件,DevOps自动化流程工具和web console用户界面等元素,提供了一套完整的基于容器的应用平台。

RedHat是开源OpenShift最大的贡献者,包括社区版(OpenShift Origin)和企业版(OpenShift Online/OpenShift Enterprise)

作用

在OpenShift上可以进行开发、测试、部署、运维全流程,实现高度自动化,满足企业中的应用持续集成和交付及部署的需求,同时也满足企业对于容器管理(Docker)、容器编排(Kubernetes)的需求。

当接触之后会发现,为什么OpenShift会被开发以及运维人员广受追捧,除了将Docker和Kubernetes集成之外,服务类集成了nginx、apache、mysql、Jenkins等服务,语言类集成了PHP、Ruby、Python、Node.js、Perl、Java、Go等。

架构

自底而上包括几个层次:基础架构层、容器引擎层、容器编排层、PaaS服务层、界面及工具层。

基础架构层:为OpenShift平台的运行提供基础的运行环境。OpenShift支持运行在物理机,虚拟机(KVM、VMware、Virtual Box等),公有云、私有云、混合云上。

容器引擎层:Docker

容器编排层:Kubernetes

PaaS服务层:容器云平台的最终目的是为上层应用服务提供支持,提高开发,测试,部署,运维的速度和效率。用户在OpenShift云平台上可以快速的获取和部署一个数据库、缓存等。

界面及工具层:OpenShift提供了多种用户的接入渠道:Web控制台,命令行,RestFul接口等

核心组件

master节点

主控节点:集群内的管理组件都运行在master节点上。master负责集群的配置管理,维护集群状态

{ % note success % }

master节点运行服务的组件:

API Server:负责提供Web console和RESTful API。集群内所有节点都会访问API Server,更新节点的状态以及容器状态。

数据源(Data store):集群内所有状态信息都会存储在后端的一个etcd的分布式数据库中。

调度控制器(Scheduler):负责按用户输入的要求寻找合适的计算节点

复制控制器(Replication Controller):负责监控当前容器实例的数量和用户部署指定的数量是否一致,若有容器异常退出,该控制器发现实际数少于部署定义数,从而触发部署行的实例。

{ % endnote % }

node节点

计算节点:接收master节点的指令,运行和维护Docker容器。master节点也可以是node节点

Project

在Kubernetes中使用命名空间来分隔资源。同一个命名空间中,某个对象的名称在其分类中必须唯一,但在不同命名空间中则可以重复。OpenShift集成了Kubernetes命名空间的概念,而且在其上定义了Project对象的概念,每一个Project和一个namespace相关联。

Pod

Service

Router和Route

Persistent Storage

Registry

未进行定义的的这五个几乎和Kubernetes中的概念是一致的,包括已说明的几个组件也是一样的。

S2I: Source to Image

负责将源码构建成镜像

步骤:

1)用户输入源代码仓库的地址

2)选择S2I构建的基础镜像

3)触发构建

4)S2I构建执行器从指定的源码仓库地址下载代码

5)S2I构建执行器实例化Builder镜像,并将代码注入到Builder镜像

6)S2I构建执行器按照预定义的逻辑执行源代码的编译,构建

7)生成新的镜像

8)S2I构建执行器将新镜像Push到Registry

9)更新相关的Image Stream信息

【核心流程】

1)创建应用:用户通过web控制台或oc命令创建应用,Openshift平台根据用户输入的源码地址和Builder镜像,生成构建配置Builder config和部署配置Deployment config,Service,Route等。

2)触发构建

3)实例化构建:平台根据Builder config实例化Builder对象,下载代码,并将代码注入到Builder对象,执行编译,构建

4)生成新镜像并Push到Registry

5)更新相关的Image Stream信息

6)触发部署:当Image Stream更新后,触发平台部署镜像

7)实例化镜像部署:平台根据Deployment config实例化部署,生成Deploy对象

8)生成Replication Controller

9)部署容器:通过Replication Controller,平台将pod及容器部署到各个节点上

10)用户访问:用户通过浏览器访问Route对象中定义的应用域名

11)请求处理并返回:请求到达Router组件后,通过Route转发给相关联的Service,最终到对应的容器实例。

OpenShift的功能

  1. 容器引擎:docker;
  2. 容器编排:kubernetes
  3. 应用开发框架及中间件:Java、Python、Tomcat、MySQL、PHP、Ruby、MongoDB和JBoss等中间件;
  4. 应用及服务目录:用户可一键部署各类应用及服务;
  5. 自动化流程及工具:内置自动化流程工具S2I(Source to Image),用户可完成代码编译、构建和镜像发布;
  6. 软件定义网络:提供OpenVSwitch,实现跨主机共享网络及多租户隔离网络模式;
  7. 性能监控及日志管理:内置Prometheus监控功能,用户可以通过Grafana仪表板上实时显示应用;
  8. 多用户接口:提供友好的UI、命令行工具(oc,类似于k8s的kubectl以及RESTful API,基本与k8s兼容);
  9. 自动化集群部署及管理:通过Ansible实现集群的自动化部署,为集群的自动化扩容提供接口。

OpenShift与K8S的区别

1)概念:OpenShift是PaaS(平台即服务),K8S是CaaS(容器即服务)。OpenShift内置了Kubernetes。OpenShift底层以Docker作为容器引擎驱动,以Kubernetes作为容器编排引擎组件。
2)部署:OpenShift可以安装在RHEL(Red Hat Enterprise Linux)和RHELAH(Red Hat Eneterprise Linux Atomic Host)、CentOS和Fedora上;K8S最好在Unbuntu、Fedora和Debian上运行,可部署在任何主要的IaaS上,如IBM、AWS、Azure、GCP和阿里云等云平台上。
3)Rollout:OpenShift可以基于Ansible这种专有安装程序使用最少的配置参数进行安装;K8S大多数基于Rancher Kubernetes Everywhere(RKE)或kops等安装程序进行安装。
4)WEB UI:OpenShift的Web UI有一个登录页面,这个UI不可以管理集群,但是可以可视化服务器、项目和集群角色;K8S的可视化界面需要单独安装,需要通过kube proxy访问,将本地机器的端口转发到集群的管理服务器,没有登录页面,需要手动创建承载令牌从而提供身份验证和授权。
5)网络:OpenShift提供了开箱即用的本机网络解决方案,即OpenvSwitch,它提供三种不同的插件;K8S没有本机网络解决方案,但提供可供第三方网络插件使用的接口。

OpenShift与k8s的相同点

  OpenShift集成了原生的k8s作为容器编排组件,提供容器集群的管理,为业务应用可以提供:

  1. 容器调度:根据业务的要求,快速部署容器到达指定的目标转态;
  2. 弹性伸缩:应用可以快速的扩缩容pod的实例数量;
  3. 异常修复:在容器实例发生异常时,集群可以自动发现问题、处理并恢复应用服务的状态;
  4. 持久化卷:为集群中的不同机器上的容器提供持久化卷的对接功能;
  5. 服务发现:可以提供负载均衡及服务发现功能;
  6. 配置管理:为业务应用提供灵活的配置管理和分发规则。

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0