IT業界では近年「コンテナ型」と呼ばれる仮想化技術がトレンドです。「Kubernetes」は、コンテナ型仮想化技術の中で主流となっている「Docker」を管理するためのソフトウェアです。Dockerの活用が一般化する中で、Kubernetesの知識とスキルがキャリアアップのきっかけになるかもしれません。なぜなら、コンテナ型仮想化を用いたITインフラの運用・管理能力が身に着けられるからです。ここでは、Kubernetesの仕組みや機能、Dockerとの関連性、メリット、資格情報などを解説しています。
- 1. Kubernetesとは?機能とDockerとの関連性
- 2. Kubernetesの機能でできることは?
- 3. Kubernetesを使うメリット・デメリット
- 4. Kubernetesの基礎知識を身に着けられる資格
- 5. まとめ
1. Kubernetes(クバネティス)とは?Dockerとの関連性と機能
まず、Kubernetesの概要について解説します。
Kubernetesの概要
Kubernetesは、コンテナ型仮想化技術「Docker」のコンテナ群を管理・運用するためのツールです。オープンソースソフトウェアであり、Dockerコンテナの運用管理を自動化できる機能が搭載されています。
Kubernetesの原型は、Google社内で使われていたコンテナの運用管理ツールです。2014年にgoogleがオープンソースソフトウェアとしてリリースし、以降はDcokerをはじめとしたコンテナの運用管理ツールとして普及しました。
Kubernetesは、複数のDockerコンテナを統合的に管理しつつ、スケールイン・アウトなども自動化する「コンテナオーケストレーション」を目的としたツールです。コンテナオーケストレーションは、複数のコンテナを擁する大規模システムの運用管理を大幅に効率化します。では、もう少し詳しくKubernetesの機能を見ていきましょう。
Kubernetesの機能
Kubernetesはコンテナ型仮想化技術を対象としたツールです。そこで、まずはコンテナ型仮想化技術を簡単におさらいしておきましょう。
コンテナ型仮想化とは、Linuxカーネルが持つ「コンテナ機能」を用いた仮想化技術です。Linuxカーネルには、仮想的に独立した空間を作る機能が搭載されており、この機能を活用して他のプロセスから隔離された実行環境を構築します。具体的には、Linuxカーネルが持つ「namespaces」「cgroups」「overlayfs」という機能を使ってコンテナが構築されます。
この3機能を活用することで、「システムリソース」「固有の名称」「設定」を持つ独立した仮想マシン(=コンテナ)が構築可能です。
Kubernetesは、こうして作られたコンテナを管理・運用しつつ、各種操作を自動的に行うための機能が含まれています。以下は、Kubernetesの代表的な機能です。
Pod
Podとは、Kubernetesにおけるコンテナ管理・運用の最小単位です。ひとつのPodには最低1個以上のコンテナが含まれます。実際の運用では、Kubernetesが提唱するデザインパターン(コンテナ構成のパターン)に沿って構築されることが多いでしょう。
また1個もしくは複数のDockerコンテナをまとめた「Pod」は、ひとつのノード(仮想マシン)に割り当てられます。
ノード(Node)
いわゆる「実行マシン」に該当する単位です。ノードはそれぞれ異なった役割を持つことが多く、ひとつのノードには1個以上のPodが含まれています。また、Podを含むノードを「ワーカーノード」、ワーカーノードを管理するノードを「マスターノード」と呼びます。ひとつ以上のマスターノードとワーカーノードを「まとまり」として管理するのがクラスタリング機能です。
Kubernetes Cluster(クラスタリング機能)
Kubernetes Clusterは、複数のノードをひとつのまとまりとして扱う機能です。いわゆる「クラスタリング機能」で、Kubernetesが目的とするコンテナオーケストレーションの中核をなす機能でもあります。Kubernetes Clusterでは、コンテナに実行環境を提供する仮想マシン「ノード(Node)」を管理し、複数のノードをまとめて管理することで高い可用性と負荷分散を実現できるようになっています。
複数クラスターを連携させる機能
複数のKubernetes Clusterを連携させる機能です。一般的に異なるクラウドプラットフォームを併用する場合、クラウドプラットフォームごとに管理・運用が必要です。しかしKubernetes Clusterならば、複数の異なるクラウドプラットフォームに点在するクラスターや、クラウドプラットフォームが設定する「ゾーン(地域)」を跨いだクラスター同士を連携させつつ、一括での管理が可能になります。また、オンプレミス・クラウドを併用したハイブリッドクラウド環境での活用も視野に入るでしょう。
ロードバランシング・サービスディスカバリ機能
Kubernetesには「Service」と呼ばれるPodサポート機能が含まれています。Serviceは、Pod群(=コンテナ群)に対してロードバランシング(負荷分散)やサービスディスカバリなどを提供する機能です。ちなみにサービスディスカバリとは、サービス(アプリケーション)が持つ諸情報(IPアドレス、使用しているポートの番号、ホスト名など)をリアルタイムで検出する機能のことです。Service機能を使うことで、適切な負荷分散を行いつつ、Kubernetes内で動作するアプリケーションの状況をリアルタイムに把握できるようになります。
水平オートスケール機能(Horizontal PodAutoscaler)
Horizontal PodAutoscalerは、CPU使用率の状況に応じて、自動的にKubernetes内のPod(アプリケーション)の数を調整する機能です。
2. Kubernetesの機能でできることは?
次に、Kubernetesの機能で可能になることを紹介します。
複数のDockerホストの管理
Kubernetesは、状況に応じて複数のDockerコンテナを最適に稼働させることができます。例えば、本番環境であるサービスがダウンした場合、すぐに別のコンテナを稼働させてダウンタイムが生じないようにできるわけです。
コンテナのスケジューリング
ノードに対するPodの割り当てを設定し、自由に制御することができます。スケジューラーは新規に作成されたPodのうち、ノードに割り当てられていないものを監視します。また、未割当のPodをどのノードに配置すべきかをスケジューラーの設定から判断し、ノードへの割り当てを行います。これをスケジューリングと呼び、ノードへの割り当て条件を設定して運用の手間を軽減することが可能です。Kubernetesにはデフォルトのスケジューラー機能のほか、ユーザーが自らカスタマイズしたカスタムスケジューラーを適用することも可能です。
ローリングアップデート
ローリングアップデートとは、稼働中のシステムを停止させずにソフトウェアの更新・入れ替えを行う手法を指します。一般的には複数の機器を順番に停止させながら、一部は常に稼働している状況を維持して更新を行います。
Kubernetesではローリングアップデートのために、一時的にPod数の上限を引きあげ、稼働中のPodを維持したまま古いPodの停止と新しいPodへの入れ替えを行っていきます。こうすることで、常にPod内でコンテナが稼働している状況を維持しつつ、ダウンタイムを生じさせないようにシステムの更新が可能になるわけです。
オートスケーリング
前述したようにKubernetesでは、水平オートスケーリング機能によって、システムリソースに応じたコンテナ数の自動調整が可能です。また、各コンテナが使用するリソース(CPUやメモリなど)を自動的に調整する「垂直オートスケーリング機能」も搭載しているため、コンテナの数だけでなく各コンテナの処理能力についてもスケール作業を一任できるようになっています。
コンテナの死活監視
Kubernetesでは、「タグ」と「ラベル」によってコンテナを認識し、それぞれのコンテナに対して死活監視を行うことができます。具体的には「Liveness probe」機能によってコンテナ(=アプリケーション)が起動しているかを監視し、「Readiness probe」によって応答可能な状態であるかをチェックします。さらに独自のタグやラベルを設定すれば、異なる環境に点在する同一のアプリケーションを一括で監視することも可能です。
障害時の自己回復
Kubernetesは常にコンテナの数と性能を維持しようとするため、ある程度の障害ならば自己回復(セルフヒーリング)による復旧が可能です。例えば、最低4つのWebサーバーアプリケーションを必要とするシステムがあるとしましょう。このとき、Webサーバーアプリケーションはいずれもコンテナとして配置されています。管理者が何かの手違いでコンテナを削除してしまったり、障害が発生してコンテナのひとつが停止したりしても、Kubernetesは新しいコンテナを生成してWebサーバーアプリケーションが4つの状態を維持します。この自己回復処理は、前述の死活監視機能(Liveness probe)がコンテナの再起動を行うことで実現されるものです。
複数の環境を跨いだシステム運用
Kubernetesは、AWSやGCP、Azureのように種類の異なるクラウドプラットフォームを併用する場合でも、プラットフォームの垣根を越えてシステム運用管理作業を一元化できます。例えば、アプリケーションAはAWS、アプリケーションBはGCPで稼働するといった状況に対し、各環境で作成されたクラスターを連携させつつ一括で管理することが可能です。
Infrastructure as Codeの実現
Infrastructure as Codeとは、その名のとおり「ITインフラの構成をコードによって管理する」という考え方です。サーバーやネットワーク機器の設定をコードとして書き出し、プログラムとしてまとめておきます。このプログラムを実行することで、新環境の構築や環境の移設が発生した場合でも、自動的に設定が適用されるというわけです。Kubernetesでは標準でInfrastructure as Codeに対応しており、yamlファイルに構成情報をコーディングすることで各種設定が自動的に適用されるようになっています。
3. Kubernetesを使うメリット・デメリット
Kubernetesは、非常に効率よく大規模なITインフラを運用・管理できるツールです。しかし、万能のツールというわけではなく、実際には以下のようなメリット・デメリットが発生します。
Kubernetesを使うメリット
Kubernetesを使うメリットとしては以下4つが挙げられます。
ベンダーロックインを回避できる
Kubernetsは、標準化・オープンソース化された技術の集合体です。そのため、特定のベンダーの技術に依存する「ベンダーロックイン」に陥りにくいというメリットがあります。
コスト削減
前述したようにKubernetesには、負荷分散やリソース配分などを自動的に調整する機能が含まれています。こうした機能を活用することで、システムの安定稼働において非常に重要な「調整作業」を自動化できるため、運用コストの低減が可能です。また、過去の実績に基づいて効率よくリソースを使用できるため、クラウドプラットフォームの月額利用料を節約することができます。
DevOpsを実現しやすい
DevOpsとは「開発と運用の一体化によって、システムを常に最新の状態に保ち、ユーザーにいち早く新しい価値を届ける」という考え方です。Kubernetesには、アプリケーションの開発・運用に必要な機能がほぼ網羅されており、開発・運用をシームレスに連結することができます。本番環境を稼働させた状態で、改善点の実装と適用が行えるため、システム全体を常に最新・最善の状態に保ちつつダウンタイムを最小化することが可能です。これは「DevOps」の実現において威力を発揮します。
管理コストの肥大化を防ぐ
Kubernetes では、コンテナをPod単位で管理し、常に一定のコンテナ数を維持するような運用が可能です。また、あまり稼働していないノードに対して自動でPodを割り当てたり、ノード自体の数を調整したりしながら、小さな障害は自動で復旧するような設定も可能です。こうした機能により、管理対象の肥大化を防ぐことができます。
デメリット
Kubernetesのデメリットとしては以下3つが挙げられます。
物理サーバーの台数が増える傾向にある
Kubernetesでは、実行マシンとしての「ワーカーノード」と管理マシンとしての「マスターノード」が必要です。実際の運用ではワーカーノードとマスターノードを別の物理マシンとして用意する必要があり、ノードの数に比例して物理サーバーの数も増えていくことになるでしょう。したがって、構成や規模によってはオンプレミス環境のようにある程度の初期投資が必要になる可能性もあります。
マネージドサービスによるベンダーロックインのリスク
上記のような物理サーバーの問題を解決する方法として、クラウドベンダーが提供する「マネージドサービス」があります。しかしマネージドサービスはベンダー各社の技術が含まれており、「ベンダーフリー」というKubernetesの強みが失われるリスクがあるのです。
更新頻度が高く、学習コストも高い
Kubernetesは機能が豊富で進化し続けるツールでもあります。したがって、Kubernetesを上手く活用するためには継続的な学習が必要です。またInfrastructure as Codeを前提としたツールであるため、Infrastructure as Codeを経験したことがないエンジニアにとっては学習コストが高いことも覚えておくべきでしょう。
4. Kubernetesの基礎知識を身に着けられる資格
Kubernetesは更新頻度が早く、学習コストも高いことから、事前に基礎を固めておきたいところです。基礎知識を身に着けるためには、次のようなKubernetes関連資格の取得を検討してみてください。2021年時点で取得可能なKubernetes関連資格としては、LPI Japanが主催する以下2資格が挙げられます。どちらも選択式の試験ではなく、Kubernetes上でのオペレーション(実技)による試験のため、実務者よりの資格と言って良いでしょう。
Kubernetes管理者認定(CKA)
Kubernetes管理者認定(CKA)は、コンテナを用いたシステム管理者向けの資格です。Kubernetesのインストールを含む基本操作や、Podのデプロイ、クラスターの作成・管理を行えるレベルの知識を身に着けることができます。
試験範囲
Kubernetes管理者認定(CKA)の試験範囲と出題数の割合は次のとおりです。
-
・クラスタのアーキテクチャ、インストール、構成…25%
・サービスとネットワーク…20%
・トラブルシューティング…30%
・ワークロードとスケジューリング…15%
・ストレージ…10%
難易度について
Linuxに関する基礎的な理解(LinuCレベル2相当)がある前提で、3カ月程度で合格レベルに達することができるようです。
Kubernetesアプリケーション開発者認定(CKAD)
Kubernetes環境で実行されるアプリケーションを開発するエンジニア向けの資格です。CKAよりも技術的な内容が多く含まれており、Kubernetes上での基本的なオペレーションに加えて、アプリケーションのバージョンアップやロールバック作業などの具体的な知識が問われます。
試験範囲
Kubernetesアプリケーション開発者認定(CKAD)の試験範囲度と出題数の割合は次のとおりです。
-
・コア コンセプト…13%
・構成…18%
・マルチコンテナPod…10%
・可観測性…18%
・Podのデザイン…20%
・サービスとネットワーキング…13%
・ステートの持続性…8%
難易度について
Kubernetes管理者認定(CKA)を取得している場合は、1週間~1カ月程度の学習で合格レベルに到達できるようです。また、LinuCレベル1相当のコマンド操作や、Dockerの理解、PythonやJavaなどクラウド環境で使用されるプログラミング言語の知識があると、合格に近づきやすいでしょう。
5. まとめ
コンテナ型仮想化技術の中でも主流となっているのがDockerで、そのDockerを管理するためのソフトウェアがKubernetesです。Kubernetesの知識とスキルを身に着けることでコンテナを用いたITインフラの運用・管理能力が身に着けられます。既にインフラエンジニアとして働いていてスキルアップを図りたい方や、クラウド領域に関心のある方などは、習得しておくことで自身の市場価値の向上につながるでしょう。
ITエンジニア・Webクリエイターの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア・クリエイターを専門とする転職エージェントです。最新の技術情報や業界動向に精通したキャリアアドバイザーが、年収・技術志向・今後のキャリアパス・ワークライフバランスなど、一人ひとりの希望に寄り添いながら転職活動をサポートします。一般公開されていない大手企業や優良企業の非公開求人も多数保有していますので、まずは一度カウンセリングにお越しください。
転職支援サービスに申し込む
また、「初めての転職で、何から始めていいかわからない」「まだ転職するかどうか迷っている」など、転職活動に何らかの不安を抱えている方には、無料の個別相談会も実施しています。キャリアアドバイザーが一対一で、これからのあなたのキャリアを一緒に考えます。お気軽にご相談ください。
「個別相談会」に申し込む