#作者:任少近
文章目錄
- 1 Ceph環境準備
- 2 rook部署ceph群集
- 2.1 Rook 幫助地址
- 2.2 安裝ceph
- 2.3 獲取csi鏡像
- 2.4 Master參加到osd
- 2.5 設置默認存儲
- 3 Rook部署云原生RBD塊存儲
- 3.1 部署storageclass資源
- 3.2 部署WordPress使用RBD
- 3.3 WordPress訪問
- 4 Rook部署云原生RGW對象存儲
- 4.1 部署objectstore資源
- 4.2 pod訪問rgw服務
- 4.3創建rgw用戶
- 4.4創建buckets桶
- 5 DeRook部署云原生CephFS文件系統
- 5.1 部署cephfs storageclass
- 5.2 創建容器所需cephfs文件系統
- 5.3創建容器pod使用rook-cephfs提供pvc
1 Ceph環境準備
提前準備一塊50G祼盤
版本
2 rook部署ceph群集
下載rook
https://rook.io/docs/rook
git clone --single-branch --branch v1.11.5 https://github.com/rook/rook.git# verify the rook-ceph-operator is in the `Running` state before proceeding
kubectl -n rook-ceph get pod
2.1 Rook 幫助地址
https://rook.io/docs/rook/v1.9/ceph-filesystem.html
2.2 安裝ceph
cd /root/rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
2.3 獲取csi鏡像
成功后,執行cluster.yaml后,插件未啟,修改operater.yaml中地址
# ROOK_CSI_REGISTRAR_IMAGE: "registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.7.0"
# ROOK_CSI_RESIZER_IMAGE: "registry.aliyuncs.com/google_containers/csi-resizer:v1.7.0"
# ROOK_CSI_PROVISIONER_IMAGE: "registry.aliyuncs.com/google_containers/csi-provisioner:v3.4.0"
# ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.aliyuncs.com/google_containers/csi-snapshotter:v6.2.1"
# ROOK_CSI_ATTACHER_IMAGE: "registry.aliyuncs.com/google_containers/csi-attacher:v4.1.0"
可以使用如下腳本修改以上
#!/bin/bash
Image_list=(
#csi-node-driver-registrar:v2.7.0
csi-resizer:v1.7.0
csi-provisioner:v3.4.0
csi-snapshotter:v6.2.1
csi-attacher:v4.1.0
)
Aliyuncs="registry.aliyuncs.com/google_containers"
Google_gcr="registry.k8s.io/sig-storage"
for image in ${Image_list[*]}
do
crictl pull ${Aliyuncs}/${image}
#crictl沒有tag功能,ctr打tag必須指定namespace,命令:ctr namespace ls查看
ctr -n k8s.io i tag ${Aliyuncs}/${image} ${Google_gcr}/{imag:q!e}
crictl rmi ${Aliyuncs}/${image}
echo "${Aliyuncs}/${image} ${Google_gcr}/${image} download."
done
再執行kubectl apply -f cluster.yaml
2.4 Master參加到osd
去掉污點
#查看污點
kubectl -n rook-ceph describe nodes k8s-master
#去掉污點
kubectl taint node k8s-master node-role.kubernetes.io/k8s-master:NoSchedule-
(#恢復污點:
kubectl taint node k8s-master node-role.kubernetes.io/k8s-master:NoSchedule
Cluster.yaml修改磁盤掃描時間,默認是60s,可以調整60分鐘
592 # The duration between discovering devices in the rook-discover daemonset.
593 - name: ROOK_DISCOVER_DEVICES_INTERVAL
594 value: "60m"
2.5 設置默認存儲
[root@k8s-master1 ~]# kubectl patch storageclass rook-ceph-block -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
3 Rook部署云原生RBD塊存儲
前面通過rook部署ceph集群運行在kubernetes上,ceph集群支持rbd塊存儲。使用rook部署rbd塊服務與kubernetes容器對接。ceph與kubernetes對接會涉及到pool池、ceph認證信息,配置文件,CSI驅動部署等。storageclass創建過程涉及配置較多,而Rook則將這些配置過程簡化,以云原生的方式實現對接,默認已繼承好相關驅動。通過kubernetes創建storageclass即可對接使用。
3.1 部署storageclass資源
Cd /root/rook/deploy/examples/csi/rbd
[root@k8s-master rbd]# kubectl apply -f storageclass.yaml
cephblockpool.ceph.rook.io/replicapool created
storageclass.storage.k8s.io/rook-ceph-block created
#查看storageclass資源[root@k8s-master rbd]# kubectl -n rook-ceph get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 3m42s
rook-ceph-delete-bucket rook-ceph.ceph.rook.io/bucket Delete Immediate false 122d
3.2 部署WordPress使用RBD
部署mysql和WordPress資源文件
# kubectl create -f mysql.yaml
# kubectl create -f wordpress.yaml
注:修改wordpress.yaml中的loadbalance為NodePort
注:資源文件在deploy/examples文件夾下
查看mysql和WordPress pod狀態
查看mysql和wordPress SVC
3.3 WordPress訪問
Wordpress svc更改為NodePort形式對外暴露服務訪問
WordPress訪問地址 http://node_ip:31028
注:第一次訪問需要進行完善信息,完善后跟進自己使用情況進行后臺修改或者默認直接使用即可
4 Rook部署云原生RGW對象存儲
rook能夠在kubernetes中部署對象存儲提供rgw服務。
4.1 部署objectstore資源
創建object資源文件
# kubectl create -f object.yaml
查看rgw pod狀況
查看rgw svc狀況
4.2 pod訪問rgw服務
root@csicephfs-demo-pod:/# curl 10.104.123.1
4.3創建rgw用戶
[root@k8s-master examples]# cat object-user.yaml
####Create an object store user for access to the s3 endpoint.kubectl create -f object-user.yaml
####################################
apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:name: my-usernamespace: rook-ceph # namespace:cluster
spec:store: my-storedisplayName: "my display name"# Quotas set on the user# quotas:# maxBuckets: 100# maxSize: 10G# maxObjects: 10000# Additional permissions given to the user# capabilities:# user: "*"# bucket: "*"# metadata: "*"# usage: "*"# zone: "*"[root@k8s-master examples]# kubectl create -f object-user.yaml
4.4創建buckets桶
注:使用dashboard web界面管理操作查看即可,rgw對象存儲操作使用參考文檔:https://docs.ceph.com/en/quincy/radosgw/index.html
5 DeRook部署云原生CephFS文件系統
5.1 部署cephfs storageclass
cephfs文件系統與RBD服務類似,要想在kubernetes pod里使用cephfs,需要創建一個cephfs-provisioner storageclass服務,在rook代碼里已有資源文件,單獨部署即可
Storageclass.yaml文件如下:
kubectl create -f deploy/examples/csi/cephfs/storageclass.yaml
查看cephfs storageclass名稱:rook-cephfs
5.2 創建容器所需cephfs文件系統
創建容器所需pvc指定rook部署rook-cephfs存儲類名稱
[root@node1 cephfs]# cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: cephfs-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: rook-cephfs
[root@node1 cephfs]#
[root@node1 cephfs]# kubectl apply -f pvc.yaml查看pvc所提供是rook-cephfs
[root@node1 cephfs]# kubectl get pvc | grep cephfs-pvc
cephfs-pvc Bound pvc-da18c8f9-00c1-4c39-8c53-68a628fa8bdd 1Gi RWO rook-cephfs 21drook-cephfs 7d23h
[root@node1 cephfs]#
5.3創建容器pod使用rook-cephfs提供pvc
[root@node1 cephfs]# cat pod.yaml
---
apiVersion: v1
kind: Pod
metadata:name: csicephfs-demo-pod
spec:containers:- name: web-serverimage: nginx:latestvolumeMounts:- name: mypvcmountPath: /var/lib/www/htmlvolumes:- name: mypvcpersistentVolumeClaim:claimName: cephfs-pvcreadOnly: false
[root@node1 cephfs]#
[root@node1 cephfs]# kubectl apply -f pod.yaml查看pod運行狀況
[root@node1 cephfs]# kubectl get pod | grep cephfs
csicephfs-demo-pod 1/1 Running 0 21d
[root@node1 cephfs]#5.4 查看pod是否使用rook-cephfs
[root@node1 cephfs]# kubectl exec -it csicephfs-demo-pod -- bash
root@csicephfs-demo-pod:/# df -hT | grep csi-vol
10.68.91.46:6789,10.68.110.0:6789,10.68.225.251:6789:/volumes/csi/csi-vol-50d5c216-3e2a-11ed-9773-9a6110af61d6/f4e696bf-757d-4793-b2c2-3091d38ccec5 ceph 1.0G 0 1.0G 0% /var/lib/www/html
root@csicephfs-demo-pod:/#
root@csicephfs-demo-pod:/# echo "cephfs" > /var/lib/www/html/index.html
root@csicephfs-demo-pod:/# cat /var/lib/www/html/index.html
cephfs
root@csicephfs-demo-pod:/#注:登錄相應pod容器可以看到pod已經掛載cephfs文件系統地址,可以在相應掛載目錄創建內容。