k8s使用csi

Ethereal Lv4

1. 预先配置

  1. 确保安装的docker是20版本及以上的,否则,可以卸载后通过下述命令安装
1
2
3
4
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
sed -i 's#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
sed -i 's#$releasever#7#g' /etc/yum.repos.d/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 确保安装的golang版本是1.22版本及以上的,否则,可以卸载后通过下述命令安装
1
2
3
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin # 添加到/etc/profile中
  1. 修改docker源

参照DaoCloud/public-image-mirror: 很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 (github.com) 拉取镜像

  1. 搭建本地nfs源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
yum install nfs-utils
# 创建文件夹
mkdir -p /root/nfs_exports/
# 编辑
vim /etc/exports
/root/nfs_exports/ *(rw,sync,no_root_squash)
# 使配置生效,不用重启 nfs 服务器,客户端实时更新
exportfs -rv
# 启动
systemctl start rpcbind
systemctl start nfs-server
systemctl enable --now nfs-server
# 查看
showmount -e

2. 编译

1
2
3
4
5
6
git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
cd csi-driver-nfs
export REGISTRY=<dockerhub-alias>
export IMAGE_VERSION=latest
make container
# 上述命令存在两个container对象,我们只需要执行第一个,第二个命令有问题且会编译所有架构下的镜像,所以当第一个结束后可以直接ctrl-c,或等第二个报错即可。

导出到cri

1
2
3
4
5
6
7
8
9
# 将镜像保存下来
docker save -o ./image.tar nfsplugin:latest
# 导入,-n 参数为指定命名空间,必须为k8s.io命名空间
ctr -n k8s.io image import ./image.tar
# 确认下导入
ctr -n k8s.io image list
# crictl是Kubernetes社区定义的CRI接口工具,在这边也确认下
crictl image
ctr -n k8s.io i tag docker.io/library/nfsplugin:latest gcr.io/k8s-staging-sig-storage/nfsplugin:canary

3. 部署

1
2
3
./deploy/install-driver.sh master local # 此命令会请求pull镜像,使用手动方式pull镜像,然后类似上面重新打tag即可
kubectl -n kube-system get pod -o wide -l app=csi-nfs-controller
kubectl -n kube-system get pod -o wide -l app=csi-nfs-node

修改pv

1
2
vim ./deploy/example/pv-nfs-csi.yaml
# 修改其中的volumeHandle和volumeAttributes下的server和share字段

应用

1
2
3
kubectl apply -f ./deploy/example/storageclass-nfs.yaml
kubectl apply -f ./deploy/example/pvc-nfs-csi-dynamic.yaml
kubectl apply -f ./deploy/example/nginx-pod-nfs.yaml

4. 参考

spec/spec.md at master · container-storage-interface/spec (github.com)

Docker 最佳实战:3 分钟,openEuler 22.03 LTS SP3 安装 Docker,有手就行!-腾讯云开发者社区-腾讯云 (tencent.com)

DaoCloud/public-image-mirror: 很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 (github.com)

MicroK8s - Use NFS for Persistent Volumes on MicroK8s

csi-driver-nfs/docs/csi-dev.md at master · kubernetes-csi/csi-driver-nfs (github.com)

csi-driver-nfs/docs/install-csi-driver-master.md at master · kubernetes-csi/csi-driver-nfs (github.com)

csi-driver-nfs/deploy/storageclass.yaml at master · kubernetes-csi/csi-driver-nfs (github.com)

csi-driver-nfs/deploy/example/pv-nfs-csi.yaml at master · kubernetes-csi/csi-driver-nfs (github.com)

csi-driver-nfs/deploy/example/pvc-nfs-csi-dynamic.yaml at master · kubernetes-csi/csi-driver-nfs (github.com)

csi-driver-nfs/deploy/example/nginx-pod-nfs.yaml at master · kubernetes-csi/csi-driver-nfs (github.com)

  • Title: k8s使用csi
  • Author: Ethereal
  • Created at: 2024-07-02 15:47:04
  • Updated at: 2024-07-04 14:47:33
  • Link: https://ethereal-o.github.io/2024/07/02/k8s使用csi/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments
On this page
k8s使用csi