k8s存储支持多种模式:本地存储:hostPath/emptyDir,传递网络存储:iscsi/nfs,分布式网络存储:glusterfs/rbd/cephfs,以及云存储等;
k8s默认容器如果重建,则容器中文件将丢失,为了解决这些问题,通常我们会将容器中需要持久化的文件存储到其他可持久化存储目录中。
1.存储到临时目录
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node2 #指定工作在节点2上
containers:
- name: nginx-web
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html #容器目录
name: html
volumes:
- name: html
emptyDir: {}
这种模式数据存储将随着pod的创建与销毁生命周期存在,数据将不持久化存储。
2.存储到宿主机目录
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node2 #指定工作在节点2上
containers:
- name: nginx-web
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html #容器目录
name: html
volumes:
- name: html
hostPath: #类型为hostPath,即宿主机文件路径
path: /data/nginx/html #宿主机目录
type: DirectoryOrCreate
优点:简单易用,无需额外支持
缺点:依赖宿主机磁盘容量,pod与宿主机存在强耦合,不利于管理。当pod部署多个副本并分配到不同host时,数据不共享;当pod漂移时,数据不同步;当node故障时,数据易丢失;
3.存储到NFS中
3.1安装NFS
#master节点安装nfs
[root@k8s-master nginx]# yum -y install nfs-utils
#创建nfs目录
[root@k8s-master nginx]# mkdir -p /nfs/data/
#修改权限
[root@k8s-master nginx]# chmod -R 777 /nfs/data
<