第5章 ゾーン対応サンプルアプリケーションのインストール

このセクションを使用では、OpenShift Container Storage Metro Disaster 復旧設定を検証するためにゾーン対応のサンプルアプリケーションをデプロイします。

重要

データゾーン間のレイテンシーがあると、ノードやゾーン間のレイテンシーが低い (たとえば、すべてのノードが同じ場所にある) OpenShift クラスターと比較して、パフォーマンスの低下が予想されます。どの程度パフォーマンスが低下するかは、ゾーン間のレイテンシーや、ストレージを使用するアプリケーションの動作 (書き込みトラフィックが多いなど) によって異なります。必要なサービスレベルに対して十分なアプリケーションのパフォーマンスを確保するために、必ず Metro DR クラスター設定で重要なアプリケーションをテストしてください。

5.1. ゾーン認識サンプルアプリケーションのインストール

このセクションでは、ocs-storagecluster-cephfs ストレージクラスを使用して、同時に複数の Pod で使用できる Read-Write-Many (RWX) PVC を作成します。使用するアプリケーションは File Uploader と呼ばれます。

このアプリケーションは、ファイルを保存するために同じ RWX ボリュームを共有しているため、トポロジーゾーンをまたいでアプリケーションを展開し、サイトが停止した場合でもアプリケーションを利用できるようにすることができます。OpenShift Container Storage は、ゾーン認識および高可用性を備えた Metro DR ストレッチクラスターとして設定されているため、これは永続的なデータアクセスにも有効です。

  1. 新しいプロジェクトを作成します。

    oc new-project my-shared-storage
  2. file-uploader という名前の PHP アプリケーションのサンプルをデプロイします。

    oc new-app openshift/php:7.2-ubi8~https://github.com/christianh814/openshift-php-upload-demo --name=file-uploader

    出力サンプル

    Found image 4f2dcc0 (9 days old) in image stream "openshift/php" under tag "7.2-ubi8" for "openshift/php:7.2-
    ubi8"
    
    Apache 2.4 with PHP 7.2
    -----------------------
    PHP 7.2 available as container is a base platform for building and running various PHP 7.2 applications and frameworks. PHP is an HTML-embedded scripting language. PHP attempts to make it easy for developers to write dynamically generated web pages. PHP also offers built-in database integration for several commercial and non-commercial database management systems, so writing a database-enabled webpage with PHP is fairly simple. The most common
    use of PHP coding is probably as a replacement for CGI scripts.
    
    Tags: builder, php, php72, php-72
    
    * A source build using source code from https://github.com/christianh814/openshift-php-upload-demo will be cr
    eated
    * The resulting image will be pushed to image stream tag "file-uploader:latest"
    * Use 'oc start-build' to trigger a new build
    
    --> Creating resources ...
        imagestream.image.openshift.io "file-uploader" created
        buildconfig.build.openshift.io "file-uploader" created
        deployment.apps "file-uploader" created
        service "file-uploader" created
    --> Success
        Build scheduled, use 'oc logs -f buildconfig/file-uploader' to track its progress.
    
        Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
         'oc expose service/file-uploader'
    
        Run 'oc status' to view your app.
  3. ビルドログを表示し、アプリケーションがデプロイされるまで待機します。

    oc logs -f bc/file-uploader -n my-shared-storage

    出力例:

    Cloning "https://github.com/christianh814/openshift-php-upload-demo" ...
    
        [...]
        Generating dockerfile with builder image image-registry.openshift-image-regis
    try.svc:5000/openshift/php@sha256:d97466f33999951739a76bce922ab17088885db610c
    0e05b593844b41d5494ea
    STEP 1: FROM image-registry.openshift-image-registry.svc:5000/openshift/php@s
    ha256:d97466f33999951739a76bce922ab17088885db610c0e05b593844b41d5494ea
    STEP 2: LABEL "io.openshift.build.commit.author"="Christian Hernandez <christ
    ian.hernandez@yahoo.com>"       "io.openshift.build.commit.date"="Sun Oct 1 1
    7:15:09 2017 -0700"       "io.openshift.build.commit.id"="288eda3dff43b02f7f7
    b6b6b6f93396ffdf34cb2"       "io.openshift.build.commit.ref"="master"       "
    io.openshift.build.commit.message"="trying to modularize"       "io.openshift
    .build.source-location"="https://github.com/christianh814/openshift-php-uploa
    d-demo"       "io.openshift.build.image"="image-registry.openshift-image-regi
    stry.svc:5000/openshift/php@sha256:d97466f33999951739a76bce922ab17088885db610
    c0e05b593844b41d5494ea"
    STEP 3: ENV OPENSHIFT_BUILD_NAME="file-uploader-1"     OPENSHIFT_BUILD_NAMESP
    ACE="my-shared-storage"     OPENSHIFT_BUILD_SOURCE="https://github.com/christ
    ianh814/openshift-php-upload-demo"     OPENSHIFT_BUILD_COMMIT="288eda3dff43b0
    2f7f7b6b6b6f93396ffdf34cb2"
    STEP 4: USER root
    STEP 5: COPY upload/src /tmp/src
    STEP 6: RUN chown -R 1001:0 /tmp/src
    STEP 7: USER 1001
    STEP 8: RUN /usr/libexec/s2i/assemble
    ---> Installing application source...
    => sourcing 20-copy-config.sh ...
    ---> 17:24:39     Processing additional arbitrary httpd configuration provide
    d by s2i ...
    => sourcing 00-documentroot.conf ...
    => sourcing 50-mpm-tuning.conf ...
    => sourcing 40-ssl-certs.sh ...
    STEP 9: CMD /usr/libexec/s2i/run
    STEP 10: COMMIT temp.builder.openshift.io/my-shared-storage/file-uploader-1:3
    b83e447
    Getting image source signatures
    
    [...]

    Push が成功したことを確認すると、コマンドプロンプトは tail モードから復帰します。

注記

new-app コマンドは、アプリケーションを git リポジトリーから直接デプロイして、OpenShift テンプレートを使用しないため、OpenShift ルートリソースはデフォルトでは作成されません。ルートを手動で作成する必要があります。

アプリケーションを 4 つのレプリカにスケールアップし、サービスを公開することで、アプリケーションのゾーンを認識し、利用できるようにしましょう。

oc expose svc/file-uploader -n my-shared-storage
oc scale --replicas=4 deploy/file-uploader -n my-shared-storage
oc get pods -o wide -n my-shared-storage

数分後には 4 つの file-uploader Pod ができあがります。4 つの file-uploader Pod の STATUS が稼働中になるまで、上記のコマンドを繰り返します。

PersistentVolumeClaim を作成し、oc set volume コマンドを使用して、これをアプリケーションに割り当てます。以下を実行します。

oc set volume deploy/file-uploader --add --name=my-shared-storage \
-t pvc --claim-mode=ReadWriteMany --claim-size=10Gi \
--claim-name=my-shared-storage --claim-class=ocs-storagecluster-cephfs \
--mount-path=/opt/app-root/src/uploaded \
-n my-shared-storage

このコマンドにより、以下が行われます。

  • PersistentVolumeClaim の作成
  • ボリューム定義を含めるようにアプリケーションデプロイメントを更新します。
  • アプリケーションのデプロイメントを更新して、ボリュームマウントを指定されたマウントパスに割り当てます。
  • 4 つの application Pod の新規デプロイメント

これで、ボリュームの追加の結果を見てみましょう。

oc get pvc -n my-shared-storage

出力例:

NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
my-shared-storage   Bound    pvc-5402cc8a-e874-4d7e-af76-1eb05bd2e7c7   10Gi       RWX            ocs-storagecluster-cephfs   52s

ACCESSMODE が RWX (ReadWriteMany) に設定されている点に注意してください。

4 つの file-uploaderPods はすべて、同じ RWX ボリュームを使用しています。この ACCESSMODE がないと、OpenShift は複数の Pod を同じ Persistent Volume に確実にアタッチしようとしません。RWO (ReadWriteOnce) 永続ボリュームを使用しているデプロイメントをスケールアップしようとすると、Pod は同じノードに配置されます。