快速部署Samba共享服务器作为k8s后端存储

由于Ceph Squid(v19.2.1)‌不原生支持直接导出 SMB 服务器‌,需通过手动集成 Samba 或其他第三方工具实现‌ 所以直接部署最简单的

安装软件包
apt install samba
  • 编辑配置文件 vim /etc/samba/smb.conf在最末尾添加以下
# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak [Share]
comment = Shared Folder
path = /srv/samba/share
browsable = yes
read only = no  # 允许写入
valid users = smbjbl
create mask = 0664  # 客户端文件权限上限
directory mask = 0775  # 客户端目录权限上限
force create mode = 0664  # 强制文件权限
force directory mode = 0775  # 强制目录权限
  • 重启服务
#创建目录
mkdir -p  /srv/samba/share
#创建用户和设置密码
useradd -M -s /usr/sbin/nologin smbjbl
smbpasswd -a smbjbl
#查看
pdbedit -L | grep smbjbl# 授权(假设 smbuser 属于组 smbgroup)
chown -R smbuser:smbgroup /srv/samba/share
chmod -R 0775 /srv/samba/share     # 目录权限
find /srv/samba/share -type f -exec chmod 0664 {} \;  # 文件权限
#重启服务
systemctl restart smbd

普通客户端挂测试必须通过

#安装挂载工具
apt install cifs-utils -y# smbclient -L //172.16.8.56 -U smbjbl%123456  (用户%密码)Sharename       Type      Comment---------       ----      -------print$          Disk      Printer DriversShare           Disk      Shared FolderIPC$            IPC       IPC Service (Samba 4.17.12-Debian)smbjbl          Disk      Home Directories
SMB1 disabled -- no workgroup available
#挂载成功
mount -t cifs //172.16.8.56/Share /mnt/smb -o username=smbjbl,password=123456
# df -h | tail -n 1//172.16.8.56/Share   46G  2.5G   43G   6% /mnt/smb

以下配置SMB-Csi

# 官网
https://github.com/kubernetes-csi/csi-driver-smb/tree/master/charts/v1.17.0helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
helm pull csi-driver-smb csi-driver-smb/csi-driver-smb  --version v1.17.0 --untar
我的values.yaml文件已经替换好国内镜像了
# egrep -v "^[[:space:]]*#|^$" values.yaml
image:baseRepo: registry.cn-hangzhou.aliyuncs.com/google_containerssmb:repository: ccr.ccs.tencentyun.com/abcdh/abpaytag: smbpullPolicy: IfNotPresentcsiProvisioner:repository: /csi-provisionertag: v5.2.0pullPolicy: IfNotPresentcsiResizer:repository: /csi-resizertag: v1.13.1pullPolicy: IfNotPresentlivenessProbe:repository: /livenessprobetag: v2.15.0pullPolicy: IfNotPresentnodeDriverRegistrar:repository: /csi-node-driver-registrartag: v2.13.0pullPolicy: IfNotPresent#csiproxy:   ----------注释windows#repository: ghcr.io/kubernetes-sigs/sig-windows/csi-proxy#tag: v1.1.2#pullPolicy: IfNotPresentserviceAccount:create: true # When true, service accounts will be created for you. Set to false if you want to use your own.controller: csi-smb-controller-sanode: csi-smb-node-sa
rbac:create: truename: smb
driver:name: smb.csi.k8s.io
feature:enableGetVolumeStats: trueenableInlineVolume: true
controller:name: csi-smb-controllerreplicas: 1dnsPolicy: ClusterFirstWithHostNet  # available values: Default, ClusterFirstWithHostNet, ClusterFirstmetricsPort: 29644livenessProbe:healthPort: 29642runOnMaster: falserunOnControlPlane: falselogLevel: 5workingMountDir: "/tmp"resources:csiProvisioner:limits:memory: 400Mirequests:cpu: 10mmemory: 20MicsiResizer:limits:memory: 400Mirequests:cpu: 10mmemory: 20MilivenessProbe:limits:memory: 100Mirequests:cpu: 10mmemory: 20Mismb:limits:memory: 200Mirequests:cpu: 10mmemory: 20Miaffinity: {}nodeSelector: {}tolerations:- key: "node-role.kubernetes.io/master"operator: "Exists"effect: "NoSchedule"- key: "node-role.kubernetes.io/controlplane"operator: "Exists"effect: "NoSchedule"- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"- key: "CriticalAddonsOnly"operator: "Exists"effect: "NoSchedule"
node:maxUnavailable: 1logLevel: 5livenessProbe:healthPort: 29643affinity: {}nodeSelector: {}
linux:enabled: truedsName: csi-smb-node # daemonset namednsPolicy: ClusterFirstWithHostNet  # available values: Default, ClusterFirstWithHostNet, ClusterFirstkubelet: /var/lib/kubeletkrb5CacheDirectory: "" # directory for kerberos credential cache, empty string means default(/var/lib/kubelet/kerberos/)krb5Prefix: "" # prefix for kerberos credential cache, empty string means default(krb5cc_)tolerations:- operator: "Exists"resources:livenessProbe:limits:memory: 100Mirequests:cpu: 10mmemory: 20MinodeDriverRegistrar:limits:memory: 100Mirequests:cpu: 10mmemory: 20Mismb:limits:memory: 200Mirequests:cpu: 10mmemory: 20Mi
windows:enabled: false   -------------修改此处为falseuseHostProcessContainers: truedsName: csi-smb-node-win # daemonset namekubelet: 'C:\var\lib\kubelet'removeSMBMappingDuringUnmount: truetolerations:- key: "node.kubernetes.io/os"operator: "Exists"effect: "NoSchedule"resources:livenessProbe:limits:memory: 150Mirequests:cpu: 10mmemory: 40MinodeDriverRegistrar:limits:memory: 150Mirequests:cpu: 10mmemory: 40Mismb:limits:memory: 600Mirequests:cpu: 10mmemory: 40Micsiproxy:   -------------修改此处为falseenabled: false # required if windows.enabled is true and useHostProcessContainers is false, but may be installed manually alsodsName: csi-proxy-win # daemonset nametolerations: {}affinity: {}username: "NT AUTHORITY\\SYSTEM"nodeSelector:"kubernetes.io/os": windows
customLabels: {}
podAnnotations: {}
podLabels: {}
priorityClassName: system-cluster-critical
securityContext: { seccompProfile: {type: RuntimeDefault} }

在这里插入图片描述

配置Secret和StorageClass
apiVersion: v1
kind: Secret
metadata:name: smbcredsnamespace: default
type: Opaque
data:username: c21iamJsCg==  <base64 - encoded - username>password: MTIzNDU2Cg== <base64 - encoded - password>
---apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: smb-sc
provisioner: smb.csi.k8s.io
parameters:source: //172.16.8.56/Share. -------服务器地址和共享名csi.storage.k8s.io/provisioner-secret-name: smbcredscsi.storage.k8s.io/provisioner-secret-namespace: defaultcsi.storage.k8s.io/node-stage-secret-name: smbcredscsi.storage.k8s.io/node-stage-secret-namespace: default
volumeBindingMode: Immediate
mountOptions:- dir_mode=0777- file_mode=0777- uid=1001- gid=1001- noserverino

测试

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: smb-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 1GistorageClassName: smb-sc
---
kind: Pod
apiVersion: v1
metadata:name: nginx-smbnamespace: default
spec:containers:- image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpinename: nginx-smbcommand:- "/bin/sh"- "-c"- while true; do echo $(date) >> /mnt/smb/outfile; sleep 1; donevolumeMounts:- name: smb01mountPath: "/mnt/smb"readOnly: falsevolumes:- name: smb01persistentVolumeClaim:claimName: smb-pvc

在这里插入图片描述

  • 总结:
    SMB‌ 在 ‌跨平台混合环境‌ 中不可替代,尤其适合需深度集成 Windows 生态的场景‌25。
    建议根据集群操作系统分布、性能需求及运维复杂度综合选择。

SMB和NFS比较

‌优先选择 NFS 的场景‌
‌纯 Linux 环境‌:需高性能共享存储(如 AI 训练、日志聚合)‌;
‌多 Pod 共享读写‌:如 CI/CD 流水线共享构建目录‌;
‌简化运维‌:社区支持成熟,动态供给方案稳定‌。‌优先选择 SMB 的场景‌
‌混合操作系统集群‌:含 Windows 节点的 K8S 环境‌25;
‌企业级权限管理‌:需与 Active Directory 集成或细粒度 ACL 控制‌5;
‌遗留系统整合‌:对接已有 Windows 文件服务器‌
  • 核心特性对比

特性NFSSMB
协议兼容性原生支持类 Unix 系统,Windows 兼容性较差(需额外配置)‌原生支持 Windows,跨平台兼容性更优(Linux/macOS 需 cifs-utils)‌
性能在 Linux 环境下性能更高(内核级支持,传输效率高)‌处理小文件时性能略低,适合通用文件共享场景‌
权限管理依赖服务端本地文件系统权限,需手动同步 UID/GID‌支持 ACL 细粒度权限控制,与 Windows AD 集成更便捷‌
‌动态供给支持成熟(通过 nfs-client-provisioner 实现动态 PV 创建)‌依赖第三方 CSI 驱动(如 smb.csi.k8s.io),配置复杂度较高‌
安全性默认无加密,需结合 Kerberos 或 VPN 增强‌支持 SMB 3.0+ 加密传输,安全性更优‌
statefulset测试
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: statefulset-smbnamespace: defaultlabels:app: nginx
spec:serviceName: statefulset-smbreplicas: 1template:metadata:labels:app: nginxspec:nodeSelector:"kubernetes.io/os": linuxcontainers:- name: statefulset-smbimage: mcr.microsoft.com/oss/nginx/nginx:1.19.5command:- "/bin/bash"- "-c"- set -euo pipefail; while true; do echo $(date) >> /mnt/smb/outfile; sleep 1; donevolumeMounts:- name: persistent-storagemountPath: /mnt/smbreadOnly: falseupdateStrategy:type: RollingUpdateselector:matchLabels:app: nginxvolumeClaimTemplates:- metadata:name: persistent-storagespec:storageClassName: smbaccessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【时时三省】(C语言基础)选择结构和条件判断

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 选择结构和条件判断 在现实生活中需要进行判断和选择的情况是很多的。如:从北京出发上高速公路,到一个岔路口,有两个出口,一个是去上海方向,另一个是沈阳方向。驾车者到此处必须进行判断,根据自己的目的地…

【MYSQL】索引和事务

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容讲解 MySQL 中的索引和事务&#xff0c;在学习的过程中&#xff0c;我们需要经常问自己为什么 文章目录 1. 索…

计划管理工具应该具备的能(甘特图)

在当今快节奏的项目管理环境中&#xff0c;高效地规划和跟踪项目进度是至关重要的。甘特图&#xff0c;作为项目管理领域的经典工具&#xff0c;以其直观的时间轴和任务分配方式&#xff0c;深受项目管理者的青睐。 随着数字化时代的到来&#xff0c;甘特图线上编辑器应运而生&…

Redis分布式寻址算法

分布式寻址算法是分布式系统中用于确定数据应该存储在哪个节点的算法。这些算法对于实现高效的数据存取、负载均衡和系统扩展性至关重要。以下是几种常见的分布式寻址算法的解释&#xff1a; 1. Hash 算法 原理&#xff1a;通过哈希函数将数据的键&#xff08;Key&#xff09…

CSS动画

目录 一、核心概念与语法 1. keyframes 关键帧 2. animation 属性 二、动画调速函数&#xff08;animation-timing-function&#xff09; 1. 预设值 2. 贝塞尔曲线 3. 步进函数&#xff08;steps()&#xff09; 三、动画控制与交互 1. 暂停与恢复 2. JavaScript 控制…

2025年河北省第二届职业技能大赛网络安全项目 模块 B样题任务书

2025年河北省第二届职业技能大赛网络安全项目 模块 B样题任务书 河北省第二届职业技能大赛网络安全项目-模块 B-夺旗挑战赛&#xff08;CTF&#xff09;一、目标系统1二、目标系统2三、目标系统3四、目标系统4 需要真题环境-培训可以私信博主&#xff01; 河北省第二届职业技能…

钞票准备好了吗?鸿蒙电脑 5 月见

3月20日&#xff0c;在华为 Pura 先锋盛典及鸿蒙智行新品发布会上&#xff0c;华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东表示&#xff0c;华为终端全面进入鸿蒙时代&#xff0c;今年5月将推出鸿蒙电脑。 在3月20日的华为Pura先锋盛典及鸿蒙智行新品发布会上…

Java高频面试之集合-15

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;解决哈希冲突有哪些方法&#xff1f; 1. 开放寻址法&#xff08;Open Addressing&#xff09; 核心思想&#xff1a;当哈…

【机器学习】建模流程

1、数据获取 1.1 来源 数据获取是机器学习建模的第一步&#xff0c;常见的数据来源包括数据库、API、网络爬虫等。 数据库是企业内部常见的数据存储方式&#xff0c;例如&#xff1a;MySQL、Oracle等关系型数据库&#xff0c;以及MongoDB等非关系型数据库&#xff0c;它们能够…

GitHub 上的 Khoj 项目:打造你的专属 AI 第二大脑

在信息爆炸的时代&#xff0c;高效管理和利用个人知识变得愈发重要。GitHub 上的 Khoj 项目为我们提供了一个强大的解决方案&#xff0c;它能成为你的 “AI 第二大脑”&#xff0c;帮你轻松整合、搜索和运用知识。今天&#xff0c;就来详细了解下 Khoj。​ Khoj 是什么&#x…

爬虫(requsets)笔记

一、request_基本使用 pip install requests -i https://pypi.douban.com/simple 一个类型六个属性 r.text 获取网站源码 r.encoding 访问或定制编码方式r.url 获取请求的urlr.content 响应的字节类型r.status_code 响应的状态码r.headers 响应的头信息 import requestsur…

centos7连不上接网络

选择编辑&#xff0c; 选择虚拟机网络编辑 右键虚拟机&#xff0c;点击设置&#xff0c;设置网络,选择nat模式&#xff0c; 配置&#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/sysconfig/network-scripts/ifcfg-ens33设置IP地址如图所示&#xff0c;重…

OpenResty(Lua)+Redis实现动态封禁IP

文章目录 架构设计环境准备源码编辑安装OpenResty下载安装准备依赖编译安装配置环境变量&#xff08;可选&#xff09;OpenResty 服务管理命令 安装Redis配置Lua脚本测试准备测试工具测试封禁逻辑 删除版本信息清除编译安装的OpenResty 架构设计 通过 Nginx Redis 的方案&…

Turtle基本操作(前进、后退、旋转)

1. Turtle基本移动概念 在Turtle绘图中,“海龟”(Turtle)相当于一支笔,它在屏幕上移动时,会在经过的路径上留下轨迹。我们可以通过一系列简单的指令控制它的前进、后退和旋转,从而绘制各种形状和图案。 2. 前进与后退 2.1 前进(forward() 或 fd()) Turtle的 forward…

C++类与对象的第一个简单的实战练习-3.24笔记

在哔哩哔哩学习的这个老师的C面向对象高级语言程序设计教程&#xff08;118集全&#xff09;讲的真的很不错 实战一&#xff1a; 情况一&#xff1a;将所有代码写到一个文件main.cpp中 #include<iostream> //不知道包含strcpy的头文件名称是什么,问ai可知 #include<…

Jetson Orin NX使用 Ollama 本地部署 deepseek

本文记录在 jetson orin nx 上使用 ollama 部署 deepseek 的过程 有用的网站及工具 NVIDIA Jetson AI LabOllama官网Jtop 工具 > 用以查看jetson GPU/CPU/Memory 等占用情况的工具&#xff0c;安装过程如下&#xff1a; sudo apt-get install python3-pip sudo -H pip3 in…

目标检测20年(三)

对这篇论文感兴趣的小伙伴可以订阅笔者《目标检测》专栏&#xff0c;关注笔者对该文献的阅读和理解。 前两篇解读链接&#xff1a; 目标检测20年&#xff08;一&#xff09;-CSDN博客 目标检测20年&#xff08;二&#xff09;-CSDN博客 目录 四、 检测器的加速发展 4.1 特…

智能手持终端PDA在设备巡检管理中的应用

在工业制造、能源电力、轨道交通等领域&#xff0c;设备巡检是保障生产安全与连续性的核心环节。传统巡检模式存在效率低、易出错、数据滞后等痛点。上海岳冉智能设备巡检手持终端PDA&#xff0c;以智能化、数字化、高可靠为核心设计理念&#xff0c;集RFID、条码扫描、AI图像识…

AI知识补全(二):提示工程(Prompting)是什么?

名人说&#xff1a;人生如逆旅&#xff0c;我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知识补全&#xff08;一&#xff09;&#xff1a;tokens是什么…

C++友元:跨墙访问的三种姿势

目录 友元 友元之普通函数形式 友元之成员函数形式 友元类 友元的特点 友元 什么叫友元&#xff1f; 一般来说&#xff0c;类的私有成员只能在类的内部访问&#xff0c;类之外是不能访问它们的。但如果将其他类/函数设置为类的友元&#xff0c;那么友元类/函数就可以在前…