1. はじめに
多様で複雑な現代のソフトウェア開発において、アプリケーションの高速なデプロイや、運用の効率化・自動化は重要な課題となっています。
特に、マイクロサービスアーキテクチャの普及に伴い、複数のコンテナ化されたサービスをいかに安全にリリースし、安定して運用出来るかいうことが開発の重要なポイントとなっています。
このような背景の中で、Kubernetes(しばしば「k8s」と略されます)は、コンテナのオーケストレーションを自動化するための強力なツールとして広く認知され、導入が進んでいます。
本稿では、Kubernetesの基本的な概念から、そのメリット、特徴、利用時のポイント、さらには実際の事例に至るまでを幅広く解説します。
2. Kubernetesの特徴と代表的な機能
Kubernetes(k8s)は、コンテナ化されたアプリケーションのデプロイ、スケーリング、さまざまなマネジメントなどを行うために設計されたコンテナオーケストレーションシステムです。
オーケストレーションとは、複数のコンテナを効率的に管理・運用するための仕組みを指し、コンテナの配置管理や、台数の調整、負荷分散、ヘルスチェックや自動復旧などを自動化して、複雑なコンテナ環境を高度に管理することができます。
K8sはGoogleによって開発され、現在はCloud Native Computing Foundation(CNCF)によって管理されているOSSであり、商用環境においても世界中で積極的な利用が進んでいます。
特に現在のシステム開発で爆発的に増加しているマイクロサービスアーキテクチャにおいて、アプリケーションの複雑さを管理するための強力なツールとして知られています。
k8sの基本的なコンセプトは、大量のコンテナをより効率的に管理するというものです。
コンテナとは、アプリケーションや依存関係のあるライブラリなどをまとめた軽量な実行環境であり、k8sはこれらのコンテナをPodという単位でグループ化しています。
Podは同じホスト上で動作する1つ以上のコンテナを含むことができ、k8sはPod単位でオートスケーリングやデプロイなどを実行します。
Kubernetesの代表的な機能には、以下のようなものがあります。
- オートスケーリング:アプリケーションの負荷に応じて、必要なコンテナの数を自動的に増減させることができます。CPU使用率の閾値などを設定することで、負荷が高まったPodが存在するグループのみをスケールさせることができ、リソースの最適化が図られます。
- オートヒーリング:コンテナが障害で停止した場合、k8sが自動的にそのコンテナを再起動または再デプロイすることができ、システムの可用性向上に寄与します。
- サービスディスカバリー:k8sはPod間の通信を容易にするためのサービスディスカバリー機能を持ち、アプリケーションの各コンポーネントが互いに簡単にアクセスできるような仕組みを提供しています。
- ローリングアップデート:アプリケーションの新しいバージョンをデプロイする際、既存のバージョンを段階的に置き換えることで、ダウンタイムを最小限に抑えることができます。
k8sは、オンプレミス環境とクラウド環境の両方で利用可能であり、特定のインフラに依存しない柔軟性を持っています。
このため、企業は自社のニーズに応じて最適な環境を選択し、k8sを活用することができます。
特にオンプレミス環境では、システム更改のタイミングまで、初期のサイジングで決定したハードウェアを使用しつづけなければならないという難しさがあります。
サービスが成長し特定の機能に対して負荷が高まりつつあるという場合に、制限された環境の中でいかにリソースを効率よく利用するかは大きなポイントあり、そういった場合にk8sが大きなメリットをもたらします。
また、k8sはその拡張性の高さも特徴の一つで、さまざまなプラグインや拡張機能を利用することで、特定の要件に応じたカスタマイズも可能であり、企業が持つアプリケーションに最適な運用環境を構築することができます。
さらに、k8sはシステムの状態を宣言的に管理できる点も大きな特徴です。YAMLファイルを用いてシステムの「あるべき状態」を定義し、その状態を維持するようにk8sが自動的に調整を行うことができます。
例えば、「負荷N%に対して、PodをM個存在するようにする」といった宣言的な定義が可能なため、一時的な障害や処理の失敗があっても、k8sが自動的に修正を行い、定義された状態に戻すことができます。
システムの安定性向上や運用負担の軽減につながるため、宣言的な管理方式は特に大規模で複雑なシステムの運用において非常に有効であり、k8sの強力な機能として人気を集めています。
K8sは、DX(デジタルトランスフォーメーション)が進む現代において、企業が迅速に市場に適応し、競争力を維持するための重要な技術と見なされており、多くの企業開発と運用の効率化を図る中で昨今ますます存在感が高まっているツールとなっています。
3. Kubernetesを導入する際のポイント
k8sを利用する際には、効果的な運用と管理を実現するためにいくつかの重要なポイントを押さえる必要があります。
k8sの導入を成功させるための具体的なアプローチには以下のようなものがあります。
- 専門チームの設置
K8sの導入には、高度な専門知識を持った組織やチームの設置が不可欠です。
CCoE(Cloud Center of Excellence)やSRE(Site Reliability Engineering)といった専門チームは、Kubernetes環境の設計、運用、最適化に関する専門知識を持ち、開発者が円滑にサービスを開発できるように支援します。
SREの役割:SREはSite Reliability Engineering の略で、サービスを信頼性高く運用していくために必要な高度な技術知識を持った組織やチームを指します。
SREチームは、インフラやアプリケーション基盤に得意領域を持つエンジニアを擁することが多く、k8s環境の構築や要件に応じた高度なカスタマイズ、運用自動化を推進し、アプリケーションの信頼性を高めるためのツールやプロセスを整備することが求められます。
SREチームの技術的なリードによって開発チームは運用に関する負担を軽減でき、より迅速なサービス提供に集中することができます。
CCoEの役割:CCoEはCloud Center of Excellenceの略で、主にクラウドサービスの導入、活用のリードや、組織横断での知識共有や教育、ガバナンスの策定などを担います。
クラウドサービス上でk8sサービスを利用する場合、CCoEは包括的なクラウド活用を促進し、k8sを利用したクラウド基盤の構築や運用に関するベストプラクティスを策定する役割となります。
また、組織全体でのクラウドサービスの知識共有やガバナンスを確立し、k8sを含むクラウドサービスの導入をスムーズに進めるための戦略を提供することができます。
- 段階的な導入
K8s導入の際は、既存システムなどを全て一度に変更するのではなく、新規構築のシステムなどから段階的に導入していくなどのアプローチが重要です。
初めは小規模なプロジェクトや特定のチームから始め、徐々に導入範囲を拡大していくことで、組織のナレッジを蓄積させ、障害や混乱を最小限にしつつ、アーキテクチャの変更を進めることができます。
- 組織文化の変革
K8sの導入を成功させるためには、技術的な側面だけでなく、組織文化の変革も重要となります。
エンジニアが新しい技術を学び、活用できるよう継続的な教育やサポートを提供することや、チーム間のコミュニケーションを促進し、意見を自由に表現できる文化を醸成することが、新しい技術に対する柔軟な姿勢を生み出し、イノベーションを促進します。
- 自動化とオブザーバビリティの強化
k8sの強力な自動化機能を最大限に活用することも重要なポイントの一つです。
オートスケーリング、オートヒーリング、ローリングアップデートなどk8sが持つ機能を最大限に活用することで、運用負荷を軽減し、システムの可用性を高めることができます。
また、オブザーバビリティを強化するために、監視ツールやログ管理ツールを統合し、リアルタイムでシステムの状態を把握できるようにすることが求められます。
Sreakeでは、k8sのような複雑なマイクロサービスシステムに対してはDataDogなどのオブザーバビリティツールを合わせて導入し、アプリケーションからインフラまで、システムのあらゆるレイヤに対する一元的なダッシュボードを作成するなど、システムのモダンな監視導入やコンサルティングを合わせて実施しています。
4. Kubernetesの導入事例
- Spotify
音楽ストリーミングプラットフォームのSpotifyは、早期からマイクロサービスとDockerを採用し、Heliosという自社開発のコンテナオーケストレーションシステムを使用していましたが、その継続的な開発や信頼性を見込んで2018年末頃からk8sを採用しています。
最大のサービスはk8s上で秒間約1000万リクエストを処理し、オートスケーリングによってリソースの増減が自動的に行われています。
さらに、k8sの導入により、新しいサービスの作成と運用環境へのデプロイが数秒から数分で可能になり、CPU利用率が平均で2倍から3倍に向上したと報告されています。
- The New York Times
The New York Timesでは、Google Cloud上でKubernetes-as-a-Serviceとして提供されているGKEを採用し、k8sを利用しています。
従来のVMベースではサービスやコンテンツのデプロイに45分程度かかっていましたが、k8sを使用したことで数秒から数分単位にまでデプロイのリードタイムを短縮することができたと報告されています。
また、導入前は週次スケジュールでデプロイするか、インフラチームとスケジュールを調整する必要があったチームが、現在では必要に応じてそれぞれのチームの判断でアプリケーションをデプロイし、必要であれば日次で実行することができるなど、k8sを利用することで非常にリリースサイクルが高速化したと言われています。
- Bloomberg
経済・金融情報の配信・放送事業などを手がけるアメリカ合衆国の大手総合情報サービス会社であるBloombergは、スケーリングの柔軟性を重要視してk8sを採用しています。
Bloombergのインフラチームは大量のVMを立ち上げ、必要に応じてスケーリングを行う運用を実施していましたが、リクエストの増減に対する柔軟なスケーリングを実現するためにk8sを導入しました。
VMを立ち上げるよりも速くソリューションをスケーリングできたり、コミュニティが大きく開発が継続的に行われていること、カスタマイズが柔軟であったことなどが導入の決め手になったと言われています。
Bloombergでは、k8sの導入によって開発者の生産性向上、アプリケーションデプロイ時のエラー減少、サービス可用性向上、運用自動化、リソース管理の改善を実現しており、ハードウェアの使用効率も90〜95%に近づいたと報告されています。
5. Sreakeでできること
スリーシェイクはKubernetes の取り組みを開始する組織に与えられる「Kubernetes Certified Service Provider (KCSP)」を取得しており、高度な技術知識を持ったエンジニアを多数擁し、k8sの導入コンサルティングから実装まで幅広くご支援することが可能です。
https://3-shake.com/kcsp/
スリーシェイクが提供するSREコンサルティングサービスであるSreake(スリーク)では、k8sの導入と合わせてご要望されることが多いクラウドネイティブシステムの設計・構築スキルを持ったエンジニアやアーキテクトも多数在籍し、高度なクラウド利用に関する技術支援も行なっています。
さらに、これまで多様な業界の多くのお客様に対し、k8sの効果を最大限に活かすための高度な専門組織であるCCoEやSREの組閣なども実施しております。
k8sやCCoE、SREに関するコンサルティング、さまざまな運用自動化ツールの導入など、お客様のDXに関する取り組みを全般的にご支援しています。
ご質問やご相談がございましたら、お気軽にお問い合わせください。