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 第32章:Helmの基本操作(install, upgrade, rollback)~マニフェスト管理をもっと効率よく、自動化するために~

Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第6章:Cloud Shellの活用:GCPを「どこからでも手軽に操作できる秘密基地」

  • 投稿者 mh
  • 6月 6, 2025
  • 9 views

Kubernetes Learning 第32章:Helmの基本操作(install, upgrade, rollback)~マニフェスト管理をもっと効率よく、自動化するために~

  • 投稿者 mh
  • 6月 5, 2025
  • 11 views

現場で使えるChrome DevTools実践ガイド 第11章:アクセシビリティの確認

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

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第5章:Cloud SDKとgcloudコマンド:GCPを「キーボードから操る」魔法のツール

  • 投稿者 mh
  • 6月 4, 2025
  • 24 views

Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

  • 投稿者 mh
  • 6月 4, 2025
  • 26 views

現場で使えるChrome DevTools実践ガイド 第10章:Device Modeでのレスポンシブ検証

  • 投稿者 mh
  • 6月 4, 2025
  • 28 views