k8s-ceph-存储-使用
k8s默认使用的本地存储,集群容灾性差,ceph作为开源的分布式存储系统,与openstack环境搭配使用,已经很多云计算公司运用于生产环境,可靠性得到验证。这里介绍一下在k8s环境下ceph如何使用.环境1234Ceph版本:10.2.2(Jewel)K8s版本:1.10.2...
k8s默认使用的本地存储,集群容灾性差,ceph作为开源的分布式存储系统,与openstack环境搭配使用,已经很多云计算公司运用于生产环境,可靠性得到验证。这里介绍一下在k8s环境下ceph如何使用.
环境
1 2 3 4 | Ceph版本:10.2.2(Jewel) K8s版本:1.10.2 Docker版本:1.13.1 系统版本:CentOS7.4.1708 |
Ceph机器创建K8s存储池
由于创建存储池会导致数据的迁移,所以如果Ceph集群已经用于生产环境,需要考虑数据迁移对于业务的影响,尽量避免业务高峰期执行
在Ceph管理节点执行:
1 | ceph osd pool create k8s 128 ## 后面的这个128是创建pg的数量,具体数可以参考计算公式:https://ceph.com/pgcalc/ |
配置Ceph源
在所有K8s Node 上配置ceph的源,需要待安装客户端与ceph的版本一致
Ceph客户端安装
在所有k8s Node上安装:
1 | yum install ceph-common ##与Ceph环境的版本一致 |
配置
把ceph的配置文件拷贝到每个K8s node上
在Ceph管理节点执行:
1 2 | scp ceph.conf root@k8s-node:/etc/ceph scp ceph.client.admin.keyring root@k8s-node:/etc/ceph #这里直接用的ceph里的admin |
生成加密key
对ceph.client.admin.keyring 的内容进行base64编码
在k8s管理节点执行:
1 2 3 | # grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64 QWFDWDA2aFo5TG5TQnhBQVl1b0lUL2V3YlRSaEtwVEhPWkxvUlE9PQ== 后面会用到该key |
下载镜像
由于k8s的control-manager没有集成ceph-common,所以需要下载额外的镜像:
1 | docker pull registry.cn-beijing.aliyuncs.com/blackpiglet/rbd-provisioner |
具体可参考:Issue
由于国内通过官方下载慢,有人把rbd-provisioner上传到阿里镜像仓库了
创建ServiceAccount
这里使用的namespace为default,需要有一个serviceaccount,并授权:
1 2 | kubectl create serviceaccount persistent-volume-binder #后面会用到该serviceaccount kubectl create clusterrolebinding ceph-cluster-rule --clusterrole=cluster-admin --serviceaccount=default:persistent-volume-binder |
生成ceph-secret
1 2 3 4 5 6 7 8 9 10 11 12 | # cat ceph-secret.yml apiVersion: v1 kind: Secret metadata: name: ceph-secret namespace: default type: "kubernetes.io/rbd" data: key: QVFDWDA2aFo5TG5TQnhBQVl1b0lUL2V3YlRSaEtwVEhPWkxvUlE9PQ= #上面生成的key # kubectl apply -f ceph-secret.yml |
生成rbd-provisioner
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # cat ceph-provisioner.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rbd-provisioner spec: replicas: 1 template: metadata: labels: app: rbd-provisioner spec: containers: - name: rbd-provisioner image: "registry.cn-beijing.aliyuncs.com/blackpiglet/rbd-provisioner" serviceAccountName: persistent-volume-binder #前面创建的serviceaccount # kubectl apply -f ceph-provisioner.yml |
生成ceph-class
用于连接ceph集群,以及卷属性的设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # cat ceph-class.yml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rbd #class名称,后面会用 provisioner: ceph.com/rbd #这里替换成了扩展的provisioner parameters: monitors: 172.28.7.98,172.28.7.99,172.28.7.100 adminId: admin #访问用户 adminSecretName: ceph-secret # 秘钥 adminSecretNamespace: default #名称空间 pool: k8s #ceph中的存储池 userId: admin #访问ceph的用户 userSecretName: ceph-secret #访问ceph的秘钥,会自动的解密base64 imageFormat: "2" imageFeatures: "layering" # kubectl apply -f ceph-class.yml |
生成ceph-pvc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # cat ceph-pvc.yml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ceph-pvc spec: accessModes: - ReadWriteOnce storageClassName: rbd #前面创建的class名称 resources: requests: storage: 10G #卷大小 # kubectl apply -f ceph-pvc.yml ##执行该步骤才会在ceph中真实创建卷 # kubectl get pvc # kubectl get pv |
更多推荐
所有评论(0)