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 | リソースの論理分離 | すべて |
