---
title: Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
tags:  #yjtc  
author: [Yahoo!デベロッパーネットワーク](https://convert.docswell.com/user/ydnjp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GY793VGY73.jpg?width=480
description: 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
published: February 02, 22
canonical: https://convert.docswell.com/s/ydnjp/5JRLXK-2022-02-02-151213
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GY793VGY73.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/5G78MPVK7D.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/ML7L315PER.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/54EMDW32EW.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/ZPER4YQ5E9.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/NP7X2G5XJX.jpg)

ヤフーの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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/637KM469ED.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4LJ3YL6975.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/V8JD5NV8JG.jpg)

ヤフーの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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4VEPG5VWE8.jpg)

ヤフーの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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/L27V6PZ9JQ.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/Z5JGNP44EL.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/V47QQ2GR7P.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/DKE4NL5QJ1.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/PL715LWLJG.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/8G7W5V6QE2.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/W4JZN4Y3J3.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/KYE683DZJV.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/5GE59L3974.jpg)

アップデートの⾃動化へ
改善例: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


# Page. 20

![Page Image](https://bcdn.docswell.com/page/V9722LZ57R.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/5DJYYQR6JM.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/2V7NPKX1E8.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/GYJ93V8YJ3.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/5GJ8MP8KJD.jpg)

©2022 Yahoo Japan Corporation All rights reserved.


