kubedb 是一个在 Kubernetes 上管理数据库的开源工具,支持 MySQL,Postgres,Redis 等常用数据库。本文记录使用 0.13
版本部署 Postgres 及 Redis 的过程。
安装
使用 helm v3
安装。
1 2 |
helm repo add appscode https://charts.appscode.com/stable/ helm show appscode/kubedb #查看 kubedb 信息 |
安装 kubedb
,设置 enableAnalytics=false
关闭信息采集。
1 2 |
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
等命令才能正常运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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 使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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
可用以下配置项自定义部署:
1 2 3 |
PGADMIN_DEFAULT_EMAIL: admin PGADMIN_DEFAULT_PASSWORD: admin PGADMIN_PORT: 80 |
展望
可以考虑集成 iTop,给用户提供 DBaaS 服务,需要解决数据库备份和数据安全问题。一方面是 kubedb 的快照功能,另一方面是 ceph rbd 的稳定性。另外,还许需要考虑使用方式问题,主要是以下两种方式的选择:
- 数据库作为一个独立对象让用户直接管理,方便支持一库多用
- 类似 Volume 那样作为一个挂载对象,可以为每个 APP 添加,可能会造成一定的资源浪费
参考资料
1 |
1. https://kubedb.com/docs/v0.13.0-rc.0/welcome/ |
发表回复