イベントセミナー
2022年12月1日
Kubernetesで時代をリードするクラウドネイティブエンジニアへ

【セミナーレポート】クラウドネイティブ技術をマスターしたいならまず学ぶべきはコンテナとKubernetes

富士通株式会社
ソフトウェアプロダクト事業本部
アプリケーションマネジメント事業部 第一開発部
長谷川 修之 氏
今や、社会の情報インフラの主役となりつつあるクラウド。そのクラウドを支える技術の総称が「クラウドネイティブ」だ。LPI-Japanでは2022年12月1日、オンラインセミナー「Kubernetesで時代をリードするクラウドネイティブエンジニアへ」を開催。本稿では、富士通でクラウドネイティブ技術を導入した製品の設計や構築で活躍している長谷川修之氏によるセッション「クラウドネイティブ技術の必要性とその活用事例」の講演内容をダイジェストで紹介する。
YouTube動画はこちら

クラウドネイティブが注目される背景には、時代の変化やDXがある

今クラウドネイティブが注目を集めている背景には、世の中の変化やDX活用の広がりが大きく関係しています。現在は社会や経済の変化、急速な技術の進化など、将来のありようが読みにくい世の中です。不測の変化に対応するためにも、最新のデジタル技術を活用したDX推進が叫ばれ、その動きはシステム開発のあり方も大きく変えつつあります。

今ほど変化が激しくなかった時代には、システム開発もある程度、完成・運用時点でどうなるかの見通しが立ちました。このため最初に顧客要件を綿密に分析して、それから開発の計画や効果予測をもとに進めていきました。結果として、計画が要件を網羅しているかどうか、また安定稼働するかといった項目が重視されていました。

それがDXが叫ばれる今の時代になると、準備から綿密に進めて完成した時には状況が大きく変わっていることも珍しくありません。そこで新たなアイデアを短期間で実現し、ユーザーの反応を見ながらどんどん修正を加えていく、いわゆるアジャイルな進め方に変わっていきます。システムとしても最小限の機能で素早くリリースできること、柔軟に拡張・変更ができることが重視されます。クラウドネイティブへの需要拡大の背景には、こうした時代の大きな変化があることをまず理解しておきましょう。

クラウドネイティブを実現する4つの基本要素技術とは?

上の背景を踏まえて、次はクラウドネイティブを実現する技術=「クラウドネイティブ技術」とは何かについてご紹介します。

クラウドネイティブ技術には、大きく4つの基本要素技術があります。具体的には @コンテナ Aマイクロサービス BCI/CD Cコンテナオーケストレーション であり、この他にもサービスメッシュや監視など、多種多様な技術を活用してクラウドネイティブなシステムを実現しています。

このうち@とAは、クラウドネイティブにおける基本的な技術要素です。「コンテナ」は、アプリケーションとその実行に必要なライブラリなどをパッケージングする技術です。従来は、環境ごとに個別のライブラリなどを整備する必要がありました。これをコンテナという形で、アプリとその実行環境をひとまとめにすることで、異なる環境でも同じ動作をするアプリを簡単に再現できるようにしています。

一方の「マイクロサービス」は、コンテナのような個々の機能同士の結合を弱めて、小さいサービスを疎結合、すなわちゆるやかに組み合わせて実装するアーキテクチャを指しています。従来のシステムでは各機能が密に連携していたため、機能追加や修正が大変でした。これをマイクロサービスという機能単位に分離して疎結合にすることで、サービス単位での迅速な開発やリリース、柔軟な拡張変更を実現できるようにしています。

一方、BとCは、クラウドネイティブにおいて開発プロセスを支える手法です。まず「CI/CD」は、開発資産の変更のタイミングでビルドやテスト、デプロイまでをバックグラウンドで自動実行する開発手法です。クラウドネイティブでは、小さい単位で機能追加・更新が行われることが多いため、CI/CDという一連の処理の自動化によって、品質の維持と短サイクルでの継続リリースを両立させるのです。

最後に「コンテナオーケストレーション」は、サービスを構成するコンテナの一括管理や運用の自動化を行い、管理や運用の効率化を実現する技術です。現在はKubernetesが、管理・運用の標準ツールとして使われています。主な機能の一つに「宣言型の構成管理」があります。これはアプリを配備したい状態を最初に定義すると、その後はKubernetesが常にその状態を自動的に維持してくれるというものです。同じく「自動復旧機能」は、コンテナに異常状態が発生すると、Kubernetesが検知して自動的に正常な状態に戻してくれます。

顧客導入事例:クラウドネイティブ技術で、システム運用の課題が解決

ここからは、富士通が実際に導入支援を行ってきたお客様の例をもとに、3つのクラウドネイティブ技術の活用事例をご紹介します。

事例1:Kubernetesを活用して、Webコンテンツ配信の運用を効率化

課題
集客用のwebコンテンツを配信しているA社では、約200台の物理サーバーを運用していたが、メンテナンスやダウン時の運用負荷が高く、その結果、サービス停止時間が長くなって、ビジネス機会の損失が起きていました。またアプリの管理に独自の監視ツールを使っており、アプリ変更のつど必要なツールの改修も運用負荷を押し上げていた。

対応と成果
Kubernetesを導入したことで、アプリの実行単位がコンテナになり、共通のサーバーやOS上で複数のアプリが起動できるようになった。その結果、サーバー台数を約200台から40台に削減でき、運用負荷が軽減。また独自のツールは、Kubernetesで代替できるため、管理・運用が一本化。メンテナンスやダウンタイムによる、Webコンテンツの停止時間を大きく減らすことができた。

事例2:マイクロサービスで、販売サイトの柔軟性やメンテナンス性を向上

課題
エンターテイメント系の販売サイトを運営しているB社では、使い勝手などについてユーザーから寄せられる意見の迅速な反映=機能更新と、動作の安定やユーザーエクスペリエンス向上を両立させたいと考えていた。しかし既存のシステムは密結合だったため、1つ機能更新すると他の機能まで修正が必要で時間がかかる。また、限定的なトラブルがシステム全体に影響する懸念もあった。

対応と成果
システムをマイクロサービス化して、密結合から疎結合への移行を実現。他機能に影響なく更新が行えるため、ユーザーの要望を迅速に取り組めるようになって、顧客満足度の向上につながっている。またトラブル発生時も、各機能が独立して動いているので問題箇所が極小化され、他の機能は継続して利用できるためユーザーへの影響も最小化できた。

事例3:CI/CDを活用して、アプリケーション基盤開発の短サイクル化を実現

課題
C社では、他の複数の会社との合同チームでアプリ基盤の開発を行っていた。開発の基本はアジャイルだが、複数のチーム間での品質統一に時間がかかり、開発サイクルに想定以上の時間を要していた。また手順実施の工数が大きいため、テストの自動化などは進んでいたが、環境構築や脆弱性診断などが自動化できないままだった。

対応と成果
CI/CDの活用で確認作業を削減したり、自動化を進めたりすることを決定。チーム間でやりとりが非効率な部分は、CI/CDの処理定義を共通化してまとめ、複数チームで同じ処理を容易にできるようにした。またCI/CDには、環境構築や脆弱性診断も組み込めるため、多くのプロセスを自動化して工数を削減。開発サイクルを従来の1.5か月から1か月に短縮した。

なぜクラウドネイティブ技術は、習得・活用するのが難しいのか?

これらの事例のように、クラウドネイティブ技術の活用は進んできていますが、全体を見るとやはりまだまだ活用できている現場は多くないのが実情です。その理由としては、技術を持ったエンジニアがおらず、最初から導入を諦めてたり、導入したが十分な効果を発揮できないといったケースが目立ちます。このエンジニア不足の原因には、やはりクラウドネイティブ技術の習得の難しさがあります。

クラウドネイティブ技術の難しさの理由としては、「習得すべき技術が非常に多いこと」「機能更新サイクルが非常に早く、追従が大変なこと」「実現したいことに対して複数の手法が存在すること」の3つが挙げられます。エンジニアはこれらの特徴を踏まえた上で、技術の習得や活用を行う必要があります。

クラウドネイティブ技術習得の学習を進める3つのポイント

では、実際にクラウドネイティブ技術を学ぼうとする場合、どのように進めていけば良いのでしょう。私自身の失敗も含めた経験から、3つのポイントに絞ってご紹介したいと思います。

ポイント1: コンテナやKubernetesを優先的に学習する

クラウドネイティブ技術は、習得すべき技術が非常に多いのですが、そのほとんどはコンテナやKubernetesを利用したものです。このため、学習のスタート時には、まずコンテナやKubernetesの基本的な部分を優先的に学んで理解しておくこと。この基本ができていれば、他の技術や今後出てくる技術にも、柔軟に対応し理解していけます。

ポイント2:自分で実際に動かしてみる方が早いし、理解も深まる

クラウドネイティブ技術は機能更新が早いので、変更の確認やその取り込みという作業がたびたび発生します。私もかつてはドキュメントなどで念入りに事前の影響確認をしていました。しかし、ひんぱんな機能更新でそのドキュメント自体も完全ではなく、毎回のように想定外のトラブルが発生していました。そこで今は、「変更の概要だけある程度理解したら、とにかく実機で動かしてみる」ことにしています。この方が早期に影響を把握できるし、何より実際に動かしてみることで理解も一層深まりました。

ポイント3:全体を通して概念を体系的に把握しておく

クラウドネイティブ技術には、実現したいことに対して複数の手法が存在していますが、ここで失敗するパターンが、「特定条件で実現したいことだけを調べて実践する」です。
自分のやりたいことだけを急ぐのではなく、まずはどんな機能があって何ができるのか。概要全体を通して理解しましょう。これが繰り返すうちに、個々の要件に最適な手法の見当がつくようになるし、多少条件が変わってもすぐに調べて理解する力もついてきます。

クラウドネイティブエンジニアの育成に、積極的に取り組む富士通

最後になりますが、富士通としても、クラウドネイティブエンジニアの育成には積極的に取り組んでいます。特にコンテナやKubernetes技術者の育成・増員には力を入れていて、CKAやCKADなどの認定資格と連携して体系的な学習を促進しています。

さらに基礎の部分では、Linux技術者認定「LinuC」の受験などにも取り組んでおり、実際にこのKubernetesの資格を取得した人からは、「Kubernetes自体は前から知っていましたが、受験勉強を通じてベストプラクティスなどを知ることができた結果、より効果的に使えるようになった」といった声も聞かれています。

ここまでの私の説明を通じて、クラウドネイティブ技術やその可能性、学習のポイントなどを、おぼろげながら理解していただければ幸いです。ぜひ皆さんも、クラウドネイティブ技術を活用できるエンジニアを目指して、まずはコンテナやKubernetesの学習から始めてみてはいかがでしょう。

富士通株式会社
ソフトウェアプロダクト事業本部
アプリケーションマネジメント事業部 第一開発部
長谷川 修之(ハセガワ ナガユキ)

2018年に富士通株式会社に入社し、Kubernetesをはじめとするコンテナ技術を導入したアプリ開発基盤製品の設計、構築を経験。Kubernetes環境の構築やアップデートからKubernetes上でのアプリ配備まで扱ってきた。現在は、クラウドネイティブなアプリの開発からKubernetes上へリリースまでのDevOpsサイクルをCI/CD技術により自動化するサービス開発、業務支援を担当。