k8s-ceph-存储-使用

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

你可能感兴趣的:(k8s,ceph存储)