博客
关于我
k8s-存储卷类型-emptyDir-hostPath-网络存储-NFS-持久卷PV(静态动态)
阅读量:327 次
发布时间:2019-03-04

本文共 3563 字,大约阅读时间需要 11 分钟。

为什么需要存储卷?

1.启动时需要初始化数据,例如配置文件

2.启动过程中产生临时数据,该临时数据需要多个容器间共享
3.启动过程中产生持久数据,例如mysql的data数据
Kubernetes中的Volume提供了在容器中挂在外度存储的能力。Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMount)后才能使用相应的Volume。常用的数据卷类型包括:

1.本地(hostPath, emptyDir)
2.网络(NFS,Ceph, GlusterFS)
3.公有云(AWS EBS)
4.k8s资源(configmap, secret)

1.0认识临时存储卷 emptyDir

emptyDir是一个临时存储卷,与Pod生命周期绑定在一起。如果Pod删除了,卷也会被删除

应用场景:
Pod中容器之间数据共享

实验一

1.1创建一个Pod,一个Pod写数据,一个Pod读数据

创建Pod配置文件:

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: zf-pod
image: centos
command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
- name: zf-pod-log
image: centos
command: ["bash","-c","tail -f /data/hello"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
1.2查看数据

执行以下命令查看数据:

kubectl exec my-pod -c zf-pod -- tail /data/hello
kubectl logs -f my-pod -c zf-pod-log

查看宿主机真实数据目录:

ls /var/lib/kubelet/pods/7e53914b-b419-4497-a841-536665d97f7c/volumes/kubernetes.io~empty-dir/data

2.0节点存储卷 hostPath

hostPath卷:挂载Node文件系统(Pod所在节点)上的文件或目录到Pod中的容器。

应用场景:Pod中容器需要访问宿主机文件

2.1创建Pod
apiVersion: v1
kind: Pod
metadata:
name: host-pod
spec:
containers:
- name: busybox
image: busybox
args:
- /bin/sh
- -c
- sleep 36000
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /tmp
type: Directory
2.2验证

执行以下命令查看Pod状态:

kubectl get pods -o wide

查看宿主机目录确认数据一致性:

ls /tmp

3.0网络存储卷 NFS

NFS卷:提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中。

NFS是一个主流的文件共享服务器。

3.1安装NFS
yum -y install nfs-utils
vim /etc/exports
# 添加如下内容:
IFS/kubernetes *(rw,no_root_squash)
mkdir -p /ifs/kubernetes
systemctl start nfs
systemctl enable nfs
3.2安装客户端并测试NFS
yum -y install nfs-utils
mount -t nfs 192.168.106.200:/ifs/kubernetes /mnt/
cd /mnt/
touch nfs
echo 123 >> nfs

验证NFS共享存储:

df -h | grep ifs
3.3创建Pod使用NFS共享
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy-nfs
name: deploy-nfs
spec:
replicas: 1
selector:
matchLabels:
app: deploy-nfs
strategy: {}
template:
metadata:
labels:
app: deploy-nfs
spec:
containers:
- image: nginx
name: nginx
resources: {}
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumes:
- name: data
nfs:
server: 192.168.106.200
path: /ifs/kubernetes

应用配置文件:

kubectl apply -f nfs.yaml
删除Pod并验证数据是否丢失
kubectl delete pod deploy-nfs-65b77b9fc5-jgp2b
kubectl expose deployment deploy-nfs --port=80 --target-port=80 --type=NodePort

分享一个错误案例

错误案例:K8s-node2节点未安装NFS客户端,创建的Pod分配到该节点启动时会报错。

解决方法:在K8s-node2节点上安装NFS客户端:

yum -y install nfs-utils

重新创建Pod即可。

4.0PV与PVC使用流程

1. Pod将数据持久化到远程存储

2. Pod多副本共享数据

创建NFS动态供给PV

下载GitHub动态供给NFS插件:

安装存储类并配置动态供给:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "false"

绑定PVC并创建Pod:

apiVersion: apps/v1
kind: PersistentVolumeClaim
metadata:
name: my-sc
storageClassName: "managed-nfs-storage"
spec:
accessModes: [ReadWriteMany]
resources:
requests:
storage: 5Gi

验证PV和PVC状态:

kubectl get pv
kubectl get pvc

在NFS服务器上查看文件同步情况:

ls /ifs/kubernetes

访问Pod即可看到存储内容:

curl http://-your-pod-ip:80

删除Pod并验证数据是否丢失:

kubectl delete pod your-pod

暴露端口并访问:

kubectl expose deployment your-deployment --port=80 --target-port=80 --type=NodePort

访问服务IP:

curl http://your-service-ip:80

转载地址:http://vhah.baihongyu.com/

你可能感兴趣的文章
Objective-C实现批量修改文件类型算法(附完整源码)
查看>>
Objective-C实现找出一个数的质因数primeFactors算法(附完整源码)
查看>>
Objective-C实现找出三角形从上到下的最大路径算法(附完整源码)
查看>>
Objective-C实现找出买卖股票的最大利润算法(附完整源码)
查看>>
Objective-C实现找出买卖股票的最大利润算法(附完整源码)
查看>>
Objective-C实现找出二维数组中的鞍点(附完整源码)
查看>>
Objective-C实现找出由两个 3 位数字的乘积构成的最大回文数的算法 (附完整源码)
查看>>
Objective-C实现找出矩阵的最大最小值(附完整源码)
查看>>
Objective-C实现找到一个数字数组的中值算法(附完整源码)
查看>>
Objective-C实现找到具有 500 个除数的第一个三角形数算法(附完整源码)
查看>>
Objective-C实现找到最近的点对之间的距离算法(附完整源码)
查看>>
Objective-C实现抓包实例(附完整源码)
查看>>
Objective-C实现抽签抓阄(附完整源码)
查看>>
Objective-C实现抽象工厂模式(附完整源码)
查看>>
Objective-C实现拉格朗日插值法(附完整源码)
查看>>
Objective-C实现拉格朗日插值算法(附完整源码)
查看>>
Objective-C实现拓扑排序算法(附完整源码)
查看>>
Objective-C实现拦截输入法(附完整源码)
查看>>
Objective-C实现括号匹配(附完整源码)
查看>>
Objective-C实现拷贝二进制文件(附完整源码)
查看>>