k8s使用cifs手动创建pv(windows共享存储)
由于项目需要使用已有的cifs,需要手动创建cifs的pv
在服务器上挂载cifs的命令
yum install cifs-utils -y
mount -t cifs -o vers=1.0,username=fdcdzh2021,password=Fdcdzh2023 //rdfs.goldwind.com.cn/JJFA /data/api
新的挂载方式:
mount -t cifs -o vers=2.0,username=50969,password=Bdyxnjzd0401= //10.1.253.15/jjfa /data/api
使用nfs不需要安装插件,使用windows的共享文件系统cifs需要安装驱动。kubernetes提供CSI驱动将外部存储提供给pod中使用,我们可以通过CSI驱动对接Samba/CIFS共享文件存储。
github地址https://github.com/kubernetes-csi/csi-driver-smb
1.安装驱动
curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/v1.9.0/deploy/install-driver.sh | bash -s v1.9.0 --
现在这样的安装方式会报错,可以使用拉下代码本地安装的方式
gitclone代码并安装 git clone https://github.com/kubernetes-csi/csi-driver-smb.git cd csi-driver-smb git checkout v1.11.0 ./deploy/install-driver.sh v1.11.0 local 查看安装进度 kubectl -n kube-system get pod -o wide --watch -l app=csi-smb-controller kubectl -n kube-system get pod -o wide --watch -l app=csi-smb-node
若镜像被由于墙拉不下来,可以docker search 相关的镜像拉取,然后打tag上传到自己的镜像仓库。安装驱动后就可以使用spec:csi:driver: smb.csi.k8s.io字段了。
2.创建cifs的密钥,widonws的共享存储需要认证
kubectl create secret generic smbcreds --from-literal username=USERNAME --from-literal password="PASSWORD"
3.创建pv/pvc
创建pv,其中若建多个cifs pv需要 volumeHandle: smb-server.default.svc.cluster.local/share## 每次都要不同,可以用share1/2/3等,否则挂载会报错:
mount failed: exit status 32 Mounting command: mount Mounting arguments
apiVersion: v1
kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: smb.csi.k8s.io name: pv-smb spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: smb mountOptions: - dir_mode=0777 - file_mode=0777
- vers=2.0
csi: driver: smb.csi.k8s.io readOnly: false # volumeHandle format: {smb-server-address}#{sub-dir-name}#{share-name} # make sure this value is unique for every share in the cluster volumeHandle: smb-server.default.svc.cluster.local/share4## volumeAttributes: source: "//smb-server-address/sharename" nodeStageSecretRef: name: smbcreds namespace: default
创建pvc
--- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-smb
namespace: wfs-prod spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-smb storageClassName: smb
4.若要使用storage class
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: smb provisioner: smb.csi.k8s.io parameters: source: "//smb-server.xxx/share" # if csi.storage.k8s.io/provisioner-secret is provided, will create a sub directory # with PV name under source csi.storage.k8s.io/provisioner-secret-name: "smbcreds" csi.storage.k8s.io/provisioner-secret-namespace: "default" csi.storage.k8s.io/node-stage-secret-name: "smbcreds" csi.storage.k8s.io/node-stage-secret-namespace: "default" reclaimPolicy: Retain # available values: Delete, Retain volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1001 - gid=1001
5.将pvc绑定到负载(deployment,pod,daemonset)上
6.遇到的问题
a.报错Input/output error Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
是因为挂载点有问题,大概是因为Controller在master3节点上,所以需要挂载这个盘的应用只能部署在master3节点上
b.报错special device /var/lib/kubelet/plugins/kubernetes.io/csi/pv/wfs-pv-load04-smb/globalmount does not exist.
是因为这个同一个集群挂的第二个cifs,且在配置的时候,与第一个盘设置的volumeHandle: smb-server.default.svc.cluster.local/share## 一模一样,导致在deploy挂载这个盘之后没有在/var/lib/kubelet/plugins/kubernetes.io/csi/pv/ 下生成新的pv目录wfs-pv-load04-smb 所以找不到目录,此时应该更改一下volumeHandle的值,如设置为smb-server.default.svc.cluster.local/share1## 之后就可正常使用。
c.报错mount error(5): Input/output error Refer to the mount.cifs(8) manual page (e.g. man mount.cif end 1
查看服务器/var/log/message日志,显示
No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
是因为cifs的版本不对,默认version为1,需要在pv创建是指定
mountOptions:
- vers=2.0
版本升级
从csi-driver-smb v1.11升级到v1.16配置文件不用动 只用更新镜像,从24年很多镜像源都不能用了,找到一个docker.imgdb.de镜像源,使用时需要在镜像名前加docker.imgdb.de,如:
docker pull docker.imgdb.de/registry.k8s.io/sig-storage/livenessprobe:v2.13.1
v1.11.0与v1.16.0版本镜像
v1.11.0 csi-smb-node.yaml registry.k8s.io/sig-storage/livenessprobe:v2.3.0 registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.2.0 mcr.microsoft.com/k8s/csi/smb-csi:v1.1.0 csi-smb-controller.yaml registry.k8s.io/sig-storage/csi-provisioner:v2.1.0 registry.k8s.io/sig-storage/livenessprobe:v2.3.0(node中已有) mcr.microsoft.com/k8s/csi/smb-csi:v1.1.0(node中已有) v1.16.0 csi-smb-node.yaml registry.k8s.io/sig-storage/livenessprobe:v2.13.1 registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.11.1 registry.k8s.io/sig-storage/smbplugin:v1.16.0 csi-smb-controller.yaml registry.k8s.io/sig-storage/csi-provisioner:v5.0.2 registry.k8s.io/sig-storage/livenessprobe:v2.13.1(node中已有) registry.k8s.io/sig-storage/smbplugin:v1.16.0 (node中已有)
浙公网安备 33010602011771号