为Kubernetes集群内的Pod配置NFS存储
Aug 3, 2019
近一段时间在做容器化的项目,公司需要把nginx也放到kubernetes集群内,nginx有静态资源,如果在每个node节点都同步一份感觉太费劲,所以使用nfs挂载到pod内部使用。pod使用nfs存储有两种方法,介绍如下:
一、在pod直接挂载nfs存储
特别注意: 使用此种方法在pod里挂载nfs,务必要在pod所调度的节点上安装nfs-utils,否则无法挂载!!!
最近的几个Kubernetes大版本已经原生支持在pod内部直接挂载nfs存储,只需把volumes的类型改成nfs就行,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19kind: Pod
apiVersion: v1
metadata:
name: nfs-in-a-pod
spec:
# hostNetwork: true
containers:
- name: app
image: alpine
volumeMounts:
- name: nfs-volume
mountPath: /var/nfs
command: ["/bin/sh"]
args: ["-c", "sleep 5000000000"]
volumes:
- name: nfs-volume
nfs:
server: 192.168.7.107
path: /tmp/nfs_test
二、使用pvc挂载nfs存储
创建pv:
1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: v1
kind: PersistentVolume
metadata:
name: my-nfs-share
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # 特别注意pv的回收策略,此处若需要pv删除后,nfs文件存在,则需要配置回收策略为:Retain
nfs:
server: 192.168.7.107
path: /tmp/nfs_test创建pvc:
1
2
3
4
5
6
7
8
9
10
11apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myapp-nfs
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi创建pod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18kind: Pod
apiVersion: v1
metadata:
name: nfs-in-a-pod
spec:
# hostNetwork: true
containers:
- name: app
image: alpine
volumeMounts:
- name: nfs-volume
mountPath: /var/nfs
command: ["/bin/sh"]
args: ["-c", "sleep 5000000000"]
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: myapp-nfs