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



我目前正在尝试在两个不同的 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 在两个环境之间会有所不同

第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 文件中有一个像 ${命名空间} 这样的参数。有没有实现这一点的好方法?

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

为此,您需要将所需的模板值添加到 yaml 文件中,而不是使用 oc create 您将使用 oc new-app -f deploymentconfig.yaml --param=SOME_KEY=someValue .在此处查看oc new-app --help以获取更多信息。

不过,还需要注意的其他一些要点:如果您从内部注册表引用映像,则最好使用映像流。这些为从 OpenShift 上的内部 docker 注册表中提取的映像提供了抽象,如您所概述的情况所示。

最后,命名空间值可以通过每个 Pod 中的向下 API 获得,您不需要(通常)手动注入它。

最新更新