Kubernetes 存储卷挂载方式
存储卷挂载方式大致分为三类,容器内存储卷挂载、宿主机存储卷挂载、分布式文件存储卷挂载。
1、容器内存储卷挂载
POD增加一个cachevol的Volume存储卷,挂载到容器的nginx-cache目录上,内容如下:
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: frontend
spec:
replicas: 3
selector:
tier: frontend
volumes:
- name: cachevol # 增加一个名为cachevol的volume存储卷
emptyDir: {} # pod分配到node时创建的,k8s自动分配的一个目录,pod从node移除时emptyDir中的数据永久删除
template:
metadata:
labels:
app: nginx
tier: frontend
spec:
containers:
- name: nginx1.18
image: nginx:1.18.0
volumeMounts:
- mountPath: /nginx-cache # 将cachevol volume存储卷mount到容器内的/etc/nginx/cache目录上
name: cachevol
imagePullPolicy: IfNotPresent
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 80
2、宿主机存储卷挂载
hostPath在POD上挂载宿主机的文件或目录,内容如下:
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: mysql5.7
spec:
replicas: 2
selector:
app: mysql
template:
metadata:
labels:
app: mysql # spec.template.metadata.labels标签名与spec.selector名称要相同
spec:
volumes:
- name: "data-storage"
hostPath:
path: "/opt/data" # 宿主机目录
containers:
- name: mysql5.7
image: mysql:5.7.29
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
3、分布式文件存储卷挂载
分布式文件存储方式需要 Pod 通过 PVC 来申请存储空间,分布式存储可以使用 PV 静态分配存储空间,也可以通过 StorageClass 动态分配存储空间,下面我采用 PV & PVC 方式提供存储卷进行挂载,内容如下:
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: mysql5.7
spec:
replicas: 2
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
containers:
- name: mysql5.7
image: mysql:5.7.29
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
# nfs-persistent_volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
nfs:
path: /data
server: 192.168.1.2
# nfs-persistent_volume_claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
nfs:
path: /data
server: 192.168.1.2
注:1、PV只能是网络存储,不能属于任何Node,但可以在每个Node上访问;
2、PV并不是被定义在Pod上的,而是独立于Pod之外的;
4、PVC读写方式有三种,VCReadWriteOnce:有读写权限且只能被单个node挂载;ReadOnlyMany:只读权限允许被多个node挂载;ReadWriteMany:有读写权限允许被多个node挂载。
还没有评论,来说两句吧...