手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes Nginx コンテナの実行 – Deployment で Pod を管理する

この記事では、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-ns

Deployment を作成する

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
EOF

Deployment と 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-deploy

Pod の中を確認する

起動した 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 -v

Pod 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 の入口設計が理解しやすくなります。

まとめ

Nginx コンテナを Kubernetes で実行する場合、Pod を直接作るより Deployment で管理する方が実運用に近い形になります。

Deployment、replicas、selector、template.labels の関係を理解すると、その後に Service で Pod を束ねる考え方も分かりやすくなります。まず Deployment で Pod を管理し、次に ClusterIP、NodePort、LoadBalancer の順に入口を広げていくと、Kubernetes の基本構造を段階的に確認できます。

Kubernetes Nginx コンテナの実行 – Deployment で Pod を管理する

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る