kubenetesの操作において、なぜpodを直接作成してはいけないのですか?

julien-tromeur-EOSHmMbjT8g-unsplash.jpg

質問

kubenetesの操作において、なぜpodを直接作成してはいけないのですか?


解答

とても良い質問です。
Kubernetes では Podを直接作成してはいけない(避けるべき)理由 は、

主に「管理性・可用性・拡張性・自動復旧性」に関係しています。


順を追って解説します。


1. Podは「使い捨て」だから

Pod は Kubernetes の最小実行単位ですが、永続的な存在を前提としていません
たとえばノード障害やスケジューラの再調整によって、Pod はいつでも削除・再作成されます。

つまり、

kubectl run my-pod --image=nginx

のように直接Podを作成しても、次のような問題が起こります。

  • Podがクラッシュすると再起動されない

  • ノードが落ちたらPodも消える

  • 複製(スケーリング)ができない

  • 更新時に古いPodを置き換える仕組みがない

→ **運用に耐えない「一回限りの存在」**になってしまいます。


2. Kubernetesの基本単位は「Controller」

Kubernetesでは、Podは「直接管理対象」ではなく、
Deployment・ReplicaSet・DaemonSet・StatefulSet などの コントローラ(Controller) が管理します。

たとえば Deployment の場合

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-nginxspec:  replicas: 3  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:        - name: nginx          image: nginx:latest

このように書くと、Deploymentが以下を自動で行います。

  • Podを3つ起動(replicas=3)

  • 1つ落ちたら自動で再作成

  • イメージ更新時にローリングアップデート

  • スケーリング操作(kubectl scale)が可能

「Podの望ましい状態(Desired State)」を常に保つ仕組み です。


3. Infrastructure as Code(IaC)の考え方

YAMLマニフェストで定義しておけば、同じ構成を再現できます。
直接Podを作ると、その状態が一時的で再現不可能です。
運用チームやCI/CD環境では、宣言的管理(Declarative Management) が求められます。


4. 例外的に「直接Pod」を作る場面

一方で、テストやデバッグ目的では直接Podを作ることがあります。

  • kubectl run debug --image=busybox -it -- /bin/sh
    → 確認や一時的な操作用コンテナ

  • kubectl apply -f pod.yaml
    → ネットワークテストなど

ただしこれは「本番運用ではない」前提です。


まとめ

項目直接Pod作成Deploymentなどで管理
再起動・復旧なし自動で再作成される
スケーリングできない簡単に増減可能
更新・バージョン管理手動で再作成ローリングアップデート可
運用・管理性低い高い
用途デバッグ・テスト本番運用

結論:

Podを直接作成してはいけないのは、それが「Kubernetesの管理対象の最小単位」であっても「管理の主体ではない」からです。
本番環境では常に Deployment などのコントローラを介してPodを扱うべきです。




プロのためのLinuxシステム構築・運用技術改訂新版 システム構築運用/ネットワーク・ストレージ管理の秘 (Software Design plusシリーズ) [ 中井悦司 ]

価格:3278円
(2024/11/2 00:04時点)
感想(1件)


 



この記事へのコメント

広告です。クリックいただけると励みになります。