k8s环境使用Operator部署Seaweedfs集群(上)

@作者:闫乾苓

文章目录

  • 前言
    • 4.1 前置条件
    • 4.2 部署seaweedfs-operator
    • 4.3 准备operator镜像
    • 4.4 使用operator部署Seaweedfs集群
      • 4.4.1 部署StorageClass
      • 4.4.2 使用StorageClass预先创建PV

前言

SeaweedFS Operator是一个Kubernetes Operator,用于自动化部署和管理SeaweedFS集群 README.md:6-8 。部署分为两个阶段:首先部署Operator本身,然后创建SeaweedFS集群资源。

4.1 前置条件

  1. 运行中的Kubernetes集群(v1.19+)
  2. 配置好的kubectl命令行工具
  3. 安装Kustomize或Helm 3

Helm安装步骤参考:

~# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
~# helm version

4.2 部署seaweedfs-operator

克隆seaweedfs-operator仓库

[root@master ~]# git clone https://githubfast.com/seaweedfs/seaweedfs-operator --depth=1
正克隆到 'seaweedfs-operator'...
remote: Enumerating objects: 136, done.
remote: Counting objects: 100% (136/136), done.
remote: Compressing objects: 100% (112/112), done.
remote: Total 136 (delta 20), reused 65 (delta 14), pack-reused 0 (from 0)
接收对象中: 100% (136/136), 126.64 KiB | 201.00 KiB/s, 完成.
处理 delta 中: 100% (20/20), 完成.
[root@master ~]# ll
[root@master seaweedfs-operator]# docker login -u admin 192.168.61.3
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

4.3 准备operator镜像

手动下载镜像,并复制到k8s相关node节点,并导入。

docker pull registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
docker pull chrislusf/seaweedfs-operator:1.0.2

helm部署seaweedfs-operator,如果因镜像拉取失败等原因导致helm报错,如:

[root@master seaweedfs-operator]# helm install seaweedfs-operator ./deploy/helm
Error: INSTALLATION FAILED: failed post-install: 1 error occurred:* timed out waiting for the condition

待镜像手动拉取并导入到k8s相关节点后,helm 使用—replace参数重新部署。

[root@master seaweedfs-operator]# helm install --replace seaweedfs-operator ./deploy/helm
NAME: seaweedfs-operator
LAST DEPLOYED: Thu Jul  3 13:59:22 2025
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

seaweedfs-operator 运行状态正常

[root@master ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE     NAME                                     READY   STATUS    RESTARTS      AGE   IP               NODE     NOMINATED NODE   READINESS GATES
default       seaweedfs-operator-5c44d464cc-7bl8g      1/1     Running   0             11m   10.244.166.143   node1    <none>           <none>
kube-system   calico-kube-controllers-d569cccf-rfxkk   1/1     Running   2 (15h ago)   15h   10.244.135.12    node3    <none>           <none>

4.4 使用operator部署Seaweedfs集群

4.4.1 部署StorageClass

(seaweedfs集群部署依赖k8s StorageClass)
为简单起见,本例使用local-pv 的StorageClass
local-pv-storageclass.yaml 内容如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

部署StorageClass并查看

kubectl apply -f local-pv-storageclass.yaml
[root@master ~]# kubectl get sc
NAME            PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-storage   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  25h

4.4.2 使用StorageClass预先创建PV

local pv torageClass 无法根据pvc申请动态创建pv,所以需要集群规划和pvc申请,手动创建pv,本例按照集群规划创建3个volume的副本,2个filer的副本,对应创建3个volume 的pv,2个filer的pv。以下给出2个组件手动创建pv的yaml示例。

volume_local_pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-pv-1
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/seaweedfs-volume-pv-datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-pv-2
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/seaweedfs-volume-pv-datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-volume-pv-3
spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/seaweedfs-volume-pv-datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node3volumeMode: Filesystemfiler_local_pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-filer-pv-1
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/seaweedfs-filer-pv-datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:name: seaweedfs-filer-pv-2
spec:capacity:storage: 2GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/seaweedfs-filer-pv-datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2volumeMode: Filesystem

创建pv前需要在k8s 相关node节点创建pv的实际映射的目录

mkdir /data/seaweedfs-filer-pv-data
mkdir /data/ seaweedfs-volume-pv-data

创建pv

[root@master cluster]# kubectl apply -f volume_local_pv.yaml -f filer_local_pv.yaml 
persistentvolume/seaweedfs-volume-pv-1 created
persistentvolume/seaweedfs-volume-pv-2 created
persistentvolume/seaweedfs-volume-pv-3 created
persistentvolume/seaweedfs-filer-pv-1 created
persistentvolume/seaweedfs-filer-pv-2 created 

查看pv状态

[root@master cluster]# kubectl get pv
NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS    REASON   AGE
seaweedfs-filer-pv-1    2Gi        RWO            Retain           Available           local-storage            46s
seaweedfs-filer-pv-2    2Gi        RWO            Retain           Available           local-storage            46s
seaweedfs-volume-pv-1   5Gi        RWO            Retain           Available           local-storage            46s
seaweedfs-volume-pv-2   5Gi        RWO            Retain           Available           local-storage            46s
seaweedfs-volume-pv-3   5Gi        RWO            Retain           Available           local-storage            46s

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

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

相关文章

Git CLI高危任意文件写入漏洞(CVE-2025-48384)PoC已公开

Git CLI&#xff08;命令行界面&#xff09;中存在一个高危漏洞&#xff0c;攻击者可利用该漏洞在Linux和macOS系统上实现任意文件写入。目前该漏洞的概念验证&#xff08;PoC&#xff09;利用代码已公开。该漏洞编号为CVE-2025-48384&#xff0c;CVSS严重性评分为8.1分&#x…

前端开发中关于表单内容的使用和基础知识

在前边&#xff0c;我们已经写过Web前端开发&#xff0c;Web前端开发&#xff0c;万字详细博文带你HTML&#xff0c;CSS快速入门&#xff08;上篇&#xff09;和Web前端开发&#xff0c;一文带你HTML&#xff0c;CSS快速入门&#xff08;下篇&#xff09;&#xff0c;使用近两万…

linux 安装mysql保姆教程

安装包下载地址: MySQL :: Download MySQL Community Server (Archived Versions) 解压到安装包&#xff1a; tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz 创建Mysql用户组和用户 groupadd mysql useradd -r -g mysql mysql 编译安装并初始化 进入/home/mysql/m…

Android系统的问题分析笔记 - Android上的调试方式 bugreport

在Android开发和系统调试中&#xff0c;bugreport&#xff08;错误报告&#xff09; 是一份包含设备详细系统状态、运行日志及应用行为的综合报告&#xff0c;是定位和诊断App崩溃、系统异常、性能问题等的核心工具。无论是开发者排查用户反馈的问题&#xff0c;还是设备厂商调…

GESP2025年6月认证C++四级( 第三部分编程题(2)排序)

参考程序&#xff1a;#include <cstdio> #include <algorithm> #include <vector> #include <iostream> using namespace std;int main() {int n, ans 0;// 读取学生人数scanf("%d", &n);// 用 vector 存储每个学生的身高和体重&#x…

SQL155 大小写混乱时的筛选统计

SQL155 大小写混乱时的筛选统计 题目理解 假设我们有一个考试系统数据库&#xff0c;里面有&#xff1a; exam_record表&#xff1a;记录学生考试作答情况examination_info表&#xff1a;记录考试信息&#xff0c;包括每个考试的类别标签(tag) ​问题描述​&#xff1a; 有…

无人机图像中的小目标检测新利器:深入解析 LAM-YOLO 模型

【导读】 随着无人机技术的发展&#xff0c;从交通监控到农业测绘&#xff0c;各类任务中对“空中视角下的小目标检测”需求激增。然而&#xff0c;由于无人机拍摄视角多变、目标尺寸微小、环境光照复杂等因素&#xff0c;传统检测模型常常出现“漏检”“误检”问题。 LAM-YO…

Rust 基础大纲

Rust 基础大纲1.Summary安装教材2 Rust 源1.Summary 安装 https://www.rust-lang.org/zh-CN/tools/install curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安装完成后&#xff0c;验证是否成功 rustc -V cargo -V# 创建项目 cargo new my_project # 编译项…

PostgreSQL 大数据量(超过50GB)导出方案

1.正常导出导出指定库./pg_dump -d test_db -p 2360 > /home/softwares/postgresql/test_db.sql导出指定表./pg_dump -p 2360 -U postgres -t test_schema.test_table test_db > /home/softwares/postgresql/m.sql-t参数说明&#xff0c;-t test_schema.test_table test…

终端安全最佳实践

什么是终端安全&#xff1f;终端安全通过保护组织中的设备的过程&#xff0c;来保护公司网络免受漏洞和网络攻击。主要的任务包括&#xff1a;更新终端补丁、遵循相关安全标准和要求、满足各种合规性策略设置等等。终端安全和防病毒之间的区别是什么&#xff1f;杀毒软件可以帮…

【UE4 UE5】UE设置屏幕分辨率 全屏、窗口设置的方法

1.在蓝图中设置如下 设置全屏模式蓝图节点可以选择全屏或者窗口 2.通过执行控制台命令设置 注意:"x"是英文字母x w:窗口 f:全屏 3.通过修改项目配置文件设置。 打开 项目路径\Saved\Config\Windows下的GameUserSettings.ini文件 在文件中进行相应修改 ​…

非控制器(如 Service、工具类)中便捷地获取当前 HTTP 请求的上下文信息

非控制器&#xff08;如 Service、工具类&#xff09;中便捷地获取当前 HTTP 请求的上下文信息 在 Spring 框架的 Web 开发中&#xff0c;RequestContextHolder 是一个非常实用的工具类&#xff0c;它的主要作用是在非控制器&#xff08;如 Service、工具类&#xff09;中便捷地…

Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图

时间轴上的任务可视化有助于更好地管理项目。本文将学习如何使用Aspose.Cells for Python 通过 .NET在 Excel 中创建甘特图。只需几行代码&#xff0c;即可将简单的任务数据转换为动态清晰的可视化时间轴&#xff0c;非常适合用于报表、仪表板和规划文档。 Aspose.Cells官方试…

【RK3568 平台I2C协议与AGS10驱动开发】

RK3568 平台I2C协议与AGS10驱动开发一、I2C 总线协议基础二、I2C 通信过程详解三、AGS10 传感器概述四、AGS10驱动开发1. 硬件连接2. 设备树&#xff08;DTS&#xff09;配置3. 内核驱动开发五、调试与验证六、总结引言在嵌入式系统开发中&#xff0c;传感器数据采集是常见需求…

arm版本的ubuntu安装git或者vim等方法

看起来你在基于 ARM 的 Ubuntu 系统上安装 Vim 时遇到了问题&#xff0c;错误提示为“E: 无法定位软件包 vim”。这通常是因为系统的软件包列表未更新&#xff0c;或者该软件包在你检查的标准软件源中不可用。以下是通常可以解决这个问题的方法&#xff1a;1. 更新软件包列表“…

MFC扩展库BCGControlBar Pro v36.2新版亮点:可视化设计器升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v36.2已全新发布了&#xff0c;在这个版本中添加了一个新的扩展器控件、改进了网格和报表…

小杰学C(eleven day)——莫道浮云终蔽日,总有云开雾散时。

1.结构体&#xff08;1&#xff09;内容定义&#xff1a;1.用户自定义的数据类型2.可以包含若干不同数据类型&#xff08;可相同&#xff09;的成员变量3.这些数据项组合起来反应某一信息格式&#xff1a;struct 结构体名 (用户自定义的数据类型){数据类型 成员变量1;数据类型 …

海豚远程控制APP:随时随地,轻松掌控手机

在快节奏的现代生活中&#xff0c;我们常常需要在不同设备之间切换&#xff0c;管理手机也变得越来越重要。无论是远程办公、远程学习还是日常生活中对手机的管理&#xff0c;一款高效、便捷的远程控制软件都能极大地提升我们的效率。海豚远程控制APP正是这样一款功能强大的手机…

Linux/Ubuntu安装go

Linux/Ubuntu安装go1. 首先移除旧版本&#xff08;如有&#xff09;&#xff1a;2. 下载Go 1.23.9安装包&#xff1a;3. 解压到系统目录&#xff1a;4. 设置环境变量&#xff08;添加到~/.profile或~/.bashrc文件末尾&#xff09;&#xff1a;5.使环境变量生效&#xff1a;6. 验…

教程:如何快速查询 A 股实时 K线和5档盘口

实时行情数据是量化交易策略、看板系统和交易决策系统的重要输入。本文将以 Infoway API 提供的 WebSocket API 为例&#xff0c;教你如何使用 Python 快速接入并获取 A 股的实时 K线数据 和 盘口数据。一、准备工作安装 WebSocket 库&#xff1a;pip install websockets二、查…