2016-11-14 5 views
4

ビルド設定の出力であったイメージを使用するように配備設定をしたい。OpenShift用の配備設定でイメージストリームを使用する方法

私は現在、このような何かを使用しています:

- apiVersion: v1 
    kind: DeploymentConfig 
    metadata: 
    annotations: 
     openshift.io/generated-by: OpenShiftNewApp 
    creationTimestamp: null 
    labels: 
     app: myapp 
    name: myapp 
    spec: 
    replicas: 1 
    selector: 
     app: myapp 
     deploymentconfig: myapp 
    strategy: 
     resources: {} 
    template: 
     metadata: 
     annotations: 
      openshift.io/container.myapp.image.entrypoint: '["python3"]' 
      openshift.io/generated-by: OpenShiftNewApp 
     creationTimestamp: null 
     labels: 
      app: myapp 
      deploymentconfig: myapp 
     spec: 
     containers: 
     - name: myapp 
      image: 123.123.123.123/myproject/myapp-staging:latest 
      resources: {} 
      command: 
      - scripts/start_server.sh 
      ports: 
      - containerPort: 8000 
    test: false 
    triggers: [] 
    status: {} 
私はハードコード統合ドッキングウィンドウレジストリのIPアドレスを持っていた

。それ以外の場合、Kubernetes/OpenShiftはプルダウンするイメージを見つけることができません。私がいないハードコード統合ドッキングウィンドウレジストリのIPアドレスに好きで、代わりにこのようなものを使用します:

- apiVersion: v1 
    kind: DeploymentConfig 
    metadata: 
    annotations: 
     openshift.io/generated-by: OpenShiftNewApp 
    creationTimestamp: null 
    labels: 
     app: myapp 
    name: myapp 
    spec: 
    replicas: 1 
    selector: 
     app: myapp 
     deploymentconfig: myapp 
    strategy: 
     resources: {} 
    template: 
     metadata: 
     annotations: 
      openshift.io/container.myapp.image.entrypoint: '["python3"]' 
      openshift.io/generated-by: OpenShiftNewApp 
     creationTimestamp: null 
     labels: 
      app: myapp 
      deploymentconfig: myapp 
     spec: 
     containers: 
     - name: myapp 
      from: 
      kind: "ImageStreamTag" 
      name: "myapp-staging:latest" 
      resources: {} 
      command: 
      - scripts/start_server.sh 
      ports: 
      - containerPort: 8000 
    test: false 
    triggers: [] 
    status: {} 

をしかし、これはと文句をKubernetes/OpenShiftが発生します。

The DeploymentConfig "myapp" is invalid. 
spec.template.spec.containers[0].image: required value 

どのように指定することができますデプロイ設定で使用するイメージとしてのビルド設定の出力?

ありがとうございました!私がトリガーとビルド構成にデプロイ構成をリンクする場合にも、奇妙なことに、

をKubernetes/OpenShiftは、画像のための統合ドッキングウィンドウで見て知っている:

- apiVersion: v1 
    kind: DeploymentConfig 
    metadata: 
    annotations: 
     openshift.io/generated-by: OpenShiftNewApp 
    creationTimestamp: null 
    labels: 
     app: myapp-staging 
    name: myapp-staging 
    spec: 
    replicas: 1 
    selector: 
     app: myapp-staging 
     deploymentconfig: myapp-staging 
    strategy: 
     resources: {} 
    template: 
     metadata: 
     annotations: 
      openshift.io/container.myapp.image.entrypoint: '["python3"]' 
      openshift.io/generated-by: OpenShiftNewApp 
     creationTimestamp: null 
     labels: 
      app: myapp-staging 
      deploymentconfig: myapp-staging 
     spec: 
     containers: 
     - name: myapp-staging 
      image: myapp-staging:latest 
      resources: {} 
      command: 
      - scripts/start_server.sh 
      ports: 
      - containerPort: 8000 
    test: false 
    triggers: 
    - type: "ImageChange" 
     imageChangeParams: 
     automatic: true 
     containerNames: 
     - myapp-staging 
     from: 
      kind: ImageStreamTag 
      name: myapp-staging:latest 
    status: {} 

しかし、私はしたくありません...

アップデート1(2016年11月21日)をトリガーする自動化:

: トリガーを設定するが、(それゆえ、手動でデプロイをトリガー)トリガー無効を持つ、静止画を見つけることができない展開を左に
$ oc describe pod myapp-1-oodr5 
Name:     myapp-1-oodr5 
Namespace:    myproject 
Security Policy:  restricted 
Node:     node.url/123.123.123.123 
Start Time:    Mon, 21 Nov 2016 09:20:26 -1000 
Labels:     app=myapp 
         deployment=myapp-1 
         deploymentconfig=myapp 
Status:     Pending 
IP:      123.123.123.123 
Controllers:   ReplicationController/myapp-1 
Containers: 
    myapp: 
    Container ID: 
    Image:    myapp-staging:latest 
    Image ID: 
    Port:    8000/TCP 
    Command: 
     scripts/start_server.sh 
    State:    Waiting 
     Reason:   ImagePullBackOff 
    Ready:    False 
    Restart Count:  0 
    Volume Mounts: 
     /var/run/secrets/kubernetes.io/serviceaccount from default-token-goe98 (ro) 
    Environment Variables: 
     ALLOWED_HOSTS: myapp-myproject.url 
Conditions: 
    Type   Status 
    Ready   False 
Volumes: 
    default-token-goe98: 
    Type:  Secret (a volume populated by a Secret) 
    SecretName: default-token-goe98 
QoS Tier:  BestEffort 
Events: 
    FirstSeen  LastSeen  Count From         SubobjectPath       Type   Reason   Message 
    ---------  --------  ----- ----         -------------       --------  ------   ------- 
    42s   42s    1  {scheduler }                     Scheduled  Successfully assigned myapp-1-oodr5 to node.url 
    40s   40s    1  {kubelet node.url} implicitly required container POD      Pulled   Container image "openshift3/ose-pod:v3.1.1.7" already present on machine 
    40s   40s    1  {kubelet node.url} implicitly required container POD      Created   Created with docker id d3318e880e4a 
    40s   40s    1  {kubelet node.url} implicitly required container POD      Started   Started with docker id d3318e880e4a 
    40s   24s    2  {kubelet node.url} spec.containers{myapp}       Pulling   pulling image "myapp-staging:latest" 
    38s   23s    2  {kubelet node.url} spec.containers{myapp}       Failed   Failed to pull image "myapp-staging:latest": Error: image library/myapp-staging:latest not found 
    35s   15s    2  {kubelet node.url} spec.containers{myapp}       Back-off  Back-off pulling image "myapp-staging:latest" 

更新2(08/23/2017): これは他の人に役立つ場合は、ここで解決策の概要を示します。 trueへのトリガとautomaticセットで

triggers:  
- type: "ImageChange" 
    imageChangeParams: 
    automatic: true # this is required to link the build and deployment 
    containerNames: 
    - myapp-staging 
    from: 
     kind: ImageStreamTag 
     name: myapp-staging:latest 

、展開は内部レジストリにビルドのイメージを使用する必要があります。

ビルドをトリガーしないようにするためのその他のコメントは、内部レジストリからイメージを手動で展開する必要があるという別の要件に関連しています。

automaticfalseに設定される前に、少なくとも1回展開をトリガーする必要があります。これまでのところしばらく、私がいた:true

  • automaticを設定

    1. は、私はかかわらず、(ビルドを開始し、今後の展開をトリガし、手動でfalse
    2. automaticを変更手動で、展開が終了した後
    3. を展開します古いイメージを古いイメージに展開したかどうかを確認していません)

    私は最初にこのmanuを使用しようとしていました非デベロッパーがWebコンソールに入り、デプロイメントを行う方法としてのデプロイ。しかし、この要件は削除されています。そのたびに、ビルドトリガーの導入が毎回うまくいきます。ビルドは異なるブランチでビルドし、イメージに異なるタグを付けることができます。デプロイメントは適切にタグ付けされたイメージを使用するだけです。

    希望に役立ちます!

  • 答えて

    2

    リソース定義を手作業で構築していますか?

    oc new-buildを使用してからoc new-appを使用する方が簡単です(何らかの理由でこれを2つのステップとして設定する必要がある場合)。一度にビルドとデプロイメントをセットアップする場合は、oc new-appを使用してください。例えば、一度の使用で、セットアップの構築と展開に

    oc new-app --name myapp <repository-url> 
    

    は二つのステップでそれを行うには、使用:

    oc new-build --name myapp <repository-url> 
    oc new-app myapp 
    

    あなたはまだかなり手作成されたリソースを使用する場合は、少なくとも、 --dry-run -o yamlオプション付きのシングルステップバリアントを使用して、イメージストリーム用に作成する内容と、ビルドおよびデプロイメントの設定を確認します。そうすれば、あなたはそれをどのようにするかを学ぶことができます。現在欠けているビットはイメージストリームです。

    BTW。エントリポイントがpython3に設定されていると少し疑わしいようです。それは非常に珍しいことです。今のところ何をしようとしていますか?OpenShiftがどのように動作するかで動作しない方法で何かをしようとしているようです。 OpenShiftは主に長時間実行されるプロセスであり、単一のプロセスではありませんdocker run。後者を行うことはできますが、現在どのようにしているのかはわかりません。

    +0

    フィードバックいただきありがとうございます。最初は 'oc new-app'を使ってテンプレートを出力しました。私は投稿していないbuild config YAMLを持っています。しかし、それが重要だと思うなら、私はそれを投稿することができます。私は通常、 'oc create -f ...'を実行し、ビルド、イメージストリーム、デプロイメント、サービス、ルートをすべて作成して動作させます。私は別のステージングと本番インスタンスをサポートするためにこの変更を加えようとしています。ステージングインスタンスは正常に動作します。なぜならトリガーが何らかの形でOpenshift/Kubernetesに正しいイメージを検出させるからです。私は生産インスタンスを持っていたくなかった... –

    +0

    ...自動的にトリガー。したがって、トリガーなしで新しい配備設定を行うと、OpenShift/KubernetesはDocker Hubに見えるので、ビルド設定から構築されたイメージを見つけることができなくなります。 –

    +0

    そして 'python3'は' oc new-app'から作成されたテンプレートから残っていました。 'command'スクリプトは、' entrypoint'でもサーバを正常に動作させるようです。もう一度おねがいします。他の疑わしいことがあれば教えてください! :) –

    関連する問題