1、创建存储池并启用RBD功能
ceph osd pool create <poolname> <pg_num> <pgp_num>
2、创建Ceph用户,提供给k8s使用
[root@ceph-1 ~]
[client.kube]
key = AQCaCZRexOqiGxAAxcbV9jMEIF8Eic133uCqtQ==
3、在k8s各节点安装ceph-common
yum -y install epel-release
cat /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
yum -y install ceph-common
4、复制ceph.conf以及admin用户的keyring文件到k8s各个节点(包括master和node)
for i in {1..5}; do scp /etc/ceph/{ceph.conf,ceph.client.admin.keyring} ceph-$i:/etc/ceph/
5、创建Secret资源,以keyring的key值为data
[root@ceph-1 ~]
QVFDRnpvNWVrUFUyRVJBQVFmZ21qTEZGWFNhZFdnUWVzbHZ0L2c9PQ==
[root@ceph-1 ~]
QVFBTHo1SmUxNUpKTkJBQThGK0hTMk1rcWZsQXlYcEM4RnU4SXc9PQ==
cat ceph-admin-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: ceph-admin-secret
namespace: default
data:
key: QVFDRnpvNWVrUFUyRVJBQVFmZ21qTEZGWFNhZFdnUWVzbHZ0L2c9PQ==
type: kubernetes.io/rbd
cat ceph-kube-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: ceph-kube-secret
namespace: default
data:
key: QVFBTHo1SmUxNUpKTkJBQThGK0hTMk1rcWZsQXlYcEM4RnU4SXc9PQ==
type: kubernetes.io/rbd
kubectl apply -f ceph-admin-secret.yaml
kubectl apply -f ceph-kube-secret.yaml
kubectl get secret
NAME TYPE DATA AGE
ceph-admin-secret kubernetes.io/rbd 1 23h
ceph-kube-secret kubernetes.io/rbd 1 22h
6、在Ceph存储池里面创建对应的RBDImage
rbd create -p <poolname> -s <size> <imagename>
rbd create -p mypool -s 2G ceph-image
rbd info ceph-image -p mypool
rbd image 'ceph-image':
size 2GiB in 512 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.281756b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Sun Apr 12 04:48:28 2020
rbd feature disable mypool/ceph-image object-map fast-diff deep-flatten
静态PV的使用(手动创建)
创建PV
cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-test-pv
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
rbd:
monitors:
- ceph-1:6789
- ceph-2:6789
- ceph-3:6789
pool: mypool
image: ceph-image
user: admin
secretRef:
name: ceph-admin-secret
fsType: ext4
readOnly: false
persistentVolumeReclaimPolicy: Retain
kubectl apply -f pv.yaml
创建PVC
cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ceph-test-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
kubectl apply -f pvc.yaml
[root@k8s-m1 ]
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
ceph-test-pvc Bound ceph-test-pv 2Gi RWO rbd 22h
[root@k8s-m1 ]
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
ceph-test-pv 2Gi RWO Retain Bound default/ceph-test-pvc 22h
创建Pod
cat ceph-test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: ceph-test-pod
spec:
containers:
- name: ceph-busybox
image: busybox
command: ["sleep","60000"]
volumeMounts:
- name: ceph-voll
mountPath: /usr/share/busybox
readOnly: false
volumes:
- name: ceph-voll
persistentVolumeClaim:
claimName: ceph-test-pvc
kubectl apply -f ceph-test-pod
[root@k8s-m1]
NAME READY STATUS RESTARTS AGE
ceph-test-pod 1/1 Running 1 24h
动态PV的使用
创建StorageClass
[root@k8s-m1]
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rbd
annotations:
storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/rbd
parameters:
monitors: ceph-1:6789,ceph-2:6789,ceph-3:6789
adminId: admin
adminSecretName: ceph-admin-secret
adminSecretNamespace: default
pool: mypool
userId: kube
userSecretName: ceph-kube-secret
userSecretNamespace: default
fsType: ext4
imageFormat: "2"
imageFeatures: "layering"
reclaimPolicy: Retain
kubectl apply -f class.yaml
kubectl get sc
NAME PROVISIONER AGE
rbd (default) kubernetes.io/rbd 25h
创建PVC
cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ceph-test-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: rbd
kubectl apply -f pvc.yaml
[root@k8s-m1 ceph]
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
ceph-test-pvc Bound pvc-85fb37f8-693a-4768-889b-097ee731d15f 2Gi RWO rbd 107s
创建Pod
cat ceph-test-pod-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: ceph-test-pod-1
spec:
containers:
- name: ceph-busybox
image: busybox
command: ["sleep","60000"]
volumeMounts:
- name: ceph-voll
mountPath: /usr/share/busybox
readOnly: false
volumes:
- name: ceph-voll
persistentVolumeClaim:
claimName: ceph-test-pvc
kubectl apply -f ceph-test-pods-1.yaml
NAME READY STATUS RESTARTS AGE
ceph-test-pod 1/1 Running 0 84s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构