您的位置:首页 > 其它

在kubernetes中使用StorageClass绑定ceph rbd

2017-11-27 00:00 776 查看
使用StorageClass挂载ceph rbd需要用到2个cephx角色。一个用于创建和管理rbd,在这里我们使用admin,另一个用于挂载rbd到Pod中,我们可以在ceph中手动创建一个。

准备:

假设已有一套
ceph
集群,
Monitor
分别为
192.168.1.1
192.168.1.2
192.168.1.3


需要保证
Monitor
6379
端口和
OSD
6800
端口对
kubelet
节点开放

为每个
kubelet
节点都安装
ceph-common


一、创建一个
k8s
存储池,用于存放数据卷

# ceph osd pool create k8s 64 64


二、创建cephx用户,用于挂载由
admin
创建好的
rbd


# ceph auth get-or-create client.k8s mon 'allow r' osd 'allow * pool=k8s'


三、获取
k8s
用户的
key
,以
base64
编码

# ceph auth get-key client.k8s|base64


记录输出的内容,如:
QVFEQjlmcFpjUE5lS0JBQU40NnZxZ2dIT0dRTEtaeUx1blNjR1E9PQ==


四、获取
admin
用户的
key
,以
base64
编码

# ceph auth get-key client.admin|base64


记录输出的内容,如:
QVFDUDNrQllRRVBJR0JBQXFuVXJQbHZQaC9xZEQ2ZGVZOXRoVXc9PQ==


五、创建
storage-class-rbd.yaml


---
apiVersion: v1
data:
key: QVFEQjlmcFpjUE5lS0JBQU40NnZxZ2dIT0dRTEtaeUx1blNjR1E9PQ==
kind: Secret
metadata:
name: ceph-secret-user
namespace: default
type: kubernetes.io/rbd
---
apiVersion: v1
data:
key: QVFDUDNrQllRRVBJR0JBQXFuVXJQbHZQaC9xZEQ2ZGVZOXRoVXc9PQ==
kind: Secret
metadata:
name: ceph-secret-admin
namespace: kube-system
type: kubernetes.io/rbd
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rbd
provisioner: kubernetes.io/rbd
parameters:
monitors: 192.168.1.1:6789,192.168.1.2:6789,192.168.1.3:6789
adminId: admin
adminSecretName: ceph-secret-admin
adminSecretNamespace: kube-system
pool: k8s
userId: k8s
userSecretName: ceph-secret-user
fsType: xfs
imageFormat: "2"
imageFeatures: "layering"

六、创建
StorageClass


# kubectl create -f ./storage-class-rbd.yaml


七、创建
nginx-statefulset.yaml
, 通过
StatefulSet
动态挂载卷

---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
volumeClaimTemplates:
- metadata:
annotations:
volume.beta.kubernetes.io/storage-class: "rbd" # 这里配置 上面创建的 storageclass 的名称
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- mountPath: "/usr/share/nginx/html/"
name: html

StatefulSet
会为每个
Pod
创建一个
rbd
数据卷,并挂载到
/usr/share/nginx/html/
目录中,数据卷会随着
StatefulSet
的伸缩而动态创建和销毁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Kubernetes StorageClass