rook-ceph部署

官方文档:https://rook.io/docs/rook/v1.9/quickstart.html

分布式存储系统是一个有效的解决有状态工作负载高可用问题的方案。Ceph 就是一个分布式存储系统,近年来其影响主键扩大。Rook 是一个编排器,能够支持包括 Ceph 在内的多种存储方案。Rook 简化了 Ceph 在 Kubernetes 集群中的部署过程。

Rook 将分布式存储系统转变为自我管理、自我扩展、自我修复的存储服务。它自动执行存储管理员的任务:部署、引导、配置、配置、调配、扩展、升级、迁移、灾难恢复、监控和资源管理

Ceph 存储提供程序

Ceph 是一种高度可扩展的分布式存储解决方案,适用于块存储、对象存储和共享文件系统,具有多年的生产部署经验。

Rook 自动部署和管理 Ceph,以提供自我管理、自我扩展和自我修复的存储服务。Rook Operator 通过构建 Kubernetes 资源来部署、配置、配置、扩展、升级和监控 Ceph。

Ceph operator 于 2018 年 12 月在 Rook v0.9 版本中宣布稳定,多年来一直提供生产存储平台。Rook 由云原生计算基金会 (CNCF) 托管,是一个毕业级项目。

Rook 编排 Ceph 存储解决方案,并由专门的 Kubernetes Operator 进行自动化管理。Rook 确保 Ceph 在 Kubernetes 上运行良好,并简化部署和管理体验。

rook架构介绍

上面显示了三种受支持的存储类型的示例应用程序:

  • 块存储由一个蓝色应用表示,该应用已挂载卷。应用程序可以读取和写入 RWO 卷,而 Ceph 管理 IO。ReadWriteOnce (RWO)
  • 共享文件系统由共享 ReadWriteMany (RWX) 卷的两个紫色应用表示。两个应用程序可以同时主动读取或写入卷。Ceph 将确保使用 MDS 守护程序为多个写入器安全地保护数据。
  • 对象存储由一个橙色应用程序表示,该应用程序可以使用标准 S3 客户端读取和写入存储桶。

在上图中的虚线下方,组件分为三类:

  • Rook 算子(蓝色层):算子自动配置 Ceph
  • CSI 插件和置备程序(橙色层):Ceph-CSI 驱动程序提供卷的置备和挂载
  • Ceph 守护进程(红色层):Ceph 守护进程运行核心存储体系结构。请参阅词汇表以了解有关每个守护程序的更多信息。

生产集群必须具有三个或更多节点才能实现弹性存储平台。

块存储

在上图中,使用 RWO 卷创建应用程序的流程为:

  • (蓝色)应用程序创建 PVC 以请求存储
  • PVC 定义用于置备存储的 Ceph RBD 存储类 (sc)
  • K8s 调用 Ceph-CSI RBD 配置程序来创建 Ceph RBD 镜像。
  • kubelet 调用 CSI RBD 卷插件将卷挂载到 App 中
  • 该卷现在可用于读取和写入。

ReadWriteOnce 卷一次可以装载在一个节点上。

共享文件系统

在上图中,使用 RWX 卷创建应用程序的流程为:

  • (紫色)应用程序创建 PVC 以请求存储
  • PVC 定义用于配置存储的 CephFS 存储类 (sc)
  • K8s 调用 Ceph-CSI CephFS 配置程序来创建 CephFS 子卷
  • kubelet 调用 CSI CephFS 卷插件在应用中挂载卷
  • 该卷现在可用于读取和写入。

ReadWriteMany 卷可以挂载到多个节点上供应用程序使用。

对象存储 S3

在上图中,创建有权访问 S3 存储桶的应用程序的流程为:

  • (橙色)应用程序创建一个 ObjectBucketClaim (OBC) 来请求存储桶
  • Rook 操作员创建一个 Ceph RGW 存储桶(通过 lib-bucket-provisioner)
  • Rook 操作员使用用于访问存储桶的凭证创建一个密钥,并使用存储桶信息创建一个 configmap
  • 应用从机密中检索凭据
  • 该应用程序现在可以使用 S3 客户端读取和写入存储桶

兼容 S3 的客户端可以使用凭证 () 和存储桶信息 () 立即使用 S3 存储桶。

    install
资源配置

k8s集群,最底一主两从(2C4G)

#128、129、130作为存储节点
#查看128
for i in $(kubectl get nodes|awk 'NR>1''{print $1}');\
do \
kubectl describe nodes ${i} |egrep -i "taint";\
echo "===================================================";\
echo "${i}";\
echo "===================================================";\
echo;\
done

#允许master节点调度
kubectl taint nodes k8s-master-01 node-role.kubernetes.io/control-plane:NoSchedule-


for i in $(kubectl get nodes|awk 'NR>1''{print $1}');\
do \
kubectl describe nodes ${i} |egrep -i -B 100 "Annotations";\
echo "===================================================";\
echo "${i}";\
echo "===================================================";\
echo;\
done
部署操作128节点
#拉取rook-ceph的代码
git clone --single-branch --branch v1.9.2 https://github.com/rook/rook.git 
cd ~/rook/deploy/examples/ 
#更换国外镜像阿里云的,替换镜像,并取消注释
egrep -i "(# ROOK_CSI(.*)_IMAGE|image:)" operator.yaml
=============================================================
  # ROOK_CSI_CEPH_IMAGE: "quay.io/cephcsi/cephcsi:v3.6.1"
  # ROOK_CSI_REGISTRAR_IMAGE: "k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.5.0"
  # ROOK_CSI_RESIZER_IMAGE: "k8s.gcr.io/sig-storage/csi-resizer:v1.4.0"
  # ROOK_CSI_PROVISIONER_IMAGE: "k8s.gcr.io/sig-storage/csi-provisioner:v3.1.0"
  # ROOK_CSI_SNAPSHOTTER_IMAGE: "k8s.gcr.io/sig-storage/csi-snapshotter:v5.0.1"
  # ROOK_CSI_ATTACHER_IMAGE: "k8s.gcr.io/sig-storage/csi-attacher:v3.4.0"
  # ROOK_CSI_NFS_IMAGE: "k8s.gcr.io/sig-storage/nfsplugin:v3.1.0"
  # CSI_VOLUME_REPLICATION_IMAGE: "quay.io/csiaddons/volumereplication-operator:v0.3.0"
  # ROOK_CSIADDONS_IMAGE: "quay.io/csiaddons/k8s-sidecar:v0.2.1"
          image: rook/ceph:v1.9.2

部署资源
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml 
kubectl -n rook-ceph get pod 
添加磁盘,需要干净的磁盘

这里在所有节点添加 1 块 100GB 的新磁盘:/dev/sdb,作为 OSD 盘,提供存储空间,添加完成后扫描磁盘,确保主机能够正常识别到:

#批量128
for i in 192.168.10.{128..130};\
do \
ssh root@${i} sudo yum install -y lvm2;\
ssh root@${i} sudo lsblk;\
echo "===================================================";\
echo "${i}";\
echo "===================================================";\
echo;\
done

修改配置文件
egrep -i "(IMAGE|image:)" cluster.yaml
========================================================= 
    # The container image used to launch the Ceph daemon pods (mon, mgr, osd, mds, rgw).
    image: quay.io/ceph/ceph:v16.2.7
#替换为阿里云的镜像


#修改配置添加机器
vim cluster.yaml
  storage: # cluster level storage configuration and selection
    useAllNodes: false
    useAllDevices: false
    #deviceFilter:
    config:
      # crushRoot: "custom-root" # specify a non-default root label for the CRUSH map
      # metadataDevice: "md0" # specify a non-rotational storage so ceph-volume will use it as block db device of bluestore.
      # databaseSizeMB: "1024" # uncomment if the disks are smaller than 100 GB
      # journalSizeMB: "1024"  # uncomment if the disks are 20 GB or smaller
      # osdsPerDevice: "1" # this value can be overridden at the node or device level
      # encryptedDevice: "true" # the default value for this option is "false"
# Individual nodes and their config can be specified as well, but 'useAllNodes' above must be set to false. Then, only the named
# nodes below will be used as storage resources.  Each node's 'name' field should match their 'kubernetes.io/hostname' label.
    nodes:
      - name: "k8s-master-01"
        devices: # specific devices to use for storage can be specified for each node
          - name: "sdb" # multiple osds can be created on high performance devices
            config:
              databaseSizeMB: "1024"
              journalSizeMB: "1024"
      - name: "k8s-node-01"
        devices: # specific devices to use for storage can be specified for each node
          - name: "sdb" # multiple osds can be created on high performance devices
            config:
              databaseSizeMB: "1024"
              journalSizeMB: "1024"
      - name: "k8s-node-02"
        devices: # specific devices to use for storage can be specified for each node
          - name: "sdb" # multiple osds can be created on high performance devices
            config:
              databaseSizeMB: "1024"
              journalSizeMB: "1024"
部署ceph集群128、
cluster.yaml:此文件包含生产存储集群的常用设置。至少需要三个k8s工作节点。
cluster-test.yaml:未配置冗余的测试集群的设置。只需要一个节点。
cluster-on-pvc.yaml:此文件包含用于通过 PV 支持 Ceph Mons 和 OSD 的常用设置。在云环境中运行或已创建本地 PV 供 Ceph 使用时很有用。
cluster-external:以最小的访问权限连接到外部 Ceph 集群,以监控集群的运行状况并连接到存储。
cluster-external-management:使用外部集群的 admin 密钥连接到外部 Ceph 集群,以启用远程创建池并配置对象存储或共享文件系统等服务。


kubectl apply -f cluster.yaml
kubectl -n rook-ceph get pod -owide


#要有以下pod运行证明成功
=============================================================
NAME                                                              READY   STATUS      RESTARTS   AGE     IP               NODE                          NOMINATED NODE   READINESS GATES
csi-cephfsplugin-gdkln                                            3/3     Running     0          4m48s   192.168.44.203   k8s-192-168-44-203.host.com   <none>           <none>
csi-cephfsplugin-mx6j2                                            3/3     Running     0          4m52s   192.168.44.204   k8s-192-168-44-204.host.com   <none>           <none>
csi-cephfsplugin-provisioner-574495c75b-f8nxt                     6/6     Running     0          96m     10.244.172.196   k8s-192-168-44-203.host.com   <none>           <none>
csi-cephfsplugin-provisioner-574495c75b-wd5db                     6/6     Running     0          96m     10.244.238.194   k8s-192-168-44-204.host.com   <none>           <none>
csi-cephfsplugin-vmn7k                                            3/3     Running     0          9m33s   192.168.44.201   k8s-192-168-44-201.host.com   <none>           <none>
csi-cephfsplugin-vzcbt                                            3/3     Running     0          4m44s   192.168.44.202   k8s-192-168-44-202.host.com   <none>           <none>
csi-rbdplugin-54kq5                                               3/3     Running     0          9m33s   192.168.44.201   k8s-192-168-44-201.host.com   <none>           <none>
csi-rbdplugin-6xmjq                                               3/3     Running     0          4m50s   192.168.44.203   k8s-192-168-44-203.host.com   <none>           <none>
csi-rbdplugin-drxtc                                               3/3     Running     0          4m46s   192.168.44.202   k8s-192-168-44-202.host.com   <none>           <none>
csi-rbdplugin-jgvd7                                               3/3     Running     0          4m53s   192.168.44.204   k8s-192-168-44-204.host.com   <none>           <none>
csi-rbdplugin-provisioner-79c9fcd8cb-9w8p6                        6/6     Running     0          96m     10.244.172.195   k8s-192-168-44-203.host.com   <none>           <none>
csi-rbdplugin-provisioner-79c9fcd8cb-ztkvd                        6/6     Running     0          96m     10.244.76.3      k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-crashcollector-k8s-192-168-44-202.host.com-79d8bkf4w4   1/1     Running     0          71m     10.244.76.9      k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-crashcollector-k8s-192-168-44-203.host.com-5fbffg9ccs   1/1     Running     0          71m     10.244.172.199   k8s-192-168-44-203.host.com   <none>           <none>
rook-ceph-crashcollector-k8s-192-168-44-204.host.com-5995cs54qw   1/1     Running     0          71m     10.244.238.203   k8s-192-168-44-204.host.com   <none>           <none>
rook-ceph-mgr-a-75cc789ccf-69bfn                                  2/2     Running     0          71m     10.244.238.199   k8s-192-168-44-204.host.com   <none>           <none>
rook-ceph-mgr-b-588db8cb7f-xbr7c                                  2/2     Running     0          71m     10.244.76.6      k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-mon-a-659fc96b47-jmtnf                                  1/1     Running     0          93m     10.244.76.5      k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-mon-b-5584ccd58c-plgpw                                  1/1     Running     0          73m     10.244.238.198   k8s-192-168-44-204.host.com   <none>           <none>
rook-ceph-mon-c-5b545789cd-rmvmh                                  1/1     Running     0          72m     10.244.172.198   k8s-192-168-44-203.host.com   <none>           <none>
rook-ceph-operator-6b87cd9d48-xpfg8                               1/1     Running     0          4h32m   10.244.76.2      k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-osd-0-86db846df7-ndk6x                                  1/1     Running     0          71m     10.244.172.201   k8s-192-168-44-203.host.com   <none>           <none>
rook-ceph-osd-1-7d786c4c75-hmptk                                  1/1     Running     0          71m     10.244.238.202   k8s-192-168-44-204.host.com   <none>           <none>
rook-ceph-osd-2-688786c57d-jwfq8                                  1/1     Running     0          71m     10.244.76.10     k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-osd-prepare-k8s-192-168-44-202.host.com-jsv94           0/1     Completed   0          70m     10.244.76.11     k8s-192-168-44-202.host.com   <none>           <none>
rook-ceph-osd-prepare-k8s-192-168-44-203.host.com-2r6qq           0/1     Completed   0          70m     10.244.172.203   k8s-192-168-44-203.host.com   <none>           <none>
rook-ceph-osd-prepare-k8s-192-168-44-204.host.com-hdfbx           0/1     Completed   0          
验证集群
kubectl apply -f toolbox.yaml
kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" 
kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash 
================================================
$ ceph -s
  cluster:
    id:     4cf329c1-ab1a-4ad7-8838-c4d18ecf9a0b
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum b,a,c (age 14m)
    mgr: b(active, since 13m), standbys: a
    osd: 3 osds: 3 up (since 13m), 3 in (since 13m)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   14 MiB used, 60 GiB / 60 GiB avail
    pgs:     1 active+clean
 
$ ceph df
--- RAW STORAGE ---
CLASS     SIZE    AVAIL     USED  RAW USED  %RAW USED
hdd    300 GiB  300 GiB  354 MiB   354 MiB       0.12
TOTAL  300 GiB  300 GiB  354 MiB   354 MiB       0.12
 
--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS     USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        0      0 B      0     95 GiB
replicapool             2   32  35 MiB      156  104 MiB   0.04     95 GiB

块存储使用

cd ~/rook/deploy/examples
kubectl apply -f csi/rbd/storageclass.yaml


##验证
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  namespace: mysql-nacos
type: Opaque
stringData:
  mysql-root-password: "123456"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  namespace: mysql-nacos
spec:
  selector:
    matchLabels:
      app: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:latest
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secret
                  key: mysql-root-password
          volumeMounts:
            - name: mysql-home
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-home
          persistentVolumeClaim:
            claimName: mysql-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: mysql-nacos
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: rook-ceph-block
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: mysql-nacos
spec:
  type: NodePort
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 30336


##查看
[root@021rjsh216161s lkltest]# kubectl get pvc -n mysql-nacos
NAME                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
mysql-pvc               Bound    pvc-ea6d97a0-28f1-40ac-8115-1de55b5d02e0   2Gi        RWO            rook-ceph-block   66d
[root@021rjsh216161s lkltest]# kubectl get po -n mysql-nacos
NAME                                READY   STATUS    RESTARTS      AGE
mysql-deployment-74ffdf8d6d-vgzc7   1/1     Running   1 (21d ago)   66d

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐