什么是存储?
在计算机中数据存储是非常重要的,无论是用户数据,商品数据等都需要持久化存储;存储数据的介质也有很多,比如:光盘,机器硬盘,固态硬盘等
K8S持久化
Volume
container中的数据都是临时存放的,容器崩溃重启的时候,数据就会丢失,kubelet会以全新的状态运行container,基于这些原因K8S抽象出Volume的概念,来解决数据持久化的问题。
PV(Persistent Volume)和 PVC(PersistentVolumeClaim)
- PV:属于集群中的一种资源,跟普通的Volume一样都是通过卷插件(CSI)来实现的,屏蔽了底层设备的实现,不管底层是NFS、云盘等设备都提供了统一访问方式,一般由K8S管理员来进行创建或者动态创建的。
- PVC:container需要访问PV的资源,用户需要创建一个PVC来进行访问,支持ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载。
StorageClass
一种动态生成PV、PVC的方式,可以根据不同的内置类型来生成对于相应的磁盘设备,一般通过卷插件来实现的,例如:阿里云的ACK
Projected Volumes
Projected Volumes可以把卷源映射到同一目录下。
type
- secret:用来给POD传递敏感信息的,例如:密码
- downwardAPI:
downwardAPI
卷用于为应用提供 downward API 数据。 在这类卷中,所公开的数据以纯文本格式的只读文件形式存在。 - configMap:提供了向POD中注入配置信息方式,ConfigMap 对象中存储的数据可以被
configMap
类型的卷引用,然后被 Pod 中运行的容器化应用使用。 - serviceAccountToken:可以将服务账号的token注入到POD中,使用该token来访问Kubernetes API 服务器。
secret、downwardAPI、configMap yml配置信息
apiVersion: v1
kind: Pod
metadata:
name: volume-test
spec:
containers:
- name: container-test
image: busybox:1.28
volumeMounts:
- name: all-in-one
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: all-in-one
projected:
sources:
- secret:
name: mysecret
items:
- key: username
path: my-group/my-username
- downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "cpu_limit"
resourceFieldRef:
containerName: container-test
resource: limits.cpu
- configMap:
name: myconfigmap
items:
- key: config
path: my-group/my-config
serviceAccountToken yml信息
apiVersion: v1
kind: Pod
metadata:
name: sa-token-test
spec:
containers:
- name: container-test
image: busybox:1.28
volumeMounts:
- name: token-vol
mountPath: "/service-account"
readOnly: true
serviceAccountName: default
volumes:
- name: token-vol
projected:
sources:
- serviceAccountToken:
audience: api
expirationSeconds: 3600
path: token
Ephemeral Volume
存储一些应用需要的数据,但是应用重启后可以丢失的数据;Ephemeral Volume的生命周期跟随POD一样,随pod创建而创建,随pod销毁而销毁。
类型
- emptyDir:Pod 启动时为空,存储空间来自本地的 kubelet 根目录(通常是根磁盘)或内存。
- secret、configMap、downwardAPI:将不同类型的数据注入到POD中(这个3种类型可以看作是映射卷或者是临时卷)。
- CSI临时卷:跟持久卷类型,由CSI插件程序实现的。
- 通用临时卷:有可以支持持久卷的程序提供。