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

2023年度版! Chatwork流Kubernetesの運用方法

hanayo04
December 07, 2023

2023年度版! Chatwork流Kubernetesの運用方法

2023/12/6に「耐障害性向上・パフォーマンス改善・運用負荷軽減をどう実現する? 事業を支えるSREのノウハウを共有」でお話しした際の資料です。

hanayo04

December 07, 2023
Tweet

Other Decks in Technology

Transcript

  1. © Chatwork
    2023年度版!
    Chatwork流Kubernetesの運用方法
    2023年12月06日 SRE部 桝谷花世
    Chatwork株式会社

    View full-size slide

  2. 自己紹介
    2
    桝谷 花世(Masutani Hanayo)
    ~2023/9 SIerにて主にインフラ領域を担当
    2023/10~ Chatwork株式会社に入社。
    SRE部にて主にChatworkのKubernetes周辺を日々勉強中
    趣味: ディズニー(よく一眼持ってパークにいます)
       BTS(最近韓国語会話を習い始めました)

    View full-size slide

  3. 「Chatwork」とは
    3
    効率的に情報共有できる
    グループチャット
    仕事の見える化ができる
    タスク管理
    見落としがなくなる
    ファイル管理
    いつでも会議ができる
    ビデオ/音声通話
    導入社数
    42.1万社以上のビジネスチャット!
    (2023年9月末日時点)

    View full-size slide

  4. 求められること
    4
    安定稼働
    コストの最適化
    アジリティの向上

    View full-size slide

  5. 安定稼働
    コストの最適化
    アジリティの向上
    求められること
    5

    View full-size slide

  6. 「Chatwork」の特徴
    6
    夜間と日中でアクセス数の差が大きい
    (ある1日のアクセス数の遷移)
    MAXを想定して常に待機しておくのはコストがもったいない

    View full-size slide

  7. 課題
    7
    (ある1日のPodの数の遷移)
    Kubernetes(EKS on EC2)を使ってPodをAutoScaleさせてます!
    Podがスケールアウトされる際に、EC2の起動を待っているとス
    ケールが間に合わず不安定になってしまう
    課題① EC2の台数が増加し、コストも高くなってしまう
    課題②

    View full-size slide

  8. 取り組み①EC2のコスト削減
    EC2の台数が増加し、コストも高くなってしまう
    課題①
    スポットインスタンスが以前より安定した
    「Chatwork」 Appはステートレス
    EKSのNodeにEC2スポットインスタンスを導入し、コストを削減
    EC2の種類
     オンデマンド: 時間課金制。通常時はオンデマンドで起動。
     リザーブド: 年単位で購入。需要が固定されているシステムに適している。
     スポット: AWS上で使われていない余剰インスタンスを使用。一番低価格だが、入札金額が
    スポット料金を下回ると停止する。

    View full-size slide

  9. 取り組み②balloon✖Cluster Autoscaler
    9
    Podがスケールアウトされる際に、EC2の起動を待っているとス
    ケールが間に合わず不安定になってしまう
    課題②
    CPU
    60%
    CPU
    60%
    CPU
    40%
    CPU
    40%
    CPU
    40%
    HPA
    CPU使用率が
    50%を超えてい
    るのでPodを
    増やします
    もうPodを起動
    する余力ないの
    でNodeを追加し
    ます
    CA
    Node(EC2)の起動に数分かかってしまう

    View full-size slide

  10. 取り組み②balloon✖Cluster Autoscaler
    balloonであらかじめ余剰Nodeを確保!
    balloonとは・・・
    SRE部の坂本さんが作った余剰ノードを確保しておくための仕組み
    1 balloon Pod 2.5 「Chatwork」App Pod
    通常時は5Pod、繁忙時間帯は8Pod起動させている
    priorityを通常より低くしておくことで、
    「Chatwork」Appの起動時に余剰がない場合はballoon Podをkillして
    空いたリソースに「Chatwork」Appを起動することが出来る
    参考: 今回紹介していないk8sのツールについては坂本さんのブログへ!
    ( https://creators-note.chatwork.com/entry/2020/12/23/100000 )

    View full-size slide

  11. 取り組み②balloon✖Cluster Autoscaler
    balloonであらかじめ余剰Nodeを確保!
    CPU
    60%
    CPU
    60%
    CPU
    40%
    CPU
    40%
    CPU
    40%
    HPA
    CPU使用率が
    50%を超えてい
    るのでPodを
    増やします
    balloon
    balloon Podを起
    動する余力ない
    のでNodeを追加
    します
    CA
    サービスが不安定になることなくスケールが可能に!

    View full-size slide

  12. (Appendix)何でKarpenterを使わないのか
    Karpenterとは・・・
     AWSが提供しているK8sクラスターオートスケーラー
    特徴
     ・ASGを使用せず、EC2のAPIを直接叩いて起動
     ・K8s schedulerを使用せずに起動したEC2にKarpenterがPodを配置
    CAのオーバーヘッドを少しでも減らしてNodeの起動だけの時間に節約
    「Chatwork」では以下の理由からKarpenterを選択していない
     ・eksctlのNode GroupとKarpenterのprovisionerのダブルメンテが必要になっ
    てしまう
     ・起動に数分かかるのでアグレッシブにNodeを増減させる場合は
    balloon✖Cluster Autoscalerの方が適している

    View full-size slide

  13. 安定稼働
    コストの最適化
    アジリティの向上
    求められること
    13

    View full-size slide

  14. 毎日本番リリースしてます
    14
    詳しくは過去の古屋さんの登壇資料へ!
    ( https://pages.awscloud.com/rs/112-TZM-766/images/20220804-AWS-kubernetes_3_Chatwork.pdf )
    App
    Manifest
    EKS(app)
    EKS
    (manager)
    Manifest
    1.Master merge
    3.Push
    2.Build
    4.Update
    5. Polling
    7.Apply
    開発者
    6. Press the Sync button
    SREが間に入ることなく、開発チームが好きな時にリリースしている

    View full-size slide

  15. 15
    しかし、
    気軽に本番リリースが出来るだけでは
    アジリティは向上しません。
    開発者が開発しやすい環境が必要です!

    View full-size slide

  16. 取り組み①
    16
    検証時にSREがボトルネックにならない運用

    View full-size slide

  17. 取り組み①検証時にSREがボトルネックにならない運用
    17
    当初は、検証環境と本番環境が同じAWSアカウント上に。
    開発チーム
    検証のために
    Route53の設定を
    変更してほしいな
    SREチーム
    OK!
    でも忙しいから少し
    時間ください・・・
    開発チーム
    いつ変更される
    かな・・・
    開発チームに必要な操作権限がなく、
    検証が開発チーム内で完結せず、時間がかかってしまう

    View full-size slide

  18. 取り組み①検証時にSREがボトルネックにならない運用
    18
    検証時は開発チームに強い権限を付与出来るように、
    本番アカウントと検証アカウントを分けよう!
    検証のスピードがupし開発者体験が向上!
    開発チーム
    検証のために
    Route53の設定を
    変更したい
    開発チーム
    変更してみよう!
    開発チーム
    うまく行った!
    よし本実装して
    リリースだ!

    View full-size slide

  19. 取り組み②
    19
    自分専用の使い捨て検証環境の構築

    View full-size slide

  20. 取り組み②自分専用の使い捨て環境の構築
    20
    当初は検証用の環境が1つしかなかった
    開発チーム
    このコードAWS上
    で動かして確認し
    たい
    開発チーム
    今って
    検証環境誰も使って
    ないかな
    開発チーム
    では、今から僕が
    占有します
    検証環境の使用タイミングの調整や待ちが発生していて開発効率が低下

    View full-size slide

  21. 取り組み②自分専用の使い捨て環境の構築
    21
    PR上でコメントをするだけで自分専用の検証環境が構築可能
    必要なラベルを付けて
    /test-tag
    とPR上でコメントをするだけで
    少し待っていれば
    自分専用の環境が払い出される!
    環境が払い出されたら
    URLが「Chatwork」上に投稿される
    環境の調整が不要になり開発者体験が向上!

    View full-size slide

  22. 取り組み②自分専用の使い捨て環境の構築
    22
    詳しくは古屋さんのブログへ!( https://creators-note.chatwork.com/entry/2023/09/11/190000 )
    App PR
    Manifest PR
    EKS(app)
    EKS
    (manager)
    Manifest
    3.Push
    2.Build
    4.Create PR
    5. Polling
    6.Apply
    開発者
    1.Comment

    View full-size slide

  23. 23
    Appは
    開発チーム内で
    自由に
    本番リリース可
    検証は
    開発チーム内で
    自由に
    AWSリソース
    の構築可
    検証用に
    開発チーム内で
    自分専用の環境
    の構築可
    残るは開発・本番へのAWSリソースの構築
    もちろんSREが介入せずに開発チーム内で構築できます!!

    View full-size slide

  24. 取り組み③開発チームで安全にAWSリソースを構築
    24
    Terraform✖AtlantisでPRベースでAWSリソースを構築
    atlantis apply
    とコメントすると
    atlantisさんが
    Terraformを実行してくれる

    View full-size slide

  25. 取り組み③開発チームで安全にAWSリソースを構築
    25
    SREが関与することなく開発チーム内で安全に構築ができる
    詳しくは古屋さんの登壇資料へ!
    ( https://speakerdeck.com/saramune/gabanansuxiang-shang-wei-yuan-hui-with-opa)
    Terraform
    PR
    EKS
    2.Pull
    開発者
    1.Comment
    3.Check
    4.Apply

    View full-size slide

  26. まとめ
    26
    まだまだ課題はいっぱいあるので
    引き続きより良いサービスになるよう改善していきます!
    直近は
     EKSのE2Eテストの導入
     ArgoRolloutsの導入
    に挑戦中
    色々な取り組みをすることで
    コストの最適化・安定稼働・アジリティの向上
    を実現することが出来てきた

    View full-size slide

  27. 詳細はAdventCalenderに
    27
    12/9に本日の内容をChatwork Advent Calendar 2023に投稿するので
    良かったら参考にしてください⭐
    12/16はSREチームリーダー
    の古屋さんが先日行ったSRE
    部の合宿について投稿するの
    でこっちも良かったら!

    View full-size slide

  28. 働くをもっと楽しく、創造的に

    View full-size slide