使用kubedb管理数据库

kubedb 是一个在 Kubernetes 上管理数据库的开源工具,支持 MySQL,Postgres,Redis 等常用数据库。本文记录使用 0.13 版本部署 Postgres 及 Redis 的过程。

安装

使用 helm v3 安装。

helm repo add appscode https://charts.appscode.com/stable/
helm show appscode/kubedb   #查看 kubedb 信息

安装 kubedb,设置 enableAnalytics=false 关闭信息采集。

helm install kubedb-operator appscode/kubedb --version v0.13.0-rc.0 --namespace kube-system --set enableAnalytics=false
helm install kubedb-catalog appscode/kubedb-catalog --version v0.13.0-rc.0 --namespace kube-system

安装 kubedb-catalog 之后, kubectl get mysqlversions 等命令才能正常运行。

# kubectl get mysqlversions.catalog.kubedb.com 
NAME     VERSION   DB_IMAGE              DEPRECATED   AGE
5        5         kubedb/mysql:5        true         13h
5-v1     5         kubedb/mysql:5-v1     true         13h
5.7      5.7       kubedb/mysql:5.7      true         13h
5.7-v1   5.7       kubedb/mysql:5.7-v1   true         13h
5.7-v2   5.7.25    kubedb/mysql:5.7-v2                13h
5.7.25   5.7.25    kubedb/mysql:5.7.25                13h
8        8         kubedb/mysql:8        true         13h
8-v1     8         kubedb/mysql:8-v1     true         13h
8.0      8.0       kubedb/mysql:8.0      true         13h
8.0-v1   8.0.3     kubedb/mysql:8.0-v1                13h
8.0-v2   8.0.14    kubedb/mysql:8.0-v2                13h
8.0.14   8.0.14    kubedb/mysql:8.0.14                13h
8.0.3    8.0.3     kubedb/mysql:8.0.3                 13h

RBAC问题

apiserver 的 --proxy-client-cert-file=/etc/kubernetes/cert/proxy-client-cert.pem 参数指定的证书的 CN=aggregator,由于缺少 RBAC,创建 kubedb 对象时会报错无法操作 mutators.kubedb.com 和 validators.kubedb.com API(User "aggregator" cannot list resource),需要添加RBAC。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kubedb:core:aggregator
rules:
- apiGroups:
  - mutators.kubedb.com
  - validators.kubedb.com
  resources:
  - '*'
  verbs:
  - '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubedb-aggregator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubedb:core:aggregator
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: aggregator

用法

以下示例创建了一个 100G 的 9.6 版本的 Postgres 数据库,提供给 Harbor 使用。

apiVersion: kubedb.com/v1alpha1
kind: Postgres
metadata:
  name: harbor
  namespace: kubedb-postgres
spec:
  version: "9.6-v4"
  replicas: 3
  storageType: Durable
  storage:
    storageClassName: "rbd"
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 100Gi

4.0.11 版本的 Redis 示例。

apiVersion: kubedb.com/v1alpha1
kind: Redis
metadata:
  name: harbor
  namespace: kubedb-redis
spec:
  version: 4.0.11
  storageType: Durable
  storage:
    resources:
      requests:
        storage: 10Gi
    storageClassName: "rbd"
    accessModes:
      - ReadWriteOnce
  podTemplate:
    spec:
      resources:
        requests:
          memory: "256Mi"
          cpu: "250m"
        limits:
          memory: "512Mi"
          cpu: "500m"

pgAdmin4

使用 pgAdmin4 管理 Postgres 数据库。

  • pgAdmin4 镜像 dpage/pgadmin4:latest
  • 持久化: pv挂载到 /var/lib/pgadmin

可用以下配置项自定义部署:

PGADMIN_DEFAULT_EMAIL: admin
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_PORT: 80

展望

可以考虑集成 iTop,给用户提供 DBaaS 服务,需要解决数据库备份和数据安全问题。一方面是 kubedb 的快照功能,另一方面是 ceph rbd 的稳定性。另外,还许需要考虑使用方式问题,主要是以下两种方式的选择:

  • 数据库作为一个独立对象让用户直接管理,方便支持一库多用
  • 类似 Volume 那样作为一个挂载对象,可以为每个 APP 添加,可能会造成一定的资源浪费

参考资料

1. https://kubedb.com/docs/v0.13.0-rc.0/welcome/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注