Openshift-配置中针对不同环境的变量

时间:2019-01-17 10:21:57

标签: 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-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] .image,则有两个问题

1号

172.0.0.1:5000 / int-myproject / my-app:latest

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

Nr.2

172.0.0.1:5000/ int-myproject / my-app:latest

名称空间也将不同。在这种情况下,根据要部署到的环境,我希望它是int-myproject或prod-myproject。我当时在想,也许有一种方法可以在yaml中使用参数并将其传递给openshift,就像这样

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

,并且在我的yaml文件中有一个像$ {namespace}这样的参数。有什么好的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

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

为此,您将add the required template values移至yaml文件,而不是使用oc create,而将使用oc new-app -f deploymentconfig.yaml --param=SOME_KEY=someValue。在此处查看oc new-app --help以获得更多信息。

但是要注意其他一些要点:如果您是从内部注册表中引用映像,则最好使用imagestreams。如您所概述的那样,它们为从OpenShift内部docker注册表中提取的图像提供了抽象。

最后,每个Pod中的名称空间值为available via the downward API,您不必(通常)手动注入。