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

オンプレ Kubernetes クラスタの全サーバーを宣言的に再起動する方法

オンプレ Kubernetes クラスタの全サーバーを宣言的に再起動する方法

F0946f92e3b4567014f5b804f7eace7f?s=128

Daichi Sakaue

January 21, 2021
Tweet

Transcript

  1. オンプレ Kubernetes クラスタの全サーバーを 宣⾔的に再起動する⽅法 2021/01/21 yokaze (Cybozu, Inc.)

  2. ⾃⼰紹介 ▌@yokaze l Cybozu l Kubernetes クラスタの運⽤ ▌今⽇の内容は技術ブログのダイジェスト版 l 詳細に興味がある⽅は

    https://blog.cybozu.io/entry/2020/12/25/134334
  3. Kubernetes クラスタの全ノードを再起動したい ▌⽬的 l ファームウェア更新 l 多くの場合、更新後に再起動が必要 l セキュリティ対応 l

    アプリの耐障害性の確認 l カオスエンジニアリング ▌条件 l クラスタ上で動いているサービスを⽌めない l ⼿作業で複雑なオペレーションをしない
  4. 簡単な⽅法 ▌サービスのバックエンドは冗⻑化されているので Pod を 1 個消しても動く ようになっている ▌ノード 1 を再起動(終わるまで待つ)

    ▌ノード 2 を再起動(終わるまで待つ) ▌… ▌⼿でやると永遠に終わらない
  5. 簡単な⽅法 ▌サービスのバックエンドは冗⻑化されているので Pod を 1 個消しても動く ようになっている ▌ノード 1 を再起動(終わるまで待つ)

    ▌ノード 2 を再起動(終わるまで待つ) ▌… ▌⼿でやると永遠に終わらない
  6. 簡単な⽅法 ▌サービスのバックエンドは冗⻑化されているので Pod を 1 個消しても動く ようになっている ▌ノード 1 を再起動(終わるまで待つ)

    ▌ノード 2 を再起動(終わるまで待つ) ▌… ▌⼿でやると永遠に終わらない
  7. 簡単な⽅法 ▌サービスのバックエンドは冗⻑化されているので Pod を 1 個消しても動く ようになっている ▌ノード 1 を再起動(終わるまで待つ)

    ▌ノード 2 を再起動(終わるまで待つ) ▌… ▌⼿でやると永遠に終わらない
  8. 実装した⽅法 ▌クラスタ管理ツール (CKE) に再起動待ちキューを実装する ▌「再起動待ちキューに全てのノードを追加するコマンド」を作る ▌トラブル発⽣時はアラートを発⽕させる l ⼈⼿で進捗を確認しなくてよい l コマンド⼊⼒後、⼈間が即座に解放される

    Kubernetes クラスタ
  9. その他注意点 ▌サービスを壊さないよう PodDisruptionBudget と Eviction API を 活⽤する l Pod

    が Eviction できない場合は時間をおいてリトライする l ⼀定時間経つとアラートも鳴る ▌多少再起動に失敗したサーバーがあっても動作を続ける l アラートは鳴る ▌⼀時停⽌ボタンを付けておく
  10. そもそもどうして⼀台ずつ再起動するのか ▌適当に複数台選ぶと運悪く特定 サービスの Pod が集中することが ある

  11. そもそもどうして⼀台ずつ再起動するのか ▌適当に複数台選ぶと運悪く特定 サービスの Pod が集中することが ある ▌ノードをグループ分けしておき、 Pod に anti-affinity

    を付けて 分散させる ▌ノード数が超多い時はこういった 対策をする必要がある