この記事では、Kubernetes 上で Nginx コンテナを Deployment として実行し、Pod の作成、状態確認、ログ確認、削除までを整理します。
Kubernetes の最小実行単位は Pod ですが、通常は Pod を直接管理するよりも Deployment で管理します。Deployment を使うことで、Pod の再作成、replicas の維持、rolling update などを Kubernetes に任せられます。
書籍
Kubernetes 完全ガイド 第 2 版
Kubernetes の Pod、Deployment、Service、基本リソースを体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Pod と Deployment の違い
Pod はコンテナを実行する最小単位です。ただし Pod は作り直されると名前や IP アドレスが変わります。実運用では、Pod を直接作るより Deployment を作り、その Deployment が ReplicaSet と Pod を管理する形にするのが基本です。
- Pod はコンテナを実行する単位
- Deployment は Pod の望ましい状態を管理する単位
- replicas により Pod 数を維持できる
- selector と template.labels の対応が重要
- Service は Pod ではなく label selector により対象 Pod を束ねる
Namespace を作成する
確認用の Namespace を作成します。以降のリソースはこの Namespace に作成します。
kubectl create namespace nginx-basic-nsDeployment を作成する
Nginx の Deployment を作成します。ここでは replicas を 2 にして、同じ label を持つ Pod が 2 個起動する状態を作ります。
kubectl -n nginx-basic-ns apply -f - <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOFDeployment と Pod を確認する
Deployment、ReplicaSet、Pod の状態を確認します。Deployment を作ると、その下に ReplicaSet が作られ、ReplicaSet が Pod 数を維持します。
kubectl -n nginx-basic-ns get deploy,rs,pod -o wide
kubectl -n nginx-basic-ns describe deploy nginx-deployPod の中を確認する
起動した Pod のログやコンテナ内の Nginx バージョンを確認します。Pod 名は環境ごとに変わるため、label selector から取得します。
POD_NAME=$(kubectl -n nginx-basic-ns get pod -l app=nginx -o jsonpath='{.items[0].metadata.name}')
kubectl -n nginx-basic-ns logs ${POD_NAME}
kubectl -n nginx-basic-ns exec ${POD_NAME} -- nginx -vPod IP への直接アクセスは確認用に留める
Pod には IP アドレスがありますが、Pod IP は作り直しで変わります。そのため、Pod IP への直接アクセスは確認用に留め、通常は Service を入口にします。
POD_IP=$(kubectl -n nginx-basic-ns get pod -l app=nginx -o jsonpath='{.items[0].status.podIP}')
kubectl -n nginx-basic-ns run curl --rm -it --image=curlimages/curl --restart=Never -- curl -I http://${POD_IP}/replicas を変更する
Deployment では replicas を変更することで、Pod 数を増減できます。Kubernetes は指定された数になるように Pod を作成または削除します。
kubectl -n nginx-basic-ns scale deploy nginx-deploy --replicas=3
kubectl -n nginx-basic-ns get pod -l app=nginx -o wide
kubectl -n nginx-basic-ns scale deploy nginx-deploy --replicas=2
kubectl -n nginx-basic-ns get pod -l app=nginx -o wide後片付け
確認が終わったら、Namespace ごと削除します。
kubectl delete namespace nginx-basic-ns関連する記事
Nginx Deployment を起点に、Service の公開範囲を ClusterIP、NodePort、LoadBalancer の順に確認すると、Kubernetes の入口設計が理解しやすくなります。
- Kubernetes Nginx コンテナと Service ClusterIP – クラスタ内部通信の入口を作る
- Kubernetes Nginx コンテナと Service NodePort – Node のポート経由でアクセスする
- Kubernetes Nginx コンテナと Service LoadBalancer – MetalLB で外部 IP を確認する
- Kubernetes 設定マニュアル – オンプレ環境でクラスタ運用を整理する
まとめ
Nginx コンテナを Kubernetes で実行する場合、Pod を直接作るより Deployment で管理する方が実運用に近い形になります。
Deployment、replicas、selector、template.labels の関係を理解すると、その後に Service で Pod を束ねる考え方も分かりやすくなります。まず Deployment で Pod を管理し、次に ClusterIP、NodePort、LoadBalancer の順に入口を広げていくと、Kubernetes の基本構造を段階的に確認できます。



