当前位置: 首页 > 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://www.lryc.cn/news/589408.html

相关文章:

  • 同济医院R语言训练营第三期开讲!上交大张维拓老师主讲
  • ubuntu22.04谷歌浏览器中文输入法bug
  • ASP .NET Core 8结合JWT轻松实现身份验证和授权
  • ESLint 配置错误:ReferenceError: prettier is not defined 解决方案
  • Vue 常用的 ESLint 规则集
  • 卫星通信链路预算之六:输出回退
  • web前端渡一大师课 01 事件循环
  • 网络基础协议综合实验
  • Spring MVC 执行流程详解:一次请求经历了什么?
  • Linux修改ssh默认端口,禁止root登录,禁止密码登录并同时开启公钥认证
  • session与cookie的区别
  • 深入掌握Python正则表达式:re库全面指南与实战应用
  • 编程项目选择思考点以及项目包装的关键点
  • : $ operator is invalid for atomic vectors
  • HashMap中哈希值的计算方法和扩容机制
  • Git Idea 冲突解决
  • 身份核验自动化-姓名身份证号二要素核验接口-API实名验证
  • 【I3D 2024】Deblur-GS: 3D Gaussian Splatting from Camera Motion Blurred Images
  • git本地的操作
  • iOS 加固工具使用经验与 App 安全交付流程的实战分享
  • 渲染设计图的空间革命:可视化技术如何重塑设计决策
  • 自由学习记录(69)
  • King’s LIMS:实验室数字化转型的智能高效之选
  • 多目标跟踪(MOT)简单整理
  • 阿里开源项目 XRender:全面解析与核心工具分类介绍
  • 从基础到进阶:MyBatis-Plus 分页查询封神指南
  • WebAPIs基本认知,DOM基础介绍
  • 网络基础10--ACL与包过滤
  • k8s环境使用Operator部署Seaweedfs集群(下)
  • 删除k8s卸载后残留挂载点目录