Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc

3.6K Views

February 02, 22

スライド概要

Yahoo! JAPANのIaaS基盤では200超のOpenStackクラスタが稼働しており、それらのコントロールプレーンをKubernetes上にデプロイしています。IaaSチームで管理している十数のKubernetesクラスタは古いバージョンのまま運用が続けられていたため、現在、段階的にバージョンアップおよびその自動化に取り組んでいます。このようなクラスタ群をメンテナンスする中で、工夫した点や失敗した点、得られた知見を紹介します。

Yahoo! JAPAN Tech Conference 2022は2022年2月3日、4日に開催しました。
https://techconference.yahoo.co.jp/2022/

アーカイブ動画はこちらからご覧ください。
https://youtu.be/F5EQqWOw8So

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Yahoo! JAPANのIaaSを⽀えるKubernetesクラスタ、 アップデート⾃動化への挑戦 ヤフー株式会社 システム統括本部クラウドプラットフォーム本部技術1部 ©2022 Yahoo Japan Corporation All rights reserved. ⾼橋陽太

2.

⾼橋陽太 クラウドプラットフォーム本部 技術1部 2020年新卒⼊社 普段はOpenStackと運⽤に利⽤するKubernetesや 監視システムなどの開発運⽤に携わっています。 ©2022 Yahoo Japan Corporation All rights reserved.

3.

このセッションについて ヤフーのIaaSとして200を超えるOpenStackクラスタ。 これらのコントロールプレーンを稼働させるKubernetesの アップデート作業を通して得た知⾒などについてご紹介いたします。 ©2022 Yahoo Japan Corporation All rights reserved.

4.

アジェンダ 1. ヤフーのIaaS構成 2. Kubernetesクラスタのアップデート 3. アップデートの⾃動化へ ©2022 Yahoo Japan Corporation All rights reserved.

5.

ヤフーのIaaSの構成 ©2022 Yahoo Japan Corporation All rights reserved.

6.

ヤフーのIaaS構成 ヤフーのIaaSについて ヤフーでは⾃社でIaaS(Infrastructure as a Service)を構築・運⽤ サーバや、ネットワーク、ストレージを仮想化してユーザに提供 IaaS上で様々なサービスが稼働 • 社内・外向けの各サービス • CaaS(Container as a Service), PaaS(Platform as a Service)などの社内プラットフォーム 各サービス CaaS(ZCP) PaaS IaaS ©2022 Yahoo Japan Corporation All rights reserved. 各サービス 6

7.

ヤフーのIaaS構成 IaaSの規模感 IaaS基盤としてOpenStackを利⽤ クラスタ数︓200+ HV数︓21,000+ VM数︓170,000+ ヤフーではこれらは⾃社データセンターにてオンプレミスで構築 ©2022 Yahoo Japan Corporation All rights reserved. 7

8.

ヤフーのIaaS構成 IaaSの運⽤ OpenStackクラスタは様々なコンポーネントで構成される • nova(コンピュート), neutron(ネットワーク), keystone(認証)など それが200クラスタ以上あるので効率的な管理が必要 クラスタ数やコンポーネントの多さはKubernetesを利⽤してカバー ©2022 Yahoo Japan Corporation All rights reserved. 8

9.

ヤフーのIaaS構成 Kubernetesを⽤いた構成 クラスタB OpenStackクラスタA VM VM VM VM HV Jenkins Helmによる リソース展開 glance nova glance neutron keystone neutron VM VM HV glance neutron cinder RabbitMQ 各OpenStackクラスタのコントロールプレーン (namespace) 各クラスタのパラメータを設定 ©2022 Yahoo Japan Corporation All rights reserved. node 1 node 2 node … 9

10.

ヤフーのIaaS構成 Kubernetesを⽤いた構成 クラスタB OpenStackクラスタA IaaS運⽤のためのk8s VM VM VM VM HV HV クラスタ数︓10+ Jenkins Helmによる リソース展開 glance nova glance neutron keystone neutron glance neutron RabbitMQ cinder Node数︓400+ 各OpenStackクラスタのコントロールプレーン (namespace) 各クラスタのパラメータを設定 ©2022 Yahoo Japan Corporation All rights reserved. node 1 node 2 VM node … VM

11.

Kubernetesクラスタのアップデート ©2022 Yahoo Japan Corporation All rights reserved.

12.

Kubernetesクラスタのアップデート Kubernetesの運⽤ IaaS導⼊期で安定稼働が求められたため、古いバージョンで⻑期間運⽤されていた • Kubernetes 1.8 • 構成管理ツールを利⽤した独⾃のデプロイ • オンプレ上に構築 しかしIaaSの成⻑とともにKubernetes利⽤もさらに拡⼤ • 脆弱性対応 • 周辺ツールやAPIの変化 Kubernetesクラスタのアップデートに踏み切ることに ©2022 Yahoo Japan Corporation All rights reserved. 12

13.

Kubernetesクラスタのアップデート クラスタのアップデートスタイル IaaSチームでは運⽤管理にChefを利⽤ • ノードでChefを実⾏することにより、定義された状態に更新される 事前準備 • 必要パッケージをリポジトリサーバに配置 • Cookbookを更新 ⼿順 1. drainを実⾏してpodを退避 2. 対象ノードでChefを実⾏ 3. uncordonしてクラスタに戻す ©2022 Yahoo Japan Corporation All rights reserved. 13

14.

Kubernetesクラスタのアップデート アップデート⽅法 OpenStackクラスタの稼働するノードを考慮して担当者を決める その後各⾃⼿動で実⾏していた (1ノードあたりの時間 × 全体のノード数) / 分割数 = アップデートに必要な時間 例 (40分 × 50ノード)/3⼈ = 11時間 → 最新に追いつくために⾃動化へ。 node_1 node_4 node_7 node_2 node_5 node_8 node_3 node_6 node_9 OpenStack A OpenStack B OpenStack A担当 ©2022 Yahoo Japan Corporation All rights reserved. OpenStack C OpenStack B担当 OpenStack C担当 14

15.

アップデートの⾃動化へ ©2022 Yahoo Japan Corporation All rights reserved.

16.

アップデートの⾃動化へ アップデートの推移 手動 1.10 ⼿動アップデートから徐々に⾃動化 しかし.. • テスト環境で実装したシナリオが、環境によってうまく 動作しない • 1.12 1.14 実⾏に時間がかかりすぎる 1.15 などの問題が明らかに つまづいたり、問題になった箇所はコードとして残す 全自動化へ ©2022 Yahoo Japan Corporation All rights reserved. 1.8 1.17 1.19 16

17.

アップデートの⾃動化へ Fabricによるアップデートの⾃動化 Fabric: コマンドをssh経由でリモート実⾏できるタスクランナー 事前に実装したシナリオに沿ってアップデートを実⾏ シナリオ例 1. サービスの起動確認 2. Kubernetes関連のバージョン確認 3. Nodeのdrain実⾏ 4. Chefの実⾏ 5. 正常性の確認 ©2022 Yahoo Japan Corporation All rights reserved. ssh 17

18.

アップデートの⾃動化へ 改善例:1 正常性の確認 アップデート中のクラスタでPodに異常がないか確認したい -> 正常性確認ツールの実装 → クラスタ内のPodを⾃動収集 PodのCrash Loop → Podへ定期的にpingを送信、可視化 Podへの通信到達性 を認識可能に ©2022 Yahoo Japan Corporation All rights reserved. 18

19.

アップデートの⾃動化へ 改善例:2 アップデート中のE2Eテストの導⼊ 問題 アップデート実⾏中に、VMが作成できない状態であることにユーザからの問い合わせで気づく create ① ssh(Chef 適用) ② yum update ③ kubectl drain VM作成シナリオの E2Eテスト導入 ① ssh(Chef 適用) ② yum update & E2Eテスト ③ kubectl drain delete 時間のかかる処理時に並列してテストを実⾏ アップデート中にOpenStackのE2Eテストを実施 失敗した場合はアップデートを停⽌ ©2022 Yahoo Japan Corporation All rights reserved. 19

20.

アップデートの⾃動化へ 改善例:3 アップデート順序の制御・並列化 1ノードのアップデートに必要な時間は約40分 50ノードあるクラスタでは 40分×50ノード = 33.3時間 ⾃動化の際に、並列でアップデート作業をしたいが 直列でのアップデートが求められるケースも有る アップデート時にyamlで順序・並列を制御可能に ©2022 Yahoo Japan Corporation All rights reserved. 20

21.

アップデートの⾃動化へ 今後の主な取り組み: 障害をいち早く検知 アップデート中の失敗を⾒過ごすと、⾃動化よって障害箇所が広がっていく -> サービスに影響が出る APIやCLIから確認できるノードのステータスは確認している • 筐体への疎通 • 利⽤しているCNI Plugin(Calico)のpodやBGPのステータス などなど ©2022 Yahoo Japan Corporation All rights reserved. 21

22.

アップデートの⾃動化へ 今後の主な取り組み: 障害をいち早く検知 Fabricでは取得しにくいクラスタ内部のネットワー クステータスを確認したい ネットワークステータスを把握するためのコンテナ を実装 • 健全性をひと⽬で確認 • アップデート以外の運⽤時にも活⽤できる ©2022 Yahoo Japan Corporation All rights reserved. 22

23.

アップデートの⾃動化へ アップデート作業の学び・まとめ ヤフーでは⼤規模IaaSの運⽤基盤としてKubernetesを利⽤ ⾃動化のためにまずは作業をコードに • ナレッジを蓄積できる環境を作る • ⾃動化には継続的な改善が必要 問題に気づける仕組みづくり及び、正常な状態の定義の重要性 • これを⾶ばしてのアップデートの⾃動化は危険 ©2022 Yahoo Japan Corporation All rights reserved. 23

24.

©2022 Yahoo Japan Corporation All rights reserved.