🎛️

Kubernetes入門

に公開

はじめに

Kubernetesは、Dockerなどのコンテナを宣言的に管理・オーケストレーションするOSSです。
マイクロサービス化が進む現代のインフラにおいて、可用性・スケーラビリティ・自己修復をコードで実現できることが最大の魅力です。

本記事はハンズオン形式で進めます。今回は以下を扱います。

  • Kubernetesの全体像を俯瞰する
  • ローカル環境にシングルノードクラスタを構築する(kind/minikube)
  • kubectlで基本的な操作を試す

Kubernetesとは

  • コンテナオーケストレーション
    • 複数ノードにまたがるコンテナの配置(スケジューリング)とライフサイクルを自動化
  • 宣言的設定
    • YAMLで「あるべき姿」を書き、コントローラが実際の状態を継続的に収束させる
  • 拡張性
    • CRD(CustomResourceDefinition)でAPIを拡張し、独自コントローラを書ける

💡 最新安定版は1.33系(2025年7月時点)です。
4 ヶ月ごとにマイナーリリースが行われ、最新 3 つのバージョンが公式サポートされます。

学習環境の前提

項目 推奨値
ホスト OS macOS (Apple Silicon/Intel), Linux, WSL2
必要ツール Docker 25.x 以上 / Podman, curl, make
メモリ 8 GB 以上
その他 インターネット接続

※私の環境はMacBook Air M2 arm64 RAMは16GBです。

ローカルクラスタ構築

kind (Kubernetes IN Docker)

インストール

kindは公式Kubernetesプロジェクトがメンテナンスする最速ローカル環境です。

brew install kind

クラスタの作成

kind create cluster --name dev-cluster --image kindest/node:v1.33.2

作成を確認する場合

kubectl cluster-info --context kind-dev-cluster
Kubernetes control plane is running at https://127.0.0.1:64173
CoreDNS is running at https://127.0.0.1:64173/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubectl get nodes -o wide
NAME                        STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION    CONTAINER-RUNTIME
dev-cluster-control-plane   Ready    control-plane   49s   v1.33.2   172.26.0.2    <none>        Debian GNU/Linux 12 (bookworm)   6.12.5-linuxkit   containerd://2.1.3

kubectl基本操作

# Pod の作成(nginx)
kubectl create deployment nginx --image=nginx:1.27
kubectl expose deployment nginx --port=80 --type=NodePort

# 一覧表示
kubectl get pods,svc,deployment

# ログ確認
kubectl logs -f deploy/nginx

ブラウザ確認

kubectl port-forward svc/nginx 8080:80
open http://localhost:8080

YAMLで作成

nginx-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
          ports:
            - containerPort: 80
kubectl apply -f nginx-deploy.yaml
kubectl rollout status deploy/nginx

環境削除

# kind
kind delete cluster --name dev-cluster

参考リンク

Discussion