0

2 つのポッドで構成される OpenShift で特定のソフトウェアを実行しています。ソフトウェアには、2 つのインスタンスのみを許可するライセンス制限があります。これに加えて、2 つのポッドは同じイメージに基づいている必要があります。これは、私が従わなければならない社内の設計規則だからです。

問題は、2 つのポッドが共有パスを介して通信し、各ポッドが独自のデータの場所を持っていることです。これを次のパスと考えてください。

  1. /データ/共有
  2. /データ/インスタンス1
  3. /データ/インスタンス2

2 つのポッドのいずれかが削除され、再度削除された場合でも、pod1に配置した特定の構成ファイルが常に使用するように構成され/data/instance1、pod2 が常に使用するように構成されていることを確認するにはどうすればよいですか? ホスト名に基づいてこれを実行しようとしましたが、これは定期的に変更され、再現可能なロジックに従っていないため (たとえば)、このアプローチは失敗しました。/data/instance2 softwarename-tzyjkd

理想的には、openshift によって提供される一種の「インスタンス カウンター」にアクセスできます。

共通イメージからコンテナーおよびポッドへ

4

1 に答える 1

1

インスタンスごとに個別のデプロイメント構成を作成することを検討し、渡された環境変数を設定して、それぞれのパスを異なる方法で示すようにします。アプリケーションで環境変数を使用して、使用するパスを認識させます。

両方のインスタンス間でトラフィックの負荷を分散する必要がある場合は、トラフィックを必要な比率で両方に転送するようにルートを設定します。

例えば:

oc new-build getwarped/s2i-httpd-server~https://github.com/getwarped/httpd-parked-domain.git --name mysite

oc new-app mysite --name mysite1 --env DATA=instance1

oc new-app mysite --name mysite2 --env DATA=instance2

oc expose svc/mysite1 --name mysite

oc set route-backends mysite mysite1=50 mysite2=50

これにより、次のようになります。

$ oc get all -o name
buildconfig/mysite
build/mysite-1
imagestream/mysite
imagestream/s2i-httpd-server
deploymentconfig/mysite1
deploymentconfig/mysite2
replicationcontroller/mysite1-1
replicationcontroller/mysite2-1
route/mysite
service/mysite1
service/mysite2
pod/mysite-1-build
pod/mysite1-1-64c6a
pod/mysite2-1-v3lf4

$ oc get routes
NAME      HOST/PORT                      PATH      SERVICES                    PORT       TERMINATION
mysite    mysite-book.127.0.0.1.xip.io             mysite1(50%),mysite2(50%)   8080-tcp

ところで、ライセンスが既に使用されているとソフトウェアが判断しても起動しない場合は、展開戦略をローリングから再作成に変更する必要があります。これは、新しいインスタンスを開始する前に、既存のインスタンスがシャットダウンされることを意味します。2 つある場合でも、一方を再起動する前に、トラフィックが他方にルーティングされる場所の比率をいつでも調整できるからです。そうすれば、インスタンスが完了したときにリクエストが失敗することはありません。一方の再起動後にトラフィックを再調整するか、すべてのトラフィックをそれに切り替えてもう一方を再起動できます。

于 2016-10-25T22:45:16.207 に答える