この記事は、AKS Arc でのストレージ関連の問題のトラブルシューティングと解決に役立ちます。
永続ボリューム要求を構成すると、"エージェントを初期化できません。 エラー: mkdir /var/log/agent: アクセス許可が拒否されました"
この権限拒否エラーは、既定のストレージ クラスがワークロードに適していない可能性があることを示しており、Kubernetes バージョン 1.19.x 以降で実行されている Linux ワークロードで発生します。 セキュリティのベスト プラクティスに従って、多くの Linux ワークロードでポッドに securityContext fsGroup
の設定が指定されています。 既定のストレージ クラスでは fstype (=ext4)
パラメーターが指定されていないため、Azure Local の AKS でワークロードを開始できません。そのため、Kubernetes はワークロードによって要求された fsGroup
に基づいてファイルと永続ボリュームの所有権を変更できません。
この問題を解決するには、PVC のプロビジョニングに使用できるカスタム ストレージ クラスを定義します。
コンテナー ストレージ インターフェイス ポッドが "ContainerCreating" 状態でスタックしている
Kubernetes バージョン 1.16.10 で新しい Kubernetes ワークロード クラスターが作成され、1.16.15 に更新されました。 更新後、csi-msk8scsi-node-9x47m
ポッドは ContainerCreating 状態でスタックし、kube-proxy-qqnkr
ポッドは次の出力に示すように終了状態でスタックしました。
Error: kubectl.exe get nodes
NAME STATUS ROLES AGE VERSION
moc-lf22jcmu045 Ready <none> 5h40m v1.16.15
moc-lqjzhhsuo42 Ready <none> 5h38m v1.16.15
moc-lwan4ro72he NotReady master 5h44m v1.16.15
\kubectl.exe get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
5h38m
kube-system csi-msk8scsi-node-9x47m 0/3 ContainerCreating 0 5h44m
kube-system kube-proxy-qqnkr 1/1 Terminating 0 5h44m
kubelet
が不良状態で終了し、API サーバーとは通信できなくなったため、唯一の解決策は kubelet
サービスを再起動することです。 再起動後、クラスターは実行中の状態になります。
クラッシュ ダンプ ログでいっぱいになったディスク ストレージ
ディスク ストレージは、作成されたクラッシュ ダンプ ログからいっぱいにすることができます。 これは、Geneva エージェントのクライアント証明書の有効期限が切れていることが原因です。 症状は次のとおりです。
- サービスを開始できません。
- リソースが不足しているため、Kubernetes ポッド、デプロイなどを開始できません。
重要
この問題は、2022 年 4 月から 2023 年 3 月のリリースで 2023 年 4 月 18 日以降に作成されたすべての新しいマリナー管理およびターゲット クラスター ノードに影響を与える可能性があります。 この問題は、2023-05-09 リリース以降で修正されています。
この問題は、ディスク領域の割り当てや新しいファイルの書き込みを伴う操作に影響を与える可能性があるため、"ディスク領域/リソースの不足" エラーが適切なヒントです。 この問題が特定のノードに存在するかどうかを確認するには、次のシェル コマンドを実行します。
clouduser@moc-lwm2oudnskl $ sudo du -h /var/lib/systemd/coredump/
このコマンドは、診断ファイルによって消費されたストレージ領域を報告します。
根本原因
サービス エンドポイントに対する Geneva エージェントの認証に使用されるクライアント証明書の有効期限が切れると、エージェントがクラッシュし、クラッシュ ダンプが発生します。 エージェントのクラッシュ/再試行ループは初回起動時に約 5 秒であり、タイムアウトはありません。 つまり、ノードのファイル システムに新しいファイル (約 330 MB) が数秒ごとに作成され、ディスク ストレージが急速に消費される可能性があります。
対応策
推奨される軽減策は、更新された証明書を含む最新リリースバージョン 1.10.18.10425 にアップグレードすることです。 これを行うには、Azure ローカル ホストを更新する前にワークロード クラスターを手動でサポートされているマイナー バージョンにアップグレードします。
AKS Arc リリースと Azure Local の最新の AKS ニュースの詳細については、 AKS リリース ページをサブスクライブしてください。
アップグレードがオプションでない場合は、 mdsd サービスをオフにすることができます。 マリナー ノードごとに次の手順を実行します。
次のシェル コマンドを使用して、Geneva エージェントをオフにします。
sudo systemctl disable --now mdsd
ジュネーブ エージェントが正常に無効にされたことを確認します。
sudo systemctl status mdsd
次のコマンドを使用して、累積ファイルを削除します。
sudo find /var/lib/systemd/coredump/ -type f -mmin +1 -exec rm -f {} \; sudo find /run/systemd/propagate -name 'systemd-coredump@*' -delete sudo journalctl --rotate && sudo journalctl --vacuum-size=500M
ノードを再起動します。
sudo reboot
ストレージ ポッドがクラッシュし、ログに 'createSubDir' パラメーターが無効であることが示される
デプロイに SMB または NFS CSI ドライバーがインストールされていて、以前のバージョンから May ビルドにアップグレードすると、エラーが発生する可能性があります。 createSubDir
と呼ばれるパラメーターの 1 つが受け入れられなくなりました。 これがデプロイに適用される場合は、次の手順に従ってストレージ クラスのエラーを解決します。
このエラーが発生すると、ストレージ ポッドがクラッシュし、 createSubDir
パラメーターが無効であることがログに示されます。
ストレージ クラスを再作成します。
永続ボリュームを作成するときに、ボリュームのマウントの試行が失敗する
AKS Arc 環境で永続ボリュームまたは永続ボリューム要求を削除すると、同じ共有にマップするために新しい永続ボリュームが作成されます。 ただし、ボリュームをマウントしようとすると、マウントは失敗し、ポッドが NewSmbGlobalMapping failed
エラーでタイムアウトします。
新しいボリュームをマウントできない問題を回避するには、Windows ノードに SSH で接続し、Remove-SMBGlobalMapping
を実行して、ボリュームに対応する共有を指定します。 このコマンドを実行すると、ボリュームのマウント試行が成功します。