2.6.3. 共有 NFS ボリュームとスケーリングされたレジストリーの使用時のイメージのプッシュエラー
スケーリングされたレジストリーを共有 NFS ボリュームで使用すると、イメージのプッシュ時に以下のいずれかのエラーが発生することがあります。
-
digest invalid: provided digest did not match uploaded content
-
blob upload unknown
-
blob upload invalid
これらのエラーは、Docker のイメージのプッシュの試行時に内部レジストリーサービスによって返されます。その原因は、ノード間のファイル属性の同期に起因します。NFS クライアント側のキャッシング、ネットワーク待機時間およびレイヤーサイズなどはすべて、デフォルトのラウンドロビンロードバランシング設定を使用してイメージをプッシュする際に発生するエラーの要因になる可能性があります。
このような障害の可能性を最小限に抑えるには、以下の手順を実行します。
docker-registry サービスの
sessionAffinity
がClientIP
に設定されていることを確認します。$ oc get svc/docker-registry --template='{{.spec.sessionAffinity}}'
これにより
ClientIP
が返されるはずです。ClientIP は OpenShift Container Platform の最近のバージョンのデフォルトです。 これが返されない場合は、以下のように変更してください。$ oc patch svc/docker-registry -p '{"spec":{"sessionAffinity": "ClientIP"}}'
-
NFS サーバー上のレジストリーボリュームの NFS エクスポート行に
no_wdelay
オプションが一覧表示されていることを確認します。no_wdelay
オプションは、サーバーによる書き込みの遅延を防ぎ、このレジストリーの要件である、書き込み直後の読み取りの整合性を大幅に改善します。
テストにより、RHEL NFS サーバーをコンテナーイメージレジストリーのストレージバックエンドとして使用することに関する問題が検出されています。これには、OpenShift Container レジストリーおよび Quay が含まれます。そのため、コアサービスで使用される PV をサポートするために RHEL NFS サーバーを使用することは推奨されていません。
他の NFS の実装ではこれらの問題が検出されない可能性があります。OpenShift コアコンポーネントに対して実施された可能性のあるテストに関する詳細情報は、個別の NFS 実装ベンダーにお問い合わせください。