k8s快速入门 持久化存储之nfs

1.nfs安装及共享目录配置

执行以下命令安装nfs服务器

#centos
yum -y install nfs-utils

#ubuntu
sudo apt install nfs-kernel-server

在nfs服务器内端新建一个目录作为共享目录,共享给客户端使用

mkdir /data/nfs

目录建立完成后编辑nfs配置文件/etc/exports,将该目录写入/data/nfs *(rw,sync,no_root_squash)

sudo vim /etc/exports

重启nfs后可以看见nfs配置信息

showmount -e localhost

客户端也需要安装nfs客户端

#centos
yum -y install nfs-utils

#ubuntu
sudo apt install nfs-common

安装完成后挂载服务器的共享目录

mount -t nfs <nfs-server-ip>:/data/nfs /data/nfs

验证一下,在服务器挂载路径创建一个文件

在客户端也会存在

2.nfs-csi下载及部署

下载驱动程序源码

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

运行安装脚本

sudo ./csi-driver-nfs/deploy/install-driver.sh 

其中git clone以及脚本部署中的某些镜像国内可能无法直接下载,需要用科技或者找国内镜像资源手动拉取到本地并在yaml文件(csi-nfs-node.yaml csi-nfs-controller.yaml等)里替换

解决后可以看到集群的部署情况

sudo kubectl get po -A

3.集群数据持久化存储

创建storageclass并部署,server替换成nfs服务器的ip,share替换成nfs的挂载目录

storageclass.yaml

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc1-hsy
provisioner: nfs.csi.k8s.io
parameters:
  server: <nfs-server-ip> #这里替换成nfs服务器的ip
  share: /data/nfs/
  # 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
mountOptions:
  - nfsvers=4.1
sudo kubectl apply -f storageclass.yaml

查看集群sc

sudo kubectl get sc

创建pvc

pvc-hsy.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-hsy  # PVC的名称
spec:
  accessModes:
    - ReadWriteOnce  # 访问模式,可以是ReadWriteOnce, ReadOnlyMany, 或者ReadWriteMany
  resources:
    requests:
      storage: 1Gi  # 请求的存储容量
  storageClassName: sc1-hsy  # 替换成StorageClass名称

部署pvc

sudo kubectl apply -f pvc-hsy.yaml

通过kubectl get pvc 可以看到pvc

可以看到通过pvc和sc动态创建了pv,因此想要存储的话需要在部署程序的yaml文件中进行配置

step3.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: step3-hsy-deployment
  namespace: hsy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: step3-hsy
  template:
    metadata:
      labels:
        app: step3-hsy
    spec:      
      containers:
      - name: step3-hsy
        image: <image-name:tag>  # 确保这里使用的是正确的镜像名
        imagePullPolicy: Never
        volumeMounts:
        - name: data
          mountPath: /usr/share
      volumes:
      - name: data
        nfs:
          path: /data/nfs/pvc-f241737a-3086-4a0a-8f49-ba90de256c41
          server: <nfs-server-ip>        

将文件中volumes->nfs的path替换成pv的路径,server替换成nfs服务器的ip;上述的pv在pod的容器内就映射到了volumeMounts的mountPath内里

部署后可以验证一下,在nfs的pv内有template.html:

ls /data/nfs/pvc-f241737a-3086-4a0a-8f49-ba90de256c41

进入pod内,cd到mountPath

kubectl exec -it <pod-name> (-n namespace) -- /bin/sh

cd /usr/share

可以看到nfs共享目录中集群pv内的文件在pod内被看到了

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes (K8s) 支持使用 NFS(Network File System)作为持久化存储解决方案。NFS 是一种分布式文件系统协议,允许将远程文件系统挂载到本地服务器上。 要使用 NFS 进行持久化存储,你需要先设置一个 NFS 服务器,并在 Kubernetes 集群中配置一个 NFS 持久卷。以下是一些步骤: 1. 配置 NFS 服务器:你需要设置一个 NFS 服务器并将其配置为共享文件系统。确保你已经安装并配置好了 NFS 服务器软件。 2. 创建 NFS 持久卷:在 Kubernetes 中,你可以使用 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)对象来定义持久卷和持久卷声明。创建一个 PV 来表示 NFS 服务器上的共享目录,并为该 PV 创建一个 PVC。 3. 部署应用程序:使用创建的 PVC,在你的应用程序中声明一个持久卷。你可以通过将 PVC 挂载到应用程序的 Pod 中来实现持久化存储。 以下是一个示例的 YAML 文件,演示了如何在 Kubernetes 中配置一个 NFS 持久卷: ``` apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany nfs: server: <NFS_SERVER_IP> path: /path/to/shared/directory --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: "" selector: matchLabels: name: nfs-pv ``` 替换 `<NFS_SERVER_IP>` 和 `/path/to/shared/directory` 为你 NFS 服务器的 IP 地址和共享目录的路径。然后,使用 kubectl apply 命令来部署这个 YAML 文件。 一旦 PVC 和 PV 创建成功,你可以在你的应用程序中使用该 PVC 来挂载 NFS 持久卷,并在 Pod 中进行持久化存储。 这就是使用 NFS 进行持久化存储的基本步骤。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值