Operator パターン
Kubernetes のカスタムリソースとコントローラーで、アプリケーションの運用を自動化するパターン
Operator パターンとは
Operator パターンは、Kubernetes のカスタムリソース (CRD) とカスタムコントローラーを組み合わせ、アプリケーションの運用 (デプロイ、スケーリング、バックアップ、アップグレード) を自動化するパターンである。CoreOS (現 Red Hat) が 2016 年に提唱した。
なぜ必要か
Deployment や StatefulSet だけでは、DB のフェイルオーバー、バックアップ、スキーママイグレーションなどの運用タスクを自動化できない。Operator は「人間のオペレーターの知識をコードに落とし込む」。
仕組み
Operator は CRD (Custom Resource Definition) でカスタムリソースを定義し、カスタムコントローラーがそのリソースの状態を監視する。コントローラーは Reconciliation Loop で現在の状態と望ましい状態の差分を検出し、自動的にアクション (デプロイ、スケーリング、アップグレード) を実行する。
1. CRD (Custom Resource Definition) でカスタムリソースを定義
例: PostgresCluster
2. カスタムコントローラーが CRD を監視
「PostgresCluster が作成された → PostgreSQL をデプロイ」
「レプリカ数が変更された → スケーリング」
「バージョンが変更された → ローリングアップグレード」
3. Reconciliation Loop
現在の状態 → 望ましい状態 → 差分を検出 → アクションを実行
CRD の例
CRD の例を以下に示す。
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
name: my-db
spec:
postgresVersion: 16
instances:
- replicas: 3
dataVolumeClaimSpec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 20Gi
backups:
pgbackrest:
repos:
- name: repo1
s3:
bucket: my-backups
region: ap-northeast-1
kubectl apply するだけで、3 ノードの PostgreSQL クラスター + S3 バックアップが自動構築される。
代表的な Operator
代表的な Operator を以下に示す。
| Operator | 管理対象 |
|---|---|
| Prometheus Operator | Prometheus + Alertmanager |
| Cert-Manager | TLS 証明書の自動発行・更新 |
| Strimzi | Apache Kafka |
| Crunchy PGO | PostgreSQL |
| Redis Operator | Redis Cluster |
Helm との違い
Helm との違いを以下にまとめる。
| 観点 | Helm | Operator |
|---|---|---|
| 目的 | パッケージ管理 (インストール) | ライフサイクル管理 (運用) |
| Day 1 (初期構築) | ✅ | ✅ |
| Day 2 (運用) | ❌ | ✅ (バックアップ、アップグレード) |
| 自動修復 | ❌ | ✅ (Reconciliation Loop) |
EKS での Operator
EKS では AWS Load Balancer Controller、ExternalDNS、Karpenter (ノードオートスケーラー) が Operator パターンで実装されている。
全体像を把握するには関連書籍も有用。
この記事は役に立ちましたか?
関連用語
Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
Helm
Kubernetes のパッケージマネージャーで、アプリケーションのデプロイをテンプレート化して管理する
Deployment
Kubernetes で Pod のレプリカ数、更新戦略、ロールバックを宣言的に管理するリソース
トイル
手作業で繰り返し行われる運用作業で、自動化によって削減すべき対象
Blue/Green デプロイ
2 つの同一環境を用意し、トラフィックを切り替えることでゼロダウンタイムデプロイを実現する手法
Aurora
AWS のクラウドネイティブ RDB で、MySQL/PostgreSQL 互換で高可用性・高パフォーマンスを実現する