我目前正在尝试在两个不同的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}这样的参数。有什么好的方法可以做到这一点吗?
答案 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,您不必(通常)手动注入。