k8s使用NFS建立持久卷
两个节点,k8s master 和ndoe。1.在节点1 建立NFS 服务端:关闭防火墙$ systemctl stop firewalld.service$ systemctl disable firewalld.service安装配置 nfs$ yum -y install nfs-utils rpcbind共享目录设置权限:以 /data/k8s目录存放数据chmod 755 /data/k
两个节点,k8s master 和ndoe。
1.在节点1 建立NFS 服务端:
关闭防火墙
$ systemctl stop firewalld.service
$ systemctl disable firewalld.service
安装配置 nfs
$ yum -y install nfs-utils rpcbind
共享目录设置权限:以 /data/k8s目录存放数据
chmod 755 /data/k8s/
配置 nfs,nfs 的默认配置文件在 /etc/exports 文件下,在该文件中添加下面的配置信息:
$ vi /etc/exports
/data/k8s *(rw,sync,no_root_squash)
配置说明:
- /data/k8s:是共享的数据目录
*
:表示任何人都有权限连接,当然也可以是一个网段,一个 IP,也可以是域名- rw:读写的权限
- sync:表示文件同时写入硬盘和内存
- no_root_squash:当登录 NFS 主机使用共享目录的使用者是 root 时,其权限将被转换成为匿名使用者,通常它的 UID 与 GID,都会变成 nobody 身份
启动服务 nfs 需要向 rpc 注册,rpc 一旦重启了,注册的文件都会丢失,向他注册的服务都需要重启
$ systemctl start rpcbind.service
$ systemctl enable rpcbind
$ systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2018-07-10 20:57:29 CST; 1min 54s ago
Process: 17696 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 17697 (rpcbind)
Tasks: 1
Memory: 1.1M
CGroup: /system.slice/rpcbind.service
└─17697 /sbin/rpcbind -w
running 证明启动成功了。
然后启动 nfs 服务
$ systemctl start nfs.service
$ systemctl enable nfs
$ systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Fri 2020-12-11 16:59:51 CST; 2 weeks 4 days ago
Main PID: 83896 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
acticve代表启动成功
另外我们还可以通过下面的命令确认下:
$ rpcinfo -p|grep nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
查看具体目录挂载权限:
$ cat /var/lib/nfs/etab
/data/k8s *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,no_root_squash,no_all_squash)
到这里我们就把 nfs server 给安装成功了
2.在节点二建立NFS客户端
注意所有要使用nfs类型pv的k8s节点,都要装nfs客户端。
客户端安装nfs过程和服务端一样,关闭防火墙、安装nfs、先启动 rpc、然后启动 nfs,安装好后,开始挂载。
先检查节点一是否有挂载目录
showmount -e 192.168.1.197
然后我们在客户端上新建目录:
$ mkdir -p /root/course/kubeadm/data
将 nfs 共享目录挂载到上面的目录:
$ mount -t nfs 192.168.1.197:/data/k8s /root/course/kubeadm/data
挂载成功后,在客户端上面的目录中新建一个文件,然后我们观察下 nfs 服务端的共享目录下面是否也会出现该文件:
$ touch /root/course/kubeadm/data/test.txt
然后在 nfs 服务端查看:
$ ls -ls /data/k8s/
total 4
4 -rw-r--r--. 1 root root 4 Jul 10 21:50 test.txt
如果上面出现了 test.txt 的文件,那么证明我们的 nfs 挂载成功了。
3.PV
pv是存储资源,使用k8s建立一个pv。pvc是使用资源,pod可以使用一个pvc去绑定某个pv,从而存储在这个pv。
建立一个pv, fweb-pv-namespace.yaml, 指定存储空间大小、访问模式、回收策略,具体参数含义在官网查询。
- 注意使用pv的pod 所在namespace必须和pv、pvc所在namespace相同
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
namespace: apaas-fweb-namespace
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
nfs:
path: /data/k8s
server: 192.168.1.197
创建pv,查看状态可用
[root@fwebcs01 k8s-Pv]# kubectl apply -f fweb-pv-namespace.yaml
persistentvolume/pv1 created
[root@fwebcs01 k8s-Pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Delete Available 5s
4.PVC
fweb-pvc-namespace.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nfs
namespace: apaas-fweb-namespace
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
创建pvc,查看状态是绑定,会自动和空闲的pv绑定在一起
[root@fwebcs01 k8s-Pv]# kubectl apply -f fweb-pvc-namespace.yaml
persistentvolumeclaim/pvc-nfs created
[root@fwebcs01 k8s-Pv]#
[root@fwebcs01 k8s-Pv]#
[root@fwebcs01 k8s-Pv]#
[root@fwebcs01 k8s-Pv]# kubectl get pvc
No resources found in default namespace.
[root@fwebcs01 k8s-Pv]# kubectl get pvc -n apaas-fweb-namespace
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-nfs Bound pv1 1Gi RWX 17s
再查看之前创建的pv,状态由available变为bound
[root@fwebcs01 k8s-Pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Delete Bound apaas-fweb-namespace/pvc-nfs 11m
5.使用PVC
随便给个pod,主要pod和pvc的namespace一致,通过volumes指定要使用的pvc名称,通过volumeMounts指定容器内想往外挂载数据的一个目录,以后容器的此目录数据就会放在nfs的目录中。
使用subPath可以为这个容器单独在 nfs /data/k8s目录中建立一个子目录,方便和其他pod的数据分开。
apiVersion: v1
kind: Pod
metadata:
name: hello
namespace: default
labels:
app: hello
userId: userId
spec:
containers:
- name: hello
image: fweb-cloud:1.0
resources:
limits:
cpu: "1"
memory: "2Gi"
requests:
cpu: "0.5"
memory: "1Gi"
ports:
- containerPort: 8080
name: fweb-apascode-conainer-port
volumeMounts:
- name: fweb-apascode-volume
subPath: apascode
mountPath: /usr/local/tomcat/file
volumes:
- name: fweb-apascode-volume
persistentVolumeClaim:
claimName: pvc-nfs
更多推荐
所有评论(0)