Kubernetes Learning 第12章:リソース毎のマニフェスト作成 〜Kubernetesで何をどう定義するのか〜

Kubernetesでは、すべての構成要素(PodやDeployment、Serviceなど)を「マニフェスト」と呼ばれるYAMLファイルで宣言的に定義します。

この章では、よく使われるKubernetesリソースごとに、基本的なマニフェストの形と用途を学んでいきましょう。


🔹 1. Pod:最小単位の実行リソース

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: app
      image: nginx
  • Kubernetes上で動く最も小さなユニット
  • 通常は直接使うことは少なく、Deploymentなどで管理されます

🔹 2. Deployment:Podの管理者

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myimage:1.0
  • 指定した数のPodを起動・維持してくれる
  • ロールアウトやロールバックもサポート
  • 通常アプリケーションをデプロイする場合は Deployment を使う

🔹 3. Service:Podへのアクセス口

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP
  • 複数Podに対して一貫したアクセス手段を提供
  • selector で対象となるPodをラベルで指定
  • type によってアクセス範囲が変わる(例:ClusterIP, NodePort, LoadBalancer

🔹 4. ConfigMap:設定ファイルの外部化

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
data:
  APP_MODE: production
  LOG_LEVEL: debug
  • 環境変数や設定値をPodに渡すためのリソース
  • アプリのビルドと設定を分離できる

🔹 5. Secret:パスワードなどの機密情報

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  DB_PASSWORD: cGFzc3dvcmQ=  # "password" を base64エンコード
  • パスワードやAPIキーを安全に保持する
  • 必ず base64でエンコードする必要がある(暗号化ではない点に注意)

🔹 6. Ingress:外部からのHTTP(S)アクセス制御

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp-service
                port:
                  number: 80
  • 複数のServiceを ホスト名やパス単位で外部公開できる
  • NginxなどのIngress Controllerが必要

🔹 7. Namespace:リソースの区切り

apiVersion: v1
kind: Namespace
metadata:
  name: dev
  • 複数のプロジェクトやチームが同じクラスタを使う際に便利
  • マニフェストに metadata.namespace を指定すればそのNamespaceで動作

🧪 実行方法:マニフェストの適用

作成したマニフェストは以下のように kubectl apply で適用できます:

kubectl apply -f deployment.yaml

確認するには:

kubectl get all -n dev
kubectl describe deployment myapp-deployment

💡 実践のヒント

  • 1リソース = 1ファイルで管理すると見通しが良い
  • ただし環境ごと(dev/staging/prod)に分けたい場合は kustomize や Helm の導入を検討
  • Gitに管理しておくと、チームでの構成の共有やレビューもしやすくなります

📦 まとめ表

リソース名目的よく一緒に使うリソース
Podコンテナの実行単位無し(単体で使う)
DeploymentPodの管理Service, Ingress
ServicePodへのアクセスDeployment
ConfigMap設定ファイルの外部化Deployment
Secret機密情報の注入Deployment
Ingress外部公開のルーティングService
Namespaceリソースの論理分離すべて

mh

Related Posts

Kubernetes Learning 第13章:kubectl apply / diff / deleteの運用

Kubernetes の設定を管理・反映していく上で、kub…

Kubernetes Learning 第11章:YAML形式の基本 ~Kubernetesマニフェストの土台を理解する~

Kubernetesの設定は基本的に YAML(ヤムル)形式…

You Missed

Kubernetes Learning 第13章:kubectl apply / diff / deleteの運用

  • 投稿者 mh
  • 5月 17, 2025
  • 8 views

Android application development 第17章:SQLiteとRoomの比較と実装

  • 投稿者 mh
  • 5月 17, 2025
  • 7 views

Kubernetes Learning 第12章:リソース毎のマニフェスト作成 〜Kubernetesで何をどう定義するのか〜

  • 投稿者 mh
  • 5月 16, 2025
  • 18 views

Android application development 第16章:SharedPreferences

  • 投稿者 mh
  • 5月 16, 2025
  • 18 views

Kubernetes Learning 第11章:YAML形式の基本 ~Kubernetesマニフェストの土台を理解する~

  • 投稿者 mh
  • 5月 15, 2025
  • 23 views

Android application development 第15章:リストのクリック処理と画面遷移

  • 投稿者 mh
  • 5月 15, 2025
  • 18 views