k8s数据卷
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s数据卷相关的知识,希望对你有一定的参考价值。
为什么需要数据卷
容器中的文件在磁盘上是临时存在,这给容器中运行一些重要的程序的时候有影响
- 问题1: 当容器升级或者崩溃的时候,kubelet会重建容器,容器内的文件丢失
- 问题2: 一个容器中运行多个容器,可能需要文件共享
k8s的卷(volumn)这一抽象概念可以解决这个问题
常用的数据卷类型
- 节点本地 hostPath emptyDir
- 网络 NFS Ceph ClusterFs
- 公有云 AWS EBS
- k8s资源 configMap Secret
emptyDir卷类型
emptyDir是一个临时存储卷,与pod的生命周期绑在一起,删除pod,emptyDir卷也会被随之删除。
应用场景: pod容器之间数据共享
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: write
image: centos
command: ["bash","-c","for i in 1..100;do echo $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
- name: read
image: centos
command: ["bash","-c","tail -f /data/hello"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir:
寻找emptyDir在宿主机上挂载的位置的方式:
1、查看pod分布在哪个节点上
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test 2/2 Running 0 64s 10.244.169.141 k8s-node2 <none> <none>
2、到相应的节点查看docker 容器
# docker ps -a |grep "podName"
3、查看挂载目录
hostPath卷类型
hostPath卷:挂载的是node节点(pod所在节点)上的文件或目录到容器中
应用场景:pod中容器需要访问宿主机上的文件
缺点:挂载的是pod所在节点上的目录或者文件,如果节点挂了,pod在其他节点上创建,那么写的内容会丢失
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: write
image: centos
command: ["bash","-c","for i in 1..100;do echo $i >> /data/hello;sleep 1;done"]
volumeMounts:
- name: data
mountPath: /data
- name: read
image: centos
command: ["bash","-c","tail -f /data/hello"]
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /tmp # 将宿主机的/tmp目录挂载到容器中的/data目录下
type: Directory
网络数据卷:NFS
k8s支持挂载nfs,nfs提供一个共享目录,pod都挂载这个目录,这样pod无论如何重建,都不会影响共享目录中的内容
nfs挂载小测试
1、安装nfs环境
yum -y install nfs-utils # 每个节点都安装
2、配置nfs 服务端 (任意一个节点)
vim /etc/exports
/ifs/kubernetes *(rw,no_root_squash) # 共享目录
mkdir -p /ifs/kubernetes
systemctl start nfs
systemctl enable nfs
3、验证nfs是否正常工作
在其他节点挂载共享目录测试
mount -t nfs 192.168.3.33:/ifs/kubernetes /mnt
在/mnt目录下添加删除文件目录,测试共享目录也会同步 即可
4、pod挂载共享目录
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: portal
template:
metadata:
labels:
app: portal
spec:
containers:
- name: web
image: nginx:1.18
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
volumes:
- name: wwwroot
nfs:
server: 192.168.3.33
path: /ifs/kubernetes
以上是关于k8s数据卷的主要内容,如果未能解决你的问题,请参考以下文章