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