设为首页 收藏本站
查看: 1217|回复: 0

[经验分享] Kubernetes 使用 Ceph 存储

[复制链接]

尚未签到

发表于 2018-9-16 07:23:24 | 显示全部楼层 |阅读模式
  本文主要记录一下 Kubernetes 使用 Ceph 存储的相关配置过程,Kubernetes 集群环境采用的 kargo 部署方式,并且所有组件以容器化运行
一、基础环境准备
  
  Kubernetes 集群总共有 5 台,部署方式为 kargo 容器化部署,采用 kargo 部署时确保配置中开启内核模块加载( kubelet_load_modules: true );Kubernetes 版本为 1.6.4,Ceph 采用最新的稳定版 Jewel
节点IP部署docker1192.168.1.11master、monitor、osddocker2192.168.1.12master、monitor、osddocker3192.168.1.13node、monitor、osddocker4192.168.1.14node、osddocker5192.168.1.15node、osd二、部署 Ceph 集群
  
  具体安装请参考 Ceph 笔记(一)、Ceph 笔记(二),以下直接上命令
2.1、部署集群
# 创建集群配置目录mkdir ceph-cluster && cd ceph-cluster# 创建 monitor-nodeceph-deploy new docker1 docker2 docker3# 追加 OSD 副本数量echo "osd pool default size = 5" >> ceph.conf# 安装 cephceph-deploy install docker1 docker2 docker3 docker4 docker5# init monitor nodeceph-deploy mon create-initial# 初始化 odsceph-deploy osd prepare docker1:/dev/sda docker2:/dev/sda docker3:/dev/sda docker4:/dev/sda docker5:/dev/sda# 激活 osdceph-deploy osd activate docker1:/dev/sda1:/dev/sda2 docker2:/dev/sda1:/dev/sda2 docker3:/dev/sda1:/dev/sda2 docker4:/dev/sda1:/dev/sda2 docker5:/dev/sda1:/dev/sda2# 部署 ceph cli 工具和秘钥文件ceph-deploy admin docker1 docker2 docker3 docker4 docker5# 确保秘钥有读取权限chmod +r /etc/ceph/ceph.client.admin.keyring# 检测集群状态ceph health2.2、创建块设备
# 创建存储池rados mkpool data# 创建 imagerbd create data --size 10240 -p data# 关闭不支持特性rbd feature disable data exclusive-lock, object-map, fast-diff, deep-flatten -p data# 映射(每个节点都要映射)rbd map data --name client.admin -p data# 格式化块设备(单节点即可)mkfs.xfs /dev/rbd0三、kubernetes 使用 Ceph
  
3.1、PV & PVC 方式
  传统的使用分布式存储的方案一般为 PV & PVC 方式,也就是说管理员预先创建好相关 PV 和 PVC,然后对应的 deployment 或者 replication 挂载 PVC 来使用
  创建 Secret
# 获取管理 key 并进行 base64 编码ceph auth get-key client.admin | base64# 创建一个 secret 配置(key 为上条命令生成的)cat > ceph-secret.yml  
apiVersion: v1
  
kind: Secret
  
metadata:
  
  name: ceph-secret
  
data:
  
  key: QVFDaWtERlpzODcwQWhBQTdxMWRGODBWOFZxMWNGNnZtNmJHVGc9PQo=
  
EOFkubectl create -f ceph-secret.yml
  创建 PV
# monitor 需要多个,pool 和 image 填写上面创建的cat > test.pv.yml  
apiVersion: v1
  
kind: PersistentVolume
  
metadata:
  
  name: test-pv
  
spec:
  
  capacity:
  
    storage: 2Gi
  
  accessModes:
  
    - ReadWriteMany
  
  rbd:
  
    monitors:
  
      - 192.168.1.11:6789
  
      - 192.168.1.12:6789
  
      - 192.168.1.13:6789
  
    pool: data
  
    image: data
  
    user: admin
  
    secretRef:
  
      name: ceph-secret
  
    fsType: xfs
  
    readOnly: false
  
  persistentVolumeReclaimPolicy: Recycle
  
EOFkubectl create -f test.pv.yml
  创建 PVC
cat > test.pvc.yml  
kind: PersistentVolumeClaim
  
apiVersion: v1
  
metadata:
  
  name: test-pvc
  
spec:
  
  accessModes:
  
    - ReadWriteMany
  
  resources:
  
    requests:
  
      storage: 2Gi
  
EOFkubectl create -f test.pvc.yml
  创建 Deployment并挂载
cat > test.deploy.yml  
apiVersion: apps/v1beta1
  
kind: Deployment
  
metadata:
  
  name: demo
  
spec:
  
  replicas: 3
  
  template:
  
    metadata:
  
      labels:
  
        app: demo
  
    spec:
  
      containers:
  
      - name: demo
  
        image: mritd/demo
  
        ports:
  
        - containerPort: 80
  
        volumeMounts:
  
          - mountPath: "/data"
  
            name: data
  
      volumes:
  
        - name: data
  
          persistentVolumeClaim:
  
            claimName: test-pvc
  
EOFkubectl create -f test.deploy.yml
3.2、StoragaClass 方式
  在 1.4 以后,kubernetes 提供了一种更加方便的动态创建 PV 的方式;也就是说使用 StoragaClass 时无需预先创建固定大小的 PV,等待使用者创建 PVC 来使用;而是直接创建 PVC 即可分配使用
  创建系统级 Secret
  注意: 由于 StorageClass 要求 Ceph 的 Secret type 必须为 kubernetes.io/rbd,所以上一步创建的ceph-secret 需要先被删除,然后使用如下命令重新创建;此时的 key 并没有经过 base64
# 这个 secret type 必须为 kubernetes.io/rbd,否则会造成 PVC 无法使用kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==' --namespace=kube-system  
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==' --namespace=default
  创建 StorageClass
cat > test.storageclass.yml  
apiVersion: storage.k8s.io/v1
  
kind: StorageClass
  
metadata:
  
  name: test-storageclass
  
provisioner: kubernetes.io/rbd
  
parameters:
  
  monitors: 192.168.1.11:6789,192.168.1.12:6789,192.168.1.13:6789
  
  # Ceph 客户端用户 ID(非 k8s 的)
  
  adminId: admin
  
  adminSecretName: ceph-secret
  
  adminSecretNamespace: kube-system
  
  pool: data
  
  userId: admin
  
  userSecretName: ceph-secret
  
EOFkubectl create -f test.storageclass.yml
  关于上面的 adminId 等字段具体含义请参考这里 Ceph RBD
  创建 PVC
cat > test.sc.pvc.yml  
kind: PersistentVolumeClaim
  
apiVersion: v1
  
metadata:
  
  name: test-sc-pvc
  
  annotations:
  
    volume.beta.kubernetes.io/storage-class: test-storageclass
  
spec:
  
  accessModes:
  
    - ReadWriteMany
  
  resources:
  
    requests:
  
      storage: 2Gi
  
EOFkubectl create -f test.sc.pvc.yml
  创建 Deployment
cat > test.sc.deploy.yml  
apiVersion: apps/v1beta1
  
kind: Deployment
  
metadata:
  
  name: demo-sc
  
spec:
  
  replicas: 3
  
  template:
  
    metadata:
  
      labels:
  
        app: demo-sc
  
    spec:
  
      containers:
  
      - name: demo-sc
  
        image: mritd/demo
  
        ports:
  
        - containerPort: 80
  
        volumeMounts:
  
          - mountPath: "/data"
  
            name: data
  
      volumes:
  
        - name: data
  
          persistentVolumeClaim:
  
            claimName: test-sc-pvc
  
EOFkubectl create -f test.sc.deploy.yml
  到此完成,检测是否成功最简单的方式就是看相关 pod 是否正常运行
  转载请注明出处,本文采用 CC4.0 协议授权
  本文转自: https://mritd.me/2017/06/03/use-ceph-storage-on-kubernetes/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584287-1-1.html 上篇帖子: Kubernetes基本概念 下篇帖子: Kubernetes 1.5安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表