Container Storage Interface (CSI) コンポーネントには、csi-plugin と csi-provisioner が含まれます。これらのコンポーネントを使用すると、ボリュームを動的に作成、アタッチ、デタッチできます。
コンポーネントの紹介
クラスターを作成すると、次の CSI コンポーネントがデフォルトでインストールされます。
コンポーネント | 説明 | デプロイメントタイプ |
csi-plugin | ボリュームのマウント、アンマウント、フォーマットを行います。 | DaemonSet |
csi-provisioner | ボリュームを動的に作成およびスケールアウトし、スナップショットを作成します。デフォルトでは、Elastic Block Storage、NAS、および OSS ボリュームの作成をサポートしています。 | Deployment |
説明 新しいクラスターを作成すると、マネージドバージョンの csi-provisioner がデフォルトでインストールされます。Alibaba Cloud はマネージドコンポーネントの運用および保守 (O&M) を担当するため、クラスター内で関連する Pod を表示することはできません。
csi-plugin および csi-provisioner のアップグレード
csi-plugin および csi-provisioner コンポーネントのバージョンを表示し、コンソールでアップグレードできます。
重要 csi-compatible-controller コンポーネントを使用して FlexVolume を CSI に移行していて、移行が完了していない場合、csi-plugin および csi-provisioner コンポーネントを自動的にアップグレードすることはできません。コンポーネントをアップグレードする前に、移行を完了する必要があります。または、移行中に CSI コンポーネントを手動でアップグレードすることもできます。詳細については、「コンポーネントのアップグレード」をご参照ください。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[ストレージ] タブをクリックします。[csi-plugin] および [csi-provisioner] セクションで、利用可能なアップグレードを確認し、コンポーネントをアップグレードします。
よくある質問
コンポーネントの問題
CSI コンポーネントの起動に失敗し、イメージのプルに失敗して exec /usr/bin/plugin.csi.alibabacloud.com: exec format error エラーが発生する
現象
csi-plugin コンポーネントの Pod 内の csi-plugin コンテナーが exec /usr/bin/plugin.csi.alibabacloud.com: exec format error エラーを報告します。
原因
デフォルトでは、csi-plugin は amd64 と arm64 の両方のアーキテクチャをサポートしています。Pod が amd64 または arm64 アーキテクチャのノードで実行されている場合、イメージのプルが不完全なためにこのエラーが発生することがあります。不完全なイメージのプルとは、イメージのメタデータは存在するものの、イメージが正常にプルされなかったことを意味します。これにより、バイナリが無効になります。プロセスの途中でノードが強制的にシャットダウンされると、イメージのプルが失敗する可能性があります。ECS インスタンスの ActionTrail ログを確認して、シャットダウンコマンドが実行されたかどうかを判断できます。
解決策
ストレージコンポーネントに起因するメモリ不足 (OOM) の問題
csi-provisioner コンポーネントの Pod 内のサイドカーコンテナーは、Pod、永続ボリューム (PV)、PersistentVolumeClaim (PVC) などの情報をキャッシュします。これにより、クラスターのサイズが大きくなるにつれて、メモリ不足 (OOM) エラーが発生する可能性があります。
csi-plugin Pod で高いネットワークトラフィックが観測される
現象
Pod のモニタリングで、csi-plugin Pod のネットワークトラフィックが高いことが示されます。
原因
csi-plugin コンポーネントは、ノードへの NAS ボリュームのマウントを担当しており、これによりネットワークトラフィックが生成されます。ノード上の Pod が NAS ボリュームを使用すると、その Pod からの NAS リクエストトラフィックは csi-plugin 名前空間を通過します。このトラフィックはクラスターのモニタリングによって記録され、csi-plugin Pod の高いネットワークトラフィックとして報告されます。
解決策
操作は不要です。このトラフィックはモニタリングコンポーネントによって記録されるだけです。重複することはなく、余分なネットワーク帯域幅を消費することもありません。
csi-provisioner コンポーネントのログに failed to renew lease xxx timed out waiting for the condition エラーが表示される
現象
kubectl logs csi-provisioner-xxxx -n kube-system コマンドを実行して CSI ログを表示すると、failed to renew lease xxx timed out waiting for the condition エラーが見つかることがあります。
原因
csi-provisioner コンポーネントは、複数のレプリカを実行する高可用性 (HA) コンポーネントです。Pod は、リーダー選出のために Kubernetes Lease オブジェクトを使用します。このプロセス中に、Pod は特定のリースを取得するために API サーバーにアクセスする必要があります。リースを取得した Pod がリーダーとなり、クラスターにサービスを提供します。このエラーは、csi-provisioner Pod が API サーバーへのアクセスに失敗した場合に発生します。
解決策
クラスターネットワークと API サーバーが正常に機能しているかどうかを確認してください。問題が解決しない場合は、チケットを送信してサポートを依頼してください。
コンポーネントのアップグレードの失敗
csi-plugin コンポーネントの事前チェックが失敗する
クラスターがディスク、NAS、または OSS ボリュームを使用していない場合、またはクラスターがテスト環境である場合は、イメージを手動で更新して csi-plugin コンポーネントをアップグレードできます。
以下はサンプルコマンドです。<image url> を新しいバージョンのイメージの URL に置き換えてください。詳細については、「csi-plugin」をご参照ください。
kubectl set image -n kube-system daemonset/csi-plugin csi-plugin=<image url>
csi-plugin コンポーネントの事前チェックは成功するが、アップグレードが失敗する
csi-plugin コンポーネントは DaemonSet です。クラスターに NotReady 状態または Running 以外の状態のノードが含まれている場合、アップグレードは失敗します。障害のあるノードを手動で修正してから、再度アップグレードを試みる必要があります。
原因を特定できない場合は、チケットを送信して手動アップグレードのサポートを依頼してください。
コンソールに csi-plugin コンポーネントは表示されるが csi-provisioner コンポーネントは表示されない
以前のバージョンの csi-provisioner (1.14 以前) は StatefulSet としてデプロイされていました。クラスターに csi-provisioner StatefulSet が存在する場合は、kubectl delete sts csi-provisioner コマンドを実行して削除します。その後、csi-provisioner コンポーネントを再インストールします。
エラーが発生した場合は、チケットを送信して手動アップグレードのサポートを依頼してください。
csi-provisioner コンポーネントの事前チェックが失敗する
クラスターが StorageClass を使用して作成されたディスク、NAS、または OSS タイプの動的プロビジョニングボリュームを使用していない場合、またはクラスターがテスト環境である場合は、イメージを手動で更新して csi-provisioner コンポーネントをアップグレードできます。
以下はサンプルコマンドです。<image url> を新しいバージョンのイメージの URL に置き換えてください。詳細については、「csi-provisioner」をご参照ください。
kubectl set image -n kube-system deployment/csi-provisioner csi-provisioner=<image url>
クラスターが StorageClass を使用して作成されたディスク、NAS、または OSS タイプの動的プロビジョニングボリュームを使用し、クラスターに重要なビジネスデータが含まれている場合は、チケットを送信して手動アップグレードのサポートを依頼してください。
csi-provisioner コンポーネントの事前チェックは成功するが、アップグレードが失敗する
チケットを送信して手動アップグレードのサポートを依頼してください。
クラスターノードの数が要件を満たしていないため、csi-provisioner コンポーネントのアップグレードが失敗する
現象
現象 1: csi-provisioner コンポーネントの事前チェックが失敗し、クラスターノードの数が要件を満たしていないことを示すエラーが表示されます。
現象 2: csi-provisioner コンポーネントの事前チェックとアップグレードは成功しますが、コンポーネントの Pod が CrashLoopBackOff 状態になります。ログには、次の 403 Forbidden メッセージのようなエラーが表示されます。
time="2023-08-05T13:54:00+08:00" level=info msg="Use node id : <?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n <head>\n <title>403 - Forbidden</title>\n </head>\n <body>\n <h1>403 - Forbidden</h1>\n </body>\n</html>\n"
原因
現象 1 の原因: 高可用性を確保するために、csi-provisioner はプライマリ Pod とセカンダリ Pod を実行し、これらは異なるノードにデプロイする必要があります。クラスターにノードが 1 つしかない場合、コンポーネントのアップグレードは失敗します。
現象 2 の原因: csi-provisioner Pod が実行されているノードでセキュリティ強化が有効になっています。このモードでは、ノード上のメタデータサーバーへのアクセスがブロックされ、エラーが発生します。
解決策
StorageClass プロパティの変更により csi-provisioner コンポーネントのアップグレードが失敗する
現象
csi-provisioner コンポーネントの事前チェックが失敗し、StorageClass プロパティが期待値を満たしていないことを示すエラーが表示されます。
原因
デフォルトの StorageClass のプロパティが変更されました。これは、同じ名前の StorageClass を削除してから再作成した場合に発生する可能性があります。StorageClass のプロパティは不変です。変更すると、コンポーネントのアップグレードは失敗します。
解決策
alicloud-disk-essd、alicloud-disk-available、alicloud-disk-efficiency、alicloud-disk-ssd、alicloud-disk-topology など、クラスター内のデフォルトの StorageClass を削除する必要があります。この削除は既存のアプリケーションには影響しません。StorageClass を削除した後、csi-provisioner コンポーネントの再インストールを試みます。インストールが完了すると、システムは自動的に StorageClass を再作成します。これ以上の操作は必要ありません。
重要 カスタム StorageClass が必要な場合は、別の名前で新しいものを作成してください。デフォルトの StorageClass は変更しないでください。