CockroachDB Operator #
一、Operator概述 #
1.1 什么是Operator #
text
CockroachDB Operator
┌─────────────────────────────────────────────────────────────┐
│ │
│ Operator 功能: │
│ ├── 自动化部署 │
│ ├── 自动化扩缩容 │
│ ├── 自动化故障恢复 │
│ ├── 自动化备份恢复 │
│ └── 自动化升级 │
│ │
│ 核心组件: │
│ ├── CRD (Custom Resource Definition) │
│ │ └── CrdbCluster: 集群定义 │
│ ├── Controller │
│ │ └── 监控和管理集群状态 │
│ └── Webhook │
│ └── 验证和默认配置 │
│ │
└─────────────────────────────────────────────────────────────┘
1.2 架构图 #
text
Kubernetes 部署架构
┌─────────────────────────────────────────────────────────────┐
│ │
│ Kubernetes Cluster │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CockroachDB Operator │ │
│ │ (Deployment) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CrdbCluster CRD │ │
│ │ (集群定义) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Stateful │ │ Stateful │ │ Stateful │ │
│ │ Set │ │ Set │ │ Set │ │
│ │ (Node 1) │ │ (Node 2) │ │ (Node 3) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │
│ └──────────────┼──────────────┘ │
│ │ │
│ PVC (持久化存储) │
│ │
└─────────────────────────────────────────────────────────────┘
二、安装Operator #
2.1 前置要求 #
yaml
# 要求:
# - Kubernetes 1.21+
# - kubectl 已配置
# - Helm 3.x (可选)
# - 足够的资源
# 检查Kubernetes版本
kubectl version
# 检查可用资源
kubectl describe nodes | grep -A 5 "Allocated resources"
2.2 使用Helm安装 #
bash
# 添加Helm仓库
helm repo add cockroachdb https://charts.cockroachdb.com/
# 更新仓库
helm repo update
# 安装Operator
helm install cockroach-operator cockroachdb/cockroach-operator \
--namespace cockroach-operator-system \
--create-namespace
# 验证安装
kubectl get pods -n cockroach-operator-system
2.3 使用kubectl安装 #
bash
# 安装CRD
kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/master/install/crds.yaml
# 安装Operator
kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/master/install/operator.yaml
# 验证安装
kubectl get pods -n cockroach-operator-system
三、部署集群 #
3.1 基本部署 #
yaml
# cockroach-cluster.yaml
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach
namespace: default
spec:
dataStore:
pvc:
source:
persistentVolumeClaimSpec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
tlsEnabled: true
nodes: 3
image:
name: cockroachdb/cockroach:v23.1.0
bash
# 部署集群
kubectl apply -f cockroach-cluster.yaml
# 查看状态
kubectl get crdbcluster
kubectl get pods
kubectl get services
3.2 安全部署 #
yaml
# cockroach-cluster-secure.yaml
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach-secure
spec:
dataStore:
pvc:
source:
persistentVolumeClaimSpec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: standard
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"
tlsEnabled: true
nodes: 5
image:
name: cockroachdb/cockroach:v23.1.0
additionalAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
3.3 多区域部署 #
yaml
# cockroach-cluster-multi-region.yaml
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach-multiregion
spec:
dataStore:
pvc:
source:
persistentVolumeClaimSpec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
resources:
requests:
cpu: "2"
memory: "4Gi"
tlsEnabled: true
nodes: 9
image:
name: cockroachdb/cockroach:v23.1.0
nodeTopology:
labels:
- topology.kubernetes.io/zone
locality:
zones:
- name: us-east-1a
nodes: 3
- name: us-east-1b
nodes: 3
- name: us-east-1c
nodes: 3
四、管理集群 #
4.1 扩缩容 #
yaml
# 扩容到5节点
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach
spec:
nodes: 5 # 修改节点数
# ... 其他配置
bash
# 应用变更
kubectl apply -f cockroach-cluster.yaml
# Operator自动:
# 1. 创建新的StatefulSet副本
# 2. 等待新节点就绪
# 3. 触发数据再均衡
4.2 升级版本 #
yaml
# 升级到新版本
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach
spec:
image:
name: cockroachdb/cockroach:v23.2.0 # 新版本
# ... 其他配置
bash
# 应用变更
kubectl apply -f cockroach-cluster.yaml
# Operator自动:
# 1. 滚动升级每个节点
# 2. 等待节点健康
# 3. 继续下一个节点
4.3 备份配置 #
yaml
# 配置备份
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach
spec:
# ... 其他配置
backups:
- name: daily-backup
schedule: "0 0 * * *" # 每天凌晨
backupSpec:
destination:
s3:
bucket: my-backup-bucket
prefix: cockroach-backups
credentials:
secret: backup-credentials
retentionPolicy:
retentionPeriod: 30d
五、访问集群 #
5.1 使用SQL客户端 #
bash
# 端口转发
kubectl port-forward service/cockroach-public 26257:26257
# 连接集群
cockroach sql --url="postgresql://root@localhost:26257/defaultdb?sslmode=disable"
# 或使用psql
psql "postgresql://root@localhost:26257/defaultdb?sslmode=disable"
5.2 访问Web UI #
bash
# 端口转发Web UI
kubectl port-forward service/cockroach-public 8080:8080
# 访问
# http://localhost:8080
5.3 创建客户端Pod #
yaml
# client.yaml
apiVersion: v1
kind: Pod
metadata:
name: cockroach-client
spec:
containers:
- name: cockroach-client
image: cockroachdb/cockroach:v23.1.0
command:
- sleep
- "3600"
bash
# 创建客户端Pod
kubectl apply -f client.yaml
# 连接集群
kubectl exec -it cockroach-client -- cockroach sql \
--url="postgresql://root@cockroach-public:26257/defaultdb?sslmode=disable"
六、监控配置 #
6.1 Prometheus集成 #
yaml
# 启用Prometheus监控
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroach
spec:
# ... 其他配置
additionalAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
yaml
# Prometheus ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cockroach
spec:
selector:
matchLabels:
app.kubernetes.io/name: cockroach
endpoints:
- port: http
path: /_status/vars
6.2 Grafana仪表板 #
text
导入Grafana仪表板:
1. 访问 Grafana
2. 导航到 Dashboards > Import
3. 输入仪表板 ID: 10908
4. 选择 Prometheus 数据源
5. 点击 Import
七、故障排除 #
7.1 常见问题 #
bash
# 查看Operator日志
kubectl logs -n cockroach-operator-system -l app=cockroach-operator
# 查看集群状态
kubectl describe crdbcluster cockroach
# 查看Pod状态
kubectl get pods -l app.kubernetes.io/name=cockroach
# 查看Pod日志
kubectl logs cockroach-0
# 查看事件
kubectl get events --sort-by='.lastTimestamp'
7.2 常见错误处理 #
yaml
# Pod无法启动
# 检查资源限制
kubectl describe pod cockroach-0
# 检查存储
kubectl get pvc
# 检查网络
kubectl get services
# 重启Pod
kubectl delete pod cockroach-0
# Operator会自动重建
八、最佳实践 #
8.1 生产配置建议 #
text
生产环境最佳实践
┌─────────────────────────────────────────────────────────────┐
│ │
│ 节点配置: │
│ ├── 最少5个节点 │
│ ├── 每节点4+ CPU │
│ └── 每节点8GB+ 内存 │
│ │
│ 存储配置: │
│ ├── 使用SSD存储 │
│ ├── 预留足够空间 │
│ └── 配置存储类 │
│ │
│ 网络配置: │
│ ├── 启用TLS │
│ ├── 配置网络策略 │
│ └── 使用Service Mesh (可选) │
│ │
│ 备份配置: │
│ ├── 配置定期备份 │
│ ├── 异地备份 │
│ └── 测试恢复流程 │
│ │
│ 监控配置: │
│ ├── 集成Prometheus │
│ ├── 配置告警 │
│ └── 定期检查 │
│ │
└─────────────────────────────────────────────────────────────┘
九、总结 #
CockroachDB Operator要点:
| 特性 | 说明 |
|---|---|
| 部署 | CRD定义集群 |
| 扩缩容 | 修改nodes参数 |
| 升级 | 滚动升级 |
| 备份 | 自动备份配置 |
| 监控 | Prometheus集成 |
下一步,让我们学习生态工具!
最后更新:2026-03-27