Kubernetesって何?わかりやすく解説

「作ったアプリを公開したら、アクセスが急に増えてサーバーがダウンした…」「コンテナが増えすぎて管理しきれない…」そんな悩みを抱えるエンジニアの救世主がKubernetesだよ。名前を見ると「なんか難しそう…」ってなるかもしれないけど、この記事を読み終わったら「あーそういうことか!コンテナ管理ってそういう仕組みなんだ!」って思えるはずだよ。

Kubernetesって名前、読み方すらわからないんだけど…何をするものなの?

クーバネティス」って読むよ!長いから「K8s(ケーエイツ)」って略すことも多いんだ。KとsのあいだにUbernetesという8文字があるから「K8s」ってわけ。ギリシャ語で「舵取り」や「操縦士」って意味があって、一言で言うと「たくさんのコンテナをまとめて管理してくれる司令塔」なんだよ。
コンテナって何?お弁当箱みたいなやつ?

お弁当箱のたとえ、正解に近いよ!コンテナっていうのは、アプリを動かすために必要なもの(プログラム・設定・ライブラリなど)をまるごとひとつの箱に詰め込んだもののことだよ。カップラーメンみたいに「必要なものが全部入ってる」から、どのサーバーに持っていっても同じように動くのが最大のメリットなんだ。
コンテナが便利なのはわかった。でも、なんでKubernetesが必要なの?

コンテナが1〜2個ならまだ手動でなんとかなるけど、実際のサービスでは数十〜数百個のコンテナが動いてるんだよ。NetflixとかAmazonは何万ものコンテナで動いてるって言われてるくらい。それを全部人間が手動で管理するのは無理だよね?そこでKubernetesが「オーケストレーション(つまり、複数のコンテナを全体をまとめて自動で調整すること)」をやってくれるわけ!
具体的に何を自動でやってくれるの?

大きく3つあるよ!①アクセスが急増したとき自動でコンテナを増やしてくれる(オートスケーリング)、②コンテナが壊れたとき自動で復活させてくれる(セルフヒーリング)、③複数のサーバーにコンテナをバランスよく分散して配置してくれる(ロードバランシング)。要するに、「サーバー管理をぜんぶ自動化してくれるシステム」だよ!
📝 3行でまとめると
  1. Kubernetesはコンテナ(アプリの箱詰め)をまとめて自動管理してくれるシステムだよ
  2. アクセス増加で自動増量・障害時に自動復旧するオートスケーリングとセルフヒーリングが最大の強みだよ
  3. Googleが開発して今はオープンソース(誰でも無料で使えるソフトウェア)として公開され、世界中の大規模サービスで使われているよ
目次

もうちょっと詳しく

Kubernetesは2014年にGoogleが開発してオープンソースとして公開したツールだよ。Googleは長年、「Borg」という社内システムで同じような仕組みを使ってきたんだけど、その経験をもとにKubernetesが生まれたんだ。今は「CNCF(Cloud Native Computing Foundation)」という団体が管理していて、AWS・Microsoft・Googleなどの大手クラウドが全員サポートしているくらい業界標準になってるよ。Kubernetesを使えばアプリの更新作業がほぼ自動化できて、障害が起きても自動で回復するから、エンジニアが深夜に緊急対応で起こされるケースがぐっと減るんだよ。企業にとっては「サービスの安定稼働」と「エンジニアの残業削減」が同時にかなう夢のツールとも言えるよ。

💡 ポイント
「K8s」はKubernetesの公式略称。エンジニアの会話や求人票にもよく出てくるから覚えておこう!

⚠️ よくある勘違い

❌ 「KubernetesはDockerの代わりに使うもの」
→ DockerとKubernetesを「どちらか一方を選ぶもの」だと思っている人が多い
⭕ 「DockerとKubernetesは役割が違う、一緒に使うもの」
→ Dockerは「コンテナを作るツール」、Kubernetesは「そのコンテナをまとめて管理するシステム」。料理で例えると、Dockerが「料理を作るシェフ」、Kubernetesが「料理をどのテーブルに出すか管理するホールマネージャー」みたいなイメージで、2つはセットで使うものだよ
なるほど〜、あーそういうことか!

[toc]

Kubernetesとは?コンテナ管理の「司令塔」を理解しよう

まずは「コンテナ」の正体を知ろう

Kubernetesを理解するには、まず「コンテナ」を知る必要があるよ。コンテナっていうのは、アプリを動かすためのすべて——プログラムのコード・設定ファイル・必要なライブラリなど——をひとつの箱にまるっと詰め込んだものだよ。

身近な例で言うと、カップラーメンをイメージしてみて。カップラーメンは「麺・スープ・かやく」がぜんぶ入っていて、どこでも同じ味が作れるよね。コンテナも同じで、どのパソコンやサーバーでも「同じ環境で同じように動く」のが最大のメリットなんだ。

昔のアプリ開発では「自分のパソコンでは動いたのに、本番サーバーでは動かない!」という問題が山ほどあったんだよ。コンテナを使えばその問題がほとんどなくなるから、今や開発の現場では当たり前の存在になってるんだ。

コンテナが増えると起きる問題

コンテナが便利なのはわかった。でも実際のサービスは、コンテナ1個では動かないんだよ。

たとえばECサイト(ネットショッピングサイト)を考えてみよう。「商品を表示するコンテナ」「注文を処理するコンテナ」「決済をするコンテナ」「ユーザー情報を管理するコンテナ」…と機能ごとにコンテナが分かれていて、それが複数のサーバー上でたくさん動いてる、ということになるんだ。

これが数十、数百となったとき——

  • 「どのコンテナがどのサーバーで動いているか」を把握する
  • 「壊れたコンテナを見つけて再起動する」
  • 「アクセスが集中したときにコンテナを自動で増やす」
  • 「新しいバージョンに更新するときにサービスを止めないようにする」

これを全部人間が手動でやるのは不可能に近いよね。そこで登場するのがKubernetesなんだ。

Kubernetesはオーケストラの「指揮者」

Kubernetesは、たくさんのコンテナをまとめて管理する「オーケストレーター(つまり、全体を調整する司令塔)」だよ。オーケストラの指揮者みたいなイメージで、「あなたはこのサーバーで動いて」「アクセスが増えたから3個に増やして」「そのコンテナが落ちたから自動で再起動して」って指示を自動でやってくれるんだ。エンジニアはKubernetesに「こういう状態にしてほしい」と設定するだけで、あとはKubernetesが勝手にその状態を保ち続けてくれる。これを「宣言的な管理(つまり、手順じゃなくて目標状態を宣言する管理方法)」とも呼ぶよ。

Kubernetesの仕組み:重要な用語を整理しよう

クラスター:Kubernetes世界の「全体」

Kubernetesで管理される一番大きな単位が「クラスター」だよ。クラスターっていうのは、Kubernetesで管理されるサーバー群の全体のことを指すよ。学校全体みたいなイメージかな。

クラスターの中には2種類の役割を持つサーバーがあるんだ:

  • コントロールプレーン(マスターノード):司令部。「どのサーバーにコンテナを配置するか」「今の状態が正常かどうか」を判断する頭脳役
  • ワーカーノード:実際にコンテナが動く場所。工場の作業員みたいな存在で、コントロールプレーンの指示に従って動く

Podとは:Kubernetesが管理する最小単位

Kubernetesで一番よく聞く単語が「Pod(ポッド)」だよ。PodはKubernetesが管理する最小単位で、1個以上のコンテナをまとめたものなんだ。

「コンテナとPodって何が違うの?」って思うよね。基本的には「1Pod=1コンテナ」のケースが多いんだけど、密接に連携するコンテナをセットにして1つのPodとして扱うこともあるよ。たとえば「アプリ本体のコンテナ」と「ログを収集するサポートコンテナ(サイドカー)」をセットにするイメージ。Podが削除されると中のコンテナも全部なくなるし、Pod内のコンテナは同じネットワーク空間を共有してるから、お互いにlocalhostで通信できるんだ。

DeploymentとService:よく使うリソース

Deployment(デプロイメント)」は、「このPodを何個動かして、どう管理するか」という設計書のことだよ。「Podを3個常に動かしてね」と設定しておけば、1個落ちたら自動で新しいPodを立ち上げてくれるんだ。

Service(サービス)」は、複数のPodへの通信をまとめて受け付ける窓口のことだよ。Podは起動するたびにIPアドレスが変わるから、直接Podに通信するのは不便なんだ。Serviceという固定の窓口を作っておけば、裏でPodが入れ替わっても関係なく通信できるんだよ。

Kubernetesの3大メリット:なぜ世界中で使われているのか

①オートスケーリング:需要に合わせて自動でサイズ調整

オートスケーリング(つまり、負荷に応じてコンテナの数を自動で増減する機能)」はKubernetesの目玉機能だよ。

例えば、ショッピングサイトを運営してたとして、普段は10個のコンテナで十分なのに、年末セールで突然アクセスが10倍になったとする。手動でサーバーを追加してたら間に合わないよね。Kubernetesは負荷を常に監視していて、「混んできた!」と判断したら自動でコンテナを増やしてくれるんだ。

逆に深夜でアクセスが少ないときは自動でコンテナを減らして、クラウドの費用(コスト)も節約してくれるよ。これを「スケールアウト(負荷が増えたときに横に広げる)」「スケールイン(負荷が減ったときに縮める)」と呼ぶんだ。

②セルフヒーリング:障害が起きても自動で立て直す

セルフヒーリング(つまり、問題が起きたときに自動で自分を修復する機能)」も超重要な機能だよ。

コンテナが何かの原因でクラッシュ(落ちる)したとき、Kubernetesは自動でそのコンテナを再起動してくれるんだ。もしノード(サーバー)そのものが壊れたら、別のノードにコンテナを移動させて、サービスが止まらないように対処してくれる。

「サーバーが落ちた!」って深夜に起こされることがぐっと少なくなるのが、エンジニアにとって最高にうれしいポイントだよ。人間が気づく前にKubernetesが勝手に直してることも多いんだ。

③ローリングアップデート:止めずにバージョンアップ

新しいバージョンのアプリに更新するとき、「サービスを停止してアップデート」ってやると、その間ユーザーはサービスを使えないよね。Kubernetesの「ローリングアップデート」を使えば、古いコンテナを少しずつ新しいコンテナに入れ替えていくから、ダウンタイム(つまり、サービスが止まっている時間)ゼロで更新できるんだ。

しかも、新しいバージョンで不具合が起きたら「ロールバック(以前の安全なバージョンに戻すこと)」をコマンド1発でできるよ。「やっぱり元に戻して!」が簡単にできるのは本当に心強いよね。

DockerとKubernetesの違い:役割をきちんと理解しよう

Dockerは「コンテナを作るツール」

Docker(ドッカー)」はコンテナを作って動かすためのツールだよ。「Dockerfile」というレシピを書いて、そこから「コンテナイメージ(つまり、コンテナの設計図)」を作り、その設計図からコンテナを起動する、という流れで使うんだ。

料理で例えると、Dockerは「レシピを書いて料理を作るシェフ」みたいな存在だね。料理(コンテナ)を作ることが専門なんだ。

Kubernetesは「コンテナをまとめて管理するシステム」

一方のKubernetesは、Dockerで作ったコンテナを「どのサーバーで動かすか」「何個動かすか」「壊れたらどうするか」を管理するシステムだよ。

同じ料理の例えで言うと、Kubernetesは「シェフが作った料理をどのテーブルに運ぶか管理して、注文が増えたら料理を増やす指示を出して、食材が切れたら補充を手配して…という全体を仕切るホールマネージャー」みたいなものだよ。2つは「作る役割」と「管理する役割」でキッチリ分かれてるんだ。

最近はDockerとKubernetesをセットで使うのが標準

「DockerかKubernetesか」という選択じゃなくて、「DockerでコンテナイメージをビルドしてKubernetesで動かす」というのが現代の標準的な構成だよ。ちなみに最近はDockerの代わりに「containerd(コンテナディー)」や「Podman(ポッドマン)」が使われるケースも増えてきたけど、Kubernetesと組み合わせて使うという考え方は同じだよ。

Kubernetesを実際に使うには?環境の選び方と基本コマンド

まずはローカルで試してみよう

「Kubernetesを試してみたい!」という場合は、自分のパソコン(ローカル環境)に構築できるツールがあるよ。

  • Minikube(ミニキューブ):1台のパソコンの中にKubernetesのクラスターを作ってくれるツール。学習用に最適で、インストールも比較的簡単だよ
  • kind(Kubernetes IN Docker):Dockerのコンテナの中にKubernetesを動かすツール。自動テスト(CI)でのテストにもよく使われるよ
  • Docker Desktop:WindowsやMacで使えるDockerのGUIツールで、設定からKubernetesを有効にするだけで使えるから手軽だよ

本番環境ならマネージドKubernetesが現実的

実際のサービスで使うなら、クラウドが提供する「マネージドKubernetes(つまり、面倒なインフラ管理をクラウド側がやってくれるKubernetes)」を使うのが現実的だよ。

  • GKE(Google Kubernetes Engine):Googleが提供。Kubernetesを作ったGoogleだけあって機能が豊富で、自動アップグレードなどの管理機能も充実してるよ
  • EKS(Amazon Elastic Kubernetes Service):AWSが提供。AWSの他のサービスとの連携が強くて、AWS環境で開発している会社に人気だよ
  • AKS(Azure Kubernetes Service):Microsoftが提供。Azure環境との親和性が高くて、Windowsコンテナにも対応してるよ

操作に使う「kubectl」コマンドを覚えよう

Kubernetesを操作するときに使うのが「kubectl(クーブシーティーエル、またはクーブクーティーエル)」というコマンドラインツールだよ。「kube control」の略で、KubernetesクラスターへのすべてのAPI呼び出しをこのツール経由で行うんだ。

よく使うコマンドをまとめるとこんな感じ:

  • kubectl get pods:動いているPodの一覧を表示する
  • kubectl describe pod [Pod名]:特定のPodの詳細情報(エラーの原因など)を表示する
  • kubectl apply -f manifest.yaml:設定ファイル(マニフェスト)を適用してリソースを作成・更新する
  • kubectl rollout undo deployment [名前]:デプロイをロールバック(前のバージョンに戻す)する
  • kubectl logs [Pod名]:Podのログ(動作記録)を確認する

最初はコマンドの多さに圧倒されるかもしれないけど、日常的によく使うのはこの10個くらいだから、実際に手を動かしながら少しずつ覚えていくのが一番の近道だよ。Minikubeで環境を作って、公式チュートリアルをひと通りやってみると一気に理解が深まるから、ぜひ試してみてね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大人になってから「これ知らなかった…」と恥ずかしい思いをした経験から、このサイトを作りました。お金・仕事・社会のしくみって、学校で教えてくれないのに知らないと損することだらけ。むずかしい言葉を「あーそういうことか!」って思えるまでかみ砕いて説明するのが得意です。主に経済・法律・税金・ライフイベント周りの用語を毎日更新中。

目次