ワークロード
アプリケーションを実行するリソース
Pod
PodはK8sの最小デプロイ単位。1つ以上のコンテナを含み、 ストレージとネットワークを共有します。通常は1Pod=1コンテナ。
pod.yaml
yaml
1 apiVersion: v1 2 kind: Pod 3 metadata: 4 name: nginx-pod 5 labels: 6 app: nginx 7 spec: 8 containers: 9 - name: nginx 10 image: nginx:1.25 11 ports: 12 - containerPort: 80 13 resources: 14 requests: 15 memory: "64Mi" 16 cpu: "250m" 17 limits: 18 memory: "128Mi" 19 cpu: "500m"
Deployment
Deploymentはステートレスアプリの管理。 ReplicaSetを管理し、ローリングアップデート、ロールバックを提供。
deployment.yaml
yaml
1 apiVersion: apps/v1 2 kind: Deployment 3 metadata: 4 name: nginx-deployment 5 spec: 6 replicas: 3 7 selector: 8 matchLabels: 9 app: nginx 10 strategy: 11 type: RollingUpdate 12 rollingUpdate: 13 maxSurge: 1 14 maxUnavailable: 0 15 template: 16 metadata: 17 labels: 18 app: nginx 19 spec: 20 containers: 21 - name: nginx 22 image: nginx:1.25 23 ports: 24 - containerPort: 80
1 # デプロイ操作 2 kubectl apply -f deployment.yaml 3 kubectl rollout status deployment/nginx-deployment 4 kubectl rollout history deployment/nginx-deployment 5 kubectl rollout undo deployment/nginx-deployment 6 kubectl scale deployment nginx-deployment --replicas=5
StatefulSet
StatefulSetはステートフルアプリ用。 安定したネットワークID、永続ストレージ、順序付きデプロイを提供。
用途
DB、Kafka、ZooKeeper等
Pod名
固定: name-0, name-1, name-2
statefulset.yaml
yaml
1 apiVersion: apps/v1 2 kind: StatefulSet 3 metadata: 4 name: postgres 5 spec: 6 serviceName: "postgres" 7 replicas: 3 8 selector: 9 matchLabels: 10 app: postgres 11 template: 12 metadata: 13 labels: 14 app: postgres 15 spec: 16 containers: 17 - name: postgres 18 image: postgres:15 19 volumeMounts: 20 - name: data 21 mountPath: /var/lib/postgresql/data 22 volumeClaimTemplates: 23 - metadata: 24 name: data 25 spec: 26 accessModes: ["ReadWriteOnce"] 27 resources: 28 requests: 29 storage: 10Gi
DaemonSet
DaemonSetは全ノード(または選択したノード)で 1つずつPodを実行。ログ収集、監視エージェントに使用。
daemonset.yaml
yaml
1 apiVersion: apps/v1 2 kind: DaemonSet 3 metadata: 4 name: fluentd 5 spec: 6 selector: 7 matchLabels: 8 name: fluentd 9 template: 10 metadata: 11 labels: 12 name: fluentd 13 spec: 14 containers: 15 - name: fluentd 16 image: fluentd:latest 17 volumeMounts: 18 - name: varlog 19 mountPath: /var/log 20 volumes: 21 - name: varlog 22 hostPath: 23 path: /var/log
Job / CronJob
Job
一度きりのタスク実行。完了まで再試行。バッチ処理向け。
CronJob
定期実行のJob。cron形式でスケジュール指定。
cronjob.yaml
yaml
1 apiVersion: batch/v1 2 kind: CronJob 3 metadata: 4 name: backup 5 spec: 6 schedule: "0 2 * * *" # 毎日2時 7 jobTemplate: 8 spec: 9 template: 10 spec: 11 containers: 12 - name: backup 13 image: backup-tool:latest 14 command: ["/bin/sh", "-c", "backup.sh"] 15 restartPolicy: OnFailure
SRE/インフラ観点
ワークロード選択の指針
- • Webアプリ: Deployment
- • DB: StatefulSet(またはOperator)
- • ログ/監視: DaemonSet
- • バッチ: Job / CronJob
運用のポイント
- • 必ず resources.requests/limits を設定
- • Podを直接作成せず、コントローラ経由で管理
- • ローリングアップデート戦略を検討