云原生系列(七)—在k8s部署trident对接ontap的nfs存储并创建动态存储类
集群是之前的教程里搭建的生产集群,但是有个问题就是,物理机工作节点采用longhorn存储需要新买硬盘与raid直通卡,无法充分利旧公司已有设备。支持ontapapi的方式对接。存储的基础管理配置开局这些也不写了,这个都不知道不会的,也别看我教程了吧。我的存储是两个控制器,每个控制器各2个多余的10G光口,每个控制器的2个光口配置成一个聚合口。我实际的需求是聚合口要在一开始创建的名为nfs的广播域
云原生系列(五)—metallb安装及layer-2负载配置_metallb 安装-CSDN博客
云原生系列(六)—longhorn分布式存储部署_longhorn 存储-CSDN博客
云原生系列(七)—在k8s部署trident对接ontap的nfs存储并创建动态存储类-CSDN博客
参考文档:
The Trident operator faichls to install via Helm on Rancher · Issue #839 · NetApp/trident · GitHub
SVM has no assigned aggregates · Issue #112 · NetApp/trident · GitHub
ontap配置命令文档自己研究找对应版本了
集群提供商: RKE2
Kubernetes 版本: v1.27.11 +rke2r1
存储硬件:联想DM5000H( ontap 9.14.1P1)
基本情况及原理:
基本情况:集群是之前的教程里搭建的生产集群,但是有个问题就是,物理机工作节点采用longhorn存储需要新买硬盘与raid直通卡,无法充分利旧公司已有设备。机房有闲置的联想dm5000h存储,内置系统也是ontap9。支持ontapapi的方式对接。
使用k8s官方的nfs-driver-csi的时候,实测是无法实现pvc和pv的扩容,实际上这个容量限制也是没有用的,因为本身nfs是你共享了一个目录,假定这个目录是最大100G,你的每个pvc实际是里面的文件夹,pvc的大小限制毫无意义,因为这个csi和nfs的沟通就没有关于空间限制这块的。
本质是通过trident与ontapapi对接之后,存储端只创建svm以及aggregate,trident安装时也是带上了nfs-driver-csi,你可以利旧为trident作为中间控制者在存储端创建对应的pv并告知了nfs-driver-csi,然后nfs-driver-csi在k8s这端创建对应的pvc,对于容量的限制和热扩,也是这么个过程,大概是这么个意思。不知道这一段我说的对不对,我的个人理解是这样的。
一、helm部署trident
01、helm部署
trident是netapp官方出的用于k8s与netapp等多个存储对接的csi,差不多可以这么理解。
添加helm仓库(任一master节点执行)
helm repo add netapp-trident https://netapp.github.io/trident-helm-chart
如果你的生产集群和我一样是用rancher拉起的rke2集群,需要进行这一步
创建1个yaml文件(任一master节点执行)
vi trident-rbac.yaml
文件内容如下(任一master节点执行)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: trident-operator-psa
rules:
- apiGroups:
- management.cattle.io
resources:
- projects
verbs:
- updatepsa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: trident-operator-psa
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: trident-operator-psa
subjects:
- kind: ServiceAccount
name: trident-operator
namespace: trident
保存文件后应用到k8s集群(任一master节点执行)
kubectl apply -f trident-rbac.yaml
使用helm安装trident(任一master节点执行),这里的源我做了替换,否则会无法拉去镜像
helm install trient netapp-trident/trident-operator --version 100.2402.0 --set imageRegistry=k8s.m.daocloud.io/sig-storage --set operatorImage=docker.m.daocloud.io/netapp/trident-operator:24.02.0 --set tridentAutosupportImage=docker.m.daocloud.io/netapp/trident-autosupport:24.02 --set tridentImage=docker.m.daocloud.io/netapp/trident:24.02.0 --create-namespace --namespace trident
02、tridentctl安装
wget https://github.com/NetApp/trident/releases/download/v24.02.0/trident-installer-24.02.0.tar.gz
tar -xf trident-installer-24.02.0.tar.gz
cd trident-installer
sudo mv tridentctl /usr/local/bin
二、存储端配置
01、nfs通信网口配置(图形化更好配,但是命令行装大逼啊)
我的存储是两个控制器,每个控制器各2个多余的10G光口,每个控制器的2个光口配置成一个聚合口
交换机端配置对应lacp链路聚合就不写了。存储的基础管理配置开局这些也不写了,这个都不知道不会的,也别看我教程了吧。
创建ipspace,后面做故障转移用的上
network ipspace create -ipspace nfs
查看ipspace
network ipspace show
如图所示
创建广播域
network port broadcast-domain create -broadcast-domain nfs -ipspace nfs
查看广播域
network port broadcast-domain show
如图所示
创建存储链路聚合口
network port aggregate create -node DM500H-01 -mode multimode_lacp -distr-func ip -ifgrp a1a
network port aggregate create -node DM500H-02 -mode multimode_lacp -distr-func ip -ifgrp a2a
查看存储聚合口
network port ifgrp show
如图所示聚合口已创建
链路聚合口移除默认广播域
network port broadcast-domain remove-ports -broadcast-domain Default -ports DM500H-01:e0e
network port broadcast-domain remove-ports -broadcast-domain Default -ports DM500H-01:e0f
network port broadcast-domain remove-ports -broadcast-domain Default -ports DM500H-02:e0e
network port broadcast-domain remove-ports -broadcast-domain Default -ports DM500H-02:e0f
物理口添加到聚合接口
network port ifgrp add-port -node DM500H-01 -ifgrp a0a -port e0e
network port ifgrp add-port -node DM500H-01 -ifgrp a0a -port e0f
network port ifgrp add-port -node DM500H-02 -ifgrp a0a -port e0e
network port ifgrp add-port -node DM500H-02 -ifgrp a0a -port e0f
注意了,我的版本会在这个时候自动创建一个广播域,然后把聚合口加进去了。
查看接口广播域命令
net port show
如图所示
我实际的需求是聚合口要在一开始创建的名为nfs的广播域和名为nfs的ipspace里面。
继续修改
network port broadcast-domain remove-ports -broadcast-domain Default-1 -ports DM500H-01:a0a
network port broadcast-domain remove-ports -broadcast-domain Default-1 -ports DM500H-02:a0a
network port broadcast-domain add-ports -broadcast-domain nfs -ports DM500H-01:a0a -ipspace nfs
network port broadcast-domain add-ports -broadcast-domain nfs -ports DM500H-02:a0a -ipspace nfs
修改完成查看情况
02、创建存储层(不装逼了,图形化配置)
登陆存储的管理界面,这台联想的DM5000H是支持中文的。本质还是netapp的产品一样。
点个保存完事
搞定如下图
03、svm创建及nfs的ip配置(继续命令行装逼)
svm0就是用于后面对接给k8s的存储类用的,svm1是存储系统用的。
vserver create -vserver svm0 -subtype default -rootvolume svm1 -aggregate dm5000h -ipspace nfs -rootvolume-security-style unix
查看svm0信息
vserver show -vserver svm0
如图所示
设置一下结束
vserver modify -vserver svm0 -aggr-list dm5000h
开启svm0的nfs
vserver nfs create -vserver svm0
vserver nfs modify -vserver svm0 -v3 enabled -v4.0 enabled -v4.1 enabled
配置nfs的ip
network interface create -vserver svm0 -lif lif_nfs1 -role data -home-node DM500H-01 -home-port a0a -address 10.10.107.190 -netmask 255.255.255.0
配置用于ontapapi对接的ip
net interface create -vserver svm0 -lif lif_nfs2 -role data -data-protocol none -home-node DM500H-01 -home-port a0a -address 10.10.107.191 -netmask 255.255.255.0
配置网关
net route create -vserver svm0 -destination 0.0.0.0/0 -gateway 10.10.107.1
可以在k8s集群上ping下nfs的ip和对接ontapapi的ip,通了就ok了。
04、svm0的导出策略,也就是访问控制配置
我是图省事设了一个地址段,你们可以自行决定
回到这一步,如下图
拉到最下面点进去
自己设置用户名密码
存储这边配置结束了。
三、trident配置backend、存储类
01、配置backend
登陆集群随便哪个master节点
创建配置文件
vi backend.yaml
内容如下
version: 1
backendName: dm5000h #自己定义一个名字
storageDriverName: ontap-nas #我用的nfs方式,这里写这个,其他方式自己看官网去
managementLIF: 10.10.107.191 #前面在存储配置的管理ip
dataLIF: 10.10.107.190 #前面在存储配置的nfs的ip
svm: svm0 #存储里创建的svm
username: k8s #存储里创建的账号
password: q488pXTyuaJUwsQB #存储里创建的账号的密码
aggregate: dm5000h #存储里创建的层
保存文件后添加到集群去。
tridentctl -n trident create backend -f backend.yaml
创建成功会提示如下图
02、配置存储类
登陆集群随便哪个master节点
创建存储类配置文件
vi storage-netapp-csi.yaml
内容如下
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: dm5000h
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
fsType: "xfs"
reclaimPolicy: Delete
allowVolumeExpansion: true
保存应用到k8s集群
kubectl apply -f storage-netapp-csi.yaml
后面就是创建pvc使用了,不写了,实侧创建pvc自动创建卷,热扩容都没问题。
每创建一个pvc,存储里面会自动创建一个卷。登陆存储可以看到
更多推荐
所有评论(0)