快速部署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.pswp.cn/news/898929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898929.shtml
英文地址,請注明出處:http://en.pswp.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;那么友元類/函數就可以在前…