ヤフーで使われる500以上の
Kubernetesクラスタの運用を支える技術 / How we manage over 500 Kubernetes clusters in Yahoo! JAPAN

9f9df80ab6551776b49c4ad9432ba1b7?s=47 Kazuki Suda
December 13, 2019

ヤフーで使われる500以上の
Kubernetesクラスタの運用を支える技術 / How we manage over 500 Kubernetes clusters in Yahoo! JAPAN

Mini talk at Yahoo! JAPAN Tech Conference 2019 in Shibuya - https://techconference.yahoo.co.jp/2019_shibuya/

9f9df80ab6551776b49c4ad9432ba1b7?s=128

Kazuki Suda

December 13, 2019
Tweet

Transcript

  1. Yahoo! JAPAN Tech Conference 2019 in Shibuya (2019/12/13) SUDA Kazuki

    <ksuda@zlab.co.jp>, @superbrothers INAZU Kazuma <kinadu@zlab.co.jp>, @ina_ani ヤフーで使われる500以上の Kubernetesクラスタの運⽤を⽀える技術
  2. SUDA Kazuki / @superbrothers ▶ ヤフー株式会社 黒帯「Kubernetes」 ▶ Kubernetes Meetup

    Tokyo 共同主催者 ▶ 「Kubernetes実践⼊⾨」、「みんなのDocker/Kubernetes」共著書 ▶ 「⼊⾨ Prometheus」監訳書 INAZU Kazuma / @inajob ▶ 趣味は電⼦⼯作で⾃宅に3Dプリンタを持っている ▶ 「Kubernetes実践⼊⾨」、「みんなのDocker/Kubernetes」共著書
  3. ゼットラボ株式会社 / Z Lab Corporation ▶ 2015年に設⽴されたヤフー株式会社の100%⼦会社 ▶ インフラ基盤技術の調査・研究開発 ▶

    ヤフー株式会社向けのマネージド Kubernetes サービスの開発 ▶ https://zlab.co.jp/
  4. Kubernetes ▶ コンテナオーケストレーションツール + 複数のマシン(ノード)で構成されるクラスタに対して コンテナ(アプリケーション)の配備、設定、管理を⾏う ▶ Google の社内システムからインスパイアされた “Kubernetes

    is open source—a contrast to Borg and Omega,
 which were developed as purely Google-internal systems. “ Borg, Omega, and Kubernetes
  5. ロードバランサ 永続ストレージ ホスト コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ ホスト

    ナ コンテナ ナ コンテナ ナ コンテナ ホスト コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ ホスト コンテナ コ コンテナ コ コンテナ コ Kubernetes デプロイ戦略 ネットワーク
  6. BARE METAL

  7. Kubernetes のアーキテクチャ Node Networking kubelet Container Runtime OS Master component

    etcd apiserver controller-manager scheduler kubectl REST
  8. Kubernetes クラスタのオペレーション ▶ 開発者からのクラスタの作成、削除、設定変更に即座に対応しないければならない ▶ 開発者からのノード (VM) の追加・削除の要望に即座に対応しなければならない ▶ 3ヶ⽉に1度マイナーバージョンリリースがあり積極的にアップグレードしないといけない

    + サポートバージョンは3マイナーバージョン(9ヶ⽉) ▶ ノードは毎⽇どこかで壊れるので復旧しなければならない ▶ データストア (etcd) が壊れたときに備えてバックアップ、リストアできないといけない ▶ ノードのカーネルに脆弱性が報告されたら即⽇ですべてのカーネルを更新しないといけない Kubernetes はコンテナ化されたアプリケーションの運⽤に⼤きなメリットがある⼀⽅で クラスタの運⽤には多くのオペレーションが必要になる。 1, 2つのクラスタなら温かみのある⼿運⽤も可能だけど、500+ クラスタ、8000+ ノードでは無理
  9. 煩雑な Kubernetes クラスタのオペレーション ▶ 多くの煩雑なオペレーションも⼿順としてはシンプル ▶ Yahoo! JAPAN は国内外に複数のデータセンタを持ち、数万台規模のサーバの オペレーションが必要になる

    ⼈間のやる仕事じゃない。ソフトウェアにやらせる。 AUTOMATE ALL THE THINGS
  10. None
  11. Kubernetes Operator ▶ Kubernetes のユーザに変わって複雑なステートフルアプリケーションのインスタンスを作成、 スケール、アップグレード、設定変更などを⾏うコントローラ ▶ 基本的な Kubernetes のリソースとコントローラの概念をもとにして、Kubernetes

    の拡張機能を 活⽤しアプリケーション固有の運⽤ナレッジをソフトウェアとしてプログラムする An Operator represents human operational knowledge in software to reliably manage an application. Introducing Operators: Putting Operational Knowledge into Software | CoreOS (2016/11/6)
  12. Kubernetes の⼤きな特徴の1つが拡張性 ▶ CustomResourceDefinitions (CRD) + Kubernetes に任意のリソースタイプを追加する ▶ カスタムコントローラ

    + Kubernetes に任意のビジネスロジックを追加する
  13. Site Reliability Engineering: ソフトウェアを書くことでアプリケーションを運⽤に⾃動化をもたらすロール “したがってSREは、これまで運⽤チームが⾏ってきたことを ソフトウェアの専⾨性を持つエンジニアが⾏い、エンジニア が⼈⼿による管理を⾃動化するソフトウェアを設計し実装す る能⼒を持ち、それをいとわないということから成り⽴って います。” https://www.oreilly.co.jp/books/9784873117911/

  14. Kubernetes Operators in the Wild ▶ coreos/etcd-operator + Create/configure/manage etcd

    clusters atop Kubernetes ▶ coreos/prometheus-operator + Create/configure/manage Prometheus clusters atop Kubernetes ▶ rook/rook + Storage Orchestration for Kubernetes / Ceph / CockroachDB ▶ oracle/mysql-operator + Create, operate and scale self-healing MySQL clusters in Kubernetes ▶ kubeflow/tf-operator + Tools for ML/Tensorflow on Kubernetes https://github.com/operator-framework/awesome-operators
  15. Kubernetes の拡張機能を⽤いて Kubernetes クラスタを管理 Kubernetes-as-a-Service on Kubernetes

  16. Kubernetes-as-a-Service クラスタ master ノード kube-apiserver Custom Resources ノード X カスタムコントローラ

    ウォッチ 作成と管理 kubectl CLI クラスタの作成と管理 クラスタの操作
  17. Kubernetes-as-a-Service の主な機能 ▶ セルフサービスでのクラスタの作成、削除、設定変更 ▶ クラスタのセルフヒーリング + 障害の発⽣したノードを⾃動的に切り離し、新しいノードを追加する ▶ クラスタのスケールアウト・スケールイン

    + ノード数の1コマンドでの変更 ▶ クラスタの⾃動アップグレード + ノーダウンタイム、ローリングアップデート ▶ etcd クラスタの⾃動バックアップ・リストア + ディザスタリカバリ
  18. クラスタのセルフヒーリング 障害の発⽣したノードをクラスタから⾃動的に削除し、新たに必要なノードを クラスタに追加する。 ノード 1 ノード 2 ノード 3 KaaS

    追加 削除
  19. クラスタのローリングアップデート ⼀定数のノードを順々にアップグレードしていくことで、 クラスタの無停⽌アップグレードを実現している。 v1.15.0 v1.15.0 v1.16.2 KaaS 追加 v1.15.0 v1.15.0

    v1.16.2 KaaS 削除
  20. https://speakerdeck.com/superbrothers/the-technology-behind-managed-kubernetes-service-of-yahoo-japan https://speakerdeck.com/shmurata/how-we-accomplish-noops-by-kubernetes-operator

  21. Thanks