トラブルシューティング- 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をインストールした後、インストール・ステータスを確認するとエラーが返されます。
ソリューション
再現するステップ:
- インストール後、statusコマンドを実行して、成功したOLMインストールを確認します。
## status of olm $ operator-sdk olm status
- 返されたエラー:
## FATA[0034] Failed to install OLM version "latest": detected existing OLM resources: OLM must be completely uninstalled before installation
## 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つで発生します。
- オペレータのインストール・ネームスペースのポッドをリストします。
kubectl get pods -n oci-service-operator-system
- 失敗したポッドのログをオペレータ・ネームスペースに表示します。
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のインストールを成功させるには、次のステップに従います。
- 対応する名前空間の既存のオペレータインストールをクリーンアップします。
operator-sdk cleanup oci-service-operator -n oci-service-operator-system
- 次のコマンドを使用して、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を使用したイメージのプルを参照してください。 - コマンドを実行すると、次のように出力されます。
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のアップグレードを成功させるには、次のステップに従います。
- OLMをアンインストールします。
operator-sdk olm uninstall
- OLMを再インストールします。
operator-sdk olm install --version X.X.X
- 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のインストールを成功させるには、次のステップに従います。
- 対応する名前空間内の既存のオペレータインストールをクリーンアップします。
operator-sdk cleanup oci-service-operator -n oci-service-operator-system
- 次のコマンドを使用して、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を使用したイメージのプルを参照してください。 - コマンドを実行すると、次のような出力が生成されます。
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"
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_IMAGE
がoci-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_IMAGE
がoci-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