kubernetes使用ceph rbd存储

说明

 kubernetes静态pv可以使用cephfs,但是动态pvc不支持cephfs,可以使用rbd,这里只介绍如何使用rbd

安装ceph

只安装ceph-common也可以。
客户端需要使用rbd,安装ceph客户端,安装方式有两种
 一种在服务端安装,如果网络慢的话此方法会报超时,可以使用另外一种方法
ceph-deploy  install clientip
直接安装客户端
yum clean all
rm -rf /etc/yum.repos.d/*.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
进行yum的makecache
yum makecache
yum install ceph 

安装完成后,如果需要远程管理的的话可以执行
ceph-deploy admin 192.168.1.233  拷贝ceph的配置文件以及ceph.client.admin.keyring 到 cephclient

创建用户
ceph auth get-or-create client.kube mon 'allow r' osd 'allow rw pool=k8stest'
ceph auth add client.kube mon 'allow r' osd 'allow rw pool=k8stest'

kubernetes创建rbd类型的StorageClass

注意: 不同的namespaces
创建rbd类型的secret
kubectl create secret generic ceph-secret-rbd --type="kubernetes.io/rbd" --from-literal=key='AQBBJp1Z90lIERAA5ETjqhmnQSiWlA4RVQla7w==' 

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: k8sjiqundemo 
  namespace: demo
provisioner: kubernetes.io/rbd
parameters:
  monitors: 192.168.1.110:6789
  adminId: kube
  adminSecretName: ceph-secret-rbd
  adminSecretNamespace: demo 
  pool: k8stest 
  userId: kube
  userSecretName: ceph-secret-rbd 
使用上面的文件创建storageclass

StatefulSet使用storageclass

在配置文件中加入以下内容
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
        volume.beta.kubernetes.io/storage-class: k8sjiqundemo
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 100Mi 

问题

遇到的问题较多:
1、
查看pvc有报错信息,找不到rbd命令
rbd: create volume failed, err: failed to create rbd image: executable file not found in $PATH, command output: 
原因:kube-controller-manager容器中没有rbd,目前不知道那个版本集成了这个,后边再重新找一下

解决: (1)首先停止容器,cd  /etc/kubernetes && mv manifests/kube-controller-manager.yaml .
      (2)将容器内的 kube-controller-manager程序拷贝到宿主机上
        kubectl exec -it kube-controller-manager-cloud4ourself-kube1.novalocal -n kube-system -- /bin/sh
        cp kube-controller-manager /etc/pki/
      (3)退出容器执行一下命令,可以看到日志创建pvc成功
     /etc/pki/kube-controller-manager --controllers=*,bootstrapsigner,tokencleaner \
     --kubeconfig=/etc/kubernetes/controller-manager.conf \
     --service-account-private-key-file=/etc/kubernetes/pki/sa.key \
     --address=127.0.0.1 --leader-elect=true \
     --insecure-experimental-approve-all-kubelet-csrs-for-group=system:bootstrappers \
     --cluster-signing-key-file=/etc/kubernetes/pki/ca.key \
     --use-service-account-credentials=true \
     --root-ca-file=/etc/kubernetes/pki/ca.crt \
     --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt/etc/pki/ca.crt 
      (4)恢复容器模式运行kube-controller-manager
     mv kube-controller-manager.yaml manifests/
 上面这种方法比较麻烦,另外还有一种简单的方法结就是使用rbd-provisioner插件来规避使用定制kube-controller镜像,后边再单独写。
2、
 rbd: image kubernetes-dynamic-pvc-eae94a66-87d4-11e7-a2fc-5254008783ac is locked by other nodes
 这个错误提示有肯能是没有权限,有可能是没有安装rbd,有可能是真的被locked,需要做如下检查
 1)、use secrets of ceph is correctly configured
 2)、k8s node has rbd utility installed (from ceph-common)
 3)、monitor addresses in storage class are correct, and node can connect to ceph cluster 
(you can run rbd command manually on node if possible)
3、如果确实被锁定的情况下进行解锁

 root@ceph-osd0:~# rbd lock list k8stest/kubernetes-dynamic-pvc-a352ba6b-87e5-11e7-93c6-5254008783ac
 There is 1 exclusive lock on this image.
 Locker        ID                          Address                    
 client.104879 kubelet_lock_magic_k8snode4 192.168.1.122:0/3869973871 

 root@ceph-osd0:~# rbd lock remove k8stest/kubernetes-dynamic-pvc-a352ba6b-87e5-11e7-93c6-5254008783ac kubelet_lock_magic_k8snode4 client.104879
 root@ceph-osd0:~# rbd lock list k8stest/kubernetes-dynamic-pvc-a352ba6b-87e5-11e7-93c6-5254008783ac

pv访问模式

 访问模式包括:
  ▷ ReadWriteOnce —— 该volume只能被单个节点以读写的方式映射
  ▷ ReadOnlyMany —— 该volume可以被多个节点以只读方式映射
   ▷ ReadWriteMany —— 该volume只能被多个节点以读写的方式映射    
 状态
  ▷ Available:空闲的资源,未绑定给PVC 
  ▷ Bound:绑定给了某个PVC 
  ▷ Released:PVC已经删除了,但是PV还没有被集群回收 
  ▷ Failed:PV在自动回收中失败了 
 当前的回收策略有:
  ▷ Retain:手动回收
  ▷ Recycle:需要擦出后才能再使用
  ▷ Delete:相关联的存储资产,如AWS EBS,GCE PD,Azure Disk,or OpenStack Cinder卷都会被删除
   当前,只有NFS和HostPath支持回收利用,AWS EBS,GCE PD,Azure Disk,or OpenStack Cinder卷支持删除操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值