本文共 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)
emptyDir是一个临时存储卷,与Pod生命周期绑定在一起。如果Pod删除了,卷也会被删除
Pod中容器之间数据共享 创建Pod配置文件:
apiVersion: v1kind: Podmetadata: name: my-podspec: 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: {} 执行以下命令查看数据:
kubectl exec my-pod -c zf-pod -- tail /data/hellokubectl logs -f my-pod -c zf-pod-log
查看宿主机真实数据目录:
ls /var/lib/kubelet/pods/7e53914b-b419-4497-a841-536665d97f7c/volumes/kubernetes.io~empty-dir/data
hostPath卷:挂载Node文件系统(Pod所在节点)上的文件或目录到Pod中的容器。
应用场景:Pod中容器需要访问宿主机文件
apiVersion: v1kind: Podmetadata: name: host-podspec: containers: - name: busybox image: busybox args: - /bin/sh - -c - sleep 36000 volumeMounts: - name: data mountPath: /data volumes: - name: data hostPath: path: /tmp type: Directory
执行以下命令查看Pod状态:
kubectl get pods -o wide
查看宿主机目录确认数据一致性:
ls /tmp
NFS卷:提供对NFS挂载支持,可以自动将NFS共享路径挂载到Pod中。
NFS是一个主流的文件共享服务器。
yum -y install nfs-utilsvim /etc/exports# 添加如下内容:IFS/kubernetes *(rw,no_root_squash)mkdir -p /ifs/kubernetessystemctl start nfssystemctl enable nfs
yum -y install nfs-utilsmount -t nfs 192.168.106.200:/ifs/kubernetes /mnt/cd /mnt/touch nfsecho 123 >> nfs
验证NFS共享存储:
df -h | grep ifs
apiVersion: apps/v1kind: Deploymentmetadata: labels: app: deploy-nfs name: deploy-nfsspec: 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
kubectl delete pod deploy-nfs-65b77b9fc5-jgp2bkubectl expose deployment deploy-nfs --port=80 --target-port=80 --type=NodePort
错误案例:K8s-node2节点未安装NFS客户端,创建的Pod分配到该节点启动时会报错。
解决方法:在K8s-node2节点上安装NFS客户端:
yum -y install nfs-utils
重新创建Pod即可。
1. Pod将数据持久化到远程存储
2. Pod多副本共享数据
下载GitHub动态供给NFS插件:
安装存储类并配置动态供给:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: managed-nfs-storageprovisioner: k8s-sigs.io/nfs-subdir-external-provisionerparameters: archiveOnDelete: "false"
绑定PVC并创建Pod:
apiVersion: apps/v1kind: PersistentVolumeClaimmetadata: name: my-sc storageClassName: "managed-nfs-storage"spec: accessModes: [ReadWriteMany] resources: requests: storage: 5Gi
验证PV和PVC状态:
kubectl get pvkubectl 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/