1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

KubernetesでEvictedのPodを自動的に削除する

Last updated at Posted at 2020-09-27

TL;DR

手法1. CrontabにEvictedのPodを削除するコマンドを追加する。

crontabにEvictedのpodを一括削除するコマンドを登録する。

$ crontab e
インタラクティブモードになるので下記の行を追加する。1分間に1回、default namespaceに属するEvictedのPodを一括削除する。
* * * * * /usr/bin/kubectl get pod -n default | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n default

手法2. kube-controller-managerにステータスがterminatedになっているPodを削除する設定を追加する。

sudo su -
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
インタラクティブモードになるのでspec.containers.commandに下記を追加する。
- --terminated-pod-gc-threshold=1

目的

Kubernetes上でPodを起動しているとメモリ不足やディスク容量の問題で、PodがEvictedの状態になり大量に溜まってしまう現象がたまにあります。このEvictedのPodを一括で消すコマンドがQiitaの記事に紹介はされていましたが、自動的に消したくなったので今回検証しました。

検証環境

下記の環境で検証しました。
OS: Ubuntu 18.04
kubernetes v1.18.4
kubernetesのセットアップはkubeadmを用いました。

手法1 CrontabにEvictedのPodを削除するコマンドを追加する。

一番直感的にわかりやすい方法です。KuberntesのEvictedのPodを一括削除するワンライナーをcrontabに登録します。詳しくはcrontabの設定方法をネットで調べてもらいたいのですが、実行頻度も定義することができます。Evictedは秒単位で発生するような頻繁な事象ではないため、十分これで対応できると思います。

手順

下記のコマンドでcrontabに設定を追加します。ubuntuのユーザーはkubernetesをインストールした時のユーザーで実行して下さい。

$ crontab e
インタラクティブモードになるので下記の行を追加する。1分間に1回、default namespaceに属するEvictedのPodを一括削除する。
* * * * * /usr/bin/kubectl get pod -n default | grep Evicted | awk '{print $1}'

手法2 kube-controller-managerにステータスがterminatedになっているPodを削除する設定を追加する。

kube-controller-managerのコマンドにオプションを追加することで、PodやコンテナイメージのGarbage Collection機能を設定することができます。詳しくはKubernetesのドキュメントを参照してください。

手順

私はkubeadmでkubernetesをインストールしたので、kube-contoller-managerのマニフェストファイルに設定を追加する方法で行いました。
terminated-pod-gc-thresholdという設定を追加するのですが、ここに閾値を設定することでterminatedとなったコンテナの数が閾値より大きくならないようにkube-controller-managerが削除します。(デフォルト値は12500となっており機能するタイミングはほとんどありません。)
今回は閾値を1に設定しているので、terminated状態のPodが1より増えないように設定しています。

sudo su -
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
インタラクティブモードになるのでspec.containers.commandに下記を追加する。
- --terminated-pod-gc-threshold=1
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?