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 | コンテナの実行単位 | 無し(単体で使う) |
Deployment | Podの管理 | Service, Ingress |
Service | Podへのアクセス | Deployment |
ConfigMap | 設定ファイルの外部化 | Deployment |
Secret | 機密情報の注入 | Deployment |
Ingress | 外部公開のルーティング | Service |
Namespace | リソースの論理分離 | すべて |