COLUMN
2022年07月02日
知っておきたいKubernetes(クバネティス)、基本の考え方
カテゴリー:テクノロジー
タグ:Keyword, Kubernetes, クラウドサービス
システム開発では、様々なオープンソースソフトウェアを利用します。なかでも注目を集めているのが、Kubernetes(クバネティス/クーバネティス)です。KとSの間が8文字なので、k8sと略される場合もあります。
Kubernetesについて耳にするエンジニアも増えていると思いますが、実際のところKubernetesを直接利用するのはインフラなどのエンジニアが中心になります。アプリケーションエンジニアやプログラマーは、Kuberneteで提供された環境上にプログラムを提供するので、Kubernetes自体を触ることは少ないでしょう。
でも、自分が利用する環境の低レイヤーが、どのような仕組みで動作しているのかは、エンジニアにとっては重要な知識になるでしょう。そこで、今回はKubernetesの概要や使いどころをわかりやすく整理します。
Kubernetesとは
Kubernetes(クーバネティス/クーバネティス)とは、コンテナオーケストレーションと呼ばれるツールです。コンテナとは、仮想マシンの一種です。稼働しているOS上で、OSの機能の一部を共有しながら、ユーザーの利用できる環境を分離します。OSの一部の機能を利用する分だけ、素早く起動でき、また保存する場合のデータ容量もコンパクトになります。
オーケストレーションは、オーケストラを指揮するようなイメージです。コンテナオーケストレーションは、複数のコンテナの設定や管理を自動的におこないます。
元々Googleが設計したシステムツールです。現在は オープンソースソフトウェアとなり、Cloud Native Computing Foundationがメンテナンスを行っています。
実際に、AWSやAzure・Google Cloud Platformでは、次のようなKubernetesを利用できるマネージドサービスサービスを提供しています。
- AWS:EKS – Amazon Elastic Kubernetes Service
- Azure:AKZ – Azure Kubernetes Service
- Google Cloud:GKE- Google Kubernetes Engine
—
関連記事:Kubernetes(クバネティス)マネージドサービスとは何か?
Kubernetesの役割
では、どんなところでKubernetesは使われているのでしょうか。それを理解するには、まずクラウドサービスの仕組みを知っておく必要があります。
クラウドサービスの仕組み
「クラウドコンピューティング」または「クラウドサービス」では、使いたい時に使いたいだけ低コストでコンピュータを利用できます。最新のゲーム機でバーチャルコンソールを使って昔のゲームが遊べるように、バーチャルなサーバーをインターネット経由で呼び出して、すぐに利用できます。主なクラウドサービスに、「AWS」(Amazon Web Services)、マイクロソフトの「Azure」、「Google Cloud」があります。GmailやGoogleカレンダーは、このGoogle Cloudの一部です。
クラウドを利用すれば、サーバーの構築もアプリのインストール作業も必要ありません。そのため、クラウドを利用する場合、次のようなメリットがあります。
- 圧倒的に早いシステム環境の導入
- 保守・運用コストの削減(人・もの・お金)
- インターネットがあればアクセス可能
KubernetesはIaaSのような環境を構築する
クラウドは次のように種類が分かれます。
- IaaS・・・Infrastructure as a Service(インフラストラクチャ アズ ア サービス)の略で、イアースとかアイアースと呼びます。仮想サーバー・ストレージなどの実行環境のみ提供
- PaaS・・・Platform as a Service(プラットフォーム アズ ア サービス)の略で、パースと読みます。実行環境+開発ツールを提供
- SaaS・・・Software as a Service(ソフトウェア アズ ア サービス)の略で、サースと読みます。完成しているアプリをユーザーに提供。ユーザーは設定とデータ入力で利用できます。
—
Kubernetesは、このうちのIaaSのようなプラットフォームを構築するためのツールです。複数の膨大なコンピュータを束ねたクラスター上で複数のコンテナを提供します。その結果、コンテナの安定した運用と自動化を実現します。
ユーザーがクラウドの利用を申し込むと、すぐにコンテナが用意されます。また、不要になったコンテナを削除したり、実行中のコンテナをバックアップしたりといった機能はKubernetesが実現しています。
複数のWebサーバーを組み合わせる大規模Webサービスの利用に活用します。
Kubernetesの構成
Kubernetesは、次のようなオブジェクトで構成されています。
- クラスタ・・・1つのマスターとNodeを含む集合体。
- Node・・・コンテナを展開するためのマシン。
- Pod・・・コンテナを管理するための単位。複数のコンテナの集合体
- マニフェスト・・・YAML・JSONで書かれている設定テキスト。APIのバージョン・リソースの種類・仕様などが記載されている。
—-
なかでも、NodeとPodには次のような違いがあります。
- Node:複数のPodを保有し動作させる、Kubernetesに必須の概念。マスターNodeとワーカーNodeに分かれて、マスターによってワーカーを管理する。マスタとワーカーの通信を行う、Podとコンテナを管理する役割を持つ。アプリの実行・コンテナイメージの取得なども行う
- Pod:共有ストレージ、クラスターの共有IP、各コンテナの動作に対する情報を含むKubernetesが扱う情報の最小単位。それぞれのPoDはNodeに関連付けられているため、削除されるまでは残る。また、コピーした複数のPodを一度に展開するレプリカセットやデプロイメントという機能もある
Kubernetesの特徴:宣言的な構成管理
Kubernetesは、宣言的な構成管理を実現しています。一定の状態を定義(宣言)することで、その内容を自動的に実現します。処理が失敗したコンテナを再起動したり、コンテナを入れ替えたり、正常に動作していないコンテナを強制終了したりといった管理を自動的におこない、安定したコンピューティング環境を提供します。
これに対して命令的な構成管理では、一定の状態にするための手順を管理者が記述する必要があります。どういった場合にどのような動作するのか、細かく手順を記述する必要がありるため、技術的な難易度が向上します。
Kubernetesが提供する3つのメリット
Kubernetesが提供するメリットは大きく次の3つです。
・ネットワークトラフィックの負荷分散
・処理できなかったコンテナの自己修復
・コンテナの作成・削除などの自動化
—-
自己修復機能と負荷分散機能を持つ点から、Nodeに障害などが発生した場合も自動的にシステムが停止しない環境を維持します。また、CPU稼働率に合わせてPodを増加・減少させるといった機能もあります。
選択したシステム環境を自動的に起動させ、アプリを開発する場合、Kubernetesは非常に使いやすいソフトウェアだといえるでしょう。
関連記事:Kubernetes(クバネティス)を導入する7つの効果 – コンテナオーケストレーションプラットフォームが進化させるシステム開発と運用
まとめ
ここまで、Kubernetesの概要や構成についてふれてきました。自社のWebサービスのお客様が増えてきて、サーバーを拡張しなければいけない、負荷を分散しなくちゃいけな、といった場合にKubernetsは効果を発揮します。
なお、Hexabaseは、Kubernetes上に独自のマイクロサービス基盤を構築して運用しています。興味がありましたら、ぜひHexabaseについても調べてみてください。