当今最流行的容器编排软件替代品是OpenShift 和 Kubernetes。
在本文中,我们将比较OpenShift 和 Kubernetes, 让我告诉你,这种比较远非公平。事实上,比较OpenShift 和 Kubernetes很困难,因为它们完全是两种截然不同的解决方案。比较它们有点像比较个人计算机 (OpenShift) 和 CPU (Kubernetes)。
由于 Kubernetes 是 OpenShift 的重要组成部分,比较这两个平台可能会造成混淆。因此,为了帮助您确定哪个更适合您,我们将介绍两者之间最显着的差异,包括安装、命令行选项、用户界面、安全性、支持和其他主题。
在我们继续查看 OpenShift 和 Kubernetes 之间的区别(即OpenShift 与 Kubernetes)之前,让我们尝试简要地了解一下它们。
什么是 Kubernetes?
Kubernetes 是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。它通常也被称为 K8s。Kubernetes 是谷歌开发的第三个容器管理系统。第一和第二分别是博格和欧米茄。单击此处了解有关 Google 构建和使用的这三个容器管理系统的更多信息。
什么是 OpenShift?
Red Hat OpenShift 是一个企业就绪的 Kubernetes 容器平台,可在 Kubernetes 集群内外实现自动化,并包含一个作为 Kubernetes 集群的一部分安装的私有容器注册表。
什么是容器编排系统?
执行容器化工作负载和服务所需的操作任务的自动化,例如容器配置、部署、扩展、网络和负载平衡,被称为容器编排。实际上,有助于自动化的系统是容器编排系统。如前所述,市场上有多种替代品。其中包括 Kubernetes、OpenShift、Amazon ECS、Docker Swarm 和 Nomad 等等。在此博客中,我们将讨论 K8S 与 OpenShift,其中 Kubernetes 纯粹是一个容器编排引擎,而 OpenShift 是一个平台即服务 (PAAS) 解决方案,用于简化容器编排。在继续进行比较之前,让我们尝试快速了解 OpenShift 和 Kubernetes 的架构。
Kubernetes 的快速架构
Kubernetes 集群由一个或多个称为控制平面的主机和一个或一组称为节点的工作机器组成。应用程序工作负载的组件(称为 Pod)由工作节点托管,而控制平面或主节点负责监督集群的工作节点和 Pod。
要使 Kubernetes 集群完整并发挥作用,您必须拥有许多不同的组件。一个 Kubernetes 集群由以下部分组成:
控制平面或主节点组件
- kube-apiserver: Kubernetes API 通过称为 kube-apiserver 的 Kubernetes 控制平面组件提供。Kubernetes 控制平面的前端是 API 服务器。
- etcd: Kubernetes 使用 etcd 作为所有集群数据的后备存储,因为它是一个可靠且高度可用的键值存储。
- kube-scheduler: Control plane 的 kube-scheduler 组件,负责为没有关联节点的新形成的 Pod 选择节点。
- kube-controller-manager:运行控制器进程是控制平面组件 kube-controller-manager 的职责。
- cloud-controller-manager:云控制器管理器将与云平台通信的组件与仅与集群交互的组件分开,使您能够将集群连接到云提供商的 API。
工作机器或节点组件
- kubelet: kubelet 的职责是确保容器在 Pod 中运行。
- kube-proxy:集群中的每个节点都运行 kube-proxy,这是一个执行部分 Kubernetes 服务概念的网络代理。在节点上,kube-proxy 跟踪网络策略。这些网络规则允许从集群内部和外部的会话与您的 Pod 进行网络通信。
- 容器运行时:容器运行时是负责运行容器的软件。除了 Kubernetes CRI 的任何其他实现之外,Containerd 和 CRI-O 是 Kubernetes 支持的两种容器运行时。
OpenShift 的快速架构
可以在 OpenShift 容器平台上创建和运行容器化应用程序。支持容器化应用程序的技术被整合到 OpenShift 容器平台中,该平台的根源在于 Kubernetes。
控制平面或主节点组件
1. OpenShift 服务:
- OpenShift API 服务器:对于项目、路由和模板等 OpenShift 资源,OpenShift API 服务器验证和配置数据。
- OpenShift 控制器管理器:项目、路由和模板控制器对象是 OpenShift 对象的示例,OpenShift 控制器管理器在使用 API 强制执行所需状态之前监视 etcd 中的更改。
- OpenShift OAuth API 服务器:用户、组和 OAuth 令牌均由 OpenShift OAuth API 服务器配置和验证,然后再用于验证 OpenShift Container Platform。
- OpenShift OAuth 服务器:为了向 API 验证自己的身份,用户必须向 OpenShift OAuth 服务器请求令牌。
2. 网络组件: OpenShift 容器平台使用软件定义网络 (SDN) 策略提供统一的集群网络,允许整个集群中的 pod 之间进行通信。
3. Kubernetes 服务:
- Kubernetes API 服务器: pod、服务和复制控制器的数据由 Kubernetes API 服务器验证和设置。此外,它还充当集群共享状态的焦点。
- Kubernetes 控制器管理器:当复制、命名空间和服务帐户控制器对象等项目发生变化时,Kubernetes 控制器管理器会监视 etcd 的这些更改,然后利用 API 强制执行所需的状态。
- Kubernetes 调度器:当 Kubernetes 调度器注意到没有指定节点的新产生的 pod 时,它会选择托管 pod 的理想节点。
4. Cluster Version Operator: OpenShift Container Platform中默认部署了很多集群Operator,Cluster Version Operator(CVO)处理它们的生命周期。使用最新的组件版本和数据,CVO 还咨询 OpenShift 更新服务以确定更新并更新仍然有效的路径。
5. etcd:当其他组件等待 etcd 进行修改以便它们可以进入所需状态时,etcd 存储持久主状态。
控制平面还包括 CRI-O 和 Kubelet,其中 CRI-O 提供运行、停止和重启容器的设施。Kubelet 充当 Kubernetes 的主要节点代理,负责启动和监控容器。
工作机器或节点组件
- 可观察性: OpenShift 容器平台的关键平台组件通过预先设置、预安装和自我更新的监控堆栈进行监控。集群管理员可以选择在安装 OpenShift Container Platform 后启用对用户定义项目的监控。
- 网络:集群管理员可以使用多种选项来向外部流量开放集群应用程序并保护网络连接。
- OpenShift Lifecycle Manager: Operator Lifecycle Manager 为创建和部署应用程序的人员提供的设施允许 Operator 的分发和存储。
- 集成镜像存储库: OpenShift 容器平台可以从您的源代码创建镜像、部署它们并管理它们的生命周期。为了在本地管理镜像,它提供了一个内部的、集成的容器镜像注册表,可以安装在您的 OpenShift Container Platform 环境中。
- 机器管理:要管理 OpenShift Container Platform 集群,您可以利用机器管理来灵活地与底层基础设施交互,例如 AWS、Azure、GCP、OpenStack、Red Hat Virtualization 和 vSphere。
与 Control Plane 一样,Worker 节点也包含 CRI-O 和 Kubelet。
使用 Kubernetes 的优势
- Kubernetes 是开源的,可以在任何平台上免费使用。
- 它有一个规模庞大、活跃的开发人员和工程社区,有助于定期发布新功能。
- 可以使用 kubeadm、kops 和 kube-spray 等多种安装工具在大多数系统上安装 Kubernetes。
使用 OpenShift 的优势
- 几乎每个 Kubernetes 任务都可以使用 OpenShift 默认的功能丰富的图形界面来构建、部署、扩展、监控和实施,管理员和开发人员可以使用该界面。
- 不同的云服务提供商提供各种 Kubernetes 管理的服务,每个服务都有自己的一套附加组件、插件和使用指南。因此,当您使用 Kubernetes 从一个云提供商迁移到另一个云提供商时,您需要了解事情是如何运作的。也就是说,就 OpenShift 而言,可以使用相同的 Web 界面在所有云服务平台上构建、部署和管理您的应用程序。
- 为了防止帐户泄露问题,OpenShift 默认提供基于角色的访问控制 (RBAC),这有助于确保每个开发人员只获得访问他们需要的功能的权限。
- Red Hat OpenShift 为 Kubernetes 和 Kubernetes 原生应用程序提供商业支持、更新、补丁和更好的安全性。
- 红帽 OpenShift 通过集成平台监控并包括自动化维护操作和升级,提供控制、可见性和管理,以轻松部署、维护和创建代码管道。
1. OpenShift 与 Kubernetes:产品与项目
OpenShift 和 Kubernetes 之间的第一个也是最重要的区别是OpenShift是一个需要会员资格的商业产品。相比之下,Kubernetes 是一个免费提供的开源项目。因此,在出现任何问题或错误的情况下,OpenShift 提供了一个很好的付费支持替代方案来解决问题。另一方面,在 Kubernetes 中,您需要联系由包括开发人员、管理员和架构师在内的几位专业人员组成的 Kubernetes 社区,以解决工具中发现的问题或错误。
问你一个问题: 你准备好为 OpenShift 订阅付费了吗?或者你是否擅长免费的 Kubernetes?
2. OpenShift 与 Kubernetes:安装
安装是启动和运行集群真正需要做的第一件事,也是讨论 OpenShift 与 Kubernetes 主题时要考虑的最重要的一点之一。
对于 OpenShift,您必须使用下面列出的平台之一来安装它。它不能安装在任何其他 Linux 发行版上。
- Red Hat Enterprise Linux CoreOS (RHCOS)(用于主节点)
- Red Hat Enterprise Linux (RHEL)(用于工作节点)
相反,Kubernetes 可以在大多数系统上设置,并且可以通过各种工具安装,包括 Kubeadm、Kube-spray、Kops 和 Booktube。
问你: 你想要对操作系统进行限制,或者你是否愿意使用任何可用和受支持的系统?
3. OpenShift 与 Kubernetes:命令行
设置集群后,您需要一种与其交互的方法。因此,“命令行”是我们在这篇 OpenShift 与 Kubernetes 文章中的下一个讨论点。
Kubernetes 提供了一个命令行工具,用于与 Kubernetes 集群的控制平面进行交互。Kubectl 是该实用程序的名称。您可以使用 Kubectl 向 Kubernetes 集群发出命令。使用 Kubectl 可以部署应用程序,可以检查和管理集群资源,还可以查看日志。
在 OpenShift 中,oc 命令提供了类似的功能,因为它是由 Kubectl 开发的。
在 OpenShift 中,oc 命令提供了与 kubectl 类似的功能。也就是说,它还进行了扩展以原生支持更多 OpenShift Container Platform 功能,例如:
- 完全支持 OpenShift Container Platform 资源:
DeploymentConfig、BuildConfig、Route、ImageStream 和 ImageStreamTag 对象是 OpenShift Container Platform 独有的资源示例,可以使用 oc 命令进行管理。 - 身份验证:
oc 二进制文件提供的内置登录命令提供身份验证,并允许您与 OpenShift Container Platform 进行交互。 - oc new-app、oc new-project 等其他命令:
oc new-app 命令使使用预构建图像或现有源代码启动新应用程序变得更加简单。同样,使用 oc new-project 命令可以更简单地启动一个您可以用作默认项目的项目。
问你: 你想使用 Kubectl 向你的 Kubernetes 集群发出命令,还是你有需要 oc 命令到位的资源?
4. OpenShift 与 Kubernetes:用户界面
命令行不是与集群交互的唯一选项,用户界面也是如此。因此,集群管理需要一个高效的基于 Web 的用户界面 (UI),因此在谈论 Kubernetes 与 OpenShift 时不能跳过。
Kubernetes 仪表板必须单独安装,并且您必须使用 kube-proxy 将本地计算机端口路由到集群的管理服务器。此外,由于仪表板缺少登录页面,您必须手动创建不记名令牌以用作授权和身份验证。
OpenShift 的 Web 控制台包含一个登录页面。控制台很容易访问,大多数资源都可以通过表单创建或修改。服务器、项目、集群角色都可以看到。
问你: 你能负担得起自己安装仪表板的努力吗,或者你想要一个花哨的用户界面来访问你的集群?
5. OpenShift 与 Kubernetes:项目与命名空间
在单个集群中分离 Kubernetes 集群资源的一种方法是通过在 Kubernetes 中使用命名空间。命名空间专为具有分布在众多团队或项目中的庞大用户群的环境而设计。命名空间是一种用于将集群资源分配给不同用户的技术。
OpenShift 中的一些项目只不过是增强的 Kubernetes 命名空间。在 OpenShift 上部署软件时,该项目的使用方式与 Kubernetes 命名空间完全相同,不同之处在于用户无法自行创建项目,必须由管理员授予访问权限。
问您: Kubernetes 中的命名空间是否满足您在集群中隔离资源的要求,或者您是否明确需要 OpenShift 中的项目?
6. OpenShift 与 Kubernetes:模板与 Helm
Helm 模板在 Kubernetes 中可用,并且灵活且易于使用。Charts 是包,Helm 是包管理工具。在谈论 Kubernetes 与 OpenShift 时,绝对应该考虑这一点。
在 OpenShift 上下文中,模板定义了一组对象,这些对象可以被处理和参数化以生成对象列表,供 OpenShift 容器平台生成。您有权在项目中制作的任何内容都可以使用模板创建。
OpenShift 模板缺少 Helm 图表中的高级模板和包版本控制。因此,OpenShift 部署变得更加困难,并且在大多数情况下需要外部包装器。
问你一个问题: 如果你已经熟悉了 Helm,你还想学习 OpenShift Templates 吗?
7. OpenShift 与 Kubernetes:Image Registry
您可以将自己的 Docker 注册表与 Kubernetes 一起使用。但是,Kubernetes 没有集成的图像注册表。相比之下,OpenShift 容器平台提供的内置容器镜像注册表是集群的常规工作负载。它在当前集群基础设施之上工作,同时为用户提供开箱即用的解决方案来管理运行其工作负载的图像。此注册表不需要特殊的基础架构配置,并且可以像任何其他集群工作负载一样向上或向下扩展。通过设置图像资源的用户权限进一步控制生成和检索图像的能力,因为它们链接到集群用户身份验证和授权系统。这是 OpenShift 区别于 Kubernetes 的特性之一。
问题: 您是否需要在您的集群中集成图像注册表,或者您使用自己的图像注册表是否没有问题?
8. OpenShift 与 Kubernetes:安全性
OpenShift 具有比 Kubernetes 更严格的安全准则。事实上,在 Openshift 中,出于安全要求,您不能执行基本的容器镜像或许多官方镜像。
例如,鉴于 OpenShift 限制以 root 身份运行容器并且许多官方镜像不符合要求,因此 Docker Hub 上可用的大多数容器镜像都无法在该平台上运行。
基于角色的访问控制 (RBAC) 是 OpenShift 默认提供的一项功能,有助于确保每个开发人员只能访问他们所需的功能,以防止帐户泄露问题。由于缺少原生身份验证和授权功能,Kubernetes 安全功能需要更复杂的设置。
当您使用 OpenShift 创建项目时,默认设置其他安全规则,例如 IAM 和 OAuth。仅在需要时才需要添加用户权限。这会加快您的应用程序环境的设置过程,从而节省您的时间。
关于安全性,这两个选项之间的比较根本不公平,因为 OpenShift 的安全性实际上非常严格。
问题: 您希望集群默认安全,还是可以自行管理?
9. OpenShift 与 Kubernetes:CI/CD
组织可以使用 OpenShift 容器平台,使用 DevOps 技术(例如持续集成 (CI) 和持续交付 (CD))自动交付其应用程序。OpenShift 容器平台提供以下 CI/CD 选项来满足组织需求:
- OpenShift 构建:使用声明式构建过程,OpenShift 构建使您能够构建云原生应用程序。
- OpenShift Pipelines: OpenShift Pipelines 提供了一个 Kubernetes 原生 CI/CD 平台,用于在其自己的容器中设计和运行管道的每个阶段。
- OpenShift GitOps:借助 OpenShift GitOps,管理员可以跨集群和开发生命周期可靠地部署和配置基于 Kubernetes 的基础架构和应用程序。
- Jenkins: Jenkins 自动化项目和应用程序的开发、测试和部署。直接与 OpenShift 容器平台集成的 Jenkins 镜像通过 OpenShift 开发者工具提供。
这是 OpenShift 与 Kubernetes 的区别之一。事实上,OpenShift 提供了内置的 CI/CD 集成。另一方面,Kubernetes 没有官方的 CI/CD 集成选项。因此,为了使用 Kubernetes 创建 CI/CD 流水线,您必须集成外部工具。
问你: 你想要在你的集群中集成 CI/CD 解决方案,还是你可以自己处理工具及其安装?
10. OpenShift 与 Kubernetes:支持
由于 Kubernetes 是一个开源项目,因此有一个规模庞大且参与度高的开发人员社区不断合作以改进该平台。就 OpenShift 而言,支持小组要小得多,主要由 Red Hat 开发人员组成。
OpenShift 作为商业产品提供承诺的客户服务、支持和建议。作为一个开源、基于社区的免费项目,Kubernetes 不提供专门的客户支持。
综上所述,当开发人员遇到 Kubernetes 问题时,他们必须等待他们的问题得到解答,依靠论坛上其他开发人员的经验。红帽工程师全天候为 OpenShift 用户提供支持。
问你: 你想要付费的专门支持团队来帮助你解决问题,还是你可以依靠社区并免费搜索解决方案?
11. OpenShift 与 Kubernetes:与云无关
理想情况下,为了提高生产力,您希望能够灵活地在不同的云服务提供商之间移动您的应用程序,而无需修改或替换您的应用程序基础设施。
有不同的云提供商,包括 AWS、GCP 和 Azure,它们提供各种 Kubernetes 管理的服务,每个服务都有自己的一套附加组件、插件和使用指南。在云服务之间切换之前,您需要熟悉托管的 Kubernetes 服务,以便掌握其工作原理。这就是为什么 Kubernetes 不像 OpenShift 那样与云无关。的确,托管或托管 OpenShift 的用户体验和功能保持不变。
问你一个问题: 你打算从一个云供应商转移到另一个云供应商,还是你宁愿一直使用同一个云供应商?
12. OpenShift 与 Kubernetes:定价
由于 Kubernetes 是一个开源项目,它是免费的,不需要任何许可。因此,如果您自己管理 Kubernetes,则无需向任何人付费。但是,如果您使用任何提供商(例如 AWS、GCP 或 Azure)提供的托管服务,您将需要付费。费用将取决于您选择的平台和您使用的资源数量。
OpenShift 提供两种类型的服务——红帽 OpenShift 云服务版本和自我管理的红帽 OpenShift 版本。如果您使用的是云服务,截至 2022 年 11 月 20 日,Red Hat OpenShift 预留实例的购买价格低至 0.076 美元/小时,而自行管理的 Red Hat OpenShift 的成本取决于您的订阅和大小选择。
问你一个问题: 你是愿意使用自我管理的 Kubernetes 集群来省钱还是花在托管服务上?
结论
OpenShift 和 Kubernetes 都允许您快速部署和管理容器化应用程序。但是,它们确实在某些方面有所不同,这就是为什么我们为您准备了这篇关于 OpenShift 与 Kubernetes 的博客。Kubernetes 是免费提供的,而 Openshift 有不同的计划来满足您的需求。因此,OpenShift 要求您付款;但是,它提供了 Kubernetes 没有的客户支持。这并不意味着如果您在使用 Kubernetes 时遇到问题就得不到帮助。事实上,Kubernetes 有一个庞大的社区可以为您提供支持。另一件需要注意的事情是 Kubernetes Helm 图表非常适合使用,而 OpenShift 有一个漂亮的用户界面仪表板。差异列表很长。
既然您已经阅读了本文,您应该会更好地理解 OpenShift 和 Kubernetes 之间的主要区别。选择平台时,您应该考虑自己的技能组合、要求和规格。在将该工具集成到您的工作流程之前探索和测试解决方案也很重要,因为您希望开发最适合您的管道。
热门跟贴