首页 > 编程知识 正文

docker生产环境,对象存储怎么用

时间:2023-05-04 11:33:49 阅读:107696 作者:3004

Rook基于构建在Kubernetes之上的存储服务框架。 支持Ceph、NFS等各种底层存储的创建和管理。 帮助系统管理员自动化并维护整个存储生命周期。 的整个存储生命周期包括部署、启动、配置、申请、扩展、升级、迁移、灾难恢复、监控、资源管理等,看了之后,感觉很多。 Rook的目标是允许Kubernetes和Rook托管和解决这些任务。

Rook管理Ceph群集Ceph分布式存储是Rook支持的第一个名为Stable的组织存储引擎。 笔者在验证Rook操作Ceph的过程中,社区的文档、脚本走到一起,初学者很难知道如何一步一步体验Rook构建Ceph的过程。 这表明分布式存储的技术难度和兼容性是一个长期的迭代过程。 Rook的目的是降低Ceph集群的部署管理难度,但与预期相反,初始使用过程并不友好,官方文档中存在许多不为人知的问题。

安装Ceph之前请注意。 当前,最新的Ceph支持的存储后端BlueStore仅支持原始设备,不支持在本地文件系统上构建存储块。 由于Rook文档混乱,最初需要自己找到安装脚本的目录。 它位于https://github.com/rook/rook/tree/master/cluster/examples/kubernetes/ceph

$ git clone https://github.com/rook/rook.git $ cdr ook $ gitcheckoutrelease-1.4 $ CD cluster/examples/kubernetes/检查ceph namesapce中是否存在rook-ceph $ kubectlgetnamespace $ kubectlcreate-f operator.YAML #以上步骤显示pods已经运行或关闭否则,$kubectlcreate-fcluster.yaml#可能会等待Ceph群集创建成功。 $ kube CTL-NR ook-cephgetpods # mg R1,mon3,#rook-ceph-crashcollector (如果有一些节点) ) #rook-ceph-osd

$ kubectlcreate-f toolbox.YAML $ kube CTL-NR ook-cephgetpods | grepceph-tools rook-ceph-tools-649 c4dd 574-gw8tx1running 03 m 20 s $ kube CTL-NR ook-cephexec-it rook-ceph-tools-ts-tools 009 alth _ ok services 3360 mon :3 daemons,quoruma,d,e(age12m ) mgr:a(active, since8m ) OSD:44OSDS336044UP () (since8m ) ) OSD36044 4in(since13m ) data:pools:1pools,1 pgs objects :0 objects 33600 19 TiB/19 tibavailpgs :1 active clean # ceph群集可用容量$cephdf#cephosd和node关系分布$cephosdtree#cephtoolbox删除工具$ kubectle

$ vim dashboard-external-https.yamlapiversion : v1 kind : service metadata 3360 name : rook-ceph-mgr-dashboard RR ook _ cluster : rook-cephspec : ports 3360-name 3360 dashboard port 33608443 protocol 360 app : rook-ceph-mgr rook _ nd

ml$ kubectl -n rook-ceph get servicerook-ceph-mgr-dashboard-external-https   NodePort    10.107.117.151   <none>        8443:31955/TCP      8m23s

访问地址是 31955,https://master_ip:31955 就可以访问。账号是 admin,密码可以在线查到:

$ kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

清空 Ceph:

$ cd /rook/cluster/examples/kubernetes/ceph$ kubectl -n rook-ceph delete cephcluster rook-ceph$ kubectl -n rook-ceph get cephcluster# 确认 rook-ceph 被删除$ kubectl delete -f operator.yaml# 删除集群$ kubectl delete -f common.yaml$ kubectl delete -f cluster.yaml 用 Rook 管理 NFS 文件系统

NFS 文件系统目前在国内企业还是很常见的一种存储方案。用 Rook 来管理 NFS 文件系统可以极大的方便开发者的存储环境。安装 rook 之前需要先安装 NFS Client 安装包。在 CentOS 节点上安装 nf-utils,在 Ubuntu 节点上安装 nf-common。然后就可以安装 Rook 了。步骤如下:

git clone --single-branch --branch v1.4.6 https://github.com/rook/rook.gitcd rook/cluster/examples/kubernetes/nfskubectl create -f common.yamlkubectl create -f provisioner.yamlkubectl create -f operator.yaml#查看运行情况[root@dev-mng-temp ~]# kubectl -n rook-nfs-system get podNAME                                   READY   STATUS    RESTARTS   AGErook-nfs-operator-59fb455d77-2cxn4     1/1     Running   0          75mrook-nfs-provisioner-b4bbf4cc4-qrzqd   1/1     Running   1          75m

创建权限,rbac.yaml 内容如下:

---apiVersion: v1kind: Namespacemetadata:  name:  rook-nfs---apiVersion: v1kind: ServiceAccountmetadata:  name: rook-nfs-server  namespace: rook-nfs---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:  name: rook-nfs-provisioner-runnerrules:  - 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", "endpoints"]    verbs: ["get"]  - apiGroups: ["policy"]    resources: ["podsecuritypolicies"]    resourceNames: ["rook-nfs-policy"]    verbs: ["use"]  - apiGroups: [""]    resources: ["endpoints"]    verbs: ["get", "list", "watch", "create", "update", "patch"]  - apiGroups:    - nfs.rook.io    resources:    - "*"    verbs:    - "*"---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:  name: rook-nfs-provisioner-runnersubjects:  - kind: ServiceAccount    name: rook-nfs-server     # replace with namespace where provisioner is deployed    namespace: rook-nfsroleRef:  kind: ClusterRole  name: rook-nfs-provisioner-runner  apiGroup: rbac.authorization.k8s.io

执行 yaml 创建权限:

kubectl create -f rbac.yaml

当前主流的做法是采用动态申请资源的方式创建 NFSServer,步骤如下:

kubectl create -f nfs.yaml # sc.yamlapiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  labels:    app: rook-nfs  name: rook-nfs-share1parameters:  exportName: share1  nfsServerName: rook-nfs  nfsServerNamespace: rook-nfsprovisioner: rook.io/nfs-provisionerreclaimPolicy: DeletevolumeBindingMode: Immediate

kubectl create -f sc.yaml 将创建 StorageClass,然后就可以申请资源:

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: rook-nfs-pv-claimspec:  storageClassName: "rook-nfs-share1"  accessModes:    - ReadWriteMany  resources:    requests:      storage: 1Mi

kubectl create -f pvc.yaml 将创建一份文件卷。校验结果:

[root@dev-mng-temp nfs]# kubectl get pvcNAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGErook-nfs-pv-claim   Bound    pvc-504eb26d-1b6f-4ad8-9318-75e637ab50c7   1Mi        RWX            rook-nfs-share1   7m5s

测试使用的案例:

> kubectl create -f busybox-rc.yaml> kubectl create -f web-rc.yaml> kubectl get pod -l app=nfs-demo> kubectl create -f web-service.yaml> echo; kubectl exec $(kubectl get pod -l app=nfs-demo,role=busybox -o jsonpath='{.items[0].metadata.name}') -- wget -qO- http://$(kubectl get services nfs-web -o jsonpath='{.spec.clusterIP}'); echoThu Oct 22 19:28:55 UTC 2015nfs-busybox-w3s4t

dbdwd发现 NFS Server 没有运行起来,可以用这一行命令查看问题:

kubectl -n rook-nfs-system logs -l app=rook-nfs-operator 总结

Rook 项目从笔者入手来,其目标定位还是很准,并且真实的解决了简化 Ceph 安装配置的痛点,并且依据 Ceph 使用的经验开始注入更多的存储驱动,如 NFS 存储驱动。使用起来并不复杂,但是它的文档实在是太糟糕了。社区中也没有人来专门维护这套文档,导致文章中很多描述都是过期的,你根本不清楚如何配置。一不小心就会配置错误。所以大家在使用过程中,还是要仔细熟悉一遍 yaml 文档的内容,了解到它的功能后在安装,就会事半功倍。这种不完善其实对开源技术爱好者来说,也是一种机会,让你通过修改文档的方式参与到 Rook 这个项目中。以我梳理一遍之后,通过最新版本的安装步骤,你可以几分钟就可以部署自己的分布式存储环境,Rook 确实事半功倍,值得推荐并大量实践使用。

参考资料

https://draveness.me/papers-ceph/ 

https://rook.io/docs/rook/v1.4/nfs.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。