このトピックでは、スタンドアローン管理クラスタの展開のトラブルシューティングに役立つヒントを説明します。以下の手順の一部では、kind
CLI を使用します。kind
をインストールするには、kind
ドキュメントの「Installation」を参照してください。ワークロード クラスタのトラブルシューティングの詳細については、「ワークロード クラスタの問題のトラブルシューティング」を参照してください。
SSH を使用して、スタンドアローン管理クラスタまたはワークロード クラスタの個々のノードに接続できます。これを行うには、管理クラスタを展開したときに作成した SSH キー ペアが、SSH コマンドを実行するマシンで使用可能である必要があります。このため、tanzu
コマンドを実行するマシンで ssh
コマンドを実行する必要があります。
管理クラスタに登録し、管理クラスタから展開するすべてのワークロード クラスタで使用される SSH キーは、次のユーザー アカウントに関連付けられます。
capv
ubuntu
ubuntu
ec2-user
capi
SSH を使用してノードに接続するには、ブートストラップ マシンとして使用するマシンから次のいずれかのコマンドを実行します。
ssh capv@node-address
ssh ubuntu@node-address
ssh ec2-user@node-address
ssh capi@node-address
SSH キーは、ssh
コマンドを実行しているシステムに存在するため、パスワードは不要です。
kubectl
を使用したユーザー、コンテキスト、およびクラスタの削除ユーザー、コンテキスト、およびクラスタの一部またはすべてを削除して kubectl
状態をクリーンアップするには、以下の手順を実行します。
~/.kube-tkg/config
ファイルを開きます。
削除する user
オブジェクトに対して、次のコマンドを実行します。
kubectl config unset users.USERNAME --kubeconfig ~/.kube-tkg/config
ここで、USERNAME
は、config
ファイルにリストされている各トップレベルの user
オブジェクトの name
プロパティです。
削除する context
オブジェクトに対して、次のコマンドを実行します。
kubectl config unset contexts.CONTEXT-NAME --kubeconfig ~/.kube-tkg/config
ここで、CONTEXT-NAME
は、config
ファイルにリストされている各トップレベルの context
オブジェクトの name
プロパティで、通常は contexts.mycontext-admin@mycontext
の形式になります。
削除する cluster
オブジェクトに対して、次のコマンドを実行します。
kubectl config unset clusters.CLUSTER-NAME --kubeconfig ~/.kube-tkg/config
ここで、CLUSTER-NAME
は、config
ファイルにリストされている各トップレベルの cluster
オブジェクトの name
プロパティです。
config
ファイルに、現在のコンテキストが削除されたクラスタとして一覧表示されている場合は、コンテキストを設定解除します。
kubectl config unset current-context --kubeconfig ~/.kube-tkg/config
tanzu
CLI によって追跡されている管理クラスタを削除した場合は、「Tanzu CLI 構成からの管理クラスタの削除」の記載どおりに tanzu config server delete
を実行して、それらの管理クラスタを tanzu
CLI の状態から削除します。
nfs-utils
の無効化問題
Tanzu Kubernetes Grid v1.1.2 以降では、nfs-utils
はデフォルトで有効になっています。nfs-utils
が不要な場合は、クラスタ ノード仮想マシンから削除できます。
解決方法
Tanzu Kubernetes Grid v1.1.2 以降を使用して展開するクラスタで nfs-utils
を無効にするには、SSH を使用してクラスタ ノード仮想マシンにログインし、次のコマンドを実行します。
tdnf erase nfs-utils
問題
tanzu management-cluster create
または tanzu mc create
を実行すると、次のようなエラーが表示されて失敗します。
Validating the pre-requisites...
Looking for AWS credentials in the default credentials provider chain
Error: : Tkg configuration validation failed: failed to get AWS client: NoCredentialProviders: no valid providers in chain
caused by: EnvAccessKeyNotFound: AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment
SharedCredsLoad: failed to load shared credentials file
caused by: FailedRead: unable to open file
caused by: open /root/.aws/credentials: no such file or directory
EC2RoleRequestError: no EC2 instance role found
caused by: EC2MetadataError: failed to make EC2Metadata request
解決方法
Tanzu Kubernetes Grid は、デフォルトの AWS 認証情報プロバイダ チェーンを使用します。AWS で管理クラスタまたはワークロード クラスタを作成する前に、「AWS の認証情報の構成」の記載どおりに、AWS アカウントの認証情報を構成する必要があります。
問題
Azure でスタンドアローン管理クラスタまたはワークロード クラスタを作成する前に、クラスタ ノードで使用される仮想マシン イメージに適用される法的条件に同意する必要があります。このライセンスに同意せずに tanzu mc create
または tanzu cluster create
を実行すると、次のようなエラーで失敗します。
User failed validation to purchase resources. Error message: 'You have not accepted the legal terms on this subscription: '*********' for this plan. Before the subscription can be used, you need to accept the legal terms of the image.
解決方法
この問題が発生した場合は、法的条件に同意して再試行してください。
問題
スタンドアローン管理クラスタの展開に失敗すると、クラウド インフラストラクチャとブートストラップ マシンに孤立したオブジェクトが残ります。
解決方法
tanzu mc create
コマンド出力を監視します。コマンドが失敗すると、次のようなヘルプ メッセージが出力されます。「管理クラスタの展開中のエラー...管理クラスタによって作成されたリソースをクリーンアップするには: tkg delete mc... (Failure while deploying management cluster… To clean up the resources created by the management cluster: tkg delete mc…)」tanzu mc delete YOUR-CLUSTER-NAME
を実行します。このコマンドは、インフラストラクチャおよびローカルで作成されたオブジェクトを削除します。次に示す代替方法を使用することもできます。
ブートストラップ マシンのクリーンアップ:
kind
クラスタを削除するには、kind
CLI を使用します。例:
kind get clusters
kind delete cluster --name tkg-kind-example1234567abcdef
Docker オブジェクトを削除するには、docker
CLI を使用します。たとえば、docker rm
、docker rmi
、docker system prune -a --volumes
などです。
注意システムで Tanzu Kubernetes Grid に関連しない Docker プロセスを実行している場合は、不要な Docker オブジェクトを個別に削除します。
ターゲット プラットフォームのクリーンアップ:
AZURE_RESOURCE_GROUP
を開きます。チェックボックスを使用して、名前にタイムスタンプを含んでいる、Tanzu Kubernetes Grid によって作成されたリソースを選択して削除します。問題
AWS で tanzu mc delete
を実行した後、tanzu mc get
およびその他の Tanzu CLI コマンドで削除済みの管理クラスタが一覧表示されなくなります。ただし以下のようになります。
cluster infrastructure is still being provisioned: VpcReconciliationFailed
」というエラーが表示される。解決方法
この動作は、TKG が期限切れまたは無効な AWS アカウント認証情報を使用すると発生します。この状況を防止またはリカバリするには、次の手順を実行します。
防止: AWS 認証情報プロファイルまたはローカルの静的な環境変数を使用して、「 AWS アカウントの認証情報の構成」の説明に従って AWS アカウントの認証情報を更新します。
EC2 ダッシュボードを使用したリカバリ:EC2 ダッシュボードから管理クラスタ ノードを手動で削除します。
CLI を使用したリカバリ:
管理クラスタの削除に失敗したためにブートストラップ マシンに残っている kind
クラスタで、AWS 認証情報シークレットを修正します。
kubectl get secret capa-manager-bootstrap-credentials -n capa-system -ojsonpath="{.data.credentials}"| base64 -d
シークレットを編集して、AWS 認証情報を含めます。
[default]
aws_access_key_id = <key id>
aws_secret_access_key = <access_key>
region = <region>
tanzu mc delete
を再度実行します。
問題
tanzu mc delete
を実行すると、管理クラスタは削除されますが、ブートストラップ マシンからのローカル kind
クラスタの削除は失敗します。
解決方法
実行中のすべての kind
クラスタを一覧表示し、tkg-kind-unique_ID
のようなクラスタを削除します。
kind delete cluster --name tkg-kind-unique_ID
実行中のすべてのクラスタを一覧表示し、kind
クラスタを特定します。
docker ps -a
kind
クラスタのコンテナ ID をコピーして削除します。
docker kill container-ID
問題
マシンが停止し、修正を待機しているため、スタンドアローン管理クラスタの展開に失敗します。
解決方法
制御プレーン ノードが 1 台しかない dev
プランを使用して展開した管理クラスタの場合は、管理クラスタを再展開する必要があります。複数の制御プレーン ノードがある管理クラスタの場合は、停止したマシンを特定して削除できます。
管理クラスタのステータスを取得します。例:
kubectl -n tkg-system get cluster my-mgmt-cluster -o yaml
前の手順の出力から、停止したマシンの名前を見つけます。停止したマシンは、WaitingForRemediation
としてマークされます。たとえば、次の出力では、停止したマシンの名前は my-mgmt-cluster-zpc7t
です。
status:
conditions:
- lastTransitionTime: "2021-08-25T15:44:23Z"
message: KCP can't remediate if current replicas are less or equal then 1
reason: WaitingForRemediation @ Machine/my-mgmt-cluster-zpc7t
severity: Warning
status: "False"
type: Ready
制御プレーン ノードのマシン健全性チェックのタイムアウト値を、デフォルトの 5m
よりも大きくします。例:
tanzu cluster machinehealthcheck control-plane set my-cluster --mhc-name my-control-plane-mhc --unhealthy-conditions "Ready:False:10m,Ready:Unknown:10m"
MachineHealthCheck
オブジェクトの更新の詳細については、「ワークロード クラスタのマシンの健全性チェックの構成」の「MachineHealthCheck
オブジェクトの作成または更新」を参照してください。
kubectl
を管理クラスタのコンテキストに設定します。例:
kubectl config use-context mgmt-cluster-admin@mgmt-cluster
停止しているマシンを削除します。
kubectl delete machine MACHINE-NAME
ここで、MACHINE-NAME
は、前の手順で特定したマシンの名前です。
KubeadmControlPlane
コントローラがマシンを再展開するまで待機します。
~/.config/tanzu
ディレクトリのリストア問題
ブートストラップ マシンの ~/.config/tanzu
ディレクトリが誤って削除されているか、破損しています。Tanzu CLI は、このディレクトリを作成して使用します。このディレクトリがないと機能しません。
解決方法
~/.config/tanzu
ディレクトリの内容をリストアするには、次の手順を実行します。
既存の Tanzu Kubernetes Grid 管理クラスタを特定するために、次のコマンドを実行します。
kubectl --kubeconfig ~/.kube-tkg/config config get-contexts
コマンド出力には、Tanzu CLI によって作成または追加されたすべての管理クラスタの名前とコンテキストが一覧表示されます。
出力に一覧表示されている各管理クラスタについて、次のコマンドを実行して、~/.config/tanzu
ディレクトリおよび CLI にリストアします。
tanzu login --kubeconfig ~/.kube-tkg/config --context MGMT-CLUSTER-CONTEXT --name MGMT-CLUSTER
tanzu management-cluster
create を macOS で実行すると kubectl バージョン エラーが発生する問題
tanzu management-cluster create
または tanzu mc create
コマンドを最新の安定したバージョンの Docker デスクトップを備えた macOS で実行すると、次のようなエラー メッセージが表示されて失敗します。
Error: : kubectl prerequisites validation failed: kubectl client version v1.15.5 is less than minimum supported kubectl client version 1.24.10
これは、Docker デスクトップが古いバージョンの kubectl
をパスにシンボリック リンクするために発生します。
解決方法
サポートされている新しいバージョンの kubectl
を、パス内の Docker のバージョンより前に配置します。
スタンドアローン管理クラスタの認証情報を紛失した場合、たとえば tanzu
コマンドを実行するシステムで .kube-tkg/config
ファイルを誤って削除した場合には、管理クラスタの制御プレーン ノードから認証情報をリカバリできます。
tanzu mc create
を実行して、.kube-tkg/config
ファイルを再作成します。SSH を使用して管理クラスタの制御プレーン ノードにログインします。
各ターゲット プラットフォームで使用する認証情報については、上記の「SSH を使用したクラスタ ノードへの接続」を参照してください。
管理クラスタの admin.conf
ファイルにアクセスします。
sudo vi /etc/kubernetes/admin.conf
admin.conf
ファイルには、クラスタ名、クラスタ ユーザー名、クラスタ コンテキスト、およびクライアント証明書データが含まれています。
tanzu
コマンドを実行するシステムの .kube-tkg/config
ファイルに、クラスタ名、クラスタ ユーザー名、クラスタ コンテキスト、およびクライアント証明書データをコピーします。問題
Tanzu Kubernetes Grid v2.1.1 にアップグレードすると、次のようなエラーが返されます。
Operation cannot be fulfilled on certificates.cert-manager.io "pinniped-cert": the object has been modified; please apply your changes to the latest version and try again
解決方法
このエラーは、Pinniped の展開後ジョブがコンポーネントのアップグレード プロセスと競合する場合に発生する可能性があります。次の手順を実行して、ジョブを削除して再展開します。
Pinniped の展開後ジョブを削除します。
kubectl delete jobs.batch -n pinniped-supervisor pinniped-post-deploy-job
kapp-controller
が展開後ジョブを再展開するまで約 5 分間待機します。
Pinniped アプリケーションのステータスを確認します。
kubectl get app -n tkg-system pinniped
NAME DESCRIPTION SINCE-DEPLOY AGE
pinniped Reconcile succeeded 5s 49m
DESCRIPTION
に Reconciling
と表示される場合は、数分待ってから再度確認してください。Reconcile succeeded
が表示されたら、次の手順に進みます。
Pinniped の展開後ジョブのステータスを確認します。
kubectl get jobs -n pinniped-supervisor
NAME COMPLETIONS DURATION AGE
pinniped-post-deploy-job-ver-1 1/1 9s 62s
問題
管理クラスタを最近アップグレードしました。この管理クラスタに関連付けられているワークロード クラスタへの認証を試みると、次のようなエラー メッセージが表示されます。
Error: could not complete Pinniped login: could not perform OIDC discovery for "https://IP:PORT": Get "https://IP:PORT/.well-known/openid-configuration": x509: certificate signed by unknown authority
解決方法
これは、ワークロード クラスタが使用している Pinniped スーパーバイザー CA バンドルのコピーが古いために発生します。スーパーバイザー CA バンドルを更新するには、次の手順を実行します。
kubectl
コンテキストを管理クラスタに設定します。
base64 でエンコードされた CA バンドルと issuer
エンドポイントを pinniped-info
ConfigMap から取得します。
kubectl get configmap pinniped-info -n kube-public -o jsonpath={.data.issuer_ca_bundle_data} > /tmp/ca-bundle && kubectl get configmap pinniped-info -n kube-public -o jsonpath={.data.issuer} > /tmp/supervisor-endpoint
ワークロード クラスタの Pinniped アドオン シークレットから values.yaml
セクションを取得します。
kubectl get secret WORKLOAD-CLUSTER-NAME-pinniped-addon -n WORKLOAD-CLUSTER-NAMESPACE -o jsonpath="{.data.values\.yaml}" | base64 -d > values.yaml
このシークレットは管理クラスタにあります。
上記で作成した values.yaml
ファイルで、pinniped-info
ConfigMap から取得した CA バンドルと一致するように supervisor_ca_bundle_data
キーを更新します。また、supervisor_svc_endpoint
が issuer
エンドポイントと一致することを確認します。
編集した values.yaml
ファイルを base64 でエンコードし、それをワークロード クラスタ シークレット内で置き換えて更新を適用します。このコマンドは、環境の OS によって異なります。例:
Linux:
kubectl patch secret/WORKLOAD-CLUSTER-NAME-pinniped-addon -n WORKLOAD-CLUSTER-NAMESPACE -p "{\"data\":{\"values.yaml\":\"$(base64 -w 0 < values.yaml)\"}}" --type=merge
macOS:
kubectl patch secret/WORKLOAD-CLUSTER-NAME-pinniped-addon -n WORKLOAD-CLUSTER-NAMESPACE -p "{\"data\":{\"values.yaml\":\"$(base64 < values.yaml)\"}}" --type=merge
ワークロード クラスタで、Pinniped アプリケーションが変更を正常に調整したことを確認します。
kubectl get app pinniped -n tkg-system
クラスタに対して認証します。例:
kubectl get pods -A --kubeconfig my-cluster-credentials
問題
作成されたクラスタで kubectl get pods -A
を実行すると、一部のポッドが保留状態のままになります。
影響を受けるポッドで kubectl describe pod -n pod-namespace pod-name
を実行すると、次のイベントが表示されます。
n node(s) had taint {node.cloudprovider.kubernetes.io/uninitialized: true}, that the pod didn't tolerate
解決方法
クラスタと vCenter Server 間の通信を確実に行うために、接続ルールとファイアウォール ルールが指定されていることを確認します。ファイアウォール ポートとプロトコルの要件については、「VMware Ports and Protocols」の vSphere リストを参照してください。
問題
tanzu
CLI コマンドを実行すると、次のようなエラーが返されます。
Failed to invoke API on cluster : the server has asked for the client to provide credentials, retrying
解決方法
これは、TKG v1.2 以降に影響する既知の問題です。回避策については、「Tanzu CLI 構成での管理クラスタ証明書の更新」および「Tanzu Kubernetes Grid の tkg/tanzu CLI コマンドを使用してクラスタにアクセスできない」を参照してください。
問題
tanzu management-cluster create --ui
または tanzu mc create --ui
コマンドを Windows システムで実行すると、ユーザー インターフェイスはデフォルトのブラウザで開きますが、グラフィックとスタイルは適用されません。これは、Windows レジストリが application/x-css
に設定されているために発生します。
解決方法
regedit
と入力してレジストリ エディタ ユーティリティを開きます。HKEY_CLASSES_ROOT
を展開し、.js
を選択します。application/javascript
に設定し、[OK] をクリックします。tanzu mc create --ui
コマンドをもう一度実行して、ユーザー インターフェイスを再起動します。問題
LoadBalancer
タイプのサービスの合計数が大きく、すべてのサービス エンジンが同じ L2 ネットワークに展開されている場合、NSX Advanced Load Balancer 仮想 IP アドレスへの要求が失敗し、no route to host
というメッセージが表示されることがあります。
これは、サービス エンジンのデフォルトの ARP レート制限が 100 であるために発生します。
解決方法
ARP レート制限を大きな数値に設定します。このパラメータは、NSX Advanced Load Balancer Essentials では調整可能ではありませんが、NSX Advanced Load Balancer Enterprise Edition では調整可能です。