一、简介
和docker类似,k8s也需要存储数据,比如redis和mysql都需要外部存储对象,要不然重新拉起pod,在其他机器上数据会消失。
二、NFS共享存储
NFS这个文件系统提供了远程挂载共享数据,我们可以利用这个文件系统来做数据共享。
1、下载文件系统
需要共享的机器都下载
apt-get install nfs-kernel-server
2、配置服务端
# 对外暴露共享目录 /data是服务端的文件夹
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
*是所有机器都可以访问我们的共享资源。如果写ip地址的话,就指定特定的ip.
# 在主共享机器创建/nfs/data/目录
mkdir -p /nfs/data
# 重启NFS服务
service nfs-kernel-server restart
# 查看暴露服务信息
exportfs -v
说明服务端配置成功
3、配置客户端
# 查看服务端那些目录可被挂载
showmount -e 192.168.211.11
# 挂载
mount -t nfs4 -o noac 192.168.211.11:/nfs/data /nfs/data
# 查看挂载是否成功,最后一行
df -h
注意:执行挂载命令的时候不要再/nfs/data里执行,否则挂载后,创建的文件不共享
4、部署一个nginx
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-pv
name: nginx-pv
spec :
replicas: 2
selector:
matchLabels:
app: nginx-pv
template:
metadata :
labels:
app: nginx-pv
spec:
containers :
- image: nginx
name: nginx
volumeMounts :
- name: html
mountPath: /usr/share/nginx/html
volumes :
- name: html
nfs:
server: 192.168.211.11
path: /nfs/data/nginx-pv
kubectl apply -f mount.yaml
首先部署之前需要创建好/nfs/data/nginx-pv,要不然会不成功。测试ok。
三、PV&PVC
静态供应
PV:持久卷
PVC:持久卷声明
用法:提前创建好持久卷,比如100M,5G,100G大小的持久卷,然后再使用(声明PVC),最后在创建项目的时候应用申明即可。
1、创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01-10m
spec:
capacity:
storage: 10M
accessModes :
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/01
server: 192.168.211.11
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02-1gi
spec:
capacity:
storage: 1Gi
accessModes :
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/02
server: 192.168.211.11
kubectl apply -f pv.yaml
查看创建状态
kubectl get persistentvolume
kubectl get pv
2、声明PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests :
storage: 200Mi
storageClassName: nfs
注意:声明中的nfs要和上面创建PV中的storageClassName: nfs里的nfs对应。
kubectl apply -f pvc.yaml
可以看到1G空间已经绑定了。
查看声明
kubectl get pvc
3、项目中应用
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy-pvc
name: nginx-deploy-pvc
spec:
replicas: 2
selector:
matchLabels :
app: nginx-deploy-pvc
template:
metadata:
labels:
app: nginx-deploy-pvc
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: nginx-pvc
claimName: nginx-pvc就是声明里的名字
此处部署的nginx和上面《三》部署的nginx区别就是一个直接挂载,一个直接用的声明。
四、ConfigMap抽取配置文件
正在整理