1) 什么是template
Openshift在创建应用过程中需要创建多个资源,例如创建最简单的deployment-example应用,需要创建的Imagestream、Deployemtconfig、Service三个资源,template提供了一种保存多个资源配置的模板,用户可以直接根据模板创建多个资源,完成应用的部署。
2) template 怎么创建
下面提供一个最简单的Deploymentexample的模板,模板看似很长其实就包括两部分模板配置部分和资源配置部分(objects,objects部分包含了各类资源)。
deployment-template.yaml
apiVersion: v1
kind: Template
metadata:
creationTimestamp: null
name: deployment-example # 模板配置部分
objects: # 资源配置部分
- apiVersion: v1
kind: ImageStream
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: deployment-example
name: deployment-example
spec:
lookupPolicy:
local: false
tags:
- annotations:
openshift.io/imported-from: openshift/deployment-example:latest
from:
kind: DockerImage
name: openshift/deployment-example:latest
generation: null
importPolicy: {}
name: latest
referencePolicy:
type: ""
status:
dockerImageRepository: ""
- apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: deployment-example
name: deployment-example
spec:
replicas: 1
selector:
app: deployment-example
deploymentconfig: deployment-example
strategy:
resources: {}
template:
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: deployment-example
deploymentconfig: deployment-example
spec:
containers:
- image: openshift/deployment-example:latest
name: deployment-example
ports:
- containerPort: 8080
protocol: TCP
resources: {}
test: false
triggers:
- type: ConfigChange
- imageChangeParams:
automatic: true
containerNames:
- deployment-example
from:
kind: ImageStreamTag
name: deployment-example:latest
type: ImageChange
status:
availableReplicas: 0
latestVersion: 0
observedGeneration: 0
replicas: 0
unavailableReplicas: 0
updatedReplicas: 0
- apiVersion: v1
kind: Service
metadata:
annotations:
openshift.io/generated-by: OpenShiftNewApp
creationTimestamp: null
labels:
app: deployment-example
name: deployment-example
spec:
ports:
- name: 8080-tcp
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: deployment-example
deploymentconfig: deployment-example
status:
loadBalancer: {}
创建Template进行如下操作即可:
[root@master2 template]# oc create -f deployment-template.yaml
template "deployment-example" created
[root@master2 template]# oc get template
NAME DESCRIPTION PARAMETERS OBJECTS
deployment-example 0 (all set) 3
3) 如何使用template,使用前面创建的template创建应用过程如下:
[root@master2 template]# oc process deployment-example | oc create -f -
imagestream "deployment-example" created
deploymentconfig "deployment-example" created
service "deployment-example" created
[root@master2 template]# oc get dc
NAME REVISION DESIRED CURRENT TRIGGERED BY
deployment-example 1 1 1 config,image(deployment-example:latest)
[root@master2 template]# oc get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
deployment-example 172.30.192.204 <none> 8080/TCP 5m
[root@master2 template]# oc get imagestream
NAME DOCKER REPO TAGS UPDATED
deployment-example docker-registry.default.svc:5000/template/deployment-example latest 5 minutes ago
4)常见使用
a. 带参数的template实例:
redis-template.yaml(参数REDIS_PASSWORD)
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: docker.io/redis:latest
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
[root@master2 template]# oc create -f redis-template.yaml
template "redis-template" created
[root@master2 template]# oc process redis-template -p REDIS_PASSWORD=qwer1234|oc create -f -
pod "redis-master" created
b. 基于现有环境生成模版
(1) 创建一个应用
# oc new-app openshift/deployment-example:latest
(2) 将该应用的imagestream,dc,svc制作成template test1, 并把template test1配置导入到文件test1
# oc export imagestream,dc,svc --as-template=test1 > test1
(3) 修改文件test1中镜像部分(image字段),因为原来的镜像已经不存在了,会导致出问题
(4) 创建template 名城为test1
# oc create -f test1
(5) 基于template创建应用
# oc process test1 | oc create -f -