v2.1

v2.1
v2.0
v1.0
Express
  1. Release Notes
  1. 产品介绍
  1. 安装指南
    1. 安装说明
    1. 在 Linux 快速安装 KubeSphere
    1. 安装可插拔的功能组件
    1. 集群高可用配置安装
    1. 在 Kubernetes 安装 KubeSphere
    1. 相关工具与插件
    1. 认证与安全
    1. 运维指南
  1. 快速入门
  1. 管理员指南
    1. 多租户管理
    1. 平台管理
    1. 基础设施
    1. 监控中心
    1. 平台设置
    1. 工具箱
    1. 通用配置
    1. FAQ
  1. 用户指南
    1. 应用
    1. 工作负载
    1. 存储
    1. 网络与服务
    1. 监控告警
    1. 配置中心
    1. 项目设置
    1. DevOps 工程
  1. 开发者指南
    1. Helm 应用开发
  1. API 文档
  1. 常见问题
  1. 附录
KubeSphere®️ 2019 All Rights Reserved.

Source-to-image编辑此页面

什么是Source-to-image

Source-to-image (S2I) 是一个允许用户直接输入源代码然后打包成可运行程序到 Docker 镜像的工具,在用户不需要了解 Dockerfile 的情况下方便构建镜像。它是通过将源代码放入一个负责编译源代码的 Builder image 中,自动将编译后的代码打包成 Docker 镜像。在 KubeSphere 中支持 S2I 构建镜像,也支持以创建服务的形式,一键将源代码生成镜像推送到仓库,并创建其部署 (Deployment) 和服务 (Service) 最终自动发布到 Kubernetes 中。

Source-to-image 特性

Source-to-image (S2I)能够在实际的项目快速部署上线、微服务改造的过程中,极大地赋能开发者和运维用户。S2I 无需编写一行 Dockerfile,降低学习成本的同时提升发布效率,使用户能够更好地专注在业务本身。

下图简述了 S2I 的业务实现流程,S2I 已将以下多个步骤工具化和流程化,因此只需要在一个表单中完成。

  • ① 在 KubeSphere 创建 S2I 类型的服务,上传项目源代码
  • ② S2I 将在后台创建 K8s Job、Deployment 和 Service
  • ③ 将源代码自动打包成 Docker 镜像
  • ④ 推送镜像至 DockerHub 或 Harbor 或其他 Registry
  • ⑤ S2I Job 将在第二步创建的 Deloyment 中使用仓库中的镜像
  • ⑥ 自动发布至 Kubernetes

说明:在上述流程中,S2I Job 还会在后台执行状态上报的功能

接下来将用一个 Java 示例来演示介绍 S2I 的使用方式。

演示目的

本示例通过官方给出的 Java 示例,演示如何在 KubeSphere 上使用 Source to Image 来实现构建镜像,并且实现自动推送到镜像仓库,最后部署到集群中,暴露给外网访问。其中测试示例仓库中的 dependency 分支主要用于构建镜像的缓存测试。

前提条件

预估时间

20-30 分钟(时间由于网速等因素而有所不同)。

操作示例

创建密钥

需要预先创建 DockerHub 镜像仓库和 GitHub 代码仓库的密钥,分别为 dockerhub-idgithub-id,参考 创建常用的几类密钥

Fork 项目

登录 GitHub,将本示例用到的 GitHub 仓库 devops-java-sample Fork 至您个人的 GitHub。

fork

创建服务

第一步:填写基本信息

1、在左侧的工作负载菜单下,点击服务,进入服务管理界面。

2、点击创建服务,在 通过代码构建新的服务 下选择 Java

3、然后输入基本信息。

  • 名称:必填,给服务起一个名字,以便在使用的时候容易区分,此处使用 s2i-test
  • 别名:为了方便理解可自定义设置;
  • 描述信息:简单描述该部署的相关信息,可自定义;

第二步:构建设置

1、点击 「下一步」,进入容构建设置界面。

2、服务类型选择 无状态服务,构建环境为 java-8-centos7,然后复制之前 Fork 后的个人示例仓库的 git 地址。

3、参考如下提示填写信息。

说明: KubeSphere 内置了常用的 Java、Node.js、Python 等 S2I 的模板,若需要自定义其它语言或依赖环境的 S2I 模板,请参考 自定义 S2I 模板

  • 代码地址:粘贴上一步复制的 git 地址(目前支持 Git,支持 HTTP、HTTPS,并且可以指定代码分支以及在源代码终端的相对路径);
  • 分支:执行构建的分支,此示例默认使用 master,若希望测试缓存,可输入分支 dependency
  • 密钥:若为公共仓库则无需填写,私有仓库选择创建的 Github 账户密钥;
  • 映像模板:选择 kubespheredev/java-8-centos7 作为此示例的 Builder image;
  • 映像名称:可根据自己情况定义,此示例使用 <dockerhub_username>/s2i-sampledockerhub_username 为自己的账户名称,确保具有推拉权限;
  • tag:镜像标签使用默认 latest 即可;
  • 目标镜像仓库:选择之前创建的 dockerhub-id
  • 高级设置-代码相对路径:使用默认的 / 即可;

4、点击 「下一步」,设置容器的访问策略,协议 默认为 HTTP容器端口服务端口 设置为8080。

5、配置「健康检查器」下的「容器就绪检查」,选择 「HTTP请求检查」。

  • 协议:必填,该示例默认使用 HTTP
  • 路径:必填,该示例默认使用根路径 /
  • 端口:必填,修改为示例应用所暴露的端口 8080
  • 初始延迟(秒):在检查其运行状况之前,容器启动后需要等待多长时间,该示例推荐延迟 30s
  • 超时时间(秒):等待探针完成多长时间。如果超过时间,则认为探测失败,该示例推荐延迟 10s

第三步:挂载存储及高级设置

1、配置完成后保存,然后点击「下一步」,无需挂在存储,存储默认即可,继续下一步,设置 外网访问 方式为 NodePort,最后「创建」

第三步:查看构建进度

1、在左侧的工作负载菜单下,点击 构建镜像,进入构建镜像管理界面。可看到镜像正在构建。

2、点击「构建的镜像」,进入查看详情,点击下拉箭头可看到构建日志。

第四步:验证运行结果

若通过 S2I 部署顺利,则将会在设置的 Dockerhub 中查看到设置的镜像,名称和标签为 构建设置 中设置的值。若想在浏览器中查看到部署结果,可进行如下配置。

验证访问

若在内网环境访问部署的示例服务,在浏览器中访问,可通过 NodeIP + 暴露的端口访问。或者通过 SSH 登陆集群节点,或使用集群管理员登陆 KubeSphere 在 web kubectl 中输入以下命令验证访问:

# curl {$Virtual IP}:{$Port} 或者 curl {$内网 IP}:{$NodePort}
curl 10.233.40.25:8080
Really appreaciate your star, that's the power of our life.

提示:若需要在外网访问该服务,可能需要绑定公网 EIP 并配置端口转发和防火墙规则。在端口转发规则中将 内网端口 转发到 源端口 ,然后在防火墙开放这个源端口,保证外网流量可以通过该端口,外部才能够访问。例如在 QingCloud 云平台进行上述操作,则可以参考 云平台配置端口转发和防火墙

查看推送的镜像

由于我们在容器组模板设置中设置的目标镜像仓库为 DockerHub,此时可以登录您个人的 DockerHub 查看 Source to Image 示例推送的镜像,以下验证发现 s2i-sample:latest 镜像已成功推送至 DockerHub。