从 Docker 镜像到 OpenShift 部署
简史
为什么选择 OpenShift?
DIY OpenShift 示例
我们的 Kubernetes 资源
概括
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
在本教程中,我将向您展示一个在 OpenShift V4 上部署 Docker 容器的实际示例。您可以在我的GitHub 代码库中找到本教程中涉及的所有 Kubernetes 资源。如果您只具备 Docker 和 Kubernetes 的一些基础知识,并且还不了解 OpenShift,也不用担心,本教程非常适合您!
简史
从原生应用程序到 Docker 容器再到 Kubernetes
过去,软件公司将应用程序部署在“裸机”上,也就是说,一台物理计算机只运行一个应用程序。随着虚拟机的出现,情况有所改善,虚拟机允许多个相互隔离的应用程序运行在同一台物理服务器上。近几年,一种更轻量级的虚拟化解决方案——Docker 容器——开始流行。当企业开始大量使用 Docker 容器时,他们的部署环境变得相当混乱,因此像 Kubernetes 这样的编排工具应运而生。Kubernetes 允许规划、执行和管理以 Docker 容器形式部署的应用程序,并使部署可复现且易于定制。
从“裸机”到“PaaS”
随着新工具的开发,托管格局也发生了显著变化。十年前或二十年前,大多数公司还在自家地下室的机器上托管应用程序,而如今,越来越多的软件开发公司开始考虑将应用程序托管在第三方公司。这极大地有助于将应用程序开发与应用程序部署和监控的职责分开。如今,许多优秀的云服务提供商能够应对诸多重要挑战,例如硬件扩展、异地冗余、运行集群的监控以及安全组件的配置。提供平台即服务 (PaaS)的公司包括 AWS、Google Cloud、IBM Cloud、Microsoft Azure 等等。
为什么选择 OpenShift?
本文将讨论的平台即服务 (PaaS) 解决方案是 OpenShift。它由Red Hat开发,基于 Docker 和 Kubernetes 构建。OpenShift 可以运行在任何云基础设施上,许多主流云服务提供商都提供相关服务,包括前面提到的 AWS、Google Cloud、IBM Cloud 和 Microsoft Azure。
那么,与 Kubernetes 集群相比,使用 OpenShift 的优势是什么呢?OpenShift 在支持所有 Kubernetes 资源的同时,还提供了几个额外的功能:
- 易于使用:由于有许多预配置的参数和友好的图形用户界面,OpenShift 非常容易上手。
- 默认安全:OpenShift 应用默认安全。红帽的安全专家投入了大量时间和精力,使该平台能够抵御攻击。
- 附加工具:与简单的 Kubernetes 集群相比,OpenShift 提供了额外的工具:源到镜像构建、Kibana 监控、OpenShift 注册表等。
不过需要注意的是,有些人可能更喜欢纯 Kubernetes 集群基础设施,原因如下:
- 避免依赖供应商:OpenShift 支持所有 Kubernetes 对象,因此,由于部署仅使用标准 Kubernetes 资源,未来可以轻松切换到其他云提供商。不过,OpenShift 和 Kubernetes 之间也存在一些细微差别,例如 OpenShift 的 Route 资源(Kubernetes 中不存在)。
- 定价:OpenShift 和 Kubernetes 的供应商都很多,因此比较成本比较困难。一般来说,OpenShift 平台的功能更强大,这也是为什么它的价格往往略高一些的原因。
总的来说,OpenShift 是一个非常棒的解决方案,已被世界各地的许多公司采用,所以我认为它会长期存在下去。事不宜迟,让我们直接来看实际示例吧!
DIY OpenShift 示例
好了,现在是时候在 OpenShift V4 上运行你的第一个应用程序了。你只需要一个 OpenShift 帐户和来自Github 仓库的Kubernetes 资源。
创建免费的 OpenShift 帐户
为了进行实验,OpenShift 提供了一个名为“OpenShift online”的解决方案,可以免费使用 2 个月。
- 创建红帽帐户:https://www.redhat.com/ -> 登录 -> 立即注册
- 确认电子邮件
- 开始 OpenShift 在线试用:https://www.openshift.com/products/online/ -> 选择 Starter 计划并按照说明操作
- 登录 OpenShift 在线 Web 控制台:https://manage.openshift.com/sign_in
- 创建您的第一个项目:在“管理员”视图中,转到“首页”->“项目”->单击“创建项目”。
在 OpenShift 上部署应用程序(通过 Web 控制台)
要部署你的第一个应用,你需要两样东西:
- Docker 镜像
- Kubernetes 资源
至于 Docker 镜像:我已经将一个简单的 Java 应用程序打包成 Docker 镜像并发布到Docker Hub上。Kubernetes 资源中直接引用了该 Docker 镜像,因此您只需从我的GitHub 仓库下载 Kubernetes 资源即可。
我们先从部署开始。前往已创建 OpenShift 项目的 Web 控制台,然后:
- 在“开发者”视图中,转到“+添加”并选择“YAML”。
- 复制并粘贴所有 Kubernetes 资源:
deployment.yaml,service.yaml以及(您可以在Githubroute.yaml上找到这些文件) - 完成!您的应用正在部署到 OpenShift。要查看状态,请转到“管理员”视图 -> 工作负载 -> Pod。
你应该会看到一个名为“spring-boot-app-*”的 Pod 正在启动。启动并运行后,我们像这样测试它:
- 在“管理员”视图中,转到“网络”->“路由”。
- 对于“spring-boot-app-route”,选择“Location”:这是一个用于访问正在运行的应用程序的公共 URL。
- 在 URL 后添加“/api/ping”,你应该就能看到应用返回的响应了。
- 好了各位😊 你们的应用程序现在已经在 OpenShift 上运行了!
在 OpenShift 上部署应用程序(通过 CLI)
在实际的开发项目中,你会希望尽可能地实现自动化。人们通常会使用像 Jenkins 这样的 CI/CD 流水线来编译新的应用程序版本、进行测试、构建 Docker 镜像并将应用程序部署到云端。为此,OpenShift 提供了一个命令行工具oc,它可以显示正在运行的应用程序的状态、修改部署配置以及启动新的部署。
- 首先,您可能需要移除 OpenShift 上的所有现有资源。最简单的方法是删除当前的 OpenShift 项目并创建一个新项目。
oc按照“?”->“命令行工具”下的说明安装CLI- 按照上一页“复制登录命令”中的说明,通过 oc CLI 登录到 OpenShift。
$ oc login --token=… --server=…
- 请确保您位于正确的 OpenShift 项目中
$ oc projects
- 从 GitHub 获取 Kubernetes 资源
$ git clone https://github.com/pmgysel/cloud-stack_openshift-kubernetes-ressources.git
$ cd cloud-stack_openshift-kubernetes-ressources
- 上传 Kubernetes 资源
$ oc apply -f deployment.yaml
$ oc apply -f service.yaml
$ oc apply -f route.yaml
- 好了,各位😊 你们已经通过命令行完成了第一次 OpenShift 部署!
我们的 Kubernetes 资源
您已在 OpenShift 平台上创建了 3 个 Kubernetes 资源。让我们快速了解一下这 3 个资源如何协同工作。这是一个相当简单的 Kubernetes 入门介绍,如果您已经掌握了这项技术的高级知识,可以跳过此部分。
- deployment.yaml:Kubernetes Deployment 指定容器的部署方式,包括实例数量、要暴露的端口以及每个 Pod 的 RAM 大小。
- service.yaml:Kubernetes Service 作为运行中 Pod 的入口点。您无需担心运行 Pod 的确切数量、负载分配、如何检测就绪 Pod 等问题。Service 会为您完成所有这些工作。
- route.yaml:所有服务和 Pod 只能从 OpenShift 集群内部访问。要将服务发布到外部,可以使用 OpenShift 路由。这里需要注意一点:路由是 OpenShift 特有的功能,Kubernetes 中没有。在纯 Kubernetes 中,有一个名为“Ingress”的类似资源。
概括
如果你还在读这篇文章,那就给你加分哦😊 在这篇文章中,我们了解了 OpenShift 的优势,并在 OpenShift 平台上运行了一个简单的应用程序。希望这篇文章对你有所帮助!
更多资源:
- OpenShift 有官方的OpenShift 教程
- Kubernetes 资源:部署、服务和路由
- OpenShift 的
ocCLI 是 Kubernetes 的 kubectl 的扩展。OpenShift 网站上有一篇关于 oc 的文档。
如果这篇博客对你有帮助,记得点赞❤️哦,下次见!
文章来源:https://dev.to/pmgysel/from-a-docker-image-to-a-deployment-on-openshift-1oj1




