Openshift:未解析的图像
Openshift: Unresolved Image
我受困于 Openshift(Origin),需要一些帮助。
假设我想通过 CLI 将 grafana 部署添加到新启动的集群。
我做什么:
将模板上传到我的 openshift 集群 (oc create -f openshift-grafana.yml)
从 docker 中心拉取必要的图像 (oc import-image --confirm grafana/grafana)
根据我的模板构建一个新应用程序 (oc new-app grafana)
这些步骤创建了部署配置和路由。
但是我无法通过 CLI 开始部署。
# oc deploy grafana
grafana deployment #1 waiting on image or update
# oc rollout latest grafana
Error from server (BadRequest): cannot trigger a deployment for "grafana" because it contains unresolved imagesenter code here
在 openshift web 控制台中它看起来像这样:
图像在那里,甚至 link 也在工作。在 Web 控制台中,我可以单击“部署”,它正在运行。但是我仍然无法通过命令行推出新版本。
唯一可行的方法是编辑部署 yml,以便 openshift 识别更改并根据“配置更改”启动部署(提示:我没有更改图像或图像名称)
我的模板没有什么特别之处,它只是通过 oc export 从工作配置导出。
任何提示都将不胜感激,我几乎被困住了。
谢谢
下面包含的模板可用作初学者。请注意,grafana 图像似乎要求它是 运行 作为 root,否则它不会启动。这意味着您必须覆盖 OpenShift 的默认安全模型,并启用允许 运行ning 图像作为项目中的根。不推荐这样做。应修复 grafana 图像,以免要求它们 运行 作为 root。
要以 root 身份启用 运行ning,您需要 运行 作为集群管理员:
oc adm policy add-scc-to-user anyuid -z default -n myproject
其中 myproject
是您正在使用的项目的名称。
我将其应用于默认服务帐户,但最好创建一个单独的服务帐户,将其应用于该帐户,然后更改模板,以便只有 grafana 运行s 作为该服务帐户。
可能的目的是您通过 grafana.ini
文件覆盖默认设置,以便它使用您安装的 emptyDir
目录,然后这不是问题。我没有尝试提供任何覆盖配置。
grafana 的模板如下所示。请注意,我使用了 JSON,因为我发现使用 JSON 更容易,但也是为了避免缩进被搞砸,导致 YAML 无法使用。
在使用此模板之前,您显然应该创建相应的配置映射,其中名称的格式为 ${APPLICATION_NAME}-config
,其中 ${APPLICATION_NAME}
为 grafana
,除非您在使用模板时覆盖它。配置映射中的键应为 grafana.ini
,然后将配置文件内容作为值。
{
"apiVersion": "v1",
"kind": "Template",
"metadata": {
"name": "grafana"
},
"parameters": [
{
"name": "APPLICATION_NAME",
"value": "grafana",
"from": "[a-zA-Z0-9]",
"required": true
}
],
"objects": [
{
"apiVersion": "v1",
"kind": "ImageStream",
"metadata": {
"name": "${APPLICATION_NAME}-img",
"labels": {
"app": "${APPLICATION_NAME}"
}
},
"spec": {
"tags": [
{
"name": "latest",
"from": {
"kind": "DockerImage",
"name": "grafana/grafana"
}
}
]
}
},
{
"apiVersion": "v1",
"kind": "DeploymentConfig",
"metadata": {
"name": "${APPLICATION_NAME}",
"labels": {
"app": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"replicas": 1,
"selector": {
"app": "${APPLICATION_NAME}",
"deploymentconfig": "${APPLICATION_NAME}"
},
"template": {
"metadata": {
"labels": {
"app": "${APPLICATION_NAME}",
"deploymentconfig": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"containers": [
{
"name": "grafana",
"image": "${APPLICATION_NAME}-img:latest",
"imagePullPolicy": "Always",
"livenessProbe": {
"failureThreshold": 3,
"httpGet": {
"path": "/",
"port": 3000,
"scheme": "HTTP"
},
"periodSeconds": 10,
"successThreshold": 1,
"timeoutSeconds": 1
},
"ports": [
{
"containerPort": 3000,
"protocol": "TCP"
}
],
"volumeMounts": [
{
"mountPath": "/etc/grafana",
"name": "grafana-1"
},
{
"mountPath": "/var/lib/grafana",
"name": "grafana-2"
},
{
"mountPath": "/var/log/grafana",
"name": "grafana-3"
}
]
}
],
"volumes": [
{
"configMap": {
"defaultMode": 420,
"name": "${APPLICATION_NAME}-config"
},
"name": "grafana-1"
},
{
"emptyDir": {},
"name": "grafana-2"
},
{
"emptyDir": {},
"name": "grafana-3"
}
]
}
},
"test": false,
"triggers": [
{
"type": "ConfigChange"
},
{
"imageChangeParams": {
"automatic": true,
"containerNames": [
"grafana"
],
"from": {
"kind": "ImageStreamTag",
"name": "${APPLICATION_NAME}-img:latest"
}
},
"type": "ImageChange"
}
]
}
},
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "${APPLICATION_NAME}",
"labels": {
"app": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"ports": [
{
"name": "3000-tcp",
"port": 3000,
"protocol": "TCP",
"targetPort": 3000
}
],
"selector": {
"deploymentconfig": "${APPLICATION_NAME}"
},
"type": "ClusterIP"
}
},
{
"apiVersion": "v1",
"kind": "Route",
"metadata": {
"name": "${APPLICATION_NAME}",
"labels": {
"app": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"host": "",
"port": {
"targetPort": "3000-tcp"
},
"to": {
"kind": "Service",
"name": "${APPLICATION_NAME}",
"weight": 100
}
}
}
]
}
我遇到了同样的问题,我通过添加解决了它:
lastTriggeredImage: >-
mydockerrepo.com/repo/myimage@sha256:xxxxxxxxxxxxxxxx
开启:
triggers:
- type: ImageChange
imageChangeParams:
部署配置 yaml。看起来如果它不知道最后触发的图像是什么,它将无法解析它。
对我来说,我在 'from' 下的图像名称不正确:
triggers:
- type: ConfigChange
- imageChangeParams:
automatic: true
containerNames:
- alcatraz-ha
from:
kind: ImageStreamTag
name: 'alcatraz-haproxy:latest'
namespace: alcatraz-ha-dev
type: ImageChange
我的名字是:'alcatraz-ha:latest'
所以找不到图片
确保 spec.triggers.imageChangeParams.from.name
作为图像流存在
triggers:
- imageChangeParams:
from:
kind: ImageStreamTag
name: 'myapp:latest' # Does "myapp" exist if you run oc get is ????!!!
我受困于 Openshift(Origin),需要一些帮助。
假设我想通过 CLI 将 grafana 部署添加到新启动的集群。
我做什么:
将模板上传到我的 openshift 集群 (oc create -f openshift-grafana.yml)
从 docker 中心拉取必要的图像 (oc import-image --confirm grafana/grafana)
根据我的模板构建一个新应用程序 (oc new-app grafana)
这些步骤创建了部署配置和路由。 但是我无法通过 CLI 开始部署。
# oc deploy grafana
grafana deployment #1 waiting on image or update
# oc rollout latest grafana
Error from server (BadRequest): cannot trigger a deployment for "grafana" because it contains unresolved imagesenter code here
在 openshift web 控制台中它看起来像这样:
图像在那里,甚至 link 也在工作。在 Web 控制台中,我可以单击“部署”,它正在运行。但是我仍然无法通过命令行推出新版本。
唯一可行的方法是编辑部署 yml,以便 openshift 识别更改并根据“配置更改”启动部署(提示:我没有更改图像或图像名称)
我的模板没有什么特别之处,它只是通过 oc export 从工作配置导出。
任何提示都将不胜感激,我几乎被困住了。 谢谢
下面包含的模板可用作初学者。请注意,grafana 图像似乎要求它是 运行 作为 root,否则它不会启动。这意味着您必须覆盖 OpenShift 的默认安全模型,并启用允许 运行ning 图像作为项目中的根。不推荐这样做。应修复 grafana 图像,以免要求它们 运行 作为 root。
要以 root 身份启用 运行ning,您需要 运行 作为集群管理员:
oc adm policy add-scc-to-user anyuid -z default -n myproject
其中 myproject
是您正在使用的项目的名称。
我将其应用于默认服务帐户,但最好创建一个单独的服务帐户,将其应用于该帐户,然后更改模板,以便只有 grafana 运行s 作为该服务帐户。
可能的目的是您通过 grafana.ini
文件覆盖默认设置,以便它使用您安装的 emptyDir
目录,然后这不是问题。我没有尝试提供任何覆盖配置。
grafana 的模板如下所示。请注意,我使用了 JSON,因为我发现使用 JSON 更容易,但也是为了避免缩进被搞砸,导致 YAML 无法使用。
在使用此模板之前,您显然应该创建相应的配置映射,其中名称的格式为 ${APPLICATION_NAME}-config
,其中 ${APPLICATION_NAME}
为 grafana
,除非您在使用模板时覆盖它。配置映射中的键应为 grafana.ini
,然后将配置文件内容作为值。
{
"apiVersion": "v1",
"kind": "Template",
"metadata": {
"name": "grafana"
},
"parameters": [
{
"name": "APPLICATION_NAME",
"value": "grafana",
"from": "[a-zA-Z0-9]",
"required": true
}
],
"objects": [
{
"apiVersion": "v1",
"kind": "ImageStream",
"metadata": {
"name": "${APPLICATION_NAME}-img",
"labels": {
"app": "${APPLICATION_NAME}"
}
},
"spec": {
"tags": [
{
"name": "latest",
"from": {
"kind": "DockerImage",
"name": "grafana/grafana"
}
}
]
}
},
{
"apiVersion": "v1",
"kind": "DeploymentConfig",
"metadata": {
"name": "${APPLICATION_NAME}",
"labels": {
"app": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"replicas": 1,
"selector": {
"app": "${APPLICATION_NAME}",
"deploymentconfig": "${APPLICATION_NAME}"
},
"template": {
"metadata": {
"labels": {
"app": "${APPLICATION_NAME}",
"deploymentconfig": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"containers": [
{
"name": "grafana",
"image": "${APPLICATION_NAME}-img:latest",
"imagePullPolicy": "Always",
"livenessProbe": {
"failureThreshold": 3,
"httpGet": {
"path": "/",
"port": 3000,
"scheme": "HTTP"
},
"periodSeconds": 10,
"successThreshold": 1,
"timeoutSeconds": 1
},
"ports": [
{
"containerPort": 3000,
"protocol": "TCP"
}
],
"volumeMounts": [
{
"mountPath": "/etc/grafana",
"name": "grafana-1"
},
{
"mountPath": "/var/lib/grafana",
"name": "grafana-2"
},
{
"mountPath": "/var/log/grafana",
"name": "grafana-3"
}
]
}
],
"volumes": [
{
"configMap": {
"defaultMode": 420,
"name": "${APPLICATION_NAME}-config"
},
"name": "grafana-1"
},
{
"emptyDir": {},
"name": "grafana-2"
},
{
"emptyDir": {},
"name": "grafana-3"
}
]
}
},
"test": false,
"triggers": [
{
"type": "ConfigChange"
},
{
"imageChangeParams": {
"automatic": true,
"containerNames": [
"grafana"
],
"from": {
"kind": "ImageStreamTag",
"name": "${APPLICATION_NAME}-img:latest"
}
},
"type": "ImageChange"
}
]
}
},
{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
"name": "${APPLICATION_NAME}",
"labels": {
"app": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"ports": [
{
"name": "3000-tcp",
"port": 3000,
"protocol": "TCP",
"targetPort": 3000
}
],
"selector": {
"deploymentconfig": "${APPLICATION_NAME}"
},
"type": "ClusterIP"
}
},
{
"apiVersion": "v1",
"kind": "Route",
"metadata": {
"name": "${APPLICATION_NAME}",
"labels": {
"app": "${APPLICATION_NAME}",
"type": "monitoring"
}
},
"spec": {
"host": "",
"port": {
"targetPort": "3000-tcp"
},
"to": {
"kind": "Service",
"name": "${APPLICATION_NAME}",
"weight": 100
}
}
}
]
}
我遇到了同样的问题,我通过添加解决了它:
lastTriggeredImage: >-
mydockerrepo.com/repo/myimage@sha256:xxxxxxxxxxxxxxxx
开启:
triggers:
- type: ImageChange
imageChangeParams:
部署配置 yaml。看起来如果它不知道最后触发的图像是什么,它将无法解析它。
对我来说,我在 'from' 下的图像名称不正确:
triggers:
- type: ConfigChange
- imageChangeParams:
automatic: true
containerNames:
- alcatraz-ha
from:
kind: ImageStreamTag
name: 'alcatraz-haproxy:latest'
namespace: alcatraz-ha-dev
type: ImageChange
我的名字是:'alcatraz-ha:latest'
所以找不到图片
确保 spec.triggers.imageChangeParams.from.name
作为图像流存在
triggers:
- imageChangeParams:
from:
kind: ImageStreamTag
name: 'myapp:latest' # Does "myapp" exist if you run oc get is ????!!!