SeaweedFS深度解析(九):k8s环境使用helm部署Seaweedfs集群

上一篇:《SeaweedFS深度解析(八):k8s环境使用Operator部署Seaweedfs集群》

链接: link

#作者:闫乾苓

文章目录

  • k8s环境使用helm部署Seaweedfs集群
    • 准备镜像
      • seaweed-master-localpv-storageclass.yaml
      • seaweed-volume-localpv-storageclass.yaml
      • seaweed-filer-localpv-storageclass.yaml
    • 创建3个组件的storageclass
      • master PV的yaml文件master-pv.yaml
      • volume PV的yaml文件 volume-pv.yaml
      • filer PV的yaml文件 filer-pv.yaml
    • 查看创建的pv
      • 如果提示有以下错误:
      • 如果需要删除,可以使用下面的命令:

k8s环境使用helm部署Seaweedfs集群

~# helm repo add seaweedfs https://seaweedfs.github.io/seaweedfs/helm~# helm search repo seaweedfs --versions
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
seaweedfs/seaweedfs     4.0.392         3.92            SeaweedFS  
seaweedfs/seaweedfs     4.0.391         3.91            SeaweedFS  
seaweedfs/seaweedfs     4.0.390         3.90            SeaweedFS

准备镜像

~# docker pull chrislusf/seaweedfs:3.92
~# docker tag chrislusf/seaweedfs:3.92 192.168.61.3/seaweedfs/seaweedfs:3.92
~# docker push 192.168.61.3/seaweedfs/seaweedfs:3.92

SeaweedFS Helm Chart 的默认参数值完整导出到本地

~# helm show values seaweedfs/seaweedfs --version 4.0.392 > seaweedfs-values-4.0.392.yaml

为了master、volume、filer组件的数据持久化,简单起见使用local-pv方案,为避免各组件间pv绑定错乱,这里使用为不同组件使用不同storageclass名称。

seaweed-master-localpv-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: seaweed-master-localpv-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

seaweed-volume-localpv-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: seaweed-volume-localpv-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

seaweed-filer-localpv-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: seaweed-filer-localpv-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

创建3个组件的storageclass

[root@master storageclass]# kubectl apply -f seaweed-master-localpv-storageclass.yaml -f seaweed-volume-localpv-storageclass.yaml -f seaweed-filer-localpv-storageclass.yaml
[root@master storageclass]# kubectl get sc
NAME                                  PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
seaweed-filer-localpv-storageclass    kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  10d
seaweed-master-localpv-storageclass   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  10d
seaweed-volume-localpv-storageclass   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  10d

master PV的yaml文件master-pv.yaml

---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-master-data-0labels:app: seaweedfs-masterrole: data
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-master-localpv-storageclasslocal:path: /data/seaweedfs/master/data-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-master-logs-0labels:app: seaweedfs-masterrole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-master-localpv-storageclasslocal:path: /data/seaweedfs/master/logs-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
# master 副本1
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-master-data-1labels:app: seaweedfs-masterrole: data
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-master-localpv-storageclasslocal:path: /data/seaweedfs/master/data-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-master-logs-1labels:app: seaweedfs-masterrole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-master-localpv-storageclasslocal:path: /data/seaweedfs/master/logs-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2
---
# master 副本2
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-master-data-2labels:app: seaweedfs-masterrole: data
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-master-localpv-storageclasslocal:path: /data/seaweedfs/master/data-2nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node3
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-master-logs-2labels:app: seaweedfs-masterrole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-master-localpv-storageclasslocal:path: /data/seaweedfs/master/logs-2nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node3

volume PV的yaml文件 volume-pv.yaml

---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-data-0labels:app: seaweedfs-volumerole: data
spec:capacity:storage: 20GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-volume-localpv-storageclasslocal:path: /data/seaweedfs/volume/data-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-logs-0labels:app: seaweedfs-volumerole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-volume-localpv-storageclasslocal:path: /data/seaweedfs/volume/logs-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
# volume 副本1
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-data-1labels:app: seaweedfs-volumerole: data
spec:capacity:storage: 20GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-volume-localpv-storageclasslocal:path: /data/seaweedfs/volume/data-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-logs-1labels:app: seaweedfs-volumerole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-volume-localpv-storageclasslocal:path: /data/seaweedfs/volume/logs-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2
---
# volume 副本2
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-data-2labels:app: seaweedfs-volumerole: data
spec:capacity:storage: 20GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-volume-localpv-storageclasslocal:path: /data/seaweedfs/volume/data-2nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node3
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-logs-2labels:app: seaweedfs-volumerole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-volume-localpv-storageclasslocal:path: /data/seaweedfs/volume/logs-2nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node3

filer PV的yaml文件 filer-pv.yaml

---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-filer-data-0labels:app: seaweedfs-filerrole: data
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-filer-localpv-storageclasslocal:path: /data/seaweedfs/filer/data-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-filer-logs-0labels:app: seaweedfs-filerrole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-filer-localpv-storageclasslocal:path: /data/seaweedfs/filer/logs-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
# filer 副本1
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-filer-data-1labels:app: seaweedfs-filerrole: data
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-filer-localpv-storageclasslocal:path: /data/seaweedfs/filer/data-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-filer-logs-1labels:app: seaweedfs-filerrole: logs
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: seaweed-filer-localpv-storageclasslocal:path: /data/seaweedfs/filer/logs-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2

因为local-pv的storageclass不支持根据pvc动态创建pv,因此手动创建3个组件的pv
[root@master pv]# kubectl apply -f master-pv.yaml -f volume-pv.yaml -f filer-pv.yaml

查看创建的pv

在这里插入图片描述

~# helm install seaweedfs seaweedfs/seaweedfs --version 4.0.392 -f seaweedfs-values.yaml

如果提示有以下错误:

Error: INSTALLATION FAILED: Get "https://seaweedfs.github.io/seaweedfs/helm/seaweedfs-4.0.392.tgz": read tcp 192.168.61.20:60156->185.199.108.153:443: read: connection reset by peer

可以现手动下载Helm Chart包

[root@master ~]# wget https://seaweedfs.github.io/seaweedfs/helm/seaweedfs-4.0.392.tgz

在使用已经下载的包进行安装

[root@master helm_deploy_cluster]# helm install seaweedfs ./seaweedfs-4.0.392.tgz -f seaweedfs-values.yaml
NAME: seaweedfs
LAST DEPLOYED: Tue Jul 15 11:24:18 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

如果修改了values.yaml,可以更新部署

helm upgrade seaweedfs ./seaweedfs-4.0.392.tgz -f seaweedfs-values.yaml

如果需要删除,可以使用下面的命令:

[root@master helm_deploy_cluster]# helm ls --all
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
seaweedfs       default         4               2025-07-15 14:24:45.450034677 +0800 CST deployed        seaweedfs-4.0.392       3.92       
[root@master helm_deploy_cluster]# helm uninstall seaweedfs
release "seaweedfs" uninstalled[root@master helm_deploy_cluster]# kubectl get pod
NAME                 READY   STATUS             RESTARTS      AGE
seaweedfs-filer-0    0/1     CrashLoopBackOff   3 (9s ago)    6m41s
seaweedfs-filer-1    0/1     CrashLoopBackOff   3 (10s ago)   6m41s
seaweedfs-master-0   0/1     CrashLoopBackOff   3 (13s ago)   6m41s
seaweedfs-master-1   0/1     CrashLoopBackOff   3 (7s ago)    6m41s
seaweedfs-master-2   0/1     CrashLoopBackOff   3 (8s ago)    6m41s
seaweedfs-volume-0   0/1     Running            0             6m41s
seaweedfs-volume-1   0/1     Running            0             6m41s
seaweedfs-volume-2   0/1     Running            0             6m41s
[root@master helm_deploy_cluster]# kubectl logs pods/seaweedfs-master-0 
I0704 08:13:39.030513 config.go:53 Reading : Config File "security" Not Found in "[/data /.seaweedfs /usr/local/etc/seaweedfs /etc/seaweedfs]"
flag provided but not defined: -raftElectionTimeout
Example: weed master -port=9333
Default Usage:-cpuprofile stringcpu profile output file-defaultReplication stringDefault replication type if not specified.-disableHttpdisable http requests, only gRPC operations are allowed.-electionTimeout durationelection timeout of master servers (default 10s)

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

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

相关文章

MATLAB绘制一个新颖的混沌图像(新四翼混沌系统)

新四翼混沌系统:dx/dt a(y - x) yz dy/dt cx - y - xz dz/dt -bz xyMATLAB代码:function plot_novel_chaotic_system() % 参数设置 a 10; b 8/3; c 28;% 初始条件 x0 [1, 1, 1];% 时间范围 tspan [0 100];% 求解微分方程 [t, x] ode45((t, x) chaotic_system(t, x, …

金融数据---获取股票日线数据

获取股票日线的数据方式有很多,包括东方财富,同花顺,tushare,这里我们就利用东方财富的数据,是免费的开源获取,第一步先安装akshare,pip安装就可以py -m pip install akshareAkshare 股票数据获…

Mac 真正多显示器支持:TESmart USB-C KVM(搭载 DisplayLink 技术)如何实现

多显示器已经不再是奢侈品,而是专业人士提升生产力的必需工具。无论是创意设计师、股票交易员还是软件开发人员,多屏幕都能让工作流程更高效、更有条理。 然而,Mac 用户长期以来面临一个主要障碍:macOS 原生不支持多流传输&#x…

【实时Linux实战系列】静态链接与libc选择:musl vs glibc的时延权衡

背景与重要性 在实时系统开发中,选择合适的C标准库(libc)和链接方式对系统的启动时间、线程性能和内存分配效率有着显著影响。glibc和musl是两种流行的C标准库实现,它们在设计目标和性能表现上存在差异。通过对比这两种libc在启动…

Altium Designer(AD24)的三种文件组织形式,工程文件,自由文件与存盘文件

🏡《专栏目录》 目录 1,概述 2,工程文件 3,自由文件 4,存盘文件 5,文件转换 5.1,工程文件于自由文件互转换 5.2,工程文件于存盘文件互转换 6,注意事项 1,概述 本文介绍Altium Designer 24软件(后文简称AD24或软件)的三种文件组织形式,工程文件,自由文件和存盘文…

Python+Selenium实现自动化测试

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快安装selenium打开命令控制符输入:pip install -U selenium火狐浏览器安装firebug:www.firebug.com,调试所有网站语言&#xff0…

2024年CSP-X初赛真题及答案解析(6-10)

2024年CSP-X初赛真题及答案解析(6-10) 字符串abcabcabc有多少不同的非空子串?( )。 A. 24 B. 36 C. 45 D. 46 答案:A 解析: 长度 1: 3 个(a, b, c) 长度 2: 3 个(ab, bc, ca) 长度 3: 3 个(abc, bca, cab) 长度 4: 3 个(abca, bcab, cabc) 长度 5: 3 个(a…

缓存与数据库一致性的4大坑及终极解决方案

缓存雪崩、击穿、穿透全中招?别让缓存与数据库的“爱恨情仇”毁了你的系统! 你有没有经历过这样的深夜告警:Redis 响应延迟飙升,数据库 CPU 直冲 100%,接口大面积超时?一查日志,发现大量请求绕过…

基于 Python charm 库实现的一些 Pairing 密码学算法

基于 Python charm 库实现了一些 Pairing 密码学算法,放在了 https://github.com/BatchClayderman/Cryptography-Schemes 里面。 在正确部署了 Python charm 库后,所有的 Python 脚本都是独立的,即该存储库中不存在一个脚本调用另一个脚本的…

用户体验五大要点:从问题到解决方案的完整指南

在互联网产品设计和运营的过程中,用户体验(User Experience,简称 UX) 已经成为决定产品成败的关键因素。一个功能再强大的产品,如果用户用得不舒服、不信任,甚至觉得没有价值,最终都会被抛弃。那…

MySQL 外键约束:表与表之间的 “契约”,数据一致性的守护者

MySQL 外键约束:表与表之间的 “契约”,数据一致性的守护者 在 MySQL 数据库设计中,外键约束(FOREIGN KEY)是维护表之间关联关系的核心工具。它就像表与表之间的一份 “契约”,确保从表(如订单…

《投资-54》元宇宙

元宇宙(Metaverse)是一个近年来备受关注的概念,它描绘了一个虚拟与现实交融、由多个互连的3D虚拟世界组成的沉浸式数字环境。用户可以通过虚拟现实(VR)、增强现实(AR)、互联网和其他技术&#x…

【数据结构】Java集合框架:List与ArrayList

文章目录一、认识List接口1.1 List的定义与继承关系1.2 Collection接口的核心方法1.3 List接口的独特方法二、线性表与顺序表基础2.1 线性表2.2 顺序表自定义顺序表(MyArrayList)实现1. 前期准备:自定义异常类2. MyArrayList核心结构3. 工具方…

K8S里的“豌豆荚”:Pod

1. 为什么要有podPod 这个词原意是“豌豆荚”,后来又延伸出“舱室”“太空舱”等含义,你可以看一下这张图片,形 象地来说 Pod 就是包含了很多组件、成员的一种结构。之前的容器技术让进程在一个“沙盒”环境里运行,具有良好的隔离…

vue3 基本教程-运行一个最小demo

Vue 3 基本教程 - 运行一个最小 Demo 1. 创建项目 使用 Vue 官方脚手架工具创建一个新项目: # 安装 Vue CLI (如果尚未安装) npm install -g vue/cli# 创建一个新项目 vue create vue3-demo# 选择 Vue 3 预设 # 使用方向键选择 "Default (Vue 3)" 然后按 …

大数据新视界 -- Hive 集群搭建与配置的最佳实践(2 - 16 - 13)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实…

C/C++ 转 Java 的数据结构初阶对比指南

一、先遣了解和回顾1、预览快速对比表格数据结构​​​​C/C 实现​​​​Java 实现​​​​关键区别​​​​数组​​int arr[5];int[] arr new int[5];语法类似&#xff0c;Java 数组是对象​​动态数组​​vector<int> v;ArrayList<Integer> list new ArrayLi…

长连接和短连接

在网络通信中&#xff0c;长连接&#xff08;Long Connection&#xff09;和短连接&#xff08;Short Connection&#xff09;是两种核心的连接管理策略&#xff0c;其区别主要体现在连接生命周期、资源占用和适用场景上。以下是两者的详细解析&#xff1a;一、核心概念对比特性…

Java:使用spring-cloud-gateway的应用报DnsNameResolverTimeoutException原因和解决方法

使用spring-cloud-gateway时&#xff0c;有时会报DnsNameResolverTimeoutException异常。堆栈信息类似&#xff1a;Caused by: java.net.UnknownHostException: Failed to resolve cloudconnector.linkup-sage.comat io.netty.resolver.dns.DnsResolveContext.finishResolve(Dn…

SpringCloud概述

目录 一、概念 1.1 微服务架构 1.2 SpringCloud概念 1.3 核心价值 1.4 能力边界 1.5 微服务总体架构图 二、生态圈 2.1 不同生态圈组件对比 2.2 组件介绍 2.2.1 服务发现与注册 2.2.2 配置管理 2.2.3 API网关 2.2.4 容错与熔断 2.2.5 客户端负载均衡 2.2.6 服务…