1. Helm部署
1.1 简介
为了将Ceph部署到K8S集群中,可以利用ceph-helm项目。 目前此项目存在一些限制:
- public和cluster网络必须一样
- 如果Storage的用户不是admin,你需要在Ceph集群中手工创建用户,并在K8S中创建对应的Secrets
- ceph-mgr只能运行单副本
1.2 仓库
执行下面的命令把ceph-helm添加到本地Helm仓库:
1.3 覆盖值
可用值的说明如下:
ceph.yaml
network:
public: 10.0.0.0/8
cluster: 10.0.0.0/8
conf:
ceph:
config:
global:
# Ext4文件系统
filestore_xattr_use_omap: true
osd:
ms_bind_port_max: 7100
# Ext4文件系统
osd_max_object_name_len: 256
osd_max_object_namespace_len: 64
osd_crush_update_on_start : false
ceph:
storage:
osd_directory: /var/lib/ceph-helm
mon_directory: /var/lib/ceph-helm
mon_log: /var/log/ceph/mon
osd_log: /var/log/ceph/osd
# 和操作系统共享一个分区,基于目录的OSD
osd_directory:
enabled: true
storageclass:
name: ceph-rbd
pool: rbd
1.4 创建K8S资源
为Ceph创建名字空间:
kubectl create -f ceph-helm/ceph/rbac.yaml
了部署Ceph集群,需要为K8S集群中,不同角色(参与到Ceph集群中的角色)的节点添加标签:
- ceph-mon=enabled,部署mon的节点上添加
- ceph-mgr=enabled,部署mgr的节点上添加
- ceph-osd=enabled,部署基于设备、基于目录的OSD的节点上添加
- ceph-osd-device-NAME=enabled。部署基于设备的OSD的节点上添加,其中NAME需要替换为上面 ceph-overrides.yaml中的OSD设备名,即:
- ceph-osd-device-dev-vdb=enabled
- ceph-osd-device-dev-vdc=enabled
对应的K8S命令:
1.5 Release
1.6 检查状态
确保所有Pod正常运行:
# rgw即RADOS Gateway,是Ceph的对象存储网关服务,它是基于librados接口封装的FastCGI服务
# 提供存储和管理对象数据的REST API。对象存储适用于图片、视频等各类文件
# rgw兼容常见的对象存储API,例如绝大部分Amazon S3 API、OpenStack Swift API
ceph-rgw=enabled
# mds即Metadata Server,用于支持文件系统
ceph-mds=enabled
现在从监控节点,检查一下Ceph集群的状态:
kubectl patch storageclass ceph-rbd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
这样没有显式声明StorageClass的PVC将自动通过ceph-rbd进行卷提供。
1.7 创建存储池
1.8 使用存储池
可以先使用ceph命令尝试创建RBD并挂载:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-pvc
namespace: ceph
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: ceph-rbd
查看PVC是否绑定到PV:
kubectl -n ceph get secrets/pvc-ceph-client-key -o json --export | jq '.metadata.namespace = "default"' | kubectl create -f -
1.9 卸载
rm -rf /var/lib/ceph-helm
rm -rf /var/lib/ceph
2. 使用 已存在Ceph集群
只需要安装相应的Provisioner,配置适当的StorageClass即可。示例:
- Provisioner:https://git.gmem.cc/alex/helm-charts/src/branch/master/ceph-provisioners
- 安装脚本:https://git.gmem.cc/alex/k8s-init/src/branch/master/4.infrastructure/0.ceph-external.sh
2.1 基于CephFS的卷
Kubernetes卷的动态Provisioning,目前需要依赖于external-storage项目,K8S没有提供内置的Provisioner。此项目存在不少问题,生产环境下可以考虑静态提供。
Provisioner会自动在Ceph集群的默认CephFS中创建“卷”,Ceph支持基于libcephfs+librados来实现一个基于CephFS目录的虚拟卷。
你可以在默认CephFS中看到volumes/kubernetes目录。kubernetes目录对应一个虚拟卷组。每个PV对应了它的一个子目录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)