OpenShift从源码构建部署应用初体验
这两天在翻OceanBase 0.4版本(唯一开源的版本)的源码,原因是前些天有人讲OceanBase非分区表的数据也是打散到多个节点分布的,这与我观看过的蚂蚁金融云上OB文档不一样,文档中讲OB是基于表分区在多个节点间分布数据的,非分区表不打散全部数据的任一副本只存放在一个节点上。后来了解到是OB过往版本与现行版本间数据分布的方式不一样。
所以大致翻了下开源的0.4版本代码,了解到这时还是通过表rowKey与rowkey_split来分布数据到多个tablet:rowkey是主键;rowkey_split表示主键前多少比特位相同的数据存放在同一tablet上;tablet相当于子表的概念,多个tablet分布到各个节点上。只是粗略地翻了下代码,还没有仔细地去了解具体是怎么实现分布的。
捯代码捯烦了,来点儿新鲜玩意儿,来体验下通过OpenShift Web Console,从源码构建部署示例应用的过程。
整个过程使用了上篇文章中讲到的MiniShift环境,但,构建过程中发现“卡”,就去OpenShift Online申请了个Free用户………
登录OpenShift
创建项目
以developer用户登录OpenShift Origin后,首页面是长这个样子,点右上角的“Create Project”来创建一个新项目“:
出现新建项目对话框后,输入项目相关信息,项目名、显示名称与描述内容,这里我们无创意地使用书中给出的内容:
项目创建完毕后,会在右侧上角给出一个项目列表,点我们新建项目“My Bank”名称,进入项目概览(Overview)页面。
项目概览(Overview)页面:
应用构建部署配置
在上面展现的项目概览页面上,戳“Browse Catalog”,进入”Catalog”目录来选择构建应用的类型:
因为示例代码是Java编写的简单Web应用,所以选择路径就是:Languages => Java => WildFly,之后会弹出Build Config对话框:
继续下一步,填写应用名称与代码GitHub地址,继续“抄袭”书中:
填完内容并选择所在项目后,按“Create”,会告诉你构建与部署配置已完成,可以转去”Project overview”旁观了:
应用概览-构建中
构建部署配置完毕后,重新转回到项目概览(Project Overview),会看到新创建的应用已经存在于列表中,点击应用名称左侧下拉箭头,可以观察到应用目前正在处于构建(Build)过程:
从页面上我们可以看到,OpenShift Orign至少已经自动创建了4个配置:
- DeploymentConfig 部署配置,指导应用部署,包括POD模板、部署触发配置等
- BuildConfig 构建配置,指导应用构建过程,包括源码位置、构建策略、构建触发配置等
- Service 服务配置, Kubernetes概念,屏蔽POD地址变化,以服务名称替代实际地址来调用
- Routes 路由配置,Kubernetes概念,通过Ingress对外暴露服务
这些配置项,通过命令行客户端oc,也是可以查看到的:
$ oc get all -o name
deploymentconfigs/mybank ⑴
buildconfigs/mybank ⑵
services/mybank ⑶
routes/mybank ⑷
imagestreams/mybank
builds/mybank-1
pods/mybank-1-build
上面命令输出内容中,多出来的三项分别是镜像流(imagestreams)配置、构建实例(builder)配置与构建实例POD名称。imagestreams是OpenShift用来管理容器镜像的方式,把一个具体容器镜像的各个版本信息组织在一起,供DeploymentConfig引用;“build/mybank-1”是一次构建的实例配置,“pods/mybank-1-build”是一次构建实际执行构建过程的POD,在这个示例中,它是由S2I(Source to Image)镜像实例化的容器组成。
在页面右下角可以看到构建日志输出小窗口,滚动显示构建过程中产生的日志信息。
构建信息
直接点击上图中红色数字“2”标示的构建(build)名称,或者从左侧菜单中选择,都可以进入构建信息页:
构建的每一次(重新)执行,都会在这页面的列表中出现以数字编号一行内容,展示构建状态、执行时间、创建时间。点那个编号(红色数据“1”标示处),进入某次实际构建实例(builder)的详细信息页面,在这个页面上可查看构建日志与事件信息:
从上面的构建事件列表中,可以看到是从AWS提供的Docker镜像仓库中拉取了S2I镜像,创建了一个名为”mybank-1-build”的POD,实际执行了由构建配置buildconfigs/mybank派生出的构建实例(builder)配置builds/mybank-1指导的构建过程。
在事件列表中,拉取S2I镜像执行了三次,猜测(目前是瞎猜)与构建实例POD的模板配置有关,让我们来看看此POD的详细信息页面:
从模板信息上看,在POD初始阶段使用了两次S2I镜像生成初始化容器(Init Containers),分别执行命令:
- openshift-git-clone –loglevel=0 克隆源码到本地
- openshift-manage-dockerfile –loglevel=0 生成Dockerfile或使用现成Dockerfile?
POD初始化阶段完成后,进入运行阶段,使用S2I镜像生成容器执行构建命令:
- openshift-sti-build –loglevel=0
应用概览-构建后
构建完成后,应用概览的中间应用部署信息栏位出现了信息,图中已用红框与红圈标出,红圈中的那个蓝圈中显示当前应用部署的POD个数,可通过蓝圈右侧上下箭头增加或减少POD个数。
有没有发现,Route Url路径变了,嘿嘿,这是从本地minishift换到openshift online的原因。
应用部署/POD信息
镜像流信息
总结
自从在私有云环境中搭建了个Kubernetes运行环境后,一直在能在其上运行的PaaS平台,曾经关注过Fabric8,但看了眼用来自动化部署的Helm配置文件,里面用到的Docker镜像太多了,我恐惧了怕麻烦(私有云环境连外网不容易啊),也就没有去安装。
现在,简单试用了下OpenShift Origin来自动化构建部署应用,目前感觉还是简单易用的,也可能是因为只是初步尝试,还没达到“用到深处全是坑儿”的深度。
附录-配置详细内容
- dc/mybanck
$ oc get dc/mybank -o yaml
apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
openshift.io/generated-by: OpenShiftWebConsole
creationTimestamp: 2018-03-23T05:40:51Z
generation: 1
labels:
app: mybank
name: mybank
namespace: mybank
resourceVersion: "10116"
selfLink: /oapi/v1/namespaces/mybank/deploymentconfigs/mybank
uid: bf202169-2e5c-11e8-8e27-eed4a77e066c
spec:
replicas: 1
selector:
deploymentconfig: mybank
strategy:
activeDeadlineSeconds: 21600
resources: {}
rollingParams:
intervalSeconds: 1
maxSurge: 25%
maxUnavailable: 25%
timeoutSeconds: 600
updatePeriodSeconds: 1
type: Rolling
template:
metadata:
creationTimestamp: null
labels:
app: mybank
deploymentconfig: mybank
spec:
containers:
- image: mybank:latest
imagePullPolicy: Always
name: mybank
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
test: false
triggers:
- imageChangeParams:
automatic: true
containerNames:
- mybank
from:
kind: ImageStreamTag
name: mybank:latest
namespace: mybank
type: ImageChange
- type: ConfigChange
status:
availableReplicas: 0
conditions:
- lastTransitionTime: 2018-03-23T05:40:51Z
lastUpdateTime: 2018-03-23T05:40:51Z
message: Deployment config does not have minimum availability.
status: "False"
type: Available
latestVersion: 0
observedGeneration: 1
replicas: 0
unavailableReplicas: 0
updatedReplicas: 0
- is/mybank
$ oc get is/mybank -o yaml
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
annotations:
openshift.io/generated-by: OpenShiftWebConsole
creationTimestamp: '2018-03-23T07:22:43Z'
generation: 1
labels:
app: mybank
name: mybank
namespace: mybank
resourceVersion: '768959353'
selfLink: /apis/image.openshift.io/v1/namespaces/mybank/imagestreams/mybank
uid: fa103195-2e6a-11e8-8e17-06579ed29230
spec:
lookupPolicy:
local: false
status:
dockerImageRepository: 'docker-registry.default.svc:5000/mybank/mybank'
tags:
- items:
- created: '2018-03-23T07:24:46Z'
dockerImageReference: >-
docker-registry.default.svc:5000/mybank/mybank@sha256:096004b65a6c596a318c0d6e8cfaa1a3dec3238b7c02430c6ed5e0d360f4fe89
generation: 1
image: >-
sha256:096004b65a6c596a318c0d6e8cfaa1a3dec3238b7c02430c6ed5e0d360f4fe89
tag: latest
- bc/mybank
$ oc get bc/mybank -o yaml
apiVersion: v1
kind: BuildConfig
metadata:
annotations:
openshift.io/generated-by: OpenShiftWebConsole
creationTimestamp: 2018-03-23T05:40:51Z
labels:
app: mybank
name: mybank
namespace: mybank
resourceVersion: "10119"
selfLink: /oapi/v1/namespaces/mybank/buildconfigs/mybank
uid: bf213499-2e5c-11e8-8e27-eed4a77e066c
spec:
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: mybank:latest
postCommit: {}
resources: {}
runPolicy: Serial
source:
git:
ref: master
uri: https://github.com/nichochen/mybank-demo-maven
type: Git
strategy:
sourceStrategy:
from:
kind: ImageStreamTag
name: wildfly:10.1
namespace: openshift
type: Source
triggers:
- imageChange:
lastTriggeredImageID: openshift/wildfly-101-centos7@sha256:a2661f20f2e870520a73765f783de105c61916235a541332acd1501c2ee76280
type: ImageChange
- type: ConfigChange
- generic:
secret: 2492cbc56d90119d
type: Generic
- github:
secret: 81ba00bb283f56a7
type: GitHub
status:
lastVersion: 1
- bd/mybank-1
$ oc get builds/mybank-1 -o yaml
apiVersion: build.openshift.io/v1
kind: Build
metadata:
annotations:
openshift.io/build-config.name: mybank
openshift.io/build.number: '1'
openshift.io/build.pod-name: mybank-1-build
creationTimestamp: '2018-03-23T05:40:52Z'
labels:
app: mybank
buildconfig: mybank
openshift.io/build-config.name: mybank
openshift.io/build.start-policy: Serial
name: mybank-1
namespace: mybank
ownerReferences:
- apiVersion: build.openshift.io/v1
controller: true
kind: BuildConfig
name: mybank
uid: bf213499-2e5c-11e8-8e27-eed4a77e066c
resourceVersion: '10150'
selfLink: /apis/build.openshift.io/v1/namespaces/mybank/builds/mybank-1
uid: bf9eece7-2e5c-11e8-8e27-eed4a77e066c
spec:
nodeSelector: null
output:
pushSecret:
name: builder-dockercfg-lpjhm
to:
kind: ImageStreamTag
name: 'mybank:latest'
postCommit: {}
resources: {}
revision:
git:
author:
email: nicosoftware@msn.com
name: Geng Chen
commit: 5f550ef361dc1abad8a32a00334a327f3e713568
committer:
email: nicosoftware@msn.com
name: Geng Chen
message: Fix Chinese characters
type: Git
serviceAccount: builder
source:
git:
ref: master
uri: 'https://github.com/nichochen/mybank-demo-maven'
type: Git
strategy:
sourceStrategy:
from:
kind: DockerImage
name: >-
openshift/wildfly-101-centos7@sha256:a2661f20f2e870520a73765f783de105c61916235a541332acd1501c2ee76280
type: Source
triggeredBy:
- imageChangeBuild:
fromRef:
kind: ImageStreamTag
name: 'wildfly:10.1'
namespace: openshift
imageID: >-
openshift/wildfly-101-centos7@sha256:a2661f20f2e870520a73765f783de105c61916235a541332acd1501c2ee76280
message: Image change
status:
config:
kind: BuildConfig
name: mybank
namespace: mybank
output: {}
outputDockerImageReference: '172.30.1.1:5000/mybank/mybank:latest'
phase: Running
stages:
- durationMilliseconds: 7878
name: FetchInputs
startTime: '2018-03-23T05:40:57Z'
steps:
- durationMilliseconds: 7878
name: FetchGitSource
startTime: '2018-03-23T05:40:57Z'
startTimestamp: '2018-03-23T05:40:52Z'
- po/mybank-1-build
apiVersion: v1
kind: Pod
metadata:
annotations:
openshift.io/build.name: mybank-1
openshift.io/scc: privileged
pod.alpha.kubernetes.io/init-container-statuses: >-
[{
"name":"git-clone","state":{
"terminated":{
"exitCode":