Upgrade to Pro — share decks privately, control downloads, hide ads and more …

緊急SOS!KubernetesのCompletedな10万Jobぜんぶ消す

 緊急SOS!KubernetesのCompletedな10万Jobぜんぶ消す

2023年ヒヤリハット大反省会@新宿 - connpass
https://findy.connpass.com/event/302579/

Hiroki Takatsuka

December 07, 2023
Tweet

More Decks by Hiroki Takatsuka

Other Decks in Programming

Transcript

  1. 髙塚 広貴 (Hiroki Takatsuka) 株式会社primeNumber プロダクト開発本部 SRE 4 • ヤフー株式会社

    (2016 ~ 2022) ◦ CI/CDプラットフォーム Screwdriver.cd の SREチームのEMやスクラムマスターなど • 株式会社primeNumber (2022 ~ ) ◦ trocco®のSRE ◦ SREチームは現在2名 + 業務委託の方数名 ▪ 会社全体だと約80名 ▪ trocco®に関わるエンジニアは約15名 • 猫 ◦ アル (アビシニアン ♂ 3歳半)
  2. 異変①: kubectl が “out of memory”で失敗する • (のんきに記念書き込みをしてる場合ではなかった) • でも〜

    ◦ 実行してるのリソースの少ない踏み台だし… ▪ ラズパイとかでk8s動かしてるとまれによくみる ◦ 毎回じゃないし… ◦ やりたい操作はできてるし… 10
  3. 異変③: Cluster AutoscalerがOOMで何度も死んでる • • でも〜 ◦ 最近他のコンポーネントのリソースも上げたから食い合ってるとか? ◦ 過去にもOOMで死ぬことあったしまあリソース上げるしかないよね

    12 $ kubectl get pods -n kube-system | grep auto cluster-autoscaler-58f96bd48c-cxbf8 1/1 Running 17 (8m8s ago) 31d cluster-autoscaler-58f96bd48c-fmpsw 1/1 Running 25 (6m24s ago) 31d cluster-autoscaler-58f96bd48c-lzs49 1/1 Running 63 (18m ago) 31d
  4. 異変④: k8s Jobお掃除CronJobが仕事をしていない疑惑 • 通称: clean-job • 大量にCompletedなJob(のPod)が残っている ◦ 設定としては3分に一回実行し、CompletedになったJobを消しているはず

    ◦ 時間がかかって3分ごとに実行できていない • でも〜 ◦ 全く消せてないわけではない ◦ 消せないからといってゴミが残るだけでは? ◦ エラー吐いてないし… 13
  5. • 愚直に “--field-selector” でフィルタしてのgetは非対応 • でもdeleteなら ”--field-selector” でフィルタできるらしいという情報を得る ◦ 検証したら実際できた

    (なんか裏技っぽいですよね) ◦ ref: kubernetes - kubectl list / delete all completed jobs - Stack Overflow CompletedなJobをいい感じにフィルタして消したい… 18 ~ # kubectl get job --field-selector status.succeeded=1 Error from server (BadRequest): Unable to find "batch/v1, Resource=jobs" that match label selector "", field selector "status.succeeded=1": field label "status.succeeded" not supported for Job kubectl delete jobs --all-namespaces --field-selector status.successful=1
  6. 20

  7. • TTLAfterFinishedによるJob削除機能がk8s v1.23でstableになっている ◦ Jobを終わった後に残したい時間を “.spec.ttlSecondsAfterFinished” に設定するだけ ◦ これより前はclean-jobのような仕組みで掃除するしかなかったはず •

    ネイティブの機能として実装されるのにはワケがある(はず)なので使うべき • 「できること変わらないし優先度は低く」はバッドプラクティスっぽい󰢃 ◦ ぼくがかんがえたさいきょうのソリューション()はやめよう ネイティブの機能を使おう 25
  8. まとめ • 約10万Jobを一気に消した話でした ◦ 気づいてなかったら色々爆発してた可能性 ◦ CompletedなJobをぜんぶ消すには “$ kubectl delete

    jobs --all-namespaces --field-selector status.successful=1” だよ • 異変はスルーせず納得行くまで確認しよう • ネイティブの機能をできるだけ使おう 27
  9. trocco®を一緒に創ってくれる方を探しています👀 • 海外展開に向けて面白い経験ができると思うのでぜひ🙏 ◦ trocco® SRE ◦ trocco® ソフトウェアエンジニア ◦

    セキュリティスペシャリスト ◦ その他募集一覧 👉 https://herp.careers/v1/primenumber • primeNumber (trocco®) エンジニア採用サイトもオープンしました! 28
  10. 参考資料など • kubernetes - kubectl list / delete all completed

    jobs - Stack Overflow • Automatic Cleanup for Finished Jobs | Kubernetes • Kubernetes で Complete/Failed となった Job を自動削除する #kubernetes - Qiita • 池の水ぜんぶ抜く:テレビ東京 29