v2.0
v1.0
  1. Release Notes
    1. Release Notes - 2.0.2最新
    1. Release Notes - 2.0.1
    1. Release Notes - 2.0.0
  1. 产品介绍
    1. 产品简介
    1. 产品功能
    1. 产品优势
    1. 架构说明
    1. 应用场景
    1. 名词解释
  1. 安装指南
    1. 安装说明
    1. 需开放的端口
    1. All-in-One 模式
    1. Multi-Node 模式
    1. 在 Kubernetes 在线部署 KubeSphere
    1. 在 Kubernetes 离线部署 KubeSphere
    1. Master 和 etcd 节点高可用
    1. 存储安装配置说明
    1. 集群组件配置说明
    1. 安装负载均衡器插件
    1. 安装内置 Harbor
    1. 安装内置 GitLab
    1. 升级
    1. 访问 SonarQube 和 Jenkins 服务端
    1. 集群节点扩容
    1. 卸载
  1. 快速入门
    1. 入门必读
    1. 示例一 - 多租户管理快速入门
    1. 示例二 - 应用路由与服务示例
    1. 示例三 - 部署 MySQL
    1. 示例四 - 部署 Wordpress
    1. 示例五 - 创建简单任务
    1. 示例六 - 一键部署应用
    1. 示例七 - 设置弹性伸缩 (HPA)
    1. 示例八 - Source-to-Image
    1. 示例九 - Bookinfo 微服务的灰度发布
    1. 示例十 - 基于Spring Boot项目构建流水线
    1. 示例十一 - 图形化构建流水线
    1. 示例十二 - CI/CD 流水线(离线版)
    1. 示例十三 - 使用 Ingress-Nginx 进行灰度发布
  1. 管理员指南
    1. 多租户管理
      1. 多租户管理概述
      2. 角色权限概览
    1. 平台管理
      1. 企业空间管理
      2. 账号管理
      3. 平台角色
    1. 基础设施
      1. 服务组件
      2. 主机管理
      3. 存储类型
    1. 监控中心
      1. 监控概述
      2. 如何利用监控定位问题
      3. 集群状态监控
      4. 应用资源监控
      5. 监控策略 - 节点级别
      6. 监控消息 - 节点级别
    1. 平台设置
      1. 应用仓库
      2. 基于本地仓库搭建应用仓库部署Redis
      3. 上传应用到 KubeSphere 官方仓库
      4. 基于 GitHub 搭建自有应用仓库
      5. 邮件服务器
      6. 日志收集
      7. 添加 Fluentd 作为日志接收者
      8. 添加 Kafka 作为日志接收者
    1. 工具箱
      1. Web Kubectl
      2. 日志收集
    1. 通用配置
      1. 系统配置修改
      2. 上传镜像至 Harbor
      3. Jenkins 系统设置
    1. FAQ
      1. DevOps 运维FAQ
  1. 用户指南
    1. 应用
      1. 应用模板
      2. 自制应用
      3. 流量治理
      4. 熔断
    1. 工作负载
      1. 工作负载概述
      2. 部署
      3. 有状态副本集
      4. 守护进程集
      5. 任务
      6. 定时任务
      7. 设置健康检查器
      8. 工作负载管理
      9. 自定义 S2i 模板
    1. 存储
      1. 存储概述
      2. 存储卷
      3. Local Volume 使用方法
    1. 网络与服务
      1. 服务管理
      2. 灰度发布
      3. 应用路由
    1. 监控告警
      1. 告警策略 - 工作负载级别
      2. 告警消息 - 工作负载级别
    1. 配置中心
      1. 密钥
      2. 配置
      3. 镜像仓库
    1. 项目设置
      1. 基本信息
      2. 成员角色
      3. 项目成员
      4. 外网访问
    1. DevOps 工程
      1. DevOps 工程概述
      2. 管理 DevOps 工程
      3. 流水线
      4. 凭证管理
      5. 添加代码仓库
      6. 访问 SonarQube 并创建 Token
      7. 设置自动触发扫描
      8. Jenkins Agent 说明
      9. 流水线常见问题
  1. API 文档
    1. API 文档
    1. 如何调用 API
    1. API 常用术语对照
    1. 监控指标说明
  1. 常见问题
    1. 安装常见问题
    1. 存储常见问题
    1. 控制台使用常见问题
    1. DevOps 常见问题
  1. 附录
    1. 部署 Ceph 存储服务端
    1. 部署 GlusterFS 存储服务端
    1. 云平台配置端口转发和防火墙
KubeSphere®️ 2020 All Rights Reserved.

Source-to-image

Source to Image (S2I) 是一个允许程序员直接输入源代码然后打包成可运行程序到 Docker 镜像的工具,在程序员不需要了解 Dockerfile 的情况下方便构建镜像。它是通过将源代码放入一个负责编译源代码的 Builder image 中,自动将编译后的代码打包成 Docker 镜像。

目的

本示例通过官方给出的 Hello World 的 Java 示例,演示如何在 KubeSphere 上使用 Source to Image 来实现构建镜像,并且实现自动推送到镜像仓库,最后部署到集群中。

前提条件

  • 本示例以 GitHub 代码仓库和 DockerHub 镜像仓库为例,参考前确保已创建了 GitHubDockerHub 账号;
  • 已创建了企业空间、项目和普通用户 project-regular 账号,若还未创建请参考 多租户管理快速入门
  • 使用项目管理员 project-admin 邀请项目普通用户 project-regular 加入项目并授予 operator 角色,参考 多租户管理快速入门 - 邀请成员

预估时间

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

操作示例

创建密钥

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

Fork 项目

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

fork

创建部署

第一步:填写基本信息

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

createdeploy

2、点击创建,创建一个部署。

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

第二步:容器组模版设置

1、点击 「下一步」,进入容器组模版设置界面,选择 「添加容器」。

container

2、然后选择 通过代码构建新的容器镜像

build

3、示例仓库 Fork 至您个人的 GitHub 后,复制您个人仓库的 git 地址。

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

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

  • 代码地址:粘贴上一步复制的 git 地址(目前支持 Git,支持 HTTP、HTTPS,并且可以指定在源代码终端的相对路径);
  • 密钥:选择之前创建的 github-id
  • 映像模板:选择 kubespheredev/java-8-centos7 作为此示例的 Builder image;
  • 代码相对路径:使用默认的 / 即可;
  • 映像名称:可根据自己情况定义,此示例使用 DockerHub, 镜像名称为<dockerhub_username>/s2i-sampledockerhub_username 为自己的账户名称,确保具有推拉权限;
  • tag:镜像标签使用默认 latest 即可;
  • 目标镜像仓库:选择之前创建的 dockerhub-id

提示:若希望将镜像推送到其他镜像仓库(如阿里云、Harbor镜像仓库等),需要在映像名称前面加上 Registry 地址。

s2i

4、往下滑动至 容器规格设置,建议最大 CPU 和最大内存设置为 500m 和 1000Mi

plan

5、往下滑至 服务设置,配置端口为 8080,如:

server

6、然后点击 「保存」

副本数量可选择为 1,然后点击 「下一步」。

next1

第三步:创建 s2i 部署

本示例无需配置存储卷,点击 「下一步」,标签保留默认值即可,选择 「创建」,s2i 示例部署创建完成。

构建完成

出现如下图绿勾即表示镜像通过 s2i 构建成功。

succ

查看容器组,正常运行。

succ-pod

验证运行结果

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

第一步:创建服务

选择左侧网络与服务下的服务,点击 「创建服务」。

create_service

第二步:基本信息填写

基本信息与创建部署类似,这里名称填写示例名称 s2i-test-service,其余可根据自己情况填写,点击 「下一步」,如下图。

service_name

第三步:服务设置

1、服务类型选择第一项 通过集群内部IP来访问服务 Virtual IP

2、然后点击 「指定工作负载」,选择刚刚创建的名称为 s2i-test 的部署,如下图。

select

3、点击保存,参考如下提示配置端口信息。

  • 端口名称:s2i-port;
  • 协议默认 TCP,端口号:8080,目标端口为 8080
  • 设置完成后点击 「下一步」。

第五步:标签设置

默认即可,点击 「下一步」。

第六步:配置外网访问

选择访问方式为 NodePort

至此,查看服务创建完成,如下图所示,Virtual IP 为 10.233.40.25,服务端口设置的是 8080,节点端口 (NodePort) 为 30454。

第七步:验证访问

若在内网环境访问部署的 HelloWorld 示例服务,可通过 SSH 登陆集群节点,或使用集群管理员登陆 KubeSphere 在 web kubectl 中输入以下命令验证访问:

# curl {$Virtual IP}:{$Port} 或者 curl {$内网 IP}:{$NodePort}
curl 10.233.40.25:8080
Hello,World!

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

查看推送的镜像

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

查看推送的镜像