Openshift:未解决的图像

时间:2017-07-01 11:46:42

标签: openshift openshift-origin

我坚持使用Openshift(Origin)并需要一些帮助。

我想说我想通过CLI将grafana部署添加到新的启动集群。

我做什么:

  1. 将模板上传到我的openshift集群(oc create -f openshift-grafana.yml)

  2. 从泊坞窗中心拉出必要的图像(oc import-image --confirm grafana / grafana)

  3. 根据我的模板构建新应用(oc new-app grafana)

  4. 这些步骤将创建部署配置和路由。 但后来我无法通过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控制台中,它看起来像这样:

    [![enter image description here][3]][3]
    [![enter image description here][2]][2]
    [![enter image description here][1]][1]
    

    图像就在那里,即使链接正常。在Web控制台中,我可以单击"部署"它正在发挥作用。但是,我无法通过命令行推出新版本。

    它的唯一工作方式是编辑部署yml,以便openshift根据" config change"识别变更开始部署。 (提示:我没有改变图像或图像名称)

    我的模板中没有什么特别的东西,只是从工作配置中通过oc导出导出。

    任何提示都会受到赞赏,我几乎被卡住了。 感谢。

4 个答案:

答案 0 :(得分:2)

我有同样的问题,我通过添加:

解决了这个问题
        lastTriggeredImage: >-
          mydockerrepo.com/repo/myimage@sha256:xxxxxxxxxxxxxxxx

在:

  triggers:
    - type: ImageChange
      imageChangeParams:

部署配置yaml。看起来如果它不知道最后触发的图像是什么,它将无法解决它。

答案 1 :(得分:1)

下面是您可以用作启动器的模板。请注意,grafana图像似乎需要以root身份运行,否则它将无法启动。这意味着您必须覆盖OpenShift的默认安全模型,并允许允许在项目中以root身份运行映像。不建议这样做。应固定grafana图像,以免它们以root身份运行。

要启用以root用户身份运行,您需要以群集管理员身份运行:

oc adm policy add-scc-to-user anyuid -z default -n myproject

其中myproject是您正在使用的项目的名称。

我将其应用于默认服务帐户,但最好创建一个单独的服务帐户,将其应用于该帐户,然后更改模板,以便只运行grafana作为该服务帐户。

可能的意图是您通过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
                }
            }
        }
    ]
}

答案 2 :(得分:0)

对我来说,我在'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',所以找不到图片

答案 3 :(得分:0)

确保 spec.triggers.imageChangeParams.from.name 作为图像流存在

triggers:
    - imageChangeParams:
        from:
          kind: ImageStreamTag
          name: 'myapp:latest' # Does "myapp" exist if you run oc get is ????!!!