2017-07-01 4 views
2

私はオープニングシフト(原点)で立ち往生しています。オープニングシフト:未解決画像

私はグラファンの導入をCLIを介して新しい開始クラスタに追加したいとします。私は何

  1. は私のopenshiftクラスタにテンプレートをアップロードします(OCは-f openshift-grafana.ymlを作成する)

  2. は(ドッキングウィンドウハブからOCを必要な画像を引いimport-画像--confirm grafana/grafana)

  3. は私のテンプレート(OC新しいアプリのgrafana)

に基づいて新しいアプリケーションを構築します10

これらの手順は、配備の設定とルートを作成します。 しかし、私はCLIを介して展開を開始することができません。 openshiftのWebコンソールで

# 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 

が、それは次のようになります。

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

画像が、そこにもリンクが機能しているです。 Webコンソールでは、「デプロイ」をクリックすると動作します。しかし、私はコマンドラインで新しいバージョンを公開することはできません。

openshiftが変更aが「設定変更」(ヒント:私は画像や画像の名前を変更していなかったよ)に基づいて展開を開始し認識するようにそれが動作する唯一の方法は、展開YMLを編集している

あり私のテンプレートに特別なものはありませんでした。それは、作業環境設定からのエクスポートを介したエクスポートだけでした。

何かヒントがあると思いますが、私はかなり詰まっています。おかげさまで

+0

作成されるリソースのリストは何ですか? '' oc get all''を使ってください。どのような出来事が起こるか? '' oc get events''を使ってください。元の '' openshift-grafana.yml''テンプレートはどこにありますか? –

+0

@GrahamDumpleton はopenshift-grafana.ymlは、ここで見つけることができます:[リンク](https://gist.github.com/la3mmchen/6a13127d12d6eaad85d24710dc550cfc) これは私のシェル出力である:[リンク](https://でのgist.github.com/la3mmchen/ed9099ec8426e8af6a902a7fa8539e71) – la3mmchen

+0

imagestreamはどこから来たのですか?テンプレートはグラファナのイメージストリームを作成しません。私がテンプレートを構築していたなら、イメージのインポートをトリガーするためにイメージストリームを作成します。 Grafanaと呼ばれるイメージストリームが別に既に存在しているため、テンプレート内のDocker Hubからグラファナイメージを直接使用することで何らかの方法で競合が発生していることを懸念しています。 –

答えて

1

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

rootで実行可能にするには、クラスタ管理者として実行する必要があります:

myprojectは、使用しているプロジェクトの名前です
oc adm policy add-scc-to-user anyuid -z default -n myproject 

私はそれをデフォルトのサービスアカウントに適用しましたが、別のサービスアカウントを作成してそれを適用し、grafanaだけがそのサービスアカウントとして実行されるようにテンプレートを変更してください。

grafana.iniファイルを使用して既定の設定を上書きし、マウントされたemptyDirディレクトリを使用することは問題ではない可能性があります。私はオーバーライド設定を提供しようとしなかった。

grafanaのテンプレートは、次のようになります。 JSONを使用するのは簡単ですが、JSONを使用する方が簡単ですが、インデントされてYAMLを使用することができなくなるのを防ぐためです。このテンプレートを使用する前に

することは、あなたは明らかに名前がテンプレートを使用しているときに、それを上書きしない限り${APPLICATION_NAME}grafanaあるフォーム${APPLICATION_NAME}-configであり、対応する設定マップを作成する必要があります。設定マップのキーは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 
       } 
      } 
     } 
    ] 
} 
+0

ありがとうございます。あなたのテンプレートは正常に動作します。私はあなたのファイルをさらに修正するためのベースとして使用します。ありがとう、私は 'oc export --as-template'が壊れているとは思っていませんでした。 <3 – la3mmchen

+0

これは既知の問題です。問題のテンプレートを作成するだけでなく、プロジェクトからすべてをエクスポートして、別のOpenShiftプロジェクトや別のクラスタにも再作成できるようにします。これらのツールを改善するための作業が行われています。 –