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

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://aerodone.dxwdwl.cn
http://arrect.dxwdwl.cn
http://asa.dxwdwl.cn
http://bromyrite.dxwdwl.cn
http://chernozem.dxwdwl.cn
http://azo.dxwdwl.cn
http://baffling.dxwdwl.cn
http://centurial.dxwdwl.cn
http://chimaerism.dxwdwl.cn
http://capillary.dxwdwl.cn
http://arrowroot.dxwdwl.cn
http://canaliculate.dxwdwl.cn
http://bradshaw.dxwdwl.cn
http://cate.dxwdwl.cn
http://australoid.dxwdwl.cn
http://afterpains.dxwdwl.cn
http://adsorptive.dxwdwl.cn
http://boarfish.dxwdwl.cn
http://chatterer.dxwdwl.cn
http://botulinum.dxwdwl.cn
http://astatic.dxwdwl.cn
http://androgynous.dxwdwl.cn
http://beautydom.dxwdwl.cn
http://chlorination.dxwdwl.cn
http://afeared.dxwdwl.cn
http://addled.dxwdwl.cn
http://anchorite.dxwdwl.cn
http://cabinetmaker.dxwdwl.cn
http://borage.dxwdwl.cn
http://astrut.dxwdwl.cn
http://www.dtcms.com/a/281214.html

相关文章:

  • AJAX 入门到精通
  • 堆内存、栈内存、内存地址
  • 作业:复制数组
  • EndNote
  • 【Keil】C/C++混合编程的简单方法
  • DGNNet:基于双图神经网络的少样本故障诊断学习模型
  • 深入浅出 RabbitMQ-核心概念介绍与容器化部署
  • Element plus参考vben逻辑实现的描述列表组件封装实践
  • 【PTA数据结构 | C语言版】二叉树前序序列化
  • 差分信号接口选型指南:深入解析LVDS、SubLVDS、SLVDS与SLVDS-EC**
  • 《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作
  • [AI8051U入门第三步]串口1使用-printf重定向(乱码解决办法)
  • Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
  • Android target34升级到35中的edge-to-edge适配
  • Nestjs框架: 数据库架构设计与 NestJS 多 ORM 动态数据库应用与连接池的配置
  • 利用android studio,对图片资源进行二次压缩
  • 基于Ruoyi和PostgreSQL的统一POI分类后台管理实战
  • 三步把餐饮回访差评变口碑
  • java+vue+SpringBoot在线租房和招聘平台(程序+数据库+报告+部署教程+答辩指导)
  • Ajax原理、用法与经典代码实例
  • TCP协议可靠性设计的核心机制与底层逻辑
  • 基于YOLOv8的水稻叶片病害检测系统的设计与实现【近6W条数据集+多病害特征+高准确率】
  • 修改系统配置后,如何编写 Python 脚本以适应 SSL 证书验证的变化
  • Axios 和 Promise 区别对比
  • C语言---自定义类型(下)(枚举和联合类型)
  • 利用DeepSeek为chdb命令行客户端添加输出重定向和执行SQL脚本功能
  • nlp论文:分本分类:《Bag of Tricks for Efficient Text Classification》
  • VirtualBox网络配置全指南:桥接、Host-Only与双网卡实战
  • 2025华为ODB卷-士兵过河-三语言题解
  • 限制apk使用时长第二篇-限制/拦截Apk启动-应用锁功能