Openshift template的使用

本文深入解析OpenShift中Template的定义、使用及参数化方法,演示如何通过Template批量创建和管理项目资源,如Service、BuildConfig和DeploymentConfig。同时,介绍了如何利用Template进行应用的批量操作和现有应用的导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.template的定义

官方对template的定义是

A template describes a set of objects that can be parameterized and processed to produce a list of objects for creation by OKD. A template can be processed to create anything you have permission to create within a project, for example services, build configurations, and deployment configurations. A template may also define a set of labels to apply to every object defined in the template.

也就是Template是一组对象的集合,包括Service,BC,DC等,template可以针对里面定义的一组对象指定标签,便于批量操作。

 

2.template的使用

创建一个template

ericdeMacBook-Pro:template ericnie$ cat 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: s2itomcat:latest
      from:
        kind: DockerImage
        name: s2itomcat: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: s2itomcat: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: {}

 

ericdeMacBook-Pro:template ericnie$ oc process deployment-example | oc create -f -
imagestream "deployment-example" created
deploymentconfig "deployment-example" created
service "deployment-example" created

查看这些对象

ericdeMacBook-Pro:template ericnie$ oc get dc
NAME                 REVISION   DESIRED   CURRENT   TRIGGERED BY
deployment-example   1          1         1         config,image(s2itomcat:latest)
s2itomcat            7          1         1         config,image(s2itomcat:latest)
ericdeMacBook-Pro:template ericnie$ oc get svc
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
deployment-example   ClusterIP   172.30.160.162   <none>        8080/TCP   11m
s2itomcat            ClusterIP   172.30.145.161   <none>        8080/TCP   5d
ericdeMacBook-Pro:template ericnie$ oc get imagestream
NAME                 DOCKER REPO                                     TAGS      UPDATED
deployment-example   172.30.1.1:5000/s2i-tomcat/deployment-example   latest
mytomcat             172.30.1.1:5000/s2i-tomcat/mytomcat             latest    5 days ago
s2itomcat            172.30.1.1:5000/s2i-tomcat/s2itomcat            latest    2 hours ago

在界面上看到这些对象已经创建

 

3.参数化

如果一个模版对应多个微服务,可以创建参数化模版并赋值。修改如下

ericdeMacBook-Pro:template ericnie$ cat 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: ${APP_NAME}
    name: ${APP_NAME}
  spec:
    lookupPolicy:
      local: false
    tags:
    - annotations:
        openshift.io/imported-from: s2itomcat:latest
      from:
        kind: DockerImage
        name: s2itomcat: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: ${APP_NAME}
    name: ${APP_NAME}
  spec:
    replicas: 1
    selector:
      app: ${APP_NAME}
      deploymentconfig: ${APP_NAME}
    strategy:
      resources: {}
    template:
      metadata:
        annotations:
          openshift.io/generated-by: OpenShiftNewApp
        creationTimestamp: null
        labels:
          app: ${APP_NAME}
          deploymentconfig: ${APP_NAME}
      spec:
        containers:
        - image: s2itomcat:latest
          name: ${APP_NAME}
          ports:
          - containerPort: 8080
            protocol: TCP
          resources: {}
    test: false
    triggers:
    - type: ConfigChange
    - imageChangeParams:
        automatic: true
        containerNames:
        - ${APP_NAME}
        from:
          kind: ImageStreamTag
          name: s2itomcat: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: ${APP_NAME}
    name: ${APP_NAME}
  spec:
    ports:
    - name: 8080-tcp
      port: 8080
      protocol: TCP
      targetPort: 8080
    selector:
      app: ${APP_NAME}
      deploymentconfig: ${APP_NAME}
  status:
    loadBalancer: {}
parameters:
- name: APP_NAME
  displayname: application name
  value: myapp

创建

ericdeMacBook-Pro:template ericnie$ oc new-app deployment-template.yaml
--> Deploying template "s2i-tomcat/deployment-example" for "deployment-template.yaml" to project s2i-tomcat

     * With parameters:
        * APP_NAME=myapp

--> Creating resources ...
    imagestream "myapp" created
    deploymentconfig "myapp" created
    service "myapp" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/myapp'
    Run 'oc status' to view your app.

 

 

4.批量删除对象

ericdeMacBook-Pro:template ericnie$ oc delete all -l app=deployment-example
deploymentconfig "deployment-example" deleted
imagestream "deployment-example" deleted
route "deployment-example" deleted
pod "deployment-example-1-wmz26" deleted
service "deployment-example" deleted

 

5.导出现有应用到模版

ericdeMacBook-Pro:template ericnie$ oc export deploymentconfig,buildconfig,svc,route --as-template=mytomcat > mytomcat.yaml

 3.11版本

oc get -o yaml --export deploymentconfig > openshift-tomcat.yaml

 

ericdeMacBook-Pro:template ericnie$ cat mytomcat.yaml
apiVersion: v1
kind: Template
metadata:
  creationTimestamp: null
  name: mytomcat
objects:
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      openshift.io/generated-by: OpenShiftWebConsole
    creationTimestamp: null
    generation: 1
    labels:
      app: s2itomcat
    name: s2itomcat
  spec:
    replicas: 1
    selector:
      deploymentconfig: s2itomcat
    strategy:
      activeDeadlineSeconds: 21600
      resources: {}
      rollingParams:
        intervalSeconds: 1
        maxSurge: 25%
        maxUnavailable: 25%
        timeoutSeconds: 600
        updatePeriodSeconds: 1
      type: Rolling
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: s2itomcat
          deploymentconfig: s2itomcat
      spec:
        containers:
        - image: 172.30.1.1:5000/s2i-tomcat/s2itomcat@sha256:9c192795180367f2a689b1b395b4156e746fdc266c9b1249a97651b1caa002d6
          imagePullPolicy: Always
          name: s2itomcat
          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:
        - s2itomcat
        from:
          kind: ImageStreamTag
          name: s2itomcat:latest
          namespace: s2i-tomcat
      type: ImageChange
    - type: ConfigChange
  status:
    availableReplicas: 0
    latestVersion: 0
    observedGeneration: 0
    replicas: 0
    unavailableReplicas: 0
    updatedReplicas: 0
- apiVersion: v1
  kind: BuildConfig
  metadata:
    annotations:
      openshift.io/generated-by: OpenShiftWebConsole
    creationTimestamp: null
    labels:
      app: s2itomcat
    name: s2itomcat
  spec:
    nodeSelector: null
    output:
      to:
        kind: ImageStreamTag
        name: s2itomcat:latest
    postCommit: {}
    resources: {}
    runPolicy: Serial
    source:
      git:
        ref: master
        uri: https://github.com/ericnie2015/openshift-tomcat.git
      type: Git
    strategy:
      sourceStrategy:
        from:
          kind: ImageStreamTag
          name: s2i-tomcat:latest
          namespace: openshift
      type: Source
    triggers:
    - imageChange: {}
      type: ImageChange
    - type: ConfigChange
    - generic:
        secret: 0e2a7f575472e635
      type: Generic
    - github:
        secret: 2c06c9b430310ec1
      type: GitHub
  status:
    lastVersion: 0
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
      openshift.io/generated-by: OpenShiftWebConsole
    creationTimestamp: null
    labels:
      app: s2itomcat
    name: s2itomcat
  spec:
    ports:
    - name: 8080-tcp
      port: 8080
      protocol: TCP
      targetPort: 8080
    selector:
      deploymentconfig: s2itomcat
    sessionAffinity: None
    type: ClusterIP
  status:
    loadBalancer: {}
- apiVersion: v1
  kind: Route
  metadata:
    annotations:
      openshift.io/generated-by: OpenShiftWebConsole
      openshift.io/host.generated: "true"
    creationTimestamp: null
    labels:
      app: s2itomcat
    name: s2itomcat
  spec:
    host: s2itomcat-s2i-tomcat.192.168.99.100.nip.io
    port:
      targetPort: 8080-tcp
    to:
      kind: Service
      name: s2itomcat
      weight: 100
    wildcardPolicy: None
  status:
    ingress:
    - conditions:
      - lastTransitionTime: 2018-09-26T13:33:16Z
        status: "True"
        type: Admitted
      host: s2itomcat-s2i-tomcat.192.168.99.100.nip.io
      routerName: router
      wildcardPolicy: None

 

转载于:https://www.cnblogs.com/ericnie/p/9737987.html

### OpenShift 中的人工智能集成与能力 OpenShift 是一个基于 Kubernetes 的平台即服务 (PaaS),提供了强大的容器化应用程序部署和管理功能。对于人工智能 (AI) 集成而言,OpenShift 提供了一系列工具和服务来简化机器学习模型的开发、训练和部署过程。 #### 使用 Kubeflow 实现 AI 功能 为了实现更高效的 AI 开发流程,Red Hat 推出了 Kubeflow 项目的支持。Kubelfow 是专门为 Kubernetes 设计的一套开源库和技术栈,用于构建可移植、模块化的机器学习管道[^1]。通过在 OpenShift 上安装 Kubeflow,开发者可以获得以下优势: - **自动化 ML 流水线**:利用 Tekton 和 Argo Workflows 来创建复杂的 CI/CD 管道,从而加速实验迭代周期。 - **超参数优化**:借助 Katib 组件自动调整模型中的超参数设置,提高预测性能。 - **多租户支持**:允许多个团队在同一集群内独立操作而不互相干扰。 ```yaml apiVersion: kubeflow.org/v1alpha2 kind: TFJob metadata: name: mnist-train spec: tfReplicaSpecs: Worker: replicas: 3 template: spec: containers: - image: gcr.io/kubeflow-ci/tf-mnist-with-summaries:1.0 name: tensorflow ``` 此外,在企业级环境中,可能还需要考虑安全性方面的要求。正如所提到的功能那样,某些解决方案不仅限于提供 API 调用控制,还包括但不限于身份验证、授权以及审计跟踪等功能[^2]。这些特性有助于保护敏感数据的安全性,并确保符合行业标准法规。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值