Kubernetesやクラウドネイティブをより便利に利用する技術やツールについて概要や使い方を凝縮して紹介していく連載。初回は、Kubernetesの現状や、多種多様なKubernetes/クラウドネイティブ周辺ツールについて。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
近年、「クラウドネイティブ」の基盤として、「コンテナ」「Kubernetes」が関心を集めています。Kubernetes自身の紹介については、書籍や記事がたくさん提供されていますが、Kubernetesを支える周辺の技術やツールについては、技術の移り変わりが早くなかなかキャッチアップが難しい状況です。
そこで本連載では、Kubernetesやクラウドネイティブをより便利に利用する技術やツールについて概要や使い方を凝縮して紹介していきます。初回でKubernetesの現状について整理しつつ、連載の全体像と多種多様なKubernetes/クラウドネイティブ周辺ツールの一部を紹介します。
近年、コンテナ基盤としてKubernetesが関心を集めています。Kubernetes/クラウドネイティブに関する最大規模のカンファレンスとして、「KubeCon/CloudNativeCon」が開催されていますが、参加者数は開催ごとにほぼ倍増しており、その注目の度合いが分かります。Kubernetesが関心を集めている理由として、幾つかありますが、下記のような理由が考えられます。
Kubernetesは、Linux、Apache、PostgreSQL、Gitなど、成功したオープンソースソフトウェア(OSS)の開発モデルを採用し、コミュニティー主導で開発されています。Linux Foundation傘下のCloud Native Computing Foundation(CNCF)のプロジェクトの一つとして、Linuxのエコシステムを支えるLinux Foundationのお墨付きのプロジェクトとなっています。
「Certified Kubernetes Administrator」「Certified Kubernetes Application Developer」などの認定資格制度もLinux Foundationが提供しており、エンジニアの教育にも力が入れられています。
ベンダー企業はKubernetesを自由に拡張し、自社サービスで利用したり、商用プロダクトとして販売したりすることができます。このため、各企業が積極的に開発に参加できるとともに、採用しやすくなっているというエコシステムが確立されています。
例えばCNCFのシルバースポンサーであるNTTデータでは、企業のデジタルトランスフォーメーション(DX)を推進する基盤として、Kubernetes/クラウドネイティブの導入をサポートするオファリングを提供しています。Kubernetes自身の導入、構築だけではなく、Kubernetes上で動作させるアプリケーションのマイグレーション、開発の支援、運用(IT Service Management、IT Operations Management)のアウトソースの引き受けおよび自動化、性能問題の解析までサポートしています。
またKubernetesや「Loki」のコントリビューターも在籍したり、書籍『Kubernetesポケットリファレンス』の執筆に参加したりしています。
「Amazon Web Services(AWS)」「Google Cloud Platform(GCP)」「Microsoft Azure」などのクラウド基盤は固有のAPIを持っています。そのため、APIを利用して自動化しようとすると、それぞれのAPIに対応したスクリプトやオーケストレーション技術を利用する必要がありました。
Kubernetesを各クラウド上で利用する場合、これらのクラウド基盤固有のAPIやレイヤーを抽象化し、Kubernetesのアプリケーションを提供すれば、他のクラウドでも簡単にデプロイできるようになります。これは、ちょうどOSとしてLinuxがハードウェアを抽象化し、ハードウェアが異なってもハードウェアを意識することなく、OSの機能が利用できるのに似ています。
このため筆者は、Kubernetesは「クラウドOS」のようなものだと考えています。
Kubernetesは、「宣言型API」に、システムに送る命令を順に記述するのではなく、あるべき状態を「YAML」で記述するようになっています。そのため、システムの状態を記述するだけで自動的にその状態を継続します。
これにより、障害が発生しアプリケーションがダウンしたときに自動的にアプリケーションを回復したり、負荷が高まったときに自動的にノードを増やしたりすることができます。
また、YAMLファイルでシステム状態を記述するため、CD(継続的デプロイ)によるデプロイの自動化とも相性が良く、GitでYAMLファイルを管理し、GitによるYAMLファイルの変更をトリガーにシステム情報を更新する「GitOps」も簡単に実現できます。
最近クラウドネイティブという言葉をよく聞き、本稿でも出てきますが、クラウドネイティブとは何なのでしょうか?
CNCFが「CNCF Cloud Native Definition v1.0」として下記のようにクラウドネイティブの意味を定義しています。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。これらを堅牢(けんろう)な自動化と組み合わせることで、エンジニアはインパクトのある変更を、最小限の労力で頻繁かつ予測通りに行うことができます。
このようにクラウドで実現すべき、理想的な基盤技術がクラウドネイティブとして定義されているのです。
Copyright © ITmedia, Inc. All Rights Reserved.