说明
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卷支持删除操作。