JImmy的文檔: Openshift template

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 -


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章