原文: https://docs.openshift.com/container-platform/3.11/dev_guide/templates.html
在openshift云平台,我们会使用模版配合不同的参数来创建不同的应用,即,一个模版是一系列可以被参数化并创建一组对象的集合。模版可以创建任何你有权限创建的任意对象,例如services, build cnofiguration以及deploy configuration。一个模版通常会给模版中所常见的对象定义标签(labels)。
你可以自己定义模版 ,也可以使用已经上传的模版。
如果你用的json或者yaml去定义个template, 你可以通过cli上传模版,这样任何人只要和合适的权限都可以使用该模版。
上传模版到当前项目,使用以下命令:
$ oc create -f
上传模版到不同的项目,则需要指定项目,如下:
$ oc create -f-n
基于模版创建应用,有两种方法,即可参考 Creating an Application Using the Web Console也可以通过cli去创建。
标签用于管理已经生成的对象,例如pods。我们可以定义模版时就定义好标签,也可以通过命令行去给整个模版的对象添加标签。
命令如下:
$ oc process -f-l name=otherLabel
模版中的一些参数在使用模版时可以被覆盖。你可以命令行获取到指定模版文件的参数。命令如下:
$ oc process --parameters -f
如果模版已经上传,则你可以使用以下命令:
$ oc process --parameters -n
对于模版中参数更多内容,可参考 parameters
section of the template。
通过cli,你可以使用以下指令来处理模版文件而生成所有对象到标准输出。
$ oc process -f
如果模版已经上传,则你可以使用以下指令:
$ oc process
这两个命令,并没有真正的生成对象。我们需要使用以下命令,处理模版到标准输出然后管道输出给真正的创建指令:
$ oc process -f| oc create -f -
如果模版已经上传,则你可以使用以下指令:
$ oc process | oc create -f -
可以和“-p”选项一起使用去重写模版参数的值,如下指令:
$ oc process -f my-rails-postgresql \ -p POSTGRESQL_USER=bob \ -p POSTGRESQL_DATABASE=mydatabase \ | oc create -f -
如果参数比较多,你可以将他们存入文件中,然后直接使用参数文件,如下指令:
$ cat postgres.env POSTGRESQL_USER=bob POSTGRESQL_DATABASE=mydatabase $ oc process -f my-rails-postgresql --param-file=postgres.env、
你也可以通过标准输出指定参数,命令如下:
$ sed s/bob/alice/ postgres.env | oc process -f my-rails-postgresql --param-file=-
使用以下指令去编辑已经上传到当前项目的模版:
$ oc edit template
openshift容器平台默认提供了一些即可应用和快速入门模版,以支持用户可以快速创建应用。这样的模版有rails, Django, node.js, CakePHP,以及Perl. 你可以通过以下指令去查看模版:
$ oc get templates -n openshift
如果没有输出,则可参考 Loading the Default Image Streams and Templates。
模版,这些模版的编译的是GitHub的一些共同的源代码。如果你想编译源码并构建应用,则你需要:
SOURCE_REPOSITORY_URL参数
如果,你想查看这一过程的基于web console的整个演练,可参考 Getting Started for Developers: Web Console.
当你需要重复创建你的应用是,你可以定义模版。格式如下:
apiVersion: v1
kind: Template
metadata:
name: redis-template
annotations:
description: "Description"
iconClass: "icon-redis"
tags: "database,nosql"
objects:
- apiVersion: v1
kind: Pod
metadata:
name: redis-master
spec:
containers:
- env:
- name: REDIS_PASSWORD
value: ${REDIS_PASSWORD}
image: dockerfile/redis
name: master
ports:
- containerPort: 6379
protocol: TCP
parameters:
- description: Password used for Redis authentication
from: '[A-Z0-9]{8}'
generate: expression
name: REDIS_PASSWORD
labels:
redis: master
模版的描述是通知用户这个模版是干什么的,然后帮助用户在web console端很容易的找到。其他的metadata则可有可无。
模版可以包含许多标签。当这些模版被实例化时,这些标签就会添加给这个对象。例如,定下以下标签,则可以让我们很容易的找到基于这个模版创建的所有的对象。
kind: "Template"
apiVersion: "v1"
...
labels:
template: "cakephp-mysql-example"
app: "${NAME}"
当模版被实例化时,参数的值可以被用户提供,可以被直接生成。如果提供了默认值,则用户在实例化模版时,则可以不指定该参数。
参数1: 默认参数
parameters:
- name: USERNAME
description: "The user name for Joe"
value: joe
参数2:生成参数值
parameters:
- name: PASSWORD
description: "The random user password"
generate: expression
from: "[a-zA-Z0-9]{12}"
模版中最主要的部分就是模版实例化时生成的一组对象。对象类型没有限制。
可通过以下命令导出已有的对象作为参考并完成自己的模版比自己从头写要简单的多。
$ oc get -o yaml --export all >
其中all可以替换为bc, dc等其他对象。