使用Ceph RBD的Kubernetes持久存储
从下面的链接下载并以PDF格式支持本文。
theロード下载PDF指南
关门
如何在Kubernetes中使用Ceph RBD进行动态持久卷配置? Kubernetes(K8s)是一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。将状态应用程序部署到Kubernetes时的关键要求之一是数据持久性。本教程介绍了如何在Kubernetes中创建一个存储类,该存储类使用RBD(Ceph块设备)从外部Ceph群集中调配持久卷。
Ceph块设备经过精简配置,可调整大小,并在Ceph集群中的多个OSD中存储条带化数据。 Ceph块设备利用了RADOS功能,例如快照,复制和一致性。 Ceph的RADOS块设备(RBD)使用内核模块或librbd库与OSD进行交互。
在开始本练习之前,您需要一个可用的外部Ceph集群。大多数使用Ceph的Kubernetes部署都涉及使用Rook。在本指南中,Ceph存储集群 头巾, Ceph部署 或手动。
如何在Ubuntu 18.04 LTS上安装Ceph Storage Cluster
步骤1:在Kubernetes上部署Ceph Provisioner
登录到Kubernetes集群并创建清单文件以部署RBD供应器。这是Kubernetes 1.5及更高版本的树外动态预配器。
$ vim ceph-rbd-provisioner.yml
将以下内容添加到文件中:由于此部署使用RBAC,因此在创建服务帐户和部署Ceph RBD供应商之前,请先创建群集角色和绑定。
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: rbd-provisioner
namespace: kube-system
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
- apiGroups: [""]
resources: ["services"]
resourceNames: ["kube-dns","coredns"]
verbs: ["list", "get"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: rbd-provisioner
namespace: kube-system
subjects:
- kind: ServiceAccount
name: rbd-provisioner
namespace: kube-system
roleRef:
kind: ClusterRole
name: rbd-provisioner
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: rbd-provisioner
namespace: kube-system
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rbd-provisioner
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: rbd-provisioner
subjects:
- kind: ServiceAccount
name: rbd-provisioner
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rbd-provisioner
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: rbd-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: rbd-provisioner
spec:
containers:
- name: rbd-provisioner
image: "quay.io/external_storage/rbd-provisioner:latest"
env:
- name: PROVISIONER_NAME
value: ceph.com/rbd
serviceAccount: rbd-provisioner
通过应用文件创建资源。
$ kubectl apply -f ceph-rbd-provisioner.yml
clusterrole.rbac.authorization.k8s.io/rbd-provisioner created
clusterrolebinding.rbac.authorization.k8s.io/rbd-provisioner created
role.rbac.authorization.k8s.io/rbd-provisioner created
rolebinding.rbac.authorization.k8s.io/rbd-provisioner created
deployment.apps/rbd-provisioner created
验证RBD卷设置窗格是否正在运行。
$ kubectl get pods -l app=rbd-provisioner -n kube-system
NAME READY STATUS RESTARTS AGE
rbd-provisioner-75b85f85bd-p9b8c 1/1 Running 0 3m45s
步骤2:取得Ceph管理金钥并在Kubernetes中建立机密
登录到Ceph集群并获取RBD供应商使用的管理密钥。
$ sudo ceph auth get-key client.admin
保存上述命令输出的admin用户密钥值。将密钥作为秘密添加到Kubernetes。
$ kubectl create secret generic ceph-admin-secret
--type="kubernetes.io/rbd"
--from-literal=key=''
--namespace=kube-system
哪里
$ kubectl get secrets ceph-admin-secret -n kube-system
NAME TYPE DATA AGE
ceph-admin-secret kubernetes.io/rbd 1 5m
步骤3:为Kubernetes和客户端密钥创建一个Ceph池
接下来,为Kubernetes创建一个新的Ceph池。
$ sudo ceph ceph osd pool create
# Example
$ sudo ceph ceph osd pool create k8s 100
查看指南以获取更多信息:在Ceph Storage Cluster中创建池
接下来,创建一个可以访问创建的池的新客户端密钥。
$ sudo ceph auth add client.kube mon 'allow r' osd 'allow rwx pool='
# Example
$ sudo ceph auth add client.kube mon 'allow r' osd 'allow rwx pool=k8s'
哪里 8秒 在Ceph中创建的池的名称。
然后,您可以将池与应用程序关联并对其进行初始化。
sudo ceph osd pool application enable rbd
sudo rbd pool init
使用Ceph获取客户端密钥。
$ sudo ceph auth get-key client.kube
使用Kubernetes创建客户端机密
kubectl create secret generic ceph-k8s-secret
--type="kubernetes.io/rbd"
--from-literal=key=''
--namespace=kube-system
哪里
步骤4:创建RBD存储类
StorageClass提供了一种描述Kubernetes提供的存储“类”的方法。创建一个名为ceph-rbd的存储类。
$ vim ceph-rbd-sc.yml
什么添加到文件:
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ceph-rbd
provisioner: ceph.com/rbd
parameters:
monitors: 10.10.10.11:6789, 10.10.10.12:6789, 10.10.10.13:6789
pool: k8s-uat
adminId: admin
adminSecretNamespace: kube-system
adminSecretName: ceph-admin-secret
userId: kube
userSecretNamespace: kube-system
userSecretName: ceph-k8s-secret
imageFormat: "2"
imageFeatures: layering
其中:
- 头孢 要创建的StorageClass的名称。
- 10.10.10.11、10.10.10.12和10.10.10.13 Ceph监控器的IP地址。您可以使用以下命令列出它们:
$ sudo ceph -s
cluster:
id: 7795990b-7c8c-43f4-b648-d284ef2a0aba
health: HEALTH_OK
services:
mon: 3 daemons, quorum cephmon01,cephmon02,cephmon03 (age 32h)
mgr: cephmon01(active, since 30h), standbys: cephmon02
mds: cephfs:1 {0=cephmon01=up:active} 1 up:standby
osd: 9 osds: 9 up (since 32h), 9 in (since 32h)
rgw: 3 daemons active (cephmon01, cephmon02, cephmon03)
data:
pools: 8 pools, 618 pgs
objects: 250 objects, 76 KiB
usage: 9.6 GiB used, 2.6 TiB / 2.6 TiB avail
pgs: 618 active+clean
在使用正确的Ceph监视器值修改文件后,应用配置。
$ kubectl apply -f ceph-rbd-sc.yml
storageclass.storage.k8s.io/ceph-rbd created
列出可用的StorageClasses。
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ceph-rbd ceph.com/rbd Delete Immediate false 17s
cephfs ceph.com/cephfs Delete Immediate false 18d
步骤4:在Kubernetes中创建测试声明和Pod
让我们创建一个测试持久卷声明,以确保一切正常。
$ vim ceph-rbd-claim.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-rbd-claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: ceph-rbd
resources:
requests:
storage: 1Gi
通过应用清单文件创建索赔。
$ kubectl apply -f ceph-rbd-claim.yml
persistentvolumeclaim/ceph-rbd-claim1 created
如果绑定成功, 结界 状态。
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
ceph-rbd-claim1 Bound pvc-c6f4399d-43cf-4fc1-ba14-cc22f5c85304 1Gi RWO ceph-rbd 43s
听起来不错。您可以使用CephRBD后端创建动态持久卷请求。请注意,您无需在声明之前手动创建持久卷。那有多酷?
如果您有Ceph仪表板,则可以看到创建的新块图像。
以下指南介绍了将Ceph文件系统与Kubernetes一起使用以进行动态持久卷配置。
标签:
- 将Ceph RBD与Kubernetes结合使用
- 使用Ceph RBD的Kubernetes动态存储配置
- 在Kubernetes上使用外部Ceph
- Kubernetes与Ceph RBD
类似指南:
如何使用Heketi和GlusterFS配置Kubernetes动态卷配置
在CentOS 8 / CentOS 7上使用Heketi设置GlusterFS存储
适用于Kubernetes和Docker容器的最佳存储解决方案
从下面的链接下载并以PDF格式支持本文。
theロード下载PDF指南
关门