Yaml Openshift-配置中用于不同环境的变量

Yaml Openshift-配置中用于不同环境的变量,yaml,openshift,environment,Yaml,Openshift,Environment,我目前正在尝试在两个不同的openshift集群上进行部署,但我只想使用一个deploymentconfig文件。有没有克服当前问题的好方法 apiVersion: v1 kind: DeploymentConfig metadata: labels: app: my-app deploymentconfig: my-app name: my-app spec: selector: app: my-app deploymentconfig: my-ap

我目前正在尝试在两个不同的openshift集群上进行部署,但我只想使用一个deploymentconfig文件。有没有克服当前问题的好方法

apiVersion: v1
kind: DeploymentConfig
metadata:
  labels:
    app: my-app
    deploymentconfig: my-app
  name: my-app
spec:
  selector:
    app: my-app
    deploymentconfig: my-app
  strategy:
    type: Rolling
    rollingParams:
      intervalSeconds: 1
      maxSurge: 25%
      maxUnavailability: 25%
      timeoutSeconds: 600
      updatePeriodSeconds: 1
  replicas: 1
  template:
    metadata:
      labels:
        app: my-app
        deploymentconfig: my-app
    spec:
      containers:
        - name: my-app-container
          image: 172.0.0.1:5000/int-myproject/my-app:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
              protocol: TCP
          env:
            - name: ROUTE_PATH
              value: /my-app
            - name: HTTP_PORT
              value: "8080"
            - name: HTTPS_PORT
              value: "8081"
    restartPolicy: Always
    dnsPolicy: ClusterFirst
现在,如果您查看spec.template.spec.containers[0]。图像,则此操作存在两个问题

1号

172.0.0.1:5000/int myproject/my app:最新版本

内部注册表的IP在这两种环境中会有所不同

2号

172.0.0.1:5000/int myproject/my app:最新版本

名称空间也将不同。在这个场景中,我希望它是int-myproject或prod-myproject,具体取决于我要部署到的环境。我在想,也许有一种方法可以在yaml中使用参数,并以某种类似的方式将它们传递给openshift

oc create -f deploymentconfig.yaml --namespace=int-myproject

并且在我的yaml文件中有一个类似${namespace}的参数。有没有一个好方法可以实现这一点?

首先,回答您的问题,是的,您可以将参数与OpenShift模板一起使用,并传递值和创建时间

要做到这一点,您将访问yaml文件,而不是使用
oc create
,您将使用
oc new app-f deploymentconfig.yaml--param=SOME\u KEY=someValue
。查看
oc新应用程序--help
了解更多信息

不过,还有一些需要注意的问题:如果您引用的是来自内部注册表的图像,那么最好使用它。这些为从OpenShift上的内部docker注册表中提取的图像提供了一个抽象,正如您所概述的那样


最后,名称空间值在每个Pod中,您不需要(通常)手动注入该值

首先,回答您的问题,是的,您可以将参数与OpenShift模板一起使用,并传递值和创建时间

要做到这一点,您将访问yaml文件,而不是使用
oc create
,您将使用
oc new app-f deploymentconfig.yaml--param=SOME\u KEY=someValue
。查看
oc新应用程序--help
了解更多信息

不过,还有一些需要注意的问题:如果您引用的是来自内部注册表的图像,那么最好使用它。这些为从OpenShift上的内部docker注册表中提取的图像提供了一个抽象,正如您所概述的那样


最后,名称空间值在每个Pod中,您不需要(通常)手动注入该值

谢谢。实际上,我正在使用imagestreams并将我的构建推进到is中。我想我在deploymentconfig中引用错了。我是否需要引用链接中所述的IS-under触发器并从容器规范中完全删除映像,还是需要在容器规范中引用映像?您仍将引用容器规范中的映像,但它将不是ip—它将是映像流名称,这将允许您使其跨集群通用。尝试部署目录中的任何服务,例如nodejs,并查看它生成的对象(构建、imagestreams、部署)作为指导,这是我最初尝试的,所以我只有Image:my app:latest,但这总是会给我一个错误(ImagePullBackOff)来拉取图像“rpc错误:code=2 desc=unauthorized:authorized:authorized required认证您正在运行哪个版本的OpenShift以及在哪个环境/操作系统中?哦,还有最后一个问题。我无法用谷歌搜索它。如果我使用模板,是否可以引用文件中的对象?我更喜欢它有点模块化,而不是在一个长文件中写所有东西谢谢。实际上,我正在使用imagestreams并将我的构建推进到is中。我想我在deploymentconfig中引用错了。我是否需要引用链接中所述的IS-under触发器并从容器规范中完全删除映像,还是需要在容器规范中引用映像?您仍将引用容器规范中的映像,但它将不是ip—它将是映像流名称,这将允许您使其跨集群通用。尝试部署目录中的任何服务,例如nodejs,并查看它生成的对象(构建、imagestreams、部署)作为指导,这是我最初尝试的,所以我只有Image:my app:latest,但这总是会给我一个错误(ImagePullBackOff)来拉取图像“rpc错误:code=2 desc=unauthorized:authorized:authorized required认证您正在运行哪个版本的OpenShift以及在哪个环境/操作系统中?哦,还有最后一个问题。我无法用谷歌搜索它。如果我使用模板,是否可以引用文件中的对象?我希望它比在一个长文件中编写所有东西都要模块化一点