
文章插图
二、实践在实践PV、PVC、StorageClass之前,需要读者朋友自行安装NFS服务器 。文中演示的内容是通过yaml编排自动到NFS服务器起上创建PV 。
1、Pod使用PV、PVC挂载存储卷1.1、编排PV、PVC、Pod挂载PVC文中演示的是:Pod的某个目录挂载到NFS的某个目录下 。使用了Nginx镜像,将html文件写在PV所在的NFS服务器上,最终可以看到利用PV / PVC 成功挂载上去了 。
yaml文件如下:
# PV编排apiVersion: v1kind: PersistentVolumemetadata:name: nfs-pv1namespace: dev1labels:pv: nfs-pv1spec:capacity:storage: 1GiaccessModes:- ReadWriteOnce# Recycle 删除PVC会同步删除PV | Retain 删除PVC不会同步删除PVpersistentVolumeReclaimPolicy: Recyclenfs:path: /data/nfstest/share/pv1server: 10.20.1.20readOnly: false---# PVC 编排 , 通过selector查找PV,K8S里的资源查找都是通过selector查找label标签apiVersion: v1kind: PersistentVolumeClaimmetadata:name: nfs-pvc1namespace: dev1labels:pv: nfs-pvc1spec:resources:requests:storage: 100MiaccessModes:- ReadWriteOnceselector:matchLabels:pv: nfs-pv1---# Pod挂载PVC,这里为了测试,直接通过node节点的hostPort暴露服务apiVersion: v1kind: Podmetadata:name: webappnamespace: dev1labels:app: webappspec:containers:- name: webappimage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80hostPort: 8081volumeMounts:- name: workdirmountPath: /usr/share/nginx/htmlvolumes:- name: workdirpersistentVolumeClaim:claimName: nfs-pvc1执行kubectl命令,查看实践效果如下:
文章插图
然后查看pod的情况,发现pod一直处于创建中,如下:

文章插图
于是查看pod的情况kubectl describe pod webapp -n dev1,发现如下异常信息:

文章插图
是因为没有在NFS上创建此文件夹 。到NFS创建此文件夹之后,重启Pod,一切正常了,然后找到Pod所在Node节点 。通过http://nodeip:port访问,可以看到成功的界面:
[root@k8s-master pv-pvc-storageclass]# kubectl get pods -n dev1 -owide| grep webappwebapp1/1Running04m17s10.21.69.214k8s-worker-3<none><none>
文章插图
此时因为nginx下还没有html页面 , 所以看不到内容 。此时到NFS服务器对应的目录/data/nfstest/share/pv1下增加index.html页面,然后刷新页面即可,界面如下:

文章插图

文章插图
也可以通过进入到Pod内部,查看验证是够挂载成功 。
执行进入Pod的命令kubectl exec -it webapp -n dev1 -- /bin/sh,可以看到如下页面:

文章插图
2、Pod使用StorageClass自动挂载存储卷2.1、安装 Provisioner文中选择通过helm的方式安装nfs-subdir-external-provisioner , 这种方式相对简单 。安装文档、安装过程见下文:
- 安装文档:
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
- 安装过程:
- 安装helm,本文以mac为例
brew install heml- 安装nfs-subdir-external-provisioner,执行以下2个命令:
$ helm repo add nfs-subdir-external-provisioner https://kube.NETes-sigs.Github.io/nfs-subdir-external-provisioner/$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -n kube-system--set image.repository=dyrnq/nfs-subdir-external-provisioner--set nfs.server=10.20.1.20--set nfs.path=/data/nfstest/nfs-storage这里注意几个参数:image.repository:修改了镜像的地址,默认用的国外镜像很有可能拉不下来
nfs.server:你的NFS服务器地址
nfs.path:存储目录
- 查看helm安装的结果:

推荐阅读
- 享受美味DIY:降脂清热!
- 离婚8年后,再看刘翔、葛天的婚姻,才明白他们离婚是最好的选择
- 话说东北菜
- 印花税通俗解释 印花税是什么意思大白话
- 当35岁倪妮和27岁孟子义同框,才彻底明白,爱秀身材的倪妮输得有多惨!
- 看了这些白发奶奶,才明白:女人上了年纪,真就是体态决定气质
- 梦到大白菜是什么预兆 五十岁女人梦见白菜什么意思
- 春天怎么存放大白菜
- 冬天大白菜怎么储存新鲜 冬天大白菜怎样储存
- 桃、李、杏都不能多吃
