Kubernetes × Node.js / Python 入門

はじめに

Kubernetes(k8s)は、
現代のWebアプリケーション運用において 事実上の標準技術 となっています。

DockerやDocker Composeでアプリを動かせるようになった次の壁が、

  • Kubernetesでは何をどう書けばいいのか分からない
  • Node.js / Pythonアプリをどうやってデプロイするのかイメージできない
  • YAMLファイルが多くて混乱する

という点です。

本記事では、Node.js / PythonアプリをKubernetes上で動かすまでの全体像を、

  • 設計思想の解説
  • 用語の整理
  • 実践ハンズオン

を交えながら、初心者が迷わないように文章多めで丁寧に解説します。


Kubernetes × アプリ開発の全体像

Kubernetesでアプリを動かす流れは、次のステップに分解できます。

  1. アプリを作る(Node.js / Python)
  2. Dockerでコンテナ化する
  3. Kubernetes用のYAMLを書く
  4. Deploymentでアプリを管理
  5. Serviceで外部公開

この流れを理解できると、本番運用レベルの基礎が身につきます。


Docker Composeとの思想の違い

Docker Composeは「開発効率」が主目的です。
一方、Kubernetesは「運用の自動化・安定性」が目的です。

観点Docker ComposeKubernetes
想定規模小〜中中〜大
障害時手動対応自動復旧
Pod/Container数少数多数
本番運用限定的前提

Kubernetesは「落ちる前提で設計する」思想が特徴です。


KubernetesでNode.js / Pythonを使うメリット

Node.jsやPythonはAPI・Webアプリで非常によく使われます。
Kubernetesと組み合わせることで、次のような恩恵があります。

  • プロセスが落ちても自動で再起動
  • アクセス増加時にPodを増やせる
  • バージョンアップ時も無停止で切り替え可能
  • クラウド(GKE / EKS / AKS)にそのまま移行可能

「ローカルで動いたものを、そのまま本番へ」
これを実現できるのがKubernetesです。


Kubernetesの基本リソース(復習+深掘り)

Pod

  • 1つ以上のコンテナをまとめた実行単位
  • IP・ストレージを共有する

Deployment

  • Podの数(replicas)を管理
  • 再起動・ローリングアップデートを制御

Service

  • Podの前段に立つ入口
  • Podが増減してもアクセス先を固定できる

この3つが 最重要リソース です。


【ハンズオン①】Kubernetes × Node.js(Express)

使用技術

  • Node.js
  • Express
  • Kubernetes(Docker Desktop)

① Node.jsアプリ作成

index.js

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.send("Hello Kubernetes with Node.js!");
});

app.listen(3000, () => {
  console.log("Node.js app running on port 3000");
});

ポイント

  • ポートは3000固定
  • ステートレス(重要)

② Dockerfile(Node.js)

FROM node:20-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["node", "index.js"]

Kubernetesでは 軽量イメージ(alpine) が基本です。


③ イメージをビルド

docker build -t node-k8s-sample .

④ Deployment作成

node-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: node
  template:
    metadata:
      labels:
        app: node
    spec:
      containers:
        - name: node
          image: node-k8s-sample
          ports:
            - containerPort: 3000

ここが重要

  • replicas: 2 → 冗長化
  • Podが落ちても自動復旧

⑤ Service作成

node-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: node-service
spec:
  type: NodePort
  selector:
    app: node
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 30001

⑥ デプロイ

kubectl apply -f node-deployment.yaml
kubectl apply -f node-service.yaml

⑦ 動作確認

http://localhost:30001

【ハンズオン②】Kubernetes × Python(Flask)

使用技術

  • Python
  • Flask
  • Kubernetes

① Pythonアプリ作成

app.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello Kubernetes with Python!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

hostを0.0.0.0にする理由
→ コンテナ外からアクセスするため


② Dockerfile(Python)

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

③ Deployment & Service

Pythonも Node.jsと構造は同じ です。
言語が変わってもKubernetesの考え方は共通です。


スケーリングを体験する

kubectl scale deployment node-app --replicas=4
kubectl get pods

アクセスが増えたらPodを増やす
これがKubernetes最大の強みです。


よくある設計ミス(初心者向け注意点)

  • コンテナ内に状態を持つ
  • ポート番号がServiceと不一致
  • latestタグを本番で使う
  • リソース制限を書かない

実務でよく使うkubectl

kubectl get pods
kubectl get svc
kubectl logs <pod名>
kubectl describe pod <pod名>

まとめ

Kubernetes × Node.js / Pythonを理解すると、

  • 本番運用を見据えた設計ができる
  • スケーラブルなAPIを構築できる
  • クラウドネイティブ開発に対応できる

Dockerの次に学ぶべき 実践的スキル がここにあります。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です