2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
坂下幸徳氏(以下、坂下):では発表を始めたいと思います。『ヤフー/ゼットラボのステートフルアプリケーションへの挑戦』と題しまして発表いたします。
本日のアジェンダです。まず前半は私からKubernetes as a Service向けステートフルサービスの実現と題しまして発表します。後半はヤフーの飯田からステートフルアプリケーションの事例を紹介します。
まず簡単に私の自己紹介をします。坂下と申します。ゼットラボで働いています。SNIAというストレージの業界団体の日本支部の技術委員会の副委員長も務めています。またアメリカにあるSNIA本部の全テクニカルワーキンググループの取りまとめをしているTechnical Councilにも所属しています。
私はよくストレージ屋さんと言われがちなんですが、ストレージをちょっと知っている運用管理技術屋さんです。前職は日立製作所の研究所に勤めていました。ゼットラボに転職前はシリコンバレーにある海外のラボのラボ長なんかも務めていました。
ではここから紹介していきたいと思います。まずヤフーとゼットラボが作るKubernetes as a Service、こちらについて紹介いたします。
ご存知の方も多いかと思いますが、まずヤフーについて簡単に紹介します。ヤフーは、Yahoo!ニュースですとか、ヤフオク、天気など100以上のWebサービスを提供しています。日本国内に5拠点、アメリカに2拠点のデータセンターをもっています。
このデータセンターでOpenStackやKubernetesなどを活用したプライベートクラウドを構築し、その上でWebサービスを構築、サービス展開しています。
次にゼットラボについて紹介します。ゼットラボは2015年に設立されたヤフー株式会社の100パーセント子会社です。ヤフーの次世代インフラを研究開発しています。ヤフー向けにKubernetes as a Service、我々はCaaSと呼んでいるのですが、このCaaSを開発しています。
ここでヤフーとゼットラボの体制について紹介します。ゼットラボはCaaSを開発し、ヤフーに提供しています。ヤフーのCaaS管理者、こちらのメンバーが実際にKubernetesを払い出し、Kubernetesの利用者、Webのサービスの開発者たちにKubernetesを提供しサポートしてくれています。さらにゼットラボは、この利用者向けにも設計相談や技術セミナーを実施しています。
またこのCaaSを支えるインフラとしてサーバー、ネットワーク、ストレージなどがありますが、それぞれのチームに対してもゼットラボではCaaS向けにインフラの評価や構成を検討しています。
場合によってはヤフーのメンバーとともに外部のベンダーに要望や問い合わせなども行っています。このような体制で我々はヤフーに対してCaaSを提供しサポートしています。
次にゼットラボにて開発してヤフーで運用してくれているKubernetes as a Service、こちらについて紹介します。ご存知の方も多いかと思いますが、Yahoo! JAPANのWebサービスの一部は現在Kubernetes上で稼働しています。
さらにこのKubernetes。よく言われていますが、管理は非常に難しくて大変です。そこで我々ゼットラボでは、ヤフーのメンバーが容易に管理できるようにマネージドなKubernetesサービスとしてKubernetes as a Service、CaaSを提供しています。2017年8月にベータを提供し、2018年8月にGAとしてサービスインしています。現在ヤフーのメインとなる2つのリージョンのデータセンターでこれが稼働しています。
このCaaS、社内でも非常に好評で、2020年5月の段階で現在680以上のKubernetesクラスタを払い出しています。ヤフーのWebサービスの利用している開発チーム数としては210チーム以上が利用しています。またKubernetesを構成するNode、我々だとVMなのですが、この数は1万3000以上です。コンテナの数は非常に多いですね。12万以上と非常に多い数が使われています。
次に簡単にCaaSのアーキテクチャについて紹介します。CaaSはKubernetesのCRDとカスタムコントローラー活用して開発しています。左側のこのKubernetes、こちらがOpenStackのAPIを通じてVMを管理します。その後、左側のKubernetesがVM上にまたKubernetesのクラスタをセットアップします。アプリケーションの開発者はこちらの上側のKubernetesを使い、コンテナを実行しサービス展開しています。
CaaSはいくつかパワフルな機能をもっているのですが、ここでは代表的な機能をいくつか紹介します。1つ目はセルフヒーリングです。VMが壊れたことを左側のKubernetesが検知すると、セルフヒーリングのフレームワークに従ってVMを再作成します。さらにこの壊れたVMと新しいVMをリプレイスするということでKubernetesクラスタ自体のセルフヒーリングを実現しています。
次はスケーリングです。右側のこちらのKubernetesでリソース不足が発生した場合、OpenStackを通じて新しいVMを追加します。その後このKubernetesクラスタにVM(Node)を追加するということで、Kubernetesのクラスタ自体のスケーリングをサポートしています。
通常Kubernetesですと、Podのスケールアウトを実現していますが、CaaSではKubernetesクラスタ自体もスケールできるようになっています。またこのようにVMの作成追加を行うようにすることで、サービスを止めることなくVMのセキュリティパッチやOSなどのアップデートが可能となります。
次の特徴として、Addon-managerがあります。これはKubernetesのAddon-managerの仕組みを利用し、ゼットラボにて開発しているものです。Grafana、Prometheusなどみんなが使うであろうアプリケーションを提供しています。
提供するアプリはゼットラボにて開発のGrafanaダッシュボードやアラートルールなども組み込み、パッケージ化して配布しています。これによりユーザーはCaaSを使い、Kubernetesクラスタを作成した直後からGrafanaのダッシュボードでKubernetesの監視ができ、アラートも受け取ることができます。
また独自のAddon-managerは、Kubernetesのバージョンがアップデートされると、それに合わせて配布するアプリもアップデートするようにしています。
ここでCaaSの特徴を簡単に整理して紹介します。まずCaaSを使うことで、コマンド1つでVM作成からKubernetesのクラスタの作成までを行うことが可能です。また先ほど説明したアーキテクチャを使い、サービス無停止でKubernetesクラスタ自体のローリングアップデートが可能です。これにより3ヶ月に1回のKubernetesのアップデートにも追随可能です。
またNodeを再作成しますので、NodeのOSのセキュリティパッチなどにも対応が容易です。これは個人的な感想なのですが、このように日頃からNodeを作り直すということを当たり前にするということで、障害に強いヤフーのWebサービスを実現できているのではないかと感じています。
そのほかとしては先ほど紹介したKubernetesクラスタのセルフヒーリングやスケールアウト/スケールイン、Addon-managerによるアプリケーションのデプロイ/アップデートがあります。
2019年までは、CaaSではステートレスアプリケーションをメインターゲットとして運用してきました。これは過去、コンテナがステートフルが苦手だったためですね。しかしみなさんご存知のようにWebのサービスは、Webサーバーなどのステートフルなアプリケーションと、データを保持するデータベースのようなステートフルなアプリケーションで構築されています。
ヤフーでもKubernetesを利用し始めた開発者のメンバーからはステートフルなアプリケーションも動かしたいよという要望が日々高まっています。そこでゼットラボではCaaS向けにステートフルサービスを構築し、ステートフルアプリケーションのサポートに挑戦しています。
ゼットラボでは2018年のQ3から検討を始め、まずはゼットラボ社内でサービスを2018年のQ4に展開しています。その後ヤフーでステートフルサービスのパイロットサービスが始まり、もうちょっとでヤフー社内でGAされるというようなスケジュールとなっています。
ではここから、我々が取り組んでいるヤフー/ゼットラボ向けのCaaSにおけるステートフルサービスについて掘り下げて紹介していきます。先ほど紹介したCaaS向けにステートフルサービスを提供するには課題がありました。まず1つ目はWebサービスごとに独立したデータアクセスが必要。これはセキュリティの要件ですね。
次の課題としては、先ほどご紹介したように我々は680以上のKubernetesクラスタがあること。これ、増え続けています。一方でこれを管理してくれるCaaSの管理者は増えないですね。増えない管理者です。
さらにはKubernetesは非常にアップデートも早く、3ヶ月に1回のアップデートがあります。当然我々はこれに追随していかなくちゃいけない。さらにはCaaSの特徴であるNodeのセルフヒーリングやスケーリングへの対応。これもステートフルでしっかりとやっていかなくちゃいけないといった課題があります。
このような課題に対して我々は3つの施策を取ってきました。まずはじめの施策はセキュリティです。ストレージは高価なことが多いので、複数のKubernetesクラスタでストレージを共有することが多いかと思います。
一方でセキュリティの観点としては不要なユーザーからのアクセスを禁止したいのではないでしょうか。例えばこちらのKubernetes1、これを使っているユーザーがKubernetes2の使っているボリュームにアクセスできてしまうとか、Kubernetes2のユーザーがKubernetes1のボリュームにアクセスしてしまう。これは禁止したいわけですね。
そこで、このような複数Kubernetesが存在する環境向けに、我々はストレージのマルチテナント機能を利用し、Kubernetesクラスタごとのアクセスをコントロールしています。上側のKubernetesは、Kubernetesの中のリソースはコントロールできるんですが、さすがに隣のリソースまではコントロールできないので、下側のストレージの共有しているところのこちらでテナントを切ってコントロールしています。
注意するポイントとしては、ストレージのマルチテナント機能。これ実装がマチマチだというところです。テナントでコントロールできるリソースは必ず確認する必要がありました。とくにマルチテナントサポートという言葉だけでKubernetes向けにマッチしたマルチテナントかどうかは不明のため、ストレージを選定する際に、アクセスをコントロールしたいリソースが正しく制御できるかどうかを我々は確認し検証しています。
次の施策としては自動化です。Kubernetesは、3ヶ月に1回マイナーアップデートがあります。さらにはKubernetesのバージョンアップ時にストレージ部分のCSI Driverや関連ソフトなどのアップデートも必要となります。これらの状況の中で680以上のKubernetesクラスタを運用するヤフーでは人手のアップデートはもう無理があって、自動化することが必達となっていました。
そこでまず我々が取り組んだのがAddon-managerによる自動化です。CaaS向けに提供しているAddon-managerを使い、StorageClassやベンター提供のCSI Driver、Persistent Volumeの監視で利用するダッシュボードやアラートルールなどステートフルサービスで必要なものを自動デプロイすることで、セットアップを自動化しています。
さらにはこのAddon-managerではKubernetesのバージョンアップに連動し、StorageClassやCSI Driverなども自動でアップデートしています。
次の施策としては自動化の第2弾です。ヤフー/ゼットラボのCaaSではアップデート時にNode、我々はVMを再作成します。ただしNodeを再作成することでIPやIQNといったものも変更されるようになるため、ストレージ側のNFS、iSCSIのACLの更新が必要になります。
図を用いて説明します。まずCaaSのローリングアップデートでは、新しいNodeを新規作成したのち、KubernetesのクラスタへNodeを追加します。
このとき新しいNodeは新しいIP、新しいIQNとなります。その後、古いNodeの中からこちらをUnscheduledにし、Podを新しいNodeへ移動させます。このとき新しいNodeのIPやIQNがストレージ側のACLに登録されていないと、当然、PodからVolumeに対してアクセスできなくなります。
そこで我々はNodeをウォッチし、ACLを自動更新するカスタムコントローラーを開発しました。こちらのカスタムコントローラーがexport-policy-mgrです。これによりNodeが追加されるとストレージのACLへIPやIQNも自動登録するようにします。
Nodeが削除されるときも同様に、Nodeの削除のイベントを検知しストレージのACLを更新します。このカスタムコントローラーの機能はGitHubで公開されているベンダーのCSIプラグインへリクエストを送り、残念ながら我々のコードそのままではありませんが、ベンダーにより正式にサポートが開始されました。
このようにCaaS向けステートフルサービスを提供するにあたり、セキュリティや自動化にも取り組み、少人数で運用可能なサービスに仕上げています。
ここでまず前半のまとめです。CaaS向けにステートフルサービスを提供しています。3点、セキュリティを考慮したマルチテナント。Kubernetesのアップデートに追随できる自動アップデート。Nodeの作り直しにも対応できるACLの自動アップデートを我々はサポートしています。(後半につづく)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略