0
0

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を中心にAdvent Calendar 2021

Day 9

[k8s] 問題が起きたpodを(雑に)隔離する

Posted at

障害対応にて

ユーザーに影響があるような障害が発生してしまった場合、やはり素早い復旧が望まれます
一方では、障害の原因を調査するために障害が起きた現場を残したい、という事情もあります

その場合、バックアップや代わりになるインスタンスを用意して、障害が起きたものと入れ替えるという流れで対応するのがまあ定石です

kubernetesで

今回、はkubernetesクラスタにおいて

  • deployment(replicaset)が展開している複数のpodのうちひとつが、何らかの原因でエラーを返すようになってしまった
  • readinessProbeは通っていて、問題の起きたpodへのトラフィックは止まらない

という状況で、問題の起きたpodを削除するのではなく、残したまま隔離して復旧させます

手順

これは正規の手順ではないので自己責任でお願いします

  • 問題の起きたpod(以下A)の名前を取得
  • kubectl edit でAを編集する
    • Aにトラフィックを流してるserviceのspec.selectorに一致しなくなるようにmetadata.labelsを変更する
      • app: myappapp: myapp-broken にするなど
  • 編集を保存すると、Aはdeploymentから外れた感じになり、勝手に新しいpodが補充される
    • もうAにトラフィックが流れなくなっているので、煮るなり焼くなり
  • 不要になったら手動でAを削除する
    • これを忘れるとゴミとして残り続ける

注意

設定次第では隔離したpodのログやメトリクスが保存できないことがあるので注意してください
podのlabelを変更すると、.metadata.ownerReferencesが消えるっぽいです


正しくやろうと思ったら、同じ内容で名前とlabelを変えたdeploymentを用意してserviceのselectorを変更して…みたいな流れになるんでしょうか
ちゃんと検証してクラスタの管理方法に合わせて手順をしっかり固めたいボリュームですね

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?