
そのため、最近、ローカルの docker-desktop (Windows) Kubernetes クラスターでいくつかの問題が発生しています。
時々、クラスターがランダムに DiskPressure に遭遇し、Pod をスケジュールできなくなります (すべてが保留状態になります)。
そこで、ノード上で何が問題なのか確認したところ、常に DiskPressure 状態になっています。
私が見つけることができたものの 1 つは、kubectl describe nodes
次のログ (ImageGCFailed) でした。
kubelet, docker-desktop wanted to free 5180592947 bytes, but freed 0 bytes space with errors in image deletion: [rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedprofilepictureservice:dev" (must force) - container d8ef807bb674 is using its referenced image e2a36258ddf3, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "rancher/rancher:latest" (must force) - container 06af804517fc is using its referenced image 4251f6ed7d4e, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "prom/prometheus:latest" (must force) - container b08daf935e5d is using its referenced image 6fa696e177e3, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedmonitoring:dev" (must force) - container bcda6e3e0d79 is using its referenced image 63c070c7b160, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "grafana/grafana:latest" (must force) - container 141c6909f9c3 is using its referenced image 651ff2dc930f, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedsavingservice:dev" (must force) - container 13350d549f44 is using its referenced image 4649805f5c2f, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedfrontend:dev" (must force) - container e917511c30db is using its referenced image 0dc1d2af3433, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "rabbitmq:3.8.6-management" (must force) - container 7252761ee146 is using its referenced image 64a1f920fb0d, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedaccountvalidationservice:dev" (must force) - container 09ea0357c333 is using its referenced image 0329c6ba62a1, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedsessionservice:dev" (must force) - container d2b33cb31611 is using its referenced image 21d801ad9175, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedaccountservice:dev" (must force) - container 23c16e0a05ff is using its referenced image 6b3ba9041cca, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedsearchservice:dev" (must force) - container b5f55d1e7246 is using its referenced image e4d40671cbc6, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "redis:latest" (must force) - container 960762cb6661 is using its referenced image 74d107221092, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedchatservice:dev" (must force) - container ea893d0a4bc7 is using its referenced image cabc2a451580, rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "moomedfinanceservice:dev" (must force) - container effa172e3f0a is using its referenced image f092e21dbab3]
つまり、本質的には、スペースを解放するためにイメージをガベージ コレクションする試みがあるのですが、今、私は本当に疑問に思っていることがいくつかあります。
- ここで参照されているイメージのほとんどは、kubernetes でも使用されていません。すべてのイメージは :testing としてタグ付けされていますが、:dev はローカルの docker-compose (同時に実行されます) でのみ使用されます。どちらも同じイメージで、タグが異なるだけですが、なぜクラスターは制御すべきではないものをクリーンアップしようとするのでしょうか。
- なぜ私のクラスターは DiskPressure が常にかかっているのでしょうか? もう一度確認したところ、docker-desktop インスタンスに 88 GB ものストレージを割り当てましたが、まだ完全にいっぱいになっていません。私のノードの容量は次のとおりです。
それで、今ここで何をすべきかちょっと迷っています。この問題は、docker-desktop ファイル システムの使用量を増減すると自動的に修復されるようです。また、そもそも状態が問題である理由がよくわかりませんが、繰り返し発生するので、何かがあるはずです。
私は何をしますか?
答え1
クベレットガベージ コレクターがあり、その目的は、リソースを活用するために不要な k8s オブジェクトを削除することです。
オブジェクトがどの所有者にも属さない場合、それは孤立していることを意味します。Kubernetesには、次のようなパターンがあります。 Kubernetes の所有権ノードがディスク圧力すると、Kubeletデーモンは(おそらく)未使用のイメージを削除してディスクスペースを必死に確保しようとします。ソースコードKubelet が、Pod の作成に最後に使用されてからの時間によって、削除するイメージを並べ替えていることを示しています。 取得するエラーは、 error response from daemon: conflict: unable to remove repository reference
参照されたイメージがコンテナーによって使用されていることを示しています。 サーバー内のコンテナーとイメージを確認してください。
使用しているコンテナを一覧表示します。
$ docker ps -a
使用している画像をリストします。
$ docker images
次に、次のコマンドを使用してコンテナを停止します。
$ docker stop <container_ID>
後で次のコマンドを使用してコンテナを削除します。
$ docker rm <container_ID>
最後に、次のコマンドを使用して画像を削除します。
$ docker rmi <image_ID>
または強制的に使用する:
$ docker rm -f <image-id>
コマンドも実行します:
$ docker system prune
未使用のデータが削除されます。GB が解放され、DiskPressure 汚染が除去されます。その後、コンテナを再作成できます。
見てみましょう:リポジトリの競合参照、docker-prune。