当前位置: 首页 > news >正文

在 kubernetes 上使用 SMB 协议做存储的「即插即用」方案

helm 方式

1) 安装 SMB CSI 驱动(Helm)

helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
helm repo update
# 安装到 kube-system,版本示例:v1.19.1(当前最新版)
helm install csi-driver-smb csi-driver-smb/csi-driver-smb \-n kube-system --create-namespace \--version 1.19.1

该驱动官方仓库与版本见这里。([GitHub][2])


2) 准备访问凭据(Secret)

your_user/your_password 改成 NAS 账号与密码;如需域账户,用户名可写成 DOMAIN\\user(例如 Azure\\alice)。([docs.okd.io][3])

apiVersion: v1
kind: Secret
metadata:name: smb-secretnamespace: kube-system   # 也可放到别的命名空间,下面 SC 同步修改
type: Opaque
stringData:username: "your_user"      # 域账户可用: "DOMAIN\\your_user"password: "your_password"  # 建议用 stringData,避免自己手动 base64

kubesphere上面

kind: Secret
apiVersion: v1
metadata:name: smb-secretnamespace: kube-systemannotations:kubesphere.io/creator: admin
data:password: your_userusername: your_password
type: kubernetes.io/basic-auth

3) 创建 StorageClass(动态供给 + 凭据引用)

//10.0.0.20/share 改为你的 NAS 共享路径。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: smb-csiannotations:storageclass.kubernetes.io/is-default-class: "false"
provisioner: smb.csi.k8s.io
parameters:# 共享路径(UNC)source: "//10.0.0.20/share"# 给控制器和节点阶段传递凭据(CSI 标准参数名)csi.storage.k8s.io/provisioner-secret-name: "smb-secret"csi.storage.k8s.io/provisioner-secret-namespace: "kube-system"csi.storage.k8s.io/node-stage-secret-name: "smb-secret"csi.storage.k8s.io/node-stage-secret-namespace: "kube-system"mountOptions:- vers=3.0- dir_mode=0777- file_mode=0777# 如需在容器内指定属主/属组,可加:# - uid=1000# - gid=1000reclaimPolicy: Retain # 保留 Delete:会删除nas上面的pvc目录
volumeBindingMode: Immediate
allowVolumeExpansion: true

csi.storage.k8s.io/*-secret-* 是 CSI 约定的参数名;source 为 SMB 共享地址。也支持把 source 放进 Secret(source-secret-name/source-secret-key),适合多站点差异化配置。


4) 验证(PVC + 测试 Pod)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-smb-test
spec:accessModes: ["ReadWriteMany"]storageClassName: smb-csiresources:requests:storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:name: smb-check
spec:containers:- name: boximage: busyboxcommand: ["sh","-c","echo OK-$(date) > /mnt/ok && ls -l /mnt && cat /mnt/ok && sleep 3600"]volumeMounts:- name: vmountPath: /mntvolumes:- name: vpersistentVolumeClaim:claimName: pvc-smb-test

kubectl logs -f smb-check 看到 OK-时间戳 即成功。


用官方安装脚本(kubectl 直装)

1. 下载安装文件 https://github.com/kubernetes-csi/csi-driver-smb/releases/tag/v1.19.1

在这里插入图片描述

脚本会把 repo 设为 ./deploy,随后如果 ver != master 再拼上版本号,所以本地路径必须是:

install-driver.sh
deploy/
└─ v1.19.1/├─ rbac-csi-smb.yaml├─ csi-smb-driver.yaml├─ csi-smb-controller.yaml├─ csi-smb-node.yaml├─ csi-smb-node-windows.yaml              # 仅有 Windows 节点才需要└─ csi-smb-node-windows-hostprocess.yaml  # 仅 hostprocess 模式时需要

可以在有外网的机器上把对应版本的这些 YAML 拉下来,然后拷回到离线环境;或者你已在本地准备好了这几份 YAML,直接放到上面的目录即可。

2.替换镜像到你的私有仓库(离线环境必做)

SMB CSI 及其 sidecar 的镜像默认在 registry.k8s.io。你可以用下面脚本自动抽取 YAML 里的镜像、用可达的代理源拉取一遍、然后推到你的私有仓库,并把 YAML 中的镜像前缀替换为你的仓库。
如果拉取不下来使用,用国内/代理镜像中转一次再推到你的私有仓库
先在一台能上网的跳板机上中转拉取,再推回你的 registry

# 1) 先试官方源(能通就跳过后面的中转)
docker pull registry.k8s.io/sig-storage/smbplugin:v1.19.1# 2) 不通就用多云代理镜像拉(示例:DaoCloud 代理 registry.k8s.io)
docker pull k8s.m.daocloud.io/sig-storage/smbplugin:v1.19.1# 3) 重新打 tag 推到你内网仓库
docker tag k8s.m.daocloud.io/sig-storage/smbplugin:v1.19.1  registry.local/sig-storage/smbplugin:v1.19.1
docker push registry.local/sig-storage/smbplugin:v1.19.1

3.本地安装命令

  • 仅 Linux 节点(最常见):
bash install-driver.sh v1.19.1 local
  • 如需 Windows 且使用 hostprocess:
bash install-driver.sh v1.19.1 local-hostprocess

验证:

kubectl -n kube-system get deploy,ds | grep -i smb
kubectl -n kube-system get pods -o wide | grep -i smb

4.创建 NAS 账号/密码 Secret + StorageClass(RWX 动态供给)

your_user/your_password//10.0.0.20/share 改成你 NAS 的真实信息;域账户可写 DOMAIN\\user

# smb-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: smb-secretnamespace: kube-system
type: Opaque
stringData:username: "your_user"         # 域账户示例: "CORP\\alice"password: "your_password"
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: smb-csiannotations:storageclass.kubernetes.io/is-default-class: "false"   # 需要默认可改为 "true"
provisioner: smb.csi.k8s.io
parameters:source: "//10.0.0.20/share"   # NAS 共享路径(UNC)csi.storage.k8s.io/provisioner-secret-name: "smb-secret"csi.storage.k8s.io/provisioner-secret-namespace: "kube-system"csi.storage.k8s.io/node-stage-secret-name: "smb-secret"csi.storage.k8s.io/node-stage-secret-namespace: "kube-system"
mountOptions:- vers=3.0- dir_mode=0777- file_mode=0777
reclaimPolicy: Retain #保留 Delete:会删除nas上面的pvc目录
volumeBindingMode: Immediate
allowVolumeExpansion: true
kubectl apply -f smb-secret.yaml

5.快速自测(PVC + Pod)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-smb-test
spec:accessModes: ["ReadWriteMany"]storageClassName: smb-csiresources:requests:storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:name: smb-check
spec:containers:- name: boximage: busyboxcommand: ["sh","-c","echo OK-$(date) > /mnt/ok && ls -l /mnt && cat /mnt/ok && sleep 3600"]volumeMounts:- name: vmountPath: /mntvolumes:- name: vpersistentVolumeClaim:claimName: pvc-smb-test
kubectl apply -f test.yaml
kubectl logs -f smb-check

看到 OK-时间戳 即成功。


http://www.dtcms.com/a/596634.html

相关文章:

  • 软件测试大赛Web测试赛道工程化ai提示词大全
  • 智慧团建官方网站登录入口优秀的网站建设价格
  • 静海做网站公司十一月新闻大事件摘抄
  • GJOI 11.6 题解
  • Java Excel 导出:EasyExcel 使用详解
  • 【SOMEIP】【R24-11】【需求翻译】[RS_SOMEIP_00002]-[RS_SOMEIP_00004]
  • VMware无法将网络更改为桥接状态:没有未桥接的主机网络适配器
  • maven打包问题/ClassNotFoundException异常
  • 告别局域网限制!Windows快速部署Docsify技术文档站点,搭配cpolar内网穿透实现公网随时随地访问
  • Python每日一练---第十二天:验证回文串
  • 【Docker】Dockerfile自定义镜像
  • 1.3 Spring的入门程序
  • 网站内的链接怎么做修改wordpress 表格
  • 企业网站源码是什么网站内链怎么优化
  • FPGA-zynq PS与PL的交互(一)
  • 做电影网站需要施工企业会计核算及常用会计分录
  • CONFIG_TRACEPOINTS和CONFIG_FTRACE的作用
  • LeetCode 热题 100——哈希——字母异位词分组
  • MATLAB 计算两点直线方程(叉乘)
  • 系统分析师-信息安全-通信与网络安全技术系统访问控制技术
  • 25年11月软考架构真题《论无服务器架构(Serverless)》考后复盘总结
  • SMamba: 基于稀疏Mamba的事件相机目标检测
  • 怎么给自己制作一个网站php整站最新版本下载
  • 饰品网站模版哪种网站
  • 耐达讯自动化Profibus光纤模块:智能仪表的“生命线”,极端环境通信无忧!
  • C++入门(算法) - 习题
  • 校验热稳定,裸导体宜采用主保护动作时间加相应断路器开断时间。电气设备宜采用后备保护动作时间加相应断路器开断时间。
  • 【Java SE 基础学习打卡】10 JDK 下载与安装
  • 【SqlServer】日志文件无法收缩的解决方法
  • 拟牛顿法的数学原理:正定性、合理性与割线约束