NFS存储
NFS即网络文件系统Network File System,它是一种分布式文件系统协定,最后是由Sun MicroSystems公司开发的类Unix操作系统之上的一款经典网络存储计划,其性能是在容许客户端主机能够像拜访本地存储一样通过网络拜访服务端文件。
Kubernetes的NFS存储用于将某当时存在的NFS服务器导出export的存储空间挂载到Pod中来供Pod容器应用。与emptyDir不同的是,NFS存储在Pod对象终止后仅是被卸载而非删除。另外,NFS是文件系统及共享服务,它反对同时存在多路挂载申请。定义NFS存储时,罕用到以下字段。
- server<string>:NFS服务器的IP地址或者主机名,必选字段。
- path<string>:NFS服务器导出(共享)的文件系统门路,必选字段。
- readOnly<boolean>:是否以只读挂载,默认为false。
1.部署一个NFS服务
在集群之外的节点192.168.31.241
#ubuntu部署sudo apt install nfs-kernel-server#centos部署yum -y install rpcbind nfs-utils
#创立要共享的目录mkdir /data/redis -p#编辑NFS配置并退出以下内容vim /etc/exports/data/redis 192.168.31.0/24(rw,sync,no_all_squash,no_subtree_check)#载入配置exportfs -rv
- /data/redis:NFS服务要共享的目录
- 192.168.31.0/24:容许拜访NFS服务器的网段,也能够写 * ,示意所有地址都能够拜访NFS服务
- rw:拜访到此目录的服务器都具备读写权限
- sync:数据同步写入内存和硬盘
- no_all_squash:所有用户对根目录具备齐全治理拜访权限
- no_subtree_check:不查看父目录的权限
启动NFS服务
#ubuntu启动systemctl start nfs-kernel-server#centos启动systemctl start rpcbind nfs
服务查看
#查看NFS配置是否失效cat /var/lib/nfs/etab/data/redis 192.168.31.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)#通过showmount命令查看NFS共享状况showmount -e 192.168.31.241Export list for 192.168.31.241:/data/redis 192.168.31.0/24
2.创立Pod资源配置清单
Pod中应用Redis镜像来运行容器,将Redis数据长久化至NFS服务器上,上面是简略实用Redis的一个示例:
cat redis-nfs.yamlapiVersion: v1kind: Podmetadata: name: vol-nfs-pod labels: app: redisspec: containers: - name: redis image: redis:5.0 #镜像版本 ports: - containerPort: 6379 #容器端口 name: redisport volumeMounts: - mountPath: /data #卷挂载到容器中的目录 name: redisdata #卷名称 volumes: - name: redisdata #卷名称 nfs: #应用NFS网络存储卷 server: 192.168.31.241 #NFS服务器地址 path: /data/redis #NFS服务器共享的目录 readOnly: false #是否为只读
下面的示例定义在资源配置文件vol-nfs.yaml中,其中的Pod资源领有一个关联至NFS服务器192.168.31.241的存储卷,Redis容器将其挂载到容器中的/data目录上,它是运行于容器中的redis-server数据的长久放弃地位。
提醒:
这里应确保当时要存在一个名为192.168.31.241的NFS服务器,其输入了/data/redis目录,并受权给Kubernetes集群中的节点拜访。主机和目录都能够按需进行调整。
3.创立Pod对象并查看配置信息
kubectl apply -f redis-nfs.yaml
如下vol-nfs-pod被调度到了k8s-node03上
kubectl get pods -o wide -l app=redisNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESvol-nfs-pod 1/1 Running 0 106s 172.20.3.31 k8s-node03 <none> <none>
kubectl describe pods/vol-nfs-podName: vol-nfs-podNamespace: defaultPriority: 0Node: k8s-node03/192.168.31.233Start Time: Tue, 23 Jun 2020 13:47:29 +0800Labels: app=redisAnnotations: Status: RunningIP: 172.20.3.31IPs: IP: 172.20.3.31Containers: redis: Container ID: docker://dfa1a8202b39460db9e1d9849d6a4d416ab50a33e48fae556d1248a8efb3193b Image: redis:5.0 Image ID: docker-pullable://redis@sha256:faea2a6e7fbd7e144cdb15e12ff16c24a5b8d9469e25796ec6d3b7a82a817e1b Port: 6379/TCP Host Port: 0/TCP State: Running Started: Tue, 23 Jun 2020 13:47:30 +0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /data from redisdata (rw) #挂载到容器中的门路 /var/run/secrets/kubernetes.io/serviceaccount from default-token-xxqkj (ro)Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled TrueVolumes: redisdata: Type: NFS (an NFS mount that lasts the lifetime of a pod) #NFS类型挂载 Server: 192.168.31.241 #Server是192.168.31.241 Path: /data/redis #Server的门路 ReadOnly: false #不是只读 default-token-xxqkj: Type: Secret (a volume populated by a Secret) SecretName: default-token-xxqkj Optional: falseQoS Class: BestEffortNode-Selectors: <none>Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300sEvents: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m29s default-scheduler Successfully assigned default/vol-nfs-pod to k8s-node03 Normal Pulled 2m28s kubelet, k8s-node03 Container image "redis:5.0" already present on machine Normal Created 2m28s kubelet, k8s-node03 Created container redis Normal Started 2m28s kubelet, k8s-node03 Started container redis
4.查看容器挂载状况
kubectl exec -it vol-nfs-pod -- df -hT | grep dataFilesystem Type Size Used Avail Use% Mounted on192.168.31.241:/data/redis nfs4 59G 9.4G 47G 17% /data#查看/data目录下的数据kubectl exec -it vol-nfs-pod -- ls /datadump.rdb
5.资源创立实现后,可通过其命令客户端redis-cli创立测试数据,并手动触发其同步于存储系统中
kubectl exec -it vol-nfs-pod -- redis-cli127.0.0.1:6379> set mykey 'hello world'OK127.0.0.1:6379> get mykey"hello world"127.0.0.1:6379> BGSAVEBackground saving started127.0.0.1:6379> exit
6.测试数据长久化
为了测试数据长久化成果,上面删除Pod资源vol-nfs-pod,而后再对该Pod重建查看数据是否可能失常拜访
#删除Podkubectl delete pods vol-nfs-pod#重建Podkubectl apply -f redis-nfs.yaml#连贯到Redis容器并查看数据长久化成果kubectl exec -it vol-nfs-pod -- redis-cli127.0.0.1:6379> keys *1) "mykey"127.0.0.1:6379> get mykey"hello world"
如上所示能够看到,此前创立的mykey及其数据在Pod资源重建后仍然存在。
有段时间没跟大家分享资源福利了,看了下本人的资料夹,整顿了一些我认为比拟好的Python学习材料了。置信这套材料能够对你进阶高级工程师有帮忙
学习工具
大厂实战手册
自学视频(局部)
【材料收费支付形式】:点这里:2020Python高薪实战学习大合集