使用Cephfs的Kubernetes的Ceph永久存储
从下面的链接下载并以PDF格式支持本文。
theロード下载PDF指南
关门
在上一教程中,我解释了如何: 使用Ceph RBD的Kubernetes持久存储。如所承诺的,本文重点介绍如何配置Kubernetes以使用外部Ceph Ceph文件系统来存储在Kubernetes容器环境中运行的应用程序的持久数据。
如果您是第一次使用Ceph,则可以使用Ceph集群,CephFS)是在Ceph的分布式对象存储之上构建的POSIX兼容文件系统。 拉多斯。 CephFS旨在为各种应用程序提供高可用性,多功能,高性能的文件存储。
本教程没有详细介绍Kubernetes和Ceph的概念。它是配置Ceph和Kubernetes的简单分步指南,并允许Cephfs使用Cephfs在Ceph后端自动设置持久卷。请按照以下步骤开始。
使用Cephfs的Kubernetes的Ceph永久存储
在开始本练习之前,您需要在室外工作
Ceph集群。对于大多数使用Ceph的Kubernetes部署,
路加在本指南中,Ceph存储集群 头巾, Ceph部署 或手动。
如何在Ubuntu 18.04 LTS上安装Ceph Storage Cluster
更新有关在其他Linux发行版上安装Ceph的其他指南的链接。
步骤1:在Kubernetes上部署Cephfs Provisioner
登录Kubernetes集群并创建清单文件
部署RBD供应商,这是动态的供应商
对于Kubernetes 1.5或更高版本。
$ vim cephfs-provisioner.yml
将以下内容添加到文件中:由于此部署使用RBAC,因此在创建服务帐户和部署Cephfs供应商之前,请先创建群集角色和绑定。
---
kind: Namespace
apiVersion: v1
metadata:
name: cephfs
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cephfs-provisioner
namespace: cephfs
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"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cephfs-provisioner
namespace: cephfs
subjects:
- kind: ServiceAccount
name: cephfs-provisioner
namespace: cephfs
roleRef:
kind: ClusterRole
name: cephfs-provisioner
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: cephfs-provisioner
namespace: cephfs
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create", "get", "delete"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cephfs-provisioner
namespace: cephfs
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cephfs-provisioner
subjects:
- kind: ServiceAccount
name: cephfs-provisioner
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: cephfs-provisioner
namespace: cephfs
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cephfs-provisioner
namespace: cephfs
spec:
replicas: 1
selector:
matchLabels:
app: cephfs-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: cephfs-provisioner
spec:
containers:
- name: cephfs-provisioner
image: "quay.io/external_storage/cephfs-provisioner:latest"
env:
- name: PROVISIONER_NAME
value: ceph.com/cephfs
- name: PROVISIONER_SECRET_NAMESPACE
value: cephfs
command:
- "/usr/local/bin/cephfs-provisioner"
args:
- "-id=cephfs-provisioner-1"
serviceAccount: cephfs-provisioner
应用清单:
$ kubectl apply -f cephfs-provisioner.yml
namespace/cephfs created
clusterrole.rbac.authorization.k8s.io/cephfs-provisioner created
clusterrolebinding.rbac.authorization.k8s.io/cephfs-provisioner created
role.rbac.authorization.k8s.io/cephfs-provisioner created
rolebinding.rbac.authorization.k8s.io/cephfs-provisioner created
serviceaccount/cephfs-provisioner created
deployment.apps/cephfs-provisioner created
验证Cephfs Volume Provisioning窗格是否正在运行。
$ kubectl get pods -l app=cephfs-provisioner -n cephfs
NAME READY STATUS RESTARTS AGE
cephfs-provisioner-7b77478cb8-7nnxs 1/1 Running 0 84s
步骤2:取得Ceph管理金钥并在Kubernetes中建立机密
登录到Ceph集群并获取RBD供应商使用的管理密钥。
$ sudo ceph auth get-key client.admin
保存上述命令输出的admin用户密钥值。将密钥作为秘密添加到Kubernetes。
$ kubectl create secret generic ceph-admin-secret
--from-literal=key=''
--namespace=cephfs
哪里
$ kubectl get secrets ceph-admin-secret -n cephfs
NAME TYPE DATA AGE
ceph-admin-secret Opaque 1 6s
步骤3:为Kubernetes和客户端密钥创建一个Ceph池
Ceph文件系统具有 至少两个RADOS池:对于两者:
- 资料
- 元数据
通常,元数据池最多包含数GB的数据。对于大型群集,实际上通常使用64或128。因此,通常建议减少PG的数量。
让我们为Kubernetes创建一个Ceph OSD池。
$ sudo ceph osd pool create cephfs_data 128 128
$ sudo ceph osd pool create cephfs_metadata 64 64
在池中创建一个ceph文件系统。
$ ceph fs new
$ ceph fs new cephfs cephfs_data cephfs_metadata
确认创建Ceph文件系统。
$ sudo ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
检查UI仪表板:
步骤4:在Kubernetes中创建一个Cephfs存储类
StorageClass提供了一种描述Kubernetes提供的存储“类”的方法。创建一个名为的存储类 塞夫。
$ vim cephfs-sc.yml
什么添加到文件:
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: cephfs
namespace: cephfs
provisioner: ceph.com/cephfs
parameters:
monitors: monitors: 10.10.10.11:6789,10.10.10.12:6789,10.10.10.13:6789
adminId: admin
adminSecretName: ceph-admin-secret
adminSecretNamespace: cephfs
claimRoot: /pvc-volumes
其中:
- 塞夫 要创建的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命令创建StorageClass。
$ kubectl apply -f cephfs-sc.yml
storageclass.storage.k8s.io/cephfs created
列出可用的StorageClasses。
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ceph-rbd ceph.com/rbd Delete Immediate false 25h
cephfs ceph.com/cephfs Delete Immediate false 2m23s
步骤5:在Kubernetes中创建测试声明和Pod
让我们创建一个测试持久卷声明,以确保一切正常。
$ vim cephfs-claim.yml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cephfs-claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: cephfs
resources:
requests:
storage: 1Gi
应用清单文件。
$ kubectl apply -f cephfs-claim.yml
persistentvolumeclaim/cephfs-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 25h
cephfs-claim1 Bound pvc-1bfa81b6-2c0b-47fa-9656-92dc52f69c52 1Gi RWO cephfs 87s
然后,您可以使用创建的声明来部署测试平台。首先,创建一个文件来保存数据。
$ vim cephfs-test-pod.yaml
kind: Pod
apiVersion: v1
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: gcr.io/google_containers/busybox:1.24
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && exit 0 || exit 1"
volumeMounts:
- name: pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: pvc
persistentVolumeClaim:
claimName: claim1
创建一个吊舱。
$ kubectl apply -f cephfs-test-pod.yaml
pod/test-pod created
确保Pod正在运行。
$ kubectl get pods test-pod
NAME READY STATUS RESTARTS AGE
test-pod 0/1 Completed 0 2m28s
使用Cephfs与Kubernetes进行持久卷配置。
类似指南:
使用Ceph RBD的Kubernetes持久存储
如何使用Heketi和GlusterFS配置Kubernetes动态卷配置
从下面的链接下载并以PDF格式支持本文。
theロード下载PDF指南
关门