web-dev-qa-db-ja.com

Openshift:未解決のイメージ

openshift(Origin)で立ち往生していて、助けが必要です。

CLIを介して新しく開始されたクラスターにgrafanaデプロイメントを追加したいとします。

私がやること:

  1. テンプレートをopenshiftクラスターにアップロードします(oc create -f openshift-grafana.yml)

  2. Dockerハブから必要なイメージをプルします(oc import-image --confirm grafana/grafana)

  3. テンプレートに基づいて新しいアプリを作成します(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コンソールでは、次のようになります。

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

画像はそこにあり、リンクも機能しています。 Webコンソールで、[デプロイ]をクリックすると、機能します。それにもかかわらず、コマンドラインから新しいバージョンをロールアウトすることはできません。

それが機能する唯一の方法は、デプロイメントymlを編集して、openshiftが変更を認識し、「configchange」に基づいてデプロイメントを開始することです(ヒント:イメージまたはイメージ名を変更していませんでした)

私のテンプレートには特別なことは何もありません。それは、動作中の構成からのocエクスポートによるエクスポートでした。

どんなヒントでもいただければ幸いです、私はかなり立ち往生しています。ありがとう。

5
la3mmchen

以下に含まれているのは、スターターとして使用できるテンプレートです。 grafanaイメージはrootとして実行する必要があるように見えることに注意してください。そうしないと、起動しません。つまり、OpenShiftのデフォルトのセキュリティモデルをオーバーライドし、プロジェクトのルートとしてイメージの実行を許可する必要があります。これはお勧めしません。 grafanaイメージは、rootとして実行する必要がないように修正する必要があります。

Rootとして実行できるようにするには、クラスター管理者として実行する必要があります。

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

ここで、myprojectは使用しているプロジェクトの名前です。

デフォルトのサービスアカウントに適用しましたが、別のサービスアカウントを作成して適用し、テンプレートを変更して、そのサービスアカウントとしてgrafanaのみが実行されるようにすることをお勧めします。

grafana.iniファイルを介してデフォルト設定をオーバーライドし、マウントされたemptyDirディレクトリを使用することを目的としている可能性がありますが、問題はありません。オーバーライド設定を提供しようとしませんでした。

グラファナのテンプレートは次のようになります。 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

私はこれと同じ問題を抱えていて、次のように追加して解決しました。

        lastTriggeredImage: >-
          mydockerrepo.com/repo/myimage@sha256:xxxxxxxxxxxxxxxx

オン:

  triggers:
    - type: ImageChange
      imageChangeParams:

Deploymentconfigyamlの。最後にトリガーされた画像が何であるかがわからない場合、それを解決できないように見えます。

2
Diego Garber