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コンソールでは、次のようになります。
[![enter image description here][3]][3]
[![enter image description here][2]][2]
[![enter image description here][1]][1]
画像はそこにあり、リンクも機能しています。 Webコンソールで、[デプロイ]をクリックすると、機能します。それにもかかわらず、コマンドラインから新しいバージョンをロールアウトすることはできません。
それが機能する唯一の方法は、デプロイメントymlを編集して、openshiftが変更を認識し、「configchange」に基づいてデプロイメントを開始することです(ヒント:イメージまたはイメージ名を変更していませんでした)
私のテンプレートには特別なことは何もありません。それは、動作中の構成からのocエクスポートによるエクスポートでした。
どんなヒントでもいただければ幸いです、私はかなり立ち往生しています。ありがとう。
以下に含まれているのは、スターターとして使用できるテンプレートです。 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
}
}
}
]
}
私はこれと同じ問題を抱えていて、次のように追加して解決しました。
lastTriggeredImage: >-
mydockerrepo.com/repo/myimage@sha256:xxxxxxxxxxxxxxxx
オン:
triggers:
- type: ImageChange
imageChangeParams:
Deploymentconfigyamlの。最後にトリガーされた画像が何であるかがわからない場合、それを解決できないように見えます。