5.2. ゾーンを意識したデプロイメントの変更


現在、file-uploader Deployment はゾーンを認識せず、すべての Pod を同じゾーンでスケジュールできます。この場合、サイトに障害が発生すると、アプリケーションは利用できなくなります。詳細は、Pod トポロジー分散制約を使用した Pod 配置の制御 を参照してください。

  1. アプリケーションデプロイメント設定に Pod 配置ルールを追加して、アプリケーションゾーンを認識させます。

    1. 以下のコマンドを実行して出力を確認します。

      $ oc get deployment file-uploader -o yaml -n my-shared-storage | less

      出力例:

      [...]
      spec:
        progressDeadlineSeconds: 600
        replicas: 4
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            deployment: file-uploader
        strategy:
          rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
          type: RollingUpdate
        template:
          metadata:
            annotations:
              openshift.io/generated-by: OpenShiftNewApp
            creationTimestamp: null
            labels:
              deployment: file-uploader
            spec: # <-- Start inserted lines after here
              containers: # <-- End inserted lines before here
              - image: image-registry.openshift-image-registry.svc:5000/my-shared-storage/file-uploader@sha256:a458ea62f990e431ad7d5f84c89e2fa27bdebdd5e29c5418c70c56eb81f0a26b
                imagePullPolicy: IfNotPresent
                name: file-uploader
      [...]
    2. トポロジーゾーンラベルを使用するようにデプロイメントを編集します。

      $ oc edit deployment file-uploader -n my-shared-storage

      StartEnd の間に、以下の新しい行を追加します (前のステップの出力に表示)。

      [...]
          spec:
            topologySpreadConstraints:
              - labelSelector:
                  matchLabels:
                    deployment: file-uploader
                maxSkew: 1
                topologyKey: topology.kubernetes.io/zone
                whenUnsatisfiable: DoNotSchedule
              - labelSelector:
                  matchLabels:
                    deployment: file-uploader
                maxSkew: 1
                topologyKey: kubernetes.io/hostname
                whenUnsatisfiable: ScheduleAnyway
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            containers:
      [...]

      出力例:

      deployment.apps/file-uploader edited
  2. デプロイを 0 個 の Pod に変更し、その後 4 個 の Pod に戻します。これは、デプロイメントが Pod の配置に関して変更されたために必要です。

    0 個 の Pod へのスケールダウン
    $ oc scale deployment file-uploader --replicas=0 -n my-shared-storage

    出力例:

    deployment.apps/file-uploader scaled
    4 個 の Pod へのスケールアップ
    $ oc scale deployment file-uploader --replicas=4 -n my-shared-storage

    出力例:

    deployment.apps/file-uploader scaled
  3. 4 つの Pod が datacenter1 および datacenter2 ゾーンの 4 つのノードに分散されていることを確認します。

    $ oc get pods -o wide -n my-shared-storage | egrep '^file-uploader'| grep -v build | awk '{print $7}' | sort | uniq -c

    出力例:

       1 perf1-mz8bt-worker-d2hdm
       1 perf1-mz8bt-worker-k68rv
       1 perf1-mz8bt-worker-ntkp8
       1 perf1-mz8bt-worker-qpwsr

    使用されるゾーンラベルを検索します。

    $ oc get nodes -L topology.kubernetes.io/zone | grep datacenter | grep -v master

    出力例:

    perf1-mz8bt-worker-d2hdm   Ready    worker   35d   v1.20.0+5fbfd19   datacenter1
    perf1-mz8bt-worker-k68rv   Ready    worker   35d   v1.20.0+5fbfd19   datacenter1
    perf1-mz8bt-worker-ntkp8   Ready    worker   35d   v1.20.0+5fbfd19   datacenter2
    perf1-mz8bt-worker-qpwsr   Ready    worker   35d   v1.20.0+5fbfd19   datacenter2
  4. ブラウザーを使用して file-uploader Web アプリケーションを使用して新規ファイルをアップロードします。

    1. 作成されたルートを検索します。

      $ oc get route file-uploader -n my-shared-storage -o jsonpath --template="http://{.spec.host}{'\n'}"

      出力例:

      http://file-uploader-my-shared-storage.apps.cluster-ocs4-abdf.ocs4-abdf.sandbox744.opentlc.com
    2. 直前の手順のルートを使用して、ブラウザーを Web アプリケーションに指定します。

      Web アプリケーションはアップロードしたすべてのファイルを一覧表示し、新しいファイルをアップロードしたり、既存のデータをダウンロードする機能を提供します。今は何もありません。

    3. ローカルマシンから任意のファイルを選択し、これをアプリケーションにアップロードします。

      1. Choose file をクリックして任意のファイルを選択します。
      2. アップロード をクリックします。

        図5.1 簡単な PHP ベースのファイルのアップロードツール

        uploader screen upload
    4. List uploaded files をクリックし、現在アップロードされているファイルの一覧を表示します。
注記

OpenShift Container Platform イメージレジストリー、Ingress ルーティング、およびモニターリングサービスはゾーンを認識しません。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.