一文學(xué)會(huì)安裝和在k8s中使用nfs

一、概述

nfs是共享網(wǎng)絡(luò)文件存儲(chǔ)服務(wù)器,可以通過類似于磁盤的方式,掛載到客戶端的目錄上。
其主要作用:

  • 1.實(shí)現(xiàn)多臺(tái)服務(wù)器之間數(shù)據(jù)共享
  • 2.實(shí)現(xiàn)多臺(tái)服務(wù)器之間數(shù)據(jù)一致

二、安裝

  1. 安裝nfs
yum install -y nfs-utils

2.創(chuàng)建目錄

mkdir /data/volumes -pv

3.配置nfs服務(wù)目錄

vim /etc/exports
/data/volumes 192.168.1.0/24(rw,no_root_squash)

rw 讀寫權(quán)限
no_root_squash 當(dāng)NFS客戶端以root管理員訪問時(shí),映射為NFS服務(wù)器的root管理員

4.重啟并顯示

systemctl start nfs

showmount -e
Export list for storage:
/data/volumes 192.168.1.0/24

三、在k8s node節(jié)點(diǎn)上安裝客戶端工具

  1. node節(jié)點(diǎn)安裝nfs-utils
yum install -y nfs-utils

2.掛載nfs存儲(chǔ)并展示

mount -t nfs storage:/data/volumes /mnt

mount
storage:/data/volumes on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.13,local_lock=none,addr=192.168.1.14)

取消掛載:

umount /mnt/

四、創(chuàng)建nfs存儲(chǔ)卷的使用清單

1.創(chuàng)建pod并掛載nfs存儲(chǔ)
vim pod-nfs-vol.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-nfs
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  volumes:
    - name: html
      nfs:
        path: /data/volumes
        server: storage

啟動(dòng)pod

kubectl apply -f pod-nfs-vol.yaml

2.在nfs服務(wù)器上創(chuàng)建index.html

cd /data/volumes

vim index.html
<h1> nfs storage</h1>

curl 10.244.3.7
<h1> nfs storage</h1>

五、實(shí)戰(zhàn)1

1. 配置pv

apiVersion: v1
kind: PersistentVolume
metadata:
  finalizers:
  - kubernetes.io/pv-protection
  labels:
     name: nfs-learn
  name: nas-learn
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 1Gi
  mountOptions:
  - vers=4.0
  - noresvport
  nfs:
    path: /data/volumes
    server: storage
  persistentVolumeReclaimPolicy: Retain

2.配置pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  finalizers:
  - kubernetes.io/pvc-protection
  name: nasclaim-nas-learn
  namespace: learn
spec:
  accessModes:
  - ReadWriteMany
  dataSource: null
  resources:
    requests:
      storage: 1Pi
  selector:
    matchLabels:
      name: nfs-learn
  volumeName: nas-learn

3.創(chuàng)建pod掛載pvc及pv

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: pv-learn
  name: pv-learn
  namespace: learn
spec:
  replicas: 1
  selector:
    matchLabels:
      run: pv-learn
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        run: pv-learn
    spec:
      containers:
      - env:
        image: registry.yunlearn.org:5000/release/go-dingding:test
        imagePullPolicy: Always
        name: pv-learn
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /mnt/
          name: alinas
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: alinas
        persistentVolumeClaim:
          claimName: nasclaim-nas-learn

六、實(shí)戰(zhàn)二

1.配置nfs存儲(chǔ)

vim /etc/exports
mkdir v{1,2,3,4,5}
/data/volumes/v1 192.168.1.0/24(rw,no_root_squash)
/data/volumes/v2 192.168.1.0/24(rw,no_root_squash)
/data/volumes/v3 192.168.1.0/24(rw,no_root_squash)
/data/volumes/v4 192.168.1.0/24(rw,no_root_squash)
/data/volumes/v5 192.168.1.0/24(rw,no_root_squash)

exportfs -arv
showmount -e

2.創(chuàng)建pv

vim pv-demo.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /data/volumes/v1
    server: storage
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv002
  labels:
    name: pv002
spec:
  nfs:
    path: /data/volumes/v2
    server: storage
  accessModes: ["ReadWriteOnce"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv003
  labels:
    name: pv003
spec:
  nfs:
    path: /data/volumes/v3
    server: storage
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv004
  labels:
    name: pv004
spec:
  nfs:
    path: /data/volumes/v4
    server: storage
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 4Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv005
  labels:
    name: pv005
spec:
  nfs:
    path: /data/volumes/v5
    server: storage
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 5Gi

3.創(chuàng)建pvc并掛到pod

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
  namespace: default
spec:
  accessModes: ["ReadWriteMany"]
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-pvc
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  volumes:
    - name: html
      persistentVolumeClaim:
        claimName: mypvc

創(chuàng)建pod

kubectl apply -f pod-vol-pvc.yaml

4.測試

進(jìn)入到nfs目錄吧

cd v3/  
echo "welcome to use pv3" > index.html

curl  10.244.2.39
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容