InfraAcademy

InfraAcademy Blog

【初心者向け】kubernetesとは?オーケストレーションツールの概要を1から解説【入門①】

| #Docker #kubernetes #kubernetes入門
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、InfraAcademyを運営しているryuです。

今回は、Kubernetes(クバネティス)とは何かをIT初心者向けに解説します。

DockerやAWSを勉強していると、Kubernetesという名前を見かける機会が増えてきます。ただ、最初に「コンテナオーケストレーションツールです」と説明されても、何をしてくれるのかイメージしづらいと思います。

Kubernetesを理解するポイントは、いきなり専門用語を覚えることではありません。まず、コンテナを1個動かす場合と、数十個・数百個のコンテナを運用する場合では何が変わるのかを考えると分かりやすくなります。

この記事では、コンテナの復習から始め、Kubernetesが必要になる理由、Pod・Node・Deployment・Serviceなどの基本用語、どこまで勉強すればよいのかまで順番に解説します。

Kubernetesとは?

Kubernetesは、コンテナ化されたアプリケーションを複数のサーバーで安定して動かすための管理・自動化プラットフォームです。

Kubernetesは「K8s」と書かれることもあります。Kとsの間に8文字あることから、このように略されています。

Kubernetesが行う代表的な処理には、次のようなものがあります。

  • 必要な数のコンテナを動かす
  • コンテナが停止したら再作成する
  • アクセス量に合わせて数を増減する
  • 新しいバージョンへ段階的に更新する
  • 複数のコンテナへ通信を振り分ける
  • コンテナをどのサーバーで動かすか決める

つまり、Kubernetesは単にコンテナを起動するためのツールではありません。たくさんのコンテナを継続的に運用するための仕組みと考えると分かりやすいです。

そもそもコンテナとは?

Kubernetesを理解する前に、コンテナについて簡単に確認しておきましょう。

アプリケーションを動かすには、プログラム本体だけでなく、ライブラリや実行環境なども必要です。開発PCでは動いたのに、本番サーバーへ移したらバージョンや設定の違いで動かないこともあります。

コンテナを使うと、アプリケーションと実行に必要なものをまとめて扱いやすくなります。

Dockerは、このようなコンテナを作成・実行するときによく使われるツールです。

ただし、Kubernetesを使うためにDockerそのものが必須というわけではありません。

以前のKubernetesにはDocker Engineと直接連携する仕組みがありましたが、現在はその仕組みは削除されています。Kubernetesでは、containerdやCRI-Oなど、CRI(Container Runtime Interface)に対応したコンテナランタイムを利用できます。

初心者の段階では細かな違いまで覚えなくても大丈夫です。まずは「Dockerはコンテナを学ぶ代表的なツール」「Kubernetesは多数のコンテナを運用する仕組み」と整理しておきましょう。

なぜKubernetesが必要なの?

コンテナを1個だけ動かすなら、Kubernetesを使わなくても問題ありません。

例えば、小さなWebアプリケーションをDockerで起動するだけなら、docker run やDocker Composeでも十分なケースがあります。

難しくなるのは、サービスの規模が大きくなったときです。

Webアプリケーションを5個のコンテナで動かしているとします。そのうち1個が突然停止したら、誰かが気付いて再起動しなければなりません。

アクセスが急増して10個まで増やしたい場合は、新しいコンテナを起動する必要があります。新バージョンをリリースするときも、すべてを一度に停止せず、少しずつ入れ替えたいことがあります。

数個なら人が管理できても、数十個、数百個になると手作業では難しくなります。

そこでKubernetesを使います。

Kubernetesによるコンテナ管理のイメージ

Kubernetesへ「このアプリケーションを3個動かしたい」と設定しておけば、実際に3個動いているかを継続的に確認します。1個停止して2個になれば、新しいものを作り、設定した状態へ戻そうとします。

この希望する状態と実際の状態を近づけ続ける考え方が、Kubernetesを理解するうえで重要です。

オーケストレーションとは?

Kubernetesは、コンテナオーケストレーションのためのプラットフォームです。

オーケストレーションとは、複数の処理やリソースをまとめて管理し、自動的に調整することです。

コンテナ運用では、単にアプリケーションを起動するだけではありません。どのサーバーで動かすのか、何個動かすのか、障害時にどうするのか、通信をどこへ振り分けるのかまで考える必要があります。

Kubernetesは、それらをまとめて管理します。

音楽のオーケストラで指揮者が複数の演奏者をまとめるように、Kubernetesも複数のコンテナやサーバーを一つの仕組みとして管理する、と考えるとイメージしやすいでしょう。

Kubernetesの基本用語を理解しよう

Kubernetesを勉強すると、Pod、Node、Cluster、Deploymentなどの用語が一気に登場します。

最初からすべて覚える必要はありません。まずは次の6つを押さえておけば、Kubernetesの全体像をかなり読みやすくなります。

用語 初心者向けの意味
Container アプリケーションを動かすための実行環境
Pod Kubernetesで扱う最小の実行単位
Node Podを実際に動かすサーバー
Cluster 複数のNodeをまとめたKubernetes環境
Deployment Podを何個、どの状態で動かすか管理する
Service Podへ安定してアクセスするための入口

それぞれ、もう少し詳しく見ていきましょう。

Podとは?

Podは、Kubernetesでアプリケーションを動かすときの最小単位です。

Kubernetesでは、コンテナを直接1個ずつ管理するのではなく、基本的にPodという単位で扱います。1つのPodには1つ以上のコンテナを含められます。

初心者の段階では、まずPodの中でコンテナが動くと理解しておけば十分です。

例えばWebアプリケーションを3個動かしたい場合、同じアプリケーションを動かすPodを3個用意する構成があります。

Nodeとは?

Nodeは、Podを実際に動かすためのマシンです。

物理サーバーの場合もあれば、AWSやAzureなどのクラウド上に作った仮想マシンの場合もあります。

Podは何もない場所で動いているわけではありません。Kubernetesが利用できるNodeの中から、どのNodeでPodを動かすかを決めます。

複数のNodeを使うことで、1台のサーバーだけに処理を集中させずにアプリケーションを運用できます。

Clusterとは?

複数のNodeなどで構成されたKubernetes環境全体をClusterと呼びます。

Clusterの中には、実際にPodを動かすNodeだけでなく、Cluster全体を管理するControl Planeがあります。

Control Planeは、どのPodをどのNodeで動かすかを判断したり、現在の状態を管理したりします。

初心者の段階では、ClusterはKubernetes環境全体、Nodeはその中でアプリケーションを動かすサーバー、と区別できれば十分です。

Deploymentとは?

Deploymentは、アプリケーションをどのような状態で動かしたいかを管理するためによく使われるKubernetesのリソースです。

例えば、WebアプリケーションのPodを3個動かしたい場合、Deploymentにレプリカ数として3を設定できます。

1個のPodが停止しても、Deploymentなどの仕組みによって必要な数を維持するように新しいPodが作られます。

アプリケーションを新しいバージョンへ更新するときも、Deploymentを使うことでPodを段階的に入れ替えるローリングアップデートを行えます。

Podだけを覚えるのではなく、DeploymentがPodの状態を管理すると理解しておくと、Kubernetesが何を自動化しているのか分かりやすくなります。

Serviceとは?

Podにはネットワーク上のIPアドレスがありますが、Podは作り直されることがあります。

Podが入れ替わるたびに接続先IPアドレスを手作業で変更するのは大変です。

そこで利用するのがServiceです。

Serviceを作ると、複数のPodに対して安定したアクセス先を用意できます。対象となるPodが入れ替わっても、利用者や別のアプリケーションはServiceを通してアクセスできます。

Webアプリケーションへアクセスを振り分ける仕組みを学ぶときにも重要なリソースです。

Kubernetesは障害時に何をしてくれる?

Kubernetesの便利な機能の一つが、障害から自動的に回復しようとする仕組みです。

例えば、DeploymentでPodを3個動かすように設定しているのに、障害で1個停止したとします。Kubernetesは現在の状態と設定された状態の違いを検知し、再び3個になるよう調整します。

Node自体に問題が発生した場合も、条件が整っていれば別のNodeでPodを動かすよう再配置できます。

もちろん、Kubernetesを入れればすべての障害が自動的に解決するわけではありません。アプリケーションそのものの障害、データベース、ストレージ、ネットワークなどは別途設計が必要です。

それでも、人が毎回コンテナの状態を確認して手動で再起動する作業を減らせるのは大きなメリットです。

Kubernetesでスケールするとは?

アクセスが増えると、1個のアプリケーションだけでは処理しきれなくなることがあります。

Kubernetesでは、Podの数を増やして処理能力を高めることができます。

例えば、Deploymentのレプリカ数を3から5へ変更すれば、対象のPodを5個動かす構成にできます。

さらに、CPU使用率などの指標をもとにPod数を自動的に増減するHorizontal Pod Autoscalerという仕組みもあります。

アクセスが増えたから手動でサーバーへログインしてアプリケーションを起動するのではなく、Kubernetes上の設定としてスケールを管理できる点が特徴です。

KubernetesとDockerの違い

KubernetesとDockerは、同じ種類のツールとして比較されることがありますが、役割が違います。

大まかに整理すると次のようになります。

Docker Kubernetes
主な役割 コンテナの作成・実行 多数のコンテナの配置・運用管理
小規模な開発環境 使いやすい 必ずしも必要ない
複数サーバーの管理 主目的ではない 得意
障害時の再配置 手動管理になる場合がある 自動化できる
スケーリング 手動・別機能が必要 Kubernetesの仕組みで管理できる

Dockerを勉強してからKubernetesへ進むと理解しやすいのは確かです。ただし、KubernetesがDockerを管理するツールという覚え方は避けた方がよいでしょう。

Kubernetesが管理する中心は、コンテナ化されたワークロードです。

AWSやAzureでもKubernetesを使える

Kubernetesは自分でサーバーへインストールするだけでなく、クラウドのマネージドサービスとしても利用できます。

代表的なサービスには、AWSのAmazon EKS、Microsoft AzureのAKS、Google CloudのGKEがあります。

Kubernetesを自分ですべて構築すると、Control Planeの管理、アップデート、可用性など多くの作業が必要です。

マネージドKubernetesを使うと、クラウド事業者が管理してくれる範囲が増えるため、利用者はアプリケーションやNodeなどの管理へ集中しやすくなります。

ただし、マネージドサービスを使ってもKubernetesの基本概念が不要になるわけではありません。Pod、Deployment、Service、ネットワークなどの知識は必要です。

Kubernetesを勉強する前に何を知っておく?

Kubernetesから勉強を始めると、Linux、Docker、ネットワーク、YAMLなど分からないものが一気に出てきます。

そのため、IT初心者なら次の順番で進めると理解しやすいです。

  1. Linuxの基本操作を覚える
  2. IPアドレス、DNS、ポートなどネットワークの基礎を学ぶ
  3. Dockerなどを使ってコンテナを実際に動かす
  4. Pod・Deployment・Serviceを理解する
  5. kubectl を使ってKubernetesを操作する
  6. YAMLでKubernetesリソースを作成する
  7. 必要に応じてEKS・AKS・GKEへ進む

特にLinuxとネットワークは重要です。

Kubernetesでは、Node上でアプリケーションが動き、Pod同士がネットワークで通信します。DNSやIPアドレスが分からない状態では、トラブルが起きたときに何を確認すればよいのか判断できません。

Kubernetesを実際に触るには?

概念が分かってきたら、次は実際にKubernetesを動かしてみましょう。

学習用PCでは、minikubeやkindなどを利用してローカルにKubernetes環境を作る方法があります。

環境を用意したら、最初に覚えたいのが kubectl です。Kubernetesへ指示を出したり、現在の状態を確認したりするときに使います。

例えば、現在のPodを確認する場合は次のコマンドを使います。

kubectl get pods

Nodeを確認する場合は次のように実行します。

kubectl get nodes

最初から複雑なアプリケーションを作る必要はありません。Podが作られたことを確認し、削除したらどうなるのか、Deploymentで数を増やしたらどうなるのかを一つずつ試す方が理解しやすくなります。

公式ドキュメントも活用しよう

Kubernetesは機能が多く、記事だけですべてを覚えるのは難しいです。

基本概念を理解したあとは、Kubernetes公式ドキュメントを確認する習慣を付けるのがおすすめです。

元記事ではKatacodaを学習サイトとして紹介していましたが、Katacodaはすでに終了しているため、現在の記事からは削除しました。

Kubernetesは更新が続いているため、古いブログだけを頼りにすると、すでに廃止された機能や現在と異なる手順に当たることがあります。公式ドキュメントを基準にしながら学ぶ方が安全です。

Kubernetes公式ドキュメント

Kubernetesで挫折しないために基礎から学ぶ

Kubernetesは便利ですが、初心者がいきなり学ぶと難しく感じやすい技術です。

原因はKubernetesそのものだけではありません。Linux、Docker、ネットワーク、クラウドなど、複数の知識が同時に出てくるためです。

InfraAcademyでは、Linux、ネットワーク、Docker、AWSなど、Kubernetesを理解するための前提知識を初心者向けに段階的に学習できます。

Linuxはブラウザ上でコマンドを実行し、ネットワークもIPアドレスやルーターなどから順番に学べます。

Kubernetesの記事を読んでいて、Pod以前にLinuxやネットワークの部分で分からなくなった場合は、いったん基礎へ戻る方が結果的に早く理解できます。

InfraAcademyでインフラの基礎から学ぶ

Kubernetesとは?まとめ

今回は、Kubernetesとは何かを初心者向けに解説しました。

Kubernetesは、コンテナ化されたアプリケーションを複数のサーバーで安定して運用するためのプラットフォームです。Podを必要な数だけ動かし、障害時には状態を戻し、アクセス量に応じたスケールや段階的なアップデートなども管理できます。

最初に覚えたい用語は、Pod、Node、Cluster、Deployment、Serviceです。この5つの関係が分かるだけでも、Kubernetesのドキュメントや解説記事がかなり読みやすくなります。

また、DockerそのものがKubernetesに必須というわけではありません。ただ、コンテナの基本を理解するためにDockerを先に触っておくと、Kubernetesを学びやすくなります。

Kubernetesだけを単独で覚えようとせず、Linux、ネットワーク、コンテナの基礎から順番に進めてみてください。

あわせて読みたい

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る