トラブルシューティング- OCI Service Operator for Kubernetes

サービス・メッシュのKubernetesの問題について、OCIサービス・オペレータの問題の原因と修正を特定します。

ノート

デフォルトでは、operator-sdkはKubernetesバンドルのOCI Service Operatorをデフォルト・ネームスペースにインストールします。ほとんどのユースケースでは、OCI Service Operator for Kubernetesのインストール時にネームスペース(olmなど)が指定されます。したがって、kubectlコマンドにはネームスペース・パラメータ-n $NAMESPACEが必要になる場合があります。

インストール: オペレータ・ライフサイクル・マネージャ(OLM)のインストールが成功したことを確認します。

問題

正常なOLMインストールには検証が必要です。

ソリューション

OLMが正常にインストールされたことを確認するには、statusコマンドを実行します。

## status of olm
$ operator-sdk olm status
INFO[0007] Fetching CRDs for version "0.20.0"
INFO[0007] Fetching resources for resolved version "v0.20.0"
INFO[0031] Successfully got OLM status for version "0.20.0"

NAME                                            NAMESPACE    KIND                        STATUS
operatorgroups.operators.coreos.com                          CustomResourceDefinition    Installed
operatorconditions.operators.coreos.com                      CustomResourceDefinition    Installed
olmconfigs.operators.coreos.com                              CustomResourceDefinition    Installed
installplans.operators.coreos.com                            CustomResourceDefinition    Installed
clusterserviceversions.operators.coreos.com                  CustomResourceDefinition    Installed
olm-operator-binding-olm                                     ClusterRoleBinding          Installed
operatorhubio-catalog                           olm          CatalogSource               Installed
olm-operators                                   olm          OperatorGroup               Installed
aggregate-olm-view                                           ClusterRole                 Installed
catalog-operator                                olm          Deployment                  Installed
cluster                                                      OLMConfig                   Installed
operators.operators.coreos.com                               CustomResourceDefinition    Installed
olm-operator                                    olm          Deployment                  Installed
subscriptions.operators.coreos.com                           CustomResourceDefinition    Installed
aggregate-olm-edit                                           ClusterRole                 Installed
olm                                                          Namespace                   Installed
global-operators                                operators    OperatorGroup               Installed
operators                                                    Namespace                   Installed
packageserver                                   olm          ClusterServiceVersion       Installed
olm-operator-serviceaccount                     olm          ServiceAccount              Installed
catalogsources.operators.coreos.com                          CustomResourceDefinition    Installed
system:controller:operator-lifecycle-manager                 ClusterRole                 Installed

出力には、インストールされているコンポーネントのリストが表示されます。STATUS列の各エントリは、Installedである必要があります。Installedとしてリストされていない列がある場合は、次のステップを実行します。

  • OLMをアンインストールします。
    ## Uninstall the OLM
    $ operator-sdk olm uninstall
  • OLMを再インストールします。
    ## Install the OLM
    $ operator-sdk olm install --version 0.20.0

インストール: OCI Service Operator for Kubernetes OLMのインストールがエラーで失敗

問題

OLMをインストールした後、インストール・ステータスを確認するとエラーが返されます。

ソリューション

再現するステップ:

  1. インストール後、statusコマンドを実行して、成功したOLMインストールを確認します。
    ## status of olm
    $ operator-sdk olm status
  2. 返されたエラー:
    ## FATA[0034] Failed to install OLM version "latest": detected existing OLM resources: OLM must be completely uninstalled before installation
エラーを解決するには、OLMをアンインストールします。
## Uninstall the OLM
$ operator-sdk olm uninstall

コマンドが失敗した場合は、statusコマンドを実行してバージョン情報を取得します。

## status of olm
$ operator-sdk olm status

次に、次のオプションを試してください。

  • オプション1: 次のコマンドを実行して、バージョンを使用してOLMをアンインストールします。
    $ operator-sdk olm uninstall --version <OLM_VERSION>
  • オプション2: 次のコマンドを実行して、OLMとその関連コンポーネントをアンインストールします。
    $ export OLM_RELEASE=<OLM_VERSION>
    $ kubectl delete apiservices.apiregistration.k8s.io v1.packages.operators.coreos.com
    $ kubectl delete -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/${OLM_RELEASE}/crds.yaml
    $ kubectl delete -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/${OLM_RELEASE}/olm.yaml
  • オプション3: OLMのアンインストールがまだ失敗する場合は、次のコマンドを実行してOLMとその関連コンポーネントをアンインストールします。
    $ kubectl delete apiservices.apiregistration.k8s.io v1.packages.operators.coreos.com
    $ kubectl delete -f https://raw.githubusercontent.com/operator-framework/operator-lifecycle-manager/master/deploy/upstream/quickstart/crds.yaml
    $ kubectl delete -f https://raw.githubusercontent.com/operator-framework/operator-lifecycle-manager/master/deploy/upstream/quickstart/olm.yaml

次のコマンドを使用して、アンインストールが成功したことを確認します

  • OLMが正常にアンインストールされたことを確認します。
    $ kubectl get namespace olm
    Error from server (NotFound): namespaces olm not found
  • OLM所有CustomResourceDefinitionsが削除されたことを確認して、OLMが正常にアンインストールされたことを確認します。
    $ kubectl get crd | grep operators.coreos.com
  • OLMデプロイメントが終了していることを確認します。
    $ kubectl get deploy -n olm
    No resources found.

インストール: Kubernetes OLMのOCIサービス・オペレータのインストールがタイムアウト・メッセージで失敗

問題

OCI Service Operator for Kubernetes OLMのインストールが失敗し、次のメッセージが表示されます。

## FATA[0125] Failed to run bundle upgrade: error waiting for CSV to install: timed out waiting for the condition

説明

エラーは、インストール条件が完了するまでインストーラがタイムアウトしたことを示します。エラー・メッセージは誤解を招く可能性があります。時間が十分あると、インストーラは最終的にSucceededを報告します。

ソリューション

Kubernetes OLMのOCI Service Operatorが正常にインストールされたことを確認するには、次のステップに従います。

  • CSVのステータスを確認します。
    $ kubectl get csv
                                    
    NAME                           DISPLAY                VERSION   REPLACES   PHASE
    oci-service-operator.vX.X.X    oci-service-operator   X.X.X               Succeeded
  • フェーズがSucceededに達しない場合は、デプロイしているKubernetesバージョンのOCI Service Operatorのバンドル・ポッドを削除します。
    $ kubectl get pods | grep oci-service-operator-bundle
    $ kubectl delete pod <POD_FROM_ABOVE_COMMAND>
  • バンドル・ポッドが削除されたら、OSOKバンドルを再インストールします。
    $ operator-sdk run bundle iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X -n oci-service-operator-system --timeout 5m
                                    
    ## or for Upgrade
    $ operator-sdk run bundle-upgrade iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X -n oci-service-operator-system --timeout 5m
    ノート

    X.X.Xを現在のバージョンのOCI Service Operator for Kubernetesに置き換えます。現在のバージョンを取得するには、GitHubリリースサイト(https://github.com/oracle/oci-service-operator/releases)にアクセスしてください。
    ノート

    コマンドを実行するには、Dockerのiad.ocir.ioにあるOracle Registryにログインする必要があります。ログインしていることを確認するには、Docker CLIを使用したイメージのプルを参照してください。
  • OCI Service Operator for Kubernetesが正常にデプロイされていることを確認します。
    $ kubectl get deployments | grep "oci-service-operator-controller-manager"
                                        
    NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
    oci-service-operator-controller-manager   1/1     1            1           2d9h

インストール: OSOKオペレータのインストールが実行バンドルで失敗

問題

OSOKオペレータのインストールが失敗し、次のメッセージが表示されます。

FATA[0121] Failed to run bundle: install plan is not available for the subscription

デバッグ

エラーは、インストールがオペレータバンドルの実行に失敗したことを示します。このエラーは、イメージ、ネットワークの問題またはアップストリームOPMの問題の1つで発生します。

  1. オペレータのインストール・ネームスペースのポッドをリストします。
    kubectl get pods -n oci-service-operator-system
  2. 失敗したポッドのログをオペレータ・ネームスペースに表示します。
    kubectl logs iad-ocir-io-oracle-oci-service-operator-bundle-X-X-X -n oci-service-operator-system

    コマンドにより、次の出力が生成されます。

    mkdir: can't create directory '/database': Permission denied

    コンテナはUID 1001で実行されており、このユーザーはディレクトリを作成できません。問題は、アップストリームOPMの問題です。以下を参照してください。

ソリューション

OCI Service Operator for Kubernetesのインストールを成功させるには、次のステップに従います。

  1. 対応する名前空間の既存のオペレータインストールをクリーンアップします。
    operator-sdk cleanup oci-service-operator -n oci-service-operator-system
  2. 次のコマンドを使用して、KubernetesクラスタのOCI Service Operator for Kubernetes Operatorをネームスペース(OCI-service-operator-system)にインストールします。
    operator-sdk run bundle --index-image quay.io/operator-framework/opm:v1.23.1 iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X -n oci-service-operator-system --timeout 5m
    ノート

    X.X.Xを現在のバージョンのOCI Service Operator for Kubernetesに置き換えます。現在のバージョンを取得するには、GitHubリリースサイト(https://github.com/oracle/oci-service-operator/releases)にアクセスしてください。
    ノート

    コマンドを実行するには、Dockerのiad.ocir.ioにあるOracle Registryにログインする必要があります。ログインしていることを確認するには、Docker CLIを使用したイメージのプルを参照してください。
  3. コマンドを実行すると、次のように出力されます。
    INFO[0036] Successfully created registry pod: iad-ocir-io-oracle-oci-service-operator-bundle-X-X-X
    INFO[0036] Created CatalogSource: oci-service-operator-catalog
    INFO[0037] OperatorGroup "operator-sdk-og" created     
    INFO[0037] Created Subscription: oci-service-operator-vX-X-X-sub
    INFO[0040] Approved InstallPlan install-tzk5f for the Subscription: oci-service-operator-vX-X-X-sub
    INFO[0040] Waiting for ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" to reach 'Succeeded' phase
    INFO[0040]   Waiting for ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" to appear
    INFO[0048]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: Pending
    INFO[0049]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: InstallReady
    INFO[0053]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: Installing
    INFO[0066]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.X.X" phase: Succeeded
    INFO[0067] OLM has successfully installed "oci-service-operator.vX.X.X"

インストール: OSOKオペレータのインストールが認可エラーで失敗します

問題

OSOKオペレータのインストールが失敗し、次のメッセージが表示されます。

Error: failed to authorize: failed to fetch oauth token: unexpected status: 401 Unauthorized

インストールコマンドの例:

$ operator-sdk run bundle iad.ocir.io/oracle/oci-service-operator-bundle:X.Y.Z -n oci-service-operator-system --timeout 5m

完全なエラー・メッセージは次のとおりです。

INFO[0002] trying next host error="failed to authorize: failed to fetch
oauth token: unexpected status: 401 Unauthorized" host=iad.ocir.io
FATA[0002] Failed to run bundle: pull bundle image: error pulling image
iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X: error resolving
name : failed to authorize: failed to fetch oauth token: unexpected
status: 401 Unauthorized

説明

このエラーは、DockerがOracle Registry (iad.ocir.io)にログインしていないために発生します。

ソリューション

OCIRからのイメージのプルに使用されるトークンをリフレッシュします。次のコマンドを実行します:

oci raw-request --region us-ashburn-1 --http-method GET --target-uri "https://iad.ocir.io/20180419/docker/token" | jq -r .data.token | docker login -u BEARER_TOKEN --password-stdin iad.ocir.io

アップグレード: 実行バンドルでOSOKオペレータのアップグレードが失敗する

問題

問題: OSOKオペレータのアップグレードが失敗し、次のメッセージが表示されます。

FATA[0307] Failed to run bundle upgrade: error waiting for CSV to install

説明

エラーは、オペレータバンドルのアップグレードが失敗したことを示します。このエラーの原因は、イメージのプル、ネットワークの問題またはアップストリームOPMの問題のいずれかです。

ソリューション

OCI Service Operator for Kubernetesのアップグレードを成功させるには、次のステップに従います。

  1. OLMをアンインストールします。
    operator-sdk olm uninstall
  2. OLMを再インストールします。
    operator-sdk olm install --version X.X.X
    ノート

    OLMインストール手順から最新バージョンを入手します。
  3. OSOK演算子をインストールします。
    operator-sdk run bundle iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X -n oci-service-operator-system --timeout 5m
    ノート

    X.X.Xを現在のバージョンのOCI Service Operator for Kubernetesに置き換えます。現在のバージョンを取得するには、GitHubリリースサイト(https://github.com/oracle/oci-service-operator/releases)にアクセスしてください。
    ノート

    コマンドを実行するには、Dockerのiad.ocir.ioにあるOracle Registryにログインする必要があります。ログインしていることを確認するには、Docker CLIを使用したイメージのプルを参照してください。

クラスタ: KubernetesポッドのOCIサービス・オペレータが実行中であることを確認します

ポッドのチェック

OSOKポッドが正常に実行されていることを確認します。

$ kubectl get pods | grep "oci-service-operator-controller-manager"
 
oci-service-operator-controller-manager-6797f45589-hhn9s          1/1     Running     0          2d9h

ソリューション

ポッドが実行されていない場合は、次のコマンドを使用して、ポッド・ログで特定の問題を確認します。

$ kubectl logs pod/<POD_FROM_ABOVE_COMMAND> -f

クラスタ: 認可に失敗したか、リクエストされたリソースが見つかりません

問題

サービスのデプロイ時に認可が失敗したか、リクエストされたリソースが見つかりません。

"message": Failed to create or update resource: Service error:NotAuthorizedOrNotFound. Authorization failed or requested resource not found.. http status code: 404.

ソリューション

このエラーは、ユーザー認可のために発生します。問題を解決するには、次を確認します。

プロビジョニングされたOCIリソースに対してインスタンス・プリンシパルが正しく構成されていることを確認します。kubectlによるサービス・メッシュの管理時のポリシーを参照してください。

クラスタ: カスタム・リソースの作成および削除エラー

説明

次のいずれかのエラー・メッセージまたは顧客リソースに関する問題があります。

  • 問題:カスタム・リソースの作成に失敗しました。
  • エラー:状態が不明なため、カスタム・リソースを削除できません。
  • エラー:カスタム・リソースの状態がアクティブではありません。

ソリューション

エラーをトラブルシューティングするには、次のオプションを使用します。

  • オプション1:前の項「クラスタ: OCI Service Operator for Kubernetesポッドが実行中であることの確認」の説明に従って、OCI Service Operator for Kubernetesコントローラのポッド・ログを確認します。
  • オプション2:次のコマンドを実行します。
    • CUSTOMRESOURCEを取得します。
      $ kubectl get crds | grep "servicemesh.oci.oracle.com" | awk -F. '{print $1}'
      accesspolicies
      ingressgatewaydeployments
      ingressgatewayroutetables
      ingressgateways
      meshes
      virtualdeploymentbindings
      virtualdeployments
      virtualserviceroutetables
      virtualservices
    • 次のコマンドを使用して、個々のカスタム・リソースのステータス・フィールドからエラー・コードを取得します。

      $ kubectl get <CUSTOMRESOURCE> <NAME> -n <NAMESPACE> -o json | jq '.status'

      コマンドの例を次に示します。

      $ kubectl get virtualserviceroutetables pet-details-route-table -n pet-rescue -o json | jq '.status'

      仮想サービス・ルート表の次のサンプル出力には、1つのUnknown条件が含まれています。カスタム・リソースが正常に作成されると、すべてのステータスがtrueになります。

      {
        "conditions": [
          {
            "lastTransitionTime": "2022-01-07T08:35:43Z",
            "message": "Dependencies resolved successfully",
            "observedGeneration": 2,
            "reason": "Successful",
            "status": "True",
            "type": "ServiceMeshDependenciesActive"
          },
          {
            "lastTransitionTime": "2022-01-09T05:15:30Z",
            "message": "Invalid RouteRules, route rules target weight sum should be 100 for the resource!",
            "observedGeneration": 2,
            "reason": "BadRequest",
            "status": "Unknown",
            "type": "ServiceMeshConfigured"
          },
          {
            "lastTransitionTime": "2022-01-07T08:36:03Z",
            "message": "Resource in the control plane is Active, successfully reconciled",
            "observedGeneration": 1,
            "reason": "Successful",
            "status": "True",
            "type": "ServiceMeshActive"
          }
        ],
        "virtualDeploymentIdForRules": [
          [
            "ocid1.meshvirtualdeployment.oc1.iad.amaaaaaamgzdkjyak7tam2jdjutbend4h7surdj4t5yv55qukvx43547kbnq"
          ]
        ],
        "virtualServiceId": "ocid1.meshvirtualservice.oc1.iad.amaaaaaamgzdkjyagkax7xtz7onqlb65ec32dtu67erkmka2x6tlst4xigsa",
        "virtualServiceName": "pet-details",
        "virtualServiceRouteTableId": "ocid1.meshvirtualserviceroutetable.oc1.iad.amaaaaaamgzdkjyavcphbc5iobjqa6un7bqq2ki2xyfpvzfd6jzmdsv4l6va"
      }

クラスタ: Webフック・エラーでカスタム・リソース操作が失敗する

問題

Webフック・エラーにより、カスタム・リソース操作が失敗します。

Error from server (InternalError): error when creating "service_mesh/mesh_create.yaml": Internal error occurred: failed calling webhook "mesh-validator.servicemesh.oci.oracle.cloud.com": failed to call webhook: Post "https://oci-service-operator-controller-manager-service.oci-service-operator-system.svc:443/validate-servicemesh-oci-oracle-com-v1beta1-mesh?timeout=10s": service "oci-service-operator-controller-manager-service" not found

説明

不適切なインストールによってこのエラーが発生するため、オペレータはWebフックのコールに問題があります。

ソリューション

OCI Service Operator for Kubernetesのインストールを成功させるには、次のステップに従います。

  1. 対応する名前空間内の既存のオペレータインストールをクリーンアップします。
    operator-sdk cleanup oci-service-operator -n oci-service-operator-system
  2. 次のコマンドを使用して、OCI Service Operator for Kubernetes Operatorをネームスペース(oci-service-operator-system)のKubernetesクラスタにインストールします。
    operator-sdk run bundle --index-image quay.io/operator-framework/opm:v1.23.1 iad.ocir.io/oracle/oci-service-operator-bundle:X.X.X -n oci-service-operator-system --timeout 5m
    ノート

    X.Y.Zは、OCI Service Operator for Kubernetesの現在のバージョンに置き換えてください。現在のバージョンを取得するには、GitHubリリース・サイト(https://github.com/oracle/oci-service-operator/releases)にアクセスします
    ノート

    コマンドを実行するには、Dockerのiad.ocir.ioにあるOracle Registryにログインする必要があります。ログインしていることを確認するには、Docker CLIを使用したイメージのプルを参照してください。
  3. コマンドを実行すると、次のような出力が生成されます。
    INFO[0036] Successfully created registry pod: iad-ocir-io-oracle-oci-service-operator-bundle-X-Y-Z
    INFO[0036] Created CatalogSource: oci-service-operator-catalog
    INFO[0037] OperatorGroup "operator-sdk-og" created     
    INFO[0037] Created Subscription: oci-service-operator-vX-X-X-sub
    INFO[0040] Approved InstallPlan install-tzk5f for the Subscription: oci-service-operator-vX-Y-Z-sub
    INFO[0040] Waiting for ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.Y.Z" to reach 'Succeeded' phase
    INFO[0040]   Waiting for ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.Y.Z" to appear
    INFO[0048]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.Y.Z" phase: Pending
    INFO[0049]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.Y.Z" phase: InstallReady
    INFO[0053]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.Y.Z" phase: Installing
    INFO[0066]   Found ClusterServiceVersion "oci-service-operator-system/oci-service-operator.vX.Y.Z" phase: Succeeded
    INFO[0067] OLM has successfully installed "oci-service-operator.vX.Y.Z"
  4. kubectlを使用して、すべてのサービス・メッシュ・リソースに対応するWebフックが正常にインストールされたことを確認します。

    まず、Webフックの検証を確認します。

    $ kubectl get validatingwebhookconfiguration | grep "servicemesh.oci.oracle.cloud.com" | awk -F. '{print $1}'
    ap-validator
    ig-validator
    igd-validator
    igrt-validator
    mesh-validator
    vd-validator
    vdb-validator
    vs-validator
    vsrt-validator

    次に、Webフックの変更を確認します。

    $ kubectl get mutatingwebhookconfiguration | grep "servicemesh.oci.oracle.com" | awk -F. '{print $1}'
    proxy-injector

クラスタ: オペレータ/アプリケーション・ポッドが「エラー: runAsNonRoot」で失敗し、イメージはrootとして実行されます

問題

オペレータまたはアプリケーションのポッドが次のエラーで失敗します。

Error: runAsNonRoot and image will run as root

ソリューション

このエラーは、podSecurityPoliciesがクラスタに適用され、オペレータ・ポッドおよびアプリケーション・ポッドに権限付きアクセスが付与されていない場合に発生します。この問題を解決するには、演算子およびアプリケーション・ポッドが実行されている演算子ネームスペース内のすべてのポッドに対する特権アクセスを提供します。

ポッド・セキュリティ・ポリシーが有効なオペレータを実行するには:

# pod security policy to allow non-privileged access for all volumes and run as any user
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: operator-psp
spec:
  privileged: true
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  volumes:
    - '*'
---
# Cluster role which grants access to use pod security policy
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: operator-psp-crole
rules:
  - apiGroups:
      - policy
    resourceNames:
      - operator-psp
    resources:
      - podsecuritypolicies
    verbs:
      - use
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: operator-psp-crole-binding
roleRef:
  kind: ClusterRole
  name: operator-psp-crole
  apiGroup: rbac.authorization.k8s.io
subjects:
  # Authorize all service accounts in oci-service-operator-system namespace
  - kind: Group
    apiGroup: rbac.authorization.k8s.io
    name: system:serviceaccounts:<operator's namespace>
  - kind: Group
    apiGroup: rbac.authorization.k8s.io
    name: system:serviceaccounts:<application namespace>

クラスタ: VDBはアクティブですが、ポッドにサイドカー・プロキシが含まれていません

問題

VDBはアクティブですが、ポッドにサイドカー・プロキシが含まれていません。

ソリューション

問題を解決するには、次のチェックを実行します。

  • ネームスペース・レベルまたはポッド・レベルでサイドカー・インジェクションが有効になっているかどうかを確認します。そうでない場合は、次のステップ(ポッドのSidecar Injection)に従って有効にします。
  • SIDECAR_IMAGEoci-service-operator-servicemesh-configマップに存在するかどうかを確認します。
    $ kubectl get configmap oci-service-operator-servicemesh-config -n NAMESPACE -o json | jq '.data.SIDECAR_IMAGE' "iad.ocir.io/iaaaaaaa/oci-service-mesh-proxy:0.x.x"
  • SIDECAR_IMAGEが存在しない場合は、顧客がサービス・メッシュ・リソースの作成に使用した動的グループのMESH_PROXY_DETAILS_READにOCIポリシーが存在するかどうかを確認します(kubectlを使用したサービス・メッシュの管理時のポリシーを参照)。

クラスタ: ポッドが継続的に再起動中

問題

クラスタ内のポッドが継続的に再起動しています。

ソリューション

次の設定を確認して問題を解決します。

  • 次のコマンドを使用して、SIDECAR_IMAGEoci-service-operator-servicemesh-configマップに存在するかどうかを確認します。サイドカーが存在しない場合は、ポッドを再起動します。
    $ kubectl get configmap oci-service-operator-servicemesh-config -n NAMESPACE -o json | jq '.data.SIDECAR_IMAGE' "iad.ocir.io/iaaaaaaa/oci-service-mesh-proxy:0.x.x"
  • 次のコマンドを使用して、ポッドのログを確認します。
    $ kubectl logs -f pod/POD_NAME -n NAMESPACE_NAME -c oci-sm-proxy
  • ポッドのデバッグ・ログを有効にするには、プロキシ・ロギング・レベルを参照してください

クラスタ: ファイナライザが原因でOCI Service Operator for Kubernetesがアンインストールされない

問題

ファイナライザ・クリーンアップのため、アンインストール時にCRDは削除されません。次のエラー メッセージが返されます。

FATA[0123] Cleanup operator: wait for customresourcedefinition deleted: Get "https://x.x.x.x:6443/apis/apiextensions.k8s.io/v1/customresourcedefinitions/ingressgateways.servicemesh.oci.oracle.com": context deadline exceeded
ノート

この例ではイングレス・ゲートウェイを使用していますが、メッシュ・リソースでも同様の問題が発生する可能性があります。

ソリューション

解決策:この問題を解決するには、次のステップを実行します。

  • まだ削除されていないすべてのCRDをフェッチします。 ノート

    ヒント

    オペレータSDKはアルファベット順に削除を実行します。前述のエラーがingressgatewaysで発生したため、アルファベット順に従っている非サービス・メッシュ・リソースを含むすべてのリソースが表示されます。
    $ kubectl get crd | grep oci.oracle.com
    ingressgateways.servicemesh.oci.oracle.com             2022-01-09T14:13:26Z
    meshes.servicemesh.oci.oracle.com                      2022-01-09T14:13:26Z
    mysqldbsystems.oci.oracle.com                          2022-01-09T14:13:27Z
    streams.oci.oracle.com                                 2022-01-09T14:13:26Z
    virtualdeploymentbindings.servicemesh.oci.oracle.com   2022-01-09T14:13:24Z
    virtualdeployments.servicemesh.oci.oracle.com          2022-01-09T14:13:27Z
    virtualserviceroutetables.servicemesh.oci.oracle.com   2022-01-09T14:13:26Z
    virtualservices.servicemesh.oci.oracle.com             2022-01-09T14:13:27Z
  • 前のCRDに存在するすべてのオブジェクトを削除します。

    ヒント

    最初に子リソースを削除してから、親リソースに進みます。それ以外の場合は、削除ステップがスタックします。
    ## Delete all the objects for that custom resource
    $ kubectl delete CUSTOM_RESOURCE --all --all-namespaces 
     
    ## Once deleted, verify there are no more objects present for that custom resource
    $ kubectl get CUSTOM_RESOURCE --all-namespaces
  • 次のコマンドを使用して、残りのすべてのCRDを削除します。以前に削除されたCRDは、未検出メッセージが生成される可能性があります。
    $ kubectl delete crd virtualdeploymentbindings.servicemesh.oci.oracle.com
    $ kubectl delete crd ingressgatewaydeployments.servicemesh.oci.oracle.com
    $ kubectl delete crd ingressgatewayroutetables.servicemesh.oci.oracle.com
    $ kubectl delete crd ingressgateways.servicemesh.oci.oracle.com
    $ kubectl delete crd accesspolicies.servicemesh.oci.oracle.com
    $ kubectl delete crd virtualserviceroutetables.servicemesh.oci.oracle.com
    $ kubectl delete crd virtualdeployments.servicemesh.oci.oracle.com
    $ kubectl delete crd virtualservices.servicemesh.oci.oracle.com
    $ kubectl delete crd meshes.servicemesh.oci.oracle.com
    $ kubectl delete crd autonomousdatabases.oci.oracle.com
    $ kubectl delete crd mysqldbsystems.oci.oracle.com
    $ kubectl delete crd streams.oci.oracle.com
  • OCI Service Operator for Kubernetesをクリーン・アップの説明に従って、KubernetesのOCI Service Operatorをアンデプロイします。
  • OCI Service Operator for Kubernetesがデフォルト・ネームスペースにインストールされている場合は、次のコマンドを実行して、インストール中に作成された他のリソースを削除します。
    $ kubectl delete role,clusterrolebinding,clusterrole,secrets,pods,rs,deploy,svc,cm,ing -l operators.coreos.com/oci-service-operator.default=
  • -n NAMESPACEを使用してOCI Service Operator for Kubernetesをインストールした場合は、ネームスペースを削除して、インストール中に作成された他のリソースを削除します。
    $ kubectl delete ns NAMESPACE