Armadilloフォーラム

コンテナを--diskモードで使用する場合の問題について。

kirihara

2024年2月19日 12時47分

別トピック(https://armadillo.atmark-techno.com/forum/armadillo/17187)にて、

不具合がでた場合に対応しますが、abos-ctrl podman-storage コマンドは開発時に使うコマンドで、運用時のコマンドではありません。
podman のストレージが壊れやすいから運用時に tmpfs を使うことを強く推奨しています。
壊れた状態で disk からコピーする場合に読み取り専用のストレージも故障状態になりますし、コマンドの途中で電源が切れた場合のテスト等は行ってません(snapshot を使って最後に切り替えているだけなので安全になっているはずですが、完全にサポートしているパターンではありません)

と記載しているほか、マニュアルのほうにも、コンテナの運用時には「--diskモード」ではなく「--tmpfs」モードで使用することを推奨されていますが、
「--disk」モードで使用する場合のリスクが、具体的にどのようなものなのかをご教授いただきたいです。

・「--diskモード」時には、コンテナが不揮発性メモリ上で、動作をする認識なのですが、動作中にpodmanのコンテナが壊れてしまった場合でも、
 電源を再投入すれば、confファイルにて、コンテナが再度生成されるのでは?
・「--diskモード」だと、不揮発性メモリが頻繁に書き換わるので不揮発性メモリの寿命が大幅に短くなる?
など…疑問に感じております。

(そのほか、クリティカルな課題があれば教えてください。)

よろしくお願いいたします。

コメント

at_dominique.m…

2024年2月19日 13時29分

kiriharaさん、

お世話になっています、
マルティネです。

> ・「--diskモード」時には、コンテナが不揮発性メモリ上で、動作をする認識なのですが、動作中にpodmanのコンテナが壊れてしまった場合でも、
>  電源を再投入すれば、confファイルにて、コンテナが再度生成されるのでは?

podman のストレージディレクトリに不具合なければ、そうですね。
コンテナの「ランニング状態」の内容に関しては問題なく起動時に削除されて、コンフィグファイルから再生成されます。

> ・「--diskモード」だと、不揮発性メモリが頻繁に書き換わるので不揮発性メモリの寿命が大幅に短くなる?
> など…疑問に感じております。

はい、他所はありますが Armadillo で仕様されている eMMC は高級な物なので、寿命が多少短くなってもそこも致命的な問題ではないと考えています。

> クリティカルな課題があれば教えてください。

disk モードでの運用での懸念は指摘された内容ではなく、podman の問題に近いですね…ストレージディレクトリが書込み可能になると、下手なタイミングで電源を落とすとコンテナイメージ自体を使えなくなる恐れがあります(そうなると、いくらコンフィグファイルで再生成してもエラーするだけです)

英語ですみませんが、参考までに以前 podman 開発者に報告した問題のいくつかの例です(自分のユーザー名で検索したら他にもあります…):
- https://github.com/containers/podman/issues/9588 (再び pull でリトライできるように修正されたはずです)
- https://github.com/containers/podman/issues/9824 (再現不可能でクロースなので、不明なままになりました)
- https://github.com/containers/podman/issues/12336 (/etc とコンテナのストレージディレクトリのステートが一致しない場合にコンテナを起動できなくなってしまった時がありました… 現在のバージョンでこの問題がなくなったが、こういう問題もあります)
- https://github.com/containers/podman/issues/13967 (fs がフルになるとイメージを削除できない、現状でまだある問題です)

多くの問題はアップデート関連ですが、「podman run」時でリセットがかかって次の起動で処理できなくなった場合の記憶もありますので、読み取り専用ディレクトリと起動時にゼロから作り上げる tmpfs の切り分けでこういう問題をすべて対応した方が安全だと判断しました。

ちなみに、disk 状態でコンテナを運用したい理由が少し気になりますが、教えていただけますか?
アプリケーションが一時的なデータを多く書き込む必要がある場合は /var/tmp 等(自動削除)か /var/app/volumes (保存領域)にボリュームを作っていただければ対応出きるかもしれません。

よろしくお願いします。

マルティネ様

詳細にご回答いただきありがとうございます。

>disk モードでの運用での懸念は指摘された内容ではなく、podman の問題に近いですね…ストレージディレクトリが書込み可能になると、下手なタイミングで電源を落とすとコンテナイメージ自体を使えなくなる恐れがあります(そうなると、いくらコンフィグファイルで再生成してもエラーするだけです)

diskモード時は、コンテナイメージが保存されているストレージに対して書き込みを行っているため、電源を落とすタイミングによっては、コンテナイメージそのものが破損することがある…という意味で理解しました。

> ちなみに、disk 状態でコンテナを運用したい理由が少し気になりますが、教えていただけますか?
> アプリケーションが一時的なデータを多く書き込む必要がある場合は /var/tmp 等(自動削除)か /var/app/volumes (保存領域)にボリュームを作っていただければ対応出きるかもしれません。

開発時の環境(diskモード)と運用時のモード(tmpfsモード)が異なることで、コンテナの動作の仕方に何か影響があるのではないか?という点が気になったため、仮にdiskモードで運用するとどのような不具合があるかを確認させていただきました。

よろしくお願いいたします。

at_dominique.m…

2024年2月20日 10時36分

kiriharaさん

>> disk モードでの運用での懸念は指摘された内容ではなく、podman の問題に近いですね…ストレージディレクトリが書込み可能になると、下手なタイミングで電源を落とすとコンテナイメージ自体を使えなくなる恐れがあります(そうなると、いくらコンフィグファイルで再生成してもエラーするだけです)
>
> diskモード時は、コンテナイメージが保存されているストレージに対して書き込みを行っているため、電源を落とすタイミングによっては、コンテナイメージそのものが破損することがある…という意味で理解しました。

はい。
厳密では、イメージ自体の内容は手動で復帰不可能のパタンは少ないと思いますが、ただの再起動で復帰しないパタンは過去で経験してますので tmpfs モードを強く推奨しています。

> > ちなみに、disk 状態でコンテナを運用したい理由が少し気になりますが、教えていただけますか?
> > アプリケーションが一時的なデータを多く書き込む必要がある場合は /var/tmp 等(自動削除)か /var/app/volumes (保存領域)にボリュームを作っていただければ対応出きるかもしれません。
>
> 開発時の環境(diskモード)と運用時のモード(tmpfsモード)が異なることで、コンテナの動作の仕方に何か影響があるのではないか?という点が気になったため、仮にdiskモードで運用するとどのような不具合があるかを確認させていただきました。

了解しました、ありがとうございます。
気持ちはすごく分かります。開発と運用の違いは強く反省していて、Armadillo Base OS の初期リリース後に tmpfs モードでの開発ツールを少しずつ増やしていますので、これからは開発モードでも tmpfs モードを使わせていただくように案内した方がいいかもしれません。

vscode で開発する場合はコンテナを ATDE で構築して swu でインストールしますので tmpfs モードで問題ないですし、
abos-ctrl podman-rw を使えば tmpfsモードでも一時的の変更を加えることもできますので、少しずつドキュメンテーションをその方向で進ませようと思います。

引続き、よろしくお願いします。