k8s v1.26 实战csi-nfs 部署

一 前言

使用自开发的一键k8s基础环境部署后,存储需要解决,就是测试环境故选择nfs比较简单,翻阅很多网上资料感觉都不是很全面,结合网上资料折腾了一天,总算是完成了csi-nfs部署。其实之前也部署过,经过一段时间就遗忘了,这次决定把完整步骤记录下来,方便以后查阅,同时也方便其他和我一样需要部署csi-nfs的人作为参考。

二 csi-nfs 概念

csi-nfs 就是为k8s 提供nfs存储实现数据持久化的一套接口插件,我这么理解,网上有很专业的说法,记不住反正。总之就是你想使用nfs作为k8s的数据持久化存储,你就选用csi-nfs 就对了。

三 NFS服务

既然使用NFS作为存储,那么就需要先搞个NFS服务对吧,找一台机器(centos)安装nfs服务

复制代码
yum install -y nfs-utils rpcbind
mkdir -p /data/nfs
chmod -R 755 /data/nfs

编辑 vim /etc/exports

/data/nfs 192.168.3.0/24 (rw,sync,no_root_squash)
保存退出

exportfs -ra
exportfs -v

启动nfs服务
systemctl start rpcbind
systemctl start nfs-server
设置开机启动nfs服务
systemctl enable rpcbind
systemctl enable nfs-server

以上是nfs服务安装,需要详细安装的请网上查阅,这个nfs服务安装网上资料比较全,不再赘述。

四 k8s环境部署csi-nfs

k8s中部署csi-nfs 是重点,首先需要去csi-nfs 仓库下载相关资料 地址如下

https://github.com/kubernetes-csi/csi-driver-nfs

参考上图直接下载就行了

下载后解压到系统任意目录下。

解压后 目录是csi-driver-nfs-master

cd 切换到csi-driver-nfs-master 目录下面

由于镜像源都是国外的下载不了,故我们进行一个批量镜像源替换,统一替换到阿里云源就行

使用grep命令查看镜像情况,注:下图是我替换过的。

复制代码
[root@localhost csi-driver-nfs-master]# grep image deploy/*.yaml
deploy/csi-nfs-controller.yaml:          image: registry.aliyuncs.com/google_containers/csi-provisioner:v5.2.0
deploy/csi-nfs-controller.yaml:          image: registry.aliyuncs.com/google_containers/csi-snapshotter:v8.2.1
deploy/csi-nfs-controller.yaml:          imagePullPolicy: IfNotPresent
deploy/csi-nfs-controller.yaml:          image: registry.aliyuncs.com/google_containers/livenessprobe:v2.15.0
deploy/csi-nfs-controller.yaml:          image: registry.cn-hangzhou.aliyuncs.com/image-storage/nfspluginnfsplugin:v4.6.0
deploy/csi-nfs-controller.yaml:          imagePullPolicy: IfNotPresent
deploy/csi-nfs-node.yaml:          image: registry.aliyuncs.com/google_containers/livenessprobe:v2.15.0
deploy/csi-nfs-node.yaml:          image: registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.13.0
deploy/csi-nfs-node.yaml:          image: registry.cn-hangzhou.aliyuncs.com/image-storage/nfspluginnfsplugin:v4.6.0
deploy/csi-nfs-node.yaml:          imagePullPolicy: "IfNotPresent"
deploy/csi-snapshot-controller.yaml:          image: registry.aliyuncs.com/google_containers/snapshot-controller:v8.2.1

我们来看看替换命令

复制代码
sed -i 's#gcr.io/k8s-staging-sig-storage#registry.aliyuncs.com/google_containers#/g' deploy/*.yaml
sed -i 's#registry.k8s.io/sig-storage#registry.aliyuncs.com/google_containers#g' deploy/*.yaml

注意有个特殊镜像需要单独替换(nfsplug:)这个镜像可以手动修改为下面镜像(切记)

registry.cn-hangzhou.aliyuncs.com/image-storage/nfspluginnfsplugin:v4.6.0

完成镜像地址修改后,就可以执行部署了。

直接执行 ./deploy/install-driver.sh 就等会就部署好了

复制代码
./deploy/install-driver.sh

部署完成大概如下图样子

一般情况 csi-nfs-controller 容器启动有点问题,可以做如下修改

复制代码
vim deploy/csi-nfs-controller.yaml (编辑 将csi-resizere 信息删除或者注释)

由于csi-resizer 可能启动不了,所以将关于 csi-resizer的信息删除或者注释了,一般不用调整磁盘大小

- name: csi-resizer
          image: registry.aliyuncs.com/google_containers/csi-resizer:v1.13.2
          args:
            - "-csi-address=$(ADDRESS)"
            - "-v=2"
            - "-leader-election"
            - "--leader-election-namespace=$(POD_NAMESPACE)"
            - '-handle-volume-inuse-error=false'
          env:
            - name: ADDRESS
              value: /csi/csi.sock
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          volumeMounts:
            - name: socket-dir
              mountPath: /csi
          resources:
            limits:
              memory: 200Mi

经过以上修改后 csi-nfs 就部署完成

五 创建 storageclass 磁盘类

vim storageclass-nfs.yaml 将下面内容直接复制粘贴进去就行

注意修改下 nfs服务器ip及目录信息就行了

复制代码
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.3.121
  share: /var/nfs/nano
  # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
  # csi.storage.k8s.io/provisioner-secret-name: "mount-options"
  # csi.storage.k8s.io/provisioner-secret-namespace: "default"
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
  - nfsvers=4.1

kubectl apply -f storageclass-nfs.yaml

这就完成了磁盘类创建,后面使用就可以直接调用了。

六 总结

经过上面步骤一步步完成就完成了csi-nfs 部署,给k8s 对接上了nfs存储了。

好,感谢阅读,欢迎评论区留言反馈问题。

相关推荐
庸子1 分钟前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
眠修24 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
hunjinYang43 分钟前
Tomcat镜像实战:掌握Dockerfile的编写以及发布项目
docker·tomcat
好奇的菜鸟1 小时前
Docker 配置项详解与示例
运维·docker·容器
Connie14513 小时前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin3 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
爱奥尼欧5 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天5 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
tan77º6 小时前
【Linux网络编程】网络基础
linux·服务器·网络