Binary-to-image(B2I) 是 KubeSphere 容器平台在 2.1.0 版本新增的功能,旨在帮助开发者和运维在项目打包成 WAR、JAR、Binary 这一类的制品后,快速将制品或二进制的 Package 打包成 Docker 镜像,并发布到 DockerHub 或 Harbor 等镜像仓库中。而且支持以建立服务的形式,一键将制品生成镜像推送到仓库,并建立其部署(Deployment)和服务(Service)最终 自动发布到 Kubernetes 中。java
Binary-to-image(B2I)可以在实际的项目快速部署上线、微服务改造的过程当中,极大地赋能开发者和运维用户。B2I 无需编写一行 Dockerfile,下降学习成本的同时提高发布效率,使用户可以更好地专一在业务自己。node
下图简述了 B2I 的业务实现流程,B2I 已将如下多个步骤工具化和流程化,所以只须要在一个表单中完成。git
- ① 在 KubeSphere 建立 B2I 类型的服务,上传制品或二进制包github
- ② B2I 将在后台建立 K8s Job、Deployment 和 Serviceweb
- ③ 将制品自动打包成 Docker 镜像spring
- ④ 推送镜像至 DockerHub 或 harbordocker
- ⑤ B2I Job 将在第二步建立的 Deloyment 中使用仓库中的镜像centos
- ⑥ 自动发布至 Kubernetes浏览器
说明:在上述流程中,B2I Job 还会在后台执行状态上报的功能spring-mvc
接下来用两个示例介绍 B2I 的两种使用方式,本文提供了示例制品 WAR、JAR、Binary 方便实操。
如下提供 5 个供测试使用的制品包,您也能够提交我的打包的测试项目到 KubeSphere 社区。
示例包 | 示例项目(代码仓库) |
---|---|
b2i-war-java8.war | Spring-MVC-Showcase |
b2i-war-java11.war | SpringMVC5 |
b2i-binary | DevOps-go-sample |
b2i-jar-java11.jar | java-maven-example |
b2i-jar-java8.jar | devops-java-sample |
第一个示例将使用建立服务的方式实现 B2I,实现上图的 6 个步骤。在 2.1.0 版本中,建立服务的方式和用户体验相较于 2.0.x 版本变得更加方便和高效。
B2I 属于 DevOps 功能组件,所以使用前需开启安装 DevOps 组件。
因为 B2I 的自动构建流程中须要将打包的 Docker 镜像推送到镜像仓库,所以须要先建立一个镜像仓库的密钥(Secret),如下建立一个 DockerHub 的密钥,可参考 建立经常使用的几类密钥。
应用负载 → 服务
下点击 建立服务
。 经过制品构建新的服务
,选择 WAR
,此处仅以一个 Spring-MVC-Showcase 的项目仓库做为示例,将它的 WAR 包(b2i-war-java8) b2i-war-java8.war 上传到 KubeSphere。 b2i-war-java8
,下一步构建设置中,默认无状态服务,点击将本地的制品 b2i-war-java8.war
上传,构建环境选择 tomcat85-java8-centos7:latest
。
/
,tag 默认 latest,目标镜像仓库选择已建立的 dockerhub-secret
。 8080
。 勾选外网访问
,并设置为 NodePort
,点击 建立
。 B2I 建立完成后,在 构建镜像
下查看 B2I 的构建状态,包括执行记录(动态日志)、资源状态、镜像制品、环境变量和 Events。
查看构建镜像
查看服务
查看部署状态
查看任务执行状态
若您习惯使用 kubectl 命令行,也能够经过 工具箱 → Web Kubectl
经过 kubectl get all -n PRJECT_NAME
来查看 b2i 具体建立了哪些资源。
web kubectl 查看资源
从服务的列表中,能够看到 NodePort 是 30571,所以在浏览器经过 <$ip>:<$nodeport>/spring-mvc-showcase/
访问 Spring-MVC-Showcase 服务(默认的访问路径 <$ip>:<$nodeport>
是 tomcat 服务)。
登陆 DockerHub 帐号,查看 B2I 自动推送的 Docker 镜像。
第一个示例是以建立服务的方式完成了 B2I,最终将 Spring-MVC-Showcase 的 WAR 包打包成镜像后部署到了 Kubernetes。而以 构建镜像 的方式使用 B2I 更像一个基于制品自动生成镜像的 快速工具,最终不会自动发布至 Kubernetes。
如下将使用一个基于 Go 语言 的 示例项目 打包的 Binary 制品 - b2i-binary(点击下载) ,演示 B2I 的第二种使用方式 - 构建镜像使用 B2I。
一、在 构建镜像
下点击 建立构建镜像
,而后选择 binary
。
二、下一步,将下载的 b2i-binary 上传至 KubeSphere,镜像名称可自定义
,目标镜像仓库选择已建立的
dockerhub-secret
,点击 建立
。
验证 B2I 状态
查看任务
登陆 DockerHub 帐号,查看 B2I 自动推送的 Docker 镜像。
您能够根据需求使用上述两种不一样的方式来完成 B2I 的自动镜像构建。通常来讲,像 Java 语言的项目,能够经过 mvn package
命令打成 JAR/WAR 包,而像 C、C++ 和 Go 这类不须要运行时的语言,能够使用其语言自身的 build 命令打包成 binary 格式的制品,最终就能够经过 KubeSphere B2I 来快速将制品打包成 Docker 镜像,并发布到镜像仓库和 Kubernetes 中。而像 Python、Nodejs 和 PHP 这类脚本式语言的项目,能够经过 KubeSphere Source-to-Image(S2I) 完成相似 B2I 的自动构建与发布。
KubeSphere (https://github.com/kubesphere/kubesphere) 是一个开源的以应用为中心的容器管理平台,支持部署在任何基础设施之上,并提供简单易用的 UI,极大减轻平常开发、测试、运维的复杂度,旨在解决 Kubernetes 自己存在的存储、网络、安全和易用性等痛点,帮助企业轻松应对敏捷开发与自动化监控运维、端到端应用交付、微服务治理、多租户管理、多集群管理、服务与网络管理、镜像仓库、AI 平台、边缘计算等业务场景。