CSI插件之Samba&CIFS文件系统

前提

  • Kubernetes 1.19+

安装

kubernetes提供CSI驱动将外部存储提供给pod中使用,我们可以通过CSI驱动对接Samba/CIFS共享文件存储

驱动地址:

https://github.com/kubernetes-csi/csi-driver-smb

安装SMB CSI驱动

curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/v1.5.0/deploy/install-driver.sh | bash -s v1.5.0 --

查看pod状态是否正常:

kubectl -n kube-system get pod |grep csi-smb

首先创建一个secret保存samba的用户和密码

kubectl create secret generic samba-auth --from-literal username="samba-csi-username" --from-literal password="samba-csi-password"

创建storage class存储类

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: smb
provisioner: smb.csi.k8s.io
parameters:
  source: "//192.168.1.1/share"
  csi.storage.k8s.io/node-stage-secret-name: "samba-auth"
  csi.storage.k8s.io/node-stage-secret-namespace: "default"
  createSubDir: "false"  # optional: create a sub dir for new volume
reclaimPolicy: Retain  # only retain is supported
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=1001
  - gid=1001

部署应用

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-smb
  labels:
    app: nginx
spec:
  serviceName: statefulset-smb
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: statefulset-smb
          image: nginx:1.21.0
          command:
            - "/bin/bash"
            - "-c"
            -  while true; do echo $(date) >> /mnt/smb/outfile; sleep 1; done
          volumeMounts:
            - name: persistent-storage
              mountPath: /mnt/smb
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  volumeClaimTemplates:
    - metadata:
        name: persistent-storage
        annotations:
          volume.beta.kubernetes.io/storage-class: smb
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 1Gi

查看应用状态

kubectl exec -it statefulset-smb-0 sh
# df -h
Filesystem                                    Size  Used Avail Use% Mounted on
overlay                                        40G   19G   20G  50% /
tmpfs                                          64M     0   64M   0% /dev
tmpfs                                         3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/ubuntu--vg-ubuntu--lv              40G   19G   20G  50% /etc/hosts
//s192.168.1.1/share   40G   21G   20G  52% /mnt/smb
shm                                            64M     0   64M   0% /dev/shm
tmpfs                                         3.9G   12K  3.9G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                                         3.9G     0  3.9G   0% /proc/acpi
tmpfs                                         3.9G     0  3.9G   0% /proc/scsi
tmpfs                                         3.9G     0  3.9G   0% /sys/firmware