入社1年目〜 対応

☸️ Kubernetes を
やさしく理解する

IT用語ゼロからでも大丈夫!「なぜ必要か」から「どう動くか」まで、図解でまるごとわかる

☸️ Kubernetes って何者?

一言で言うと「たくさんのアプリを自動で管理してくれる司令塔」です

🎯 たとえるなら「工場の優秀な工場長」

あなたが「商品を100個作り続けてほしい」と指示するだけで、工場長が
・どの作業台で作るか割り振り
・作業台が壊れたら別の台に切り替え
・注文が増えたら作業台を増やす
…をすべて自動でやってくれる、そんなイメージです。
👤 あなた 「3つ動かして」 ☸️ Kubernetes 工場長 アプリ 1号 サーバーA で起動 アプリ 2号 サーバーB で起動 アプリ 3号 サーバーC で起動 💥 2号 が故障 自動で 新2号 起動 🔄

アプリが故障しても、Kubernetes が自動で新しいアプリを起動してくれる

✅ Kubernetes が自動でやってくれること

🐳 そもそも Docker って何?

Kubernetes を理解するには、まず Docker(コンテナ)を知ることが大切です

🍱 たとえるなら「お弁当箱」

お弁当は「食べ物+容器」がセットになっていて、どこに持っていっても同じように食べられますよね。
Docker のコンテナも同じで、「アプリ+動かすのに必要なもの」をひとつの箱に詰めます。
どのサーバーに持っていっても、まったく同じように動きます。
❌ Docker なし 💻 開発者のPC Python 3.11 ライブラリ A v2.0 🖥️ 本番サーバー Python 3.9 ←違う! ライブラリ A v1.5 「動かない!」が頻発 😰 環境の差がバグの原因に ✅ Docker あり 📦 コンテナ(お弁当箱) Python 3.11 ライブラリ A 実行環境をまるごと梱包 どのサーバーでも同じように動く ✅ 開発・本番の環境差がなくなる

「自分のPCでは動くのに本番で動かない」問題を Docker が解決する

📌 Docker の重要ワード3つ

📋
Dockerfile (ドッカーファイル)
コンテナの「設計図」です。「このアプリを動かすには○○が必要」という手順書を書いたテキストファイルです。
🍱 お弁当のレシピ書のようなもの
📷
Image(イメージ)(いめーじ)
Dockerfile をもとに作った「コンテナの型」です。何度でも同じコンテナを作れます。USBメモリに入れてどこでも使えるイメージです。
🍱 お弁当箱の「型」。これをもとに何個でも同じお弁当を作れる
📦
Container(コンテナ)(こんてなー)
Image から実際に起動した「動いているアプリの実体」です。Image は設計図、Container はそれを実際に動かしたものです。
🍱 実際に作られて食べられるお弁当そのもの
まとめると:
Dockerfile(レシピ)→ Image(型)→ Container(実際に動くアプリ)という流れです。

🤔 なぜ Kubernetes が必要なの?

Docker だけでは困ること、Kubernetes がどう解決するかを見てみましょう

😰 Kubernetes なし(手作業) サーバー1 アプリ×3 サーバー2 アプリ×2 サーバー3 💀 故障中 Srv4 👨‍💻 人が1台ずつ確認して手動で対応 ⚠️ 故障に気づくまで数時間かかる 😰 アクセスが増えると手作業で追加 🕐 デプロイのたびに全部止まる 😊 Kubernetes あり(自動管理) ☸️ K8s 司令塔 サーバー1 サーバー2 サーバー3 新サーバー 自動追加 ✨

Kubernetes は複数サーバーをまとめて自動管理してくれる

📖 重要用語をやさしく解説

覚えることは多くないです!まずこの7つを押さえましょう

☸️ Cluster(クラスター)= K8s が管理する「工場全体」 🖥️ Node(ノード)= 「作業台(サーバー1台)」 Pod(ポッド) = アプリの「トレイ」 Container (お弁当箱) Sidecar (おかず) 同じIPを共有 Pod(ポッド) = アプリの「トレイ」 DB Container (データベース) Node 1 🖥️ Node(ノード)= 「作業台(サーバー1台)」 Pod App Container Pod App Container Node 2

Container(お弁当箱)→ Pod(トレイ)→ Node(作業台)→ Cluster(工場全体)という入れ子構造

📦
Container(コンテナ)(こんてなー)
アプリとその動作に必要なものをすべて詰め込んだ「お弁当箱」です。一度作れば、どのサーバーでも同じように動きます。
🍱 食べ物+容器がセットのお弁当。どこに持っていっても同じ
🫛
Pod(ポッド)(ぽっど)
Kubernetes が管理する最小単位です。1つ以上のコンテナをまとめたグループで、同じネットワーク・ストレージを共有します。
「コンテナはPodの中で動く」と覚えてください。
🍽️ 複数のお弁当を乗せた「トレイ」。一緒に運ばれる
🖥️
Node(ノード)(のーど)
Podが実際に動くサーバー(物理・仮想を問わず)です。「Worker Node(ワーカーノード)」とも呼ばれます。1つのノードに複数のPodが乗ります。
🏭 工場の「作業台」。複数のトレイ(Pod)を乗せて作業できる
☸️
Cluster(クラスター)(くらすたー)
Kubernetes が管理する「全体のまとまり」です。複数のNodeをひとまとめにして、K8sが全体を見渡して管理します。
🏭 工場全体。複数の作業台(Node)を束ねたもの
📋
Deployment(デプロイメント)(でぷろいめんと)
「このアプリのPodを○個動かし続けてほしい」という指示書です。Podが壊れたら自動で作り直したり、アップデートを管理したりします。
「アプリを本番環境に公開・更新する」行為をデプロイと呼びます。
📄 工場長への「製造指示書」。「この商品を常に3個作れ」という命令書
🚪
Service(サービス)(さーびす)
Podへのアクセス窓口です。Podは起動するたびにIPアドレスが変わってしまいますが、Serviceを使うことで常に同じ場所にアクセスできます。
📞 会社の代表電話番号。担当者(Pod)が変わっても、番号は同じ
💻
kubectl(クーブコントロール / クーブシーティーエル)
Kubernetes を操作するためのコマンドラインツールです。ターミナルで kubectl get pods のようにコマンドを打って、クラスターを操作します。
🎮 K8sクラスターへの「リモコン」。ボタン(コマンド)を押すと動く

🏗️ Kubernetes の全体像

K8s クラスターの中には「頭脳(司令塔)」と「手足(働き手)」があります

👤 あなた kubectl 指示 🧠 頭脳(Control Plane) 司令塔の役割。あなたの指示を受け取って全体を管理する API Server K8sへの「受付窓口」。すべての操作はここを通る etcd 設定を保存する「金庫」 Scheduler どのサーバーに配置か決める Controller Manager 「あるべき状態」かチェックして修正する番人 「動け」と指示 ⚙️ 手足(Worker Nodes) 実際にアプリを動かすサーバー群 サーバー1(Node 1) kubelet(管理係) kube-proxy(通信係) Pod A Pod B Pod C サーバー2(Node 2) kubelet(管理係) kube-proxy(通信係) Pod D Pod E

左の「頭脳」があなたの指示を受け取り、右の「手足(サーバー群)」を動かす

各部品の役割(やさしく説明)

部品名どこにある?何をする?(やさしく)
API Server頭脳K8sへの「受付窓口」。kubectl からの命令はすべてここが受け取る
etcd頭脳クラスター全体の設定情報を保存する「金庫」。バックアップがとても重要
Scheduler頭脳「どのサーバーにアプリを置くか」を決める配置担当
Controller Manager頭脳「指示通りに動いているか」を常に監視して、ズレがあれば修正する番人
kubelet各サーバー頭脳からの指示を受けて、そのサーバーでPodを起動・管理する係
kube-proxy各サーバーサーバー内のネットワーク通信を管理する係

🚀 アプリを公開するまでの流れ

「コードを書いてからユーザーに届くまで」を順に見てみましょう

💻 ①コードを書く アプリ開発 🐳 ②Imageを作る docker build ☁️ ③保管庫へ送る Docker Hub等 📝 ④設計書を書く YAML ファイル 🎉 ⑤K8sに渡すと自動でPod起動 kubectl apply -f xxx.yaml

④の「設計書(YAML)」を⑤でK8sに渡すと、あとは自動でアプリが起動する

⑤の後でK8sの中で何が起きているか

🔄 K8s の一番重要な考え方:
「指示した状態」と「実際の状態」を常に比較して、ズレがあれば自動修正し続けます。
だから障害があっても、人が気づかないうちに自動復旧しているのです。

🌐 ユーザーがアクセスするときの流れ

外部からどうやってアプリに届くのか、図で確認しましょう

🌍 外部の ユーザー Ingress (イングレス) URLを見て 振り分け係 例:/api → APIへ   / → トップページへ Service (受付窓口) APIサーバー向け Service (受付窓口) Webページ向け Service (受付窓口) DB向け API Pod 1 API Pod 2 Web Pod Serviceのポイント Podは起動のたびに IPが変わってしまう Serviceが固定の 窓口になる ✅

外部ユーザー → Ingress(振り分け)→ Service(受付窓口)→ Pod(アプリ)の順に届く

なぜ Service が必要なのか?
Pod はサーバー障害やアップデートのたびに新しい IP アドレスが割り振られます。毎回 IP が変わると「どこにアクセスすればいいかわからない」状態になります。
Service は変わらない「代表番号」のような役割を持ち、後ろの Pod が変わっても同じ場所にアクセスできるようにします。

❓ よくある疑問

「そこが気になってた!」というQ&Aをまとめました

Q. Kubernetes と Docker って何が違うの?
Docker:コンテナを「作って動かす」技術。1台のサーバーでアプリをコンテナ化するのに使います。

Kubernetes:コンテナを「大量に・複数サーバーで・自動管理する」技術。Docker で作ったコンテナを何十台・何百台のサーバー上で運用するときに使います。

ざっくり言うと: Docker がお弁当を作る技術で、Kubernetes がお弁当工場全体を管理する技術です。
Q. 「デプロイ」って結局何をすること?
開発したアプリを「実際にユーザーが使える状態にすること」です。

たとえばスマホアプリをApp Storeに公開する、Webサービスをサーバーに設置してURLでアクセスできるようにする、それがデプロイです。

Kubernetes では kubectl apply -f deployment.yaml というコマンドを打つだけで、アプリの配置・設定・起動をまとめてやってくれます。
Q. YAML って何?なぜ使うの?
YAML(ヤムル)は「設定を書くためのファイル形式」です。

Kubernetes では「このアプリを3つ起動してほしい」「こういう設定で動かしてほしい」という指示を YAML ファイルに書いて渡します。

Excelで書いた発注書をシステムに取り込む、みたいなイメージです。YAML という形式で「あるべき状態」を書くと、K8s がそれを読んで自動で実現してくれます。
Q. 「スケール」って何?
スケール(Scale)とは、アプリの「処理能力を増減すること」です。

スケールアウト:アプリのコピー(Pod)を増やして、たくさんのアクセスをさばけるようにすること。飲食店でいえば席を増やすイメージ。

スケールイン:逆にアクセスが減ったとき、Pod を減らしてサーバー代を節約すること。

Kubernetes では設定しておくと、CPUの使用率に応じて自動でPod数を増減してくれます(HPA という機能)。
Q. 「ローリングアップデート」って何?
アプリを新バージョンに更新するとき、全部一度に止めず「少しずつ入れ替える」方法です。

たとえば Pod が3つあるとき:
1つ目だけ新バージョンに更新 → 動作確認 → 2つ目も更新 → 3つ目も更新

こうすることで、ユーザーはほぼ気づかないままアップデートが完了します。これが「ダウンタイムゼロ(サービス停止なし)」のデプロイです。
Q. EKS・GKE・AKS って何?
クラウド各社が提供する「マネージド Kubernetes サービス」です。

Kubernetes をゼロから構築すると複雑な設定が必要ですが、これらのサービスを使うと面倒な部分(頭脳側の管理)をクラウド側がやってくれます。

EKS:Amazon(AWS)が提供
GKE:Google(GCP)が提供
AKS:Microsoft(Azure)が提供

実務ではほぼこれらを使います。「K8sをクラウドに任せる」イメージです。

📚 次に学ぶなら