2.9. 典型的な 3scale インストールの問題のトラブルシューティング

本セクションでは、典型的なインストールの問題と、その問題を解決するためのアドバイスについて説明します。

2.9.1. 以前のデプロイメントがダーティーな永続ボリューム要求を残す

問題

以前のデプロイメントがダーティーな永続ボリューム要求 (PVC) を残そうとするため、MySQL コンテナーの起動に失敗する。

原因

OpenShift のプロジェクトを削除しても、それに関連する PVC は消去されない。

解決方法

手順

  1. oc get pvc コマンドを使用してエラーのある MySQL データが含まれる PVC を探します。

    # oc get pvc
    NAME                    STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
    backend-redis-storage   Bound     vol003    100Gi      RWO,RWX       4d
    mysql-storage           Bound     vol006    100Gi      RWO,RWX       4d
    system-redis-storage    Bound     vol008    100Gi      RWO,RWX       4d
    system-storage          Bound     vol004    100Gi      RWO,RWX       4d
  2. OpenShift UI の cancel deployment をクリックして、system-mysql Pod のデプロイメントを停止します。
  3. MySQL パス以下にあるものすべてを削除し、ボリュームをクリーンアップします。
  4. 新たに system-mysql のデプロイメントを開始します。

2.9.2. 認証されたイメージレジストリーの認証情報が間違っているか、欠落している

問題

Pod が起動していません。ImageStreams に次のエラーが表示されます。

! error: Import failed (InternalError): ...unauthorized: Please login to the Red Hat Registry

原因

OpenShift 4.x に 3scale をインストールすると、ImageStreams が参照するイメージをプルできないため、OpenShift は Pod の起動に失敗します。これは、Pod が指しているレジストリーに対して認証できないために発生します。

解決方法

手順

  1. 次のコマンドを入力して、コンテナーレジストリー認証の設定を確認します。

    $ oc get secret
    • シークレットが存在する場合は、ターミナルに次の出力が表示されます。

      threescale-registry-auth          kubernetes.io/dockerconfigjson        1         4m9s
    • ただし、出力が表示されない場合は、次の操作を行う必要があります。
  2. レジストリーサービスアカウントの作成 中に以前に設定した認証情報を使用して、シークレットを作成します。
  3. 提供されている oc create secret コマンドの <your-registry-service-account-username> および <your-registry-service-account-password> を置き換えて、OpenShift でのレジストリー認証の設定 の手順を使用します。
  4. APIManager リソースと同じ名前空間で threescale-registry-auth シークレットを生成します。<project-name> 内で次を実行する必要があります。

    oc project <project-name>
    oc create secret docker-registry threescale-registry-auth \
      --docker-server=registry.redhat.io \
      --docker-username="<your-registry-service-account-username>" \
      --docker-password="<your-registry-service-account-password>"
      --docker-email="<email-address>"
  5. APIManager リソースを削除して再作成します。

    $ oc delete -f apimanager.yaml
    apimanager.apps.3scale.net "example-apimanager" deleted
    
    $ oc create -f apimanager.yaml
    apimanager.apps.3scale.net/example-apimanager created

検証

  1. 次のコマンドを入力して、デプロイのステータスが Starting または Ready であることを確認します。その後、Pod が以下を生成し始めます。

    $ oc describe apimanager
    (...)
    Status:
      Deployments:
        Ready:
          apicast-staging
          system-memcache
          system-mysql
          system-redis
          zync
          zync-database
          zync-que
        Starting:
          apicast-production
          backend-cron
          backend-worker
          system-sidekiq
          system-sphinx
        Stopped:
          backend-listener
          backend-redis
          system-app
  2. 以下のコマンドを実行して、各 Pod のステータスを確認します。

    $ oc get pods
    NAME                               READY   STATUS             RESTARTS   AGE
    3scale-operator-66cc6d857b-sxhgm   1/1     Running            0          17h
    apicast-production-1-deploy        1/1     Running            0          17m
    apicast-production-1-pxkqm         0/1     Pending            0          17m
    apicast-staging-1-dbwcw            1/1     Running            0          17m
    apicast-staging-1-deploy           0/1     Completed          0          17m
    backend-cron-1-deploy              1/1     Running            0          17m

2.9.3. 誤って Docker レジストリーからプルされる

問題

インストール中に以下のエラーが発生する。

svc/system-redis - 1EX.AMP.LE.IP:6379
  dc/system-redis deploys docker.io/rhscl/redis-32-rhel7:3.2-5.3
    deployment #1 failed 13 minutes ago: config change

原因

OpenShift は docker コマンドを実行し、コンテナーイメージを検索およびプルします。このコマンドは、registry.redhat.io Red Hat Ecosystem Catalog ではなく、docker.io Docker レジストリーを参照します。

これは、システムに予期せぬバージョンの Docker コンテナー環境が含まれる場合に発生します。

解決方法

手順

適切なバージョン の Docker コンテナー環境を使用します。

2.9.4. 永続ボリュームがローカルでマウントされている場合の MySQL の権限の問題

問題

system-msql Pod がクラッシュし、デプロイされないため、それに依存する他のシステムのデプロイメントに失敗する。Pod ログに以下のエラーが記録される。

[ERROR] Cannot start server : on unix socket: Permission denied
[ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
[ERROR] Aborting

原因

MySQL プロセスが不適切なユーザー権限で起動されている。

解決方法

手順

  1. 永続ボリュームに使用されるディレクトリーには、root グループの書き込み権限が必要です。MySQL サービスは root グループの別のユーザーとして実行されるため、root ユーザーの読み取り/書き込み権限では不十分です。root ユーザーとして以下のコマンドを実行します。

    chmod -R g+w /path/for/pvs
  2. 以下のコマンドを実行して、SELinux がアクセスをブロックしないようにします。

    chcon -Rt svirt_sandbox_file_t /path/for/pvs

2.9.5. ロゴまたはイメージをアップロードできない

問題

ロゴをアップロードできず、system-app ログに以下のエラーが表示される。

Errno::EACCES (Permission denied @ dir_s_mkdir - /opt/system/public//system/provider-name/2

原因

OpenShift が永続ボリュームに書き込みを行うことができない。

解決方法

手順

OpenShift が永続ボリュームに書き込みを行えるようにします。永続ボリュームのグループ所有者を root グループにし、またグループによる書き込みを可能にしなければなりません。

2.9.6. OpenShift でテストコールが動作しない

問題

OpenShift で新しいサービスとルートを作成した後に、テストコールが動作しない。curl 経由のダイレクトコールも失敗し、service not available が出力される。

原因

3scale はデフォルトで HTTPS ルートが必要で、OpenShift ルートはセキュアではない。

解決方法

手順

OpenShift のルーター設定で secure route チェックボックスが選択されていることを確認します。

2.9.7. 3scale 以外のプロジェクトでの APIcast デプロイに失敗する

問題

APIcast のデプロイに失敗する (Pod が青にならない)。以下のエラーがログに表示される。

update acceptor rejected apicast-3: pods for deployment "apicast-3" took longer than 600 seconds to become ready

以下のエラーが Pod に表示される。

Error synching pod, skipping: failed to "StartContainer" for "apicast" with RunContainerError: "GenerateRunContainerOptions: secrets \"apicast-configuration-url-secret\" not found"

原因

シークレットが適切に設定されていない。

解決方法

手順

APIcast v3 でシークレットを作成する時に apicast-configuration-url-secret を指定します。

oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>