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

Openshift - Variables in Config for different Environments

我目前正在尝试在两个不同的 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,这有两个问题

Nr.1

172.0.0.1:5000/int-myproject/my-app:最新

内部注册表的 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} 的参数。有什么好的方法可以实现吗?

首先,回答您的问题,是的,您可以将参数与 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,您不需要(通常)手动注入它。