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 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

You Missed

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

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

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 56 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 57 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 75 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 64 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 77 views