Kubernetes で Pod が起動しなくなり、node.kubernetes.io/disk-pressure の taint が原因になっていた時のメモです。これは単なる Pod の問題ではなく、ノードのディスク使用量、container runtime、kubelet、バックアップ保存先の設計が Kubernetes のスケジューリングに表面化した状態として見ます。
この記事の位置づけ
この記事は、ノードのディスク不足によって Pod が起動しない場合の切り分け記事です。scheduler のエラーだけを見るのではなく、Node condition、taint、containerd / kubelet の保存領域、バックアップやログの置き場所を順に確認します。
関連する記事
- Kubernetes に Docker / Podman のような stop/start がない理由
Pod は消えて再作成されるものとして扱う、という前提を確認しています。 - Kubernetes / コンテナ環境で MariaDB の /var/lib/mysql を永続化する
状態を持つデータを Pod やノードローカルから分離する具体例です。 - Kubernetes クラスタの初期化 – kubeadm reset の基本
検証環境で状態が崩れた場合に、再初期化の位置づけを確認できます。 - Kubernetes 運用設計ガイド
Kubernetes 関連記事全体の入口です。
次に進む
- Kubernetes / コンテナ環境で MariaDB の /var/lib/mysql を永続化する
ノードローカルに状態を抱えない設計の具体例へ進みます。 - Kubernetes クラスタの初期化 – kubeadm reset の基本
検証環境を作り直す場合の reset の範囲を確認します。
参考書籍
書籍
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
出ていたメッセージ
0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/disk-pressure: }, that the pod didn't tolerate.原因
この時は、Pod 内のデータを毎日バックアップしており、そのバックアップデータでノード側のディスクがいっぱいになっていました。アプリケーションや Kubernetes の設定不備というより、ノードの空き容量不足が直接の原因です。
disk-pressure は、Kubernetes がノードのディスク逼迫を検知し、新しい Pod のスケジューリングや既存 Pod の維持に影響が出る状態です。原因はイメージ、ログ、一時ファイル、バックアップ、container runtime の保存領域など複数あり得ます。
確認すること
まず Kubernetes 側で Node condition と taint を確認し、次にノードへ入ってファイルシステムと containerd / kubelet の使用量を確認します。
kubectl describe node <node-name>
kubectl get node -o wide
kubectl get pod -A -o wide
kubectl get events -A --sort-by=.lastTimestamp
df -h
sudo du -xh /var/lib/containerd | sort -h | tail
sudo du -xh /var/lib/kubelet | sort -h | tail
sudo journalctl --disk-usage/var/lib/containerd はコンテナイメージやスナップショット、/var/lib/kubelet は Pod 関連の状態やボリュームに関係します。どちらが肥大化しているかで、見るべき場所が変わります。
復旧の考え方
- 不要なバックアップや一時ファイルを削除する。
- コンテナイメージ、古いログ、containerd のスナップショットが肥大化していないか確認する。
- 必要に応じて kubelet や container runtime の状態を確認する。
- バックアップ保存先を Pod / node のローカルディスクに置き続けない。
- 監視でディスク使用率を見て、disk-pressure になる前に気づけるようにする。
復旧時に重要なのは、単に空き容量を作ることだけではありません。なぜノードローカルにデータが増え続けたのかを確認し、バックアップ、ログ、永続データの置き場所を見直す必要があります。
やってはいけない見方
disk-pressure を Pod の再起動だけで直そうとすると、原因が残ったままになります。Pod を消しても、ノードのディスク逼迫が解消されなければ同じ問題が再発します。Kubernetes のイベントは入口であり、最終的にはノードの保存領域と運用設計を見る必要があります。
まとめ
disk-pressure は Kubernetes の問題というより、ノードのリソース不足が Kubernetes に表面化した状態です。Pod が起動しない時は、まず scheduler のエラー、node condition、ディスク使用量、container runtime の保存領域を確認します。

