各种坑逼,查了一堆资料。各种资料都说ceph.client.admin.keyring需要base64,再存到config里面让StorageClass去读。
最后发现,不需要去base64,直接把密钥原文存进去就行了。
我用的是kubesphere 蛮好用的,推荐大家尝试。
添加ceph步骤参考官方就行,不要base64即可。
相关资料
https://kubernetes.io/zh/docs/concepts/storage/storage-classes/#ceph-rbd
https://kubernetes.io/docs/concepts/storage/storage-classes/
https://jimmysong.io/kubernetes-handbook/practice/using-ceph-for-persistent-storage.html
在 1.4 以后,kubernetes 提供了一种更加方便的动态创建 PV 的方式;也就是说使用 StoragaClass 时无需预先创建固定大小的 PV,等待使用者创建 PVC 来使用;而是直接创建 PVC 即可分配使用。
使用 kubernetes 集群外部的 Ceph 存储
在部署 kubernetes 之前我们就已经有了 Ceph 集群,因此我们可以直接拿来用。但是 kubernetes 的所有节点(尤其是 master 节点)上依然需要安装 ceph 客户端。
yum install -y ceph-common
还需要将 ceph 的配置文件 ceph.conf
放在所有节点的 /etc/ceph
目录下。
Kubernetes 使用 ceph 存储需要用到如下配置:
- Monitors: Ceph montors 列表
- Path:作为挂载的根路径,默认是 /
- User:RADOS用户名,默认是 admin
- secretFile:keyring 文件路径,默认是 /etc/ceph/user.secret,我们 Ceph 集群提供的文件是
ceph.client.admin.keyring
,将在下面用到 - secretRef:Ceph 认证 secret 的引用,如果配置了将会覆盖 secretFile。
- readOnly:该文件系统是否只读。
Galera Cluster介绍
Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件。
从用户视角看,一组Galera集群可以看作一个具有多入口的MySQL库,用户可以同时从多个IP读写这个库。目前Galera已经得到广泛应用,例如Openstack中,在集群规模不大的情况下,稳定性已经得到了实践考验。真正的multi-master,即所有节点可以同时读写数据库。
详细步骤
以下步骤包括创建 Ceph 的配置 和 MySQL 的配置两部分。
配置 Ceph
关于 Ceph 的 yaml 文件可以在 ../manifest/mariadb-cluster 目录下找到。
1. 生成 Ceph secret
使用 Ceph 管理员提供给你的 ceph.client.admin.keyring
文件,我们将它放在了 /etc/ceph
目录下,用来生成 secret。
grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64
将获得加密后的 key:QVFDWDA2aFo5TG5TQnhBQVl1b0lUL2V3YlRSaEtwVEhPWkxvUlE9PQ==
,我们将在后面用到。
2. 创建租户namespace
创建 galera-namespace.yaml
文件内容为:
apiVersion: v1
kind: Namespace
metadata:
name: galera
3. 创建 Ceph secret
创建 ceph-secret.yaml
文件内容为:
apiVersion: v1
kind: Secret
metadata:
name: ceph-secret
namespace: galera
type: "kubernetes.io/rbd"
data:
key: QVFDWDA2aFo5TG5TQnhBQVl1b0lUL2V3YlRSaEtwVEhPWkxvUlE9PQ==
4. 创建 StorageClass
创建 ceph-class.yaml
文件内容为:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-web
provisioner: kubernetes.io/rbd
parameters:
monitors: 172.28.7.98,172.28.7.99,172.28.7.100
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: galera
pool: rbd #此处默认是rbd池,生产上建议自己创建存储池隔离
userId: admin
userSecretName: ceph-secret
此配置请参考 kubernetes 官方文档:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#ceph-rbd