Yaml Openshift-配置中用于不同环境的变量
我目前正在尝试在两个不同的openshift集群上进行部署,但我只想使用一个deploymentconfig文件。有没有克服当前问题的好方法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
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以及在哪个环境/操作系统中?哦,还有最后一个问题。我无法用谷歌搜索它。如果我使用模板,是否可以引用文件中的对象?我希望它比在一个长文件中编写所有东西都要模块化一点