云原生入门-k8s-存储
configMap为了在K8S中存储配置文件。许多应用程序会从配置文件,命令行参数或环境变量中读取配置信息。configMap API 给我们提供了 向容器中注入配置信息的机制。ConfigMap 可以被用来保存单个属性,也可以用来保存正规配置文件或者JSON 大对象configMap 创建方式使用目录创建cat ui.propertiescolor.good=purplecolor.bad=ye
configMap
为了在K8S中存储配置文件。许多应用程序会从配置文件,命令行参数或环境变量中读取配置信息。configMap API 给我们提供了 向容器中注入配置信息的机制。ConfigMap 可以被用来保存单个属性,也可以用来保存正规配置文件或者JSON 大对象
configMap 创建方式
- 使用目录创建
cat ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
cat game.properties
enemies=allies
lives=3
enemies.cheat=true
enemies.cheat.level=nogoos
enemies.code.passpath=UUIDLSD
创建了两个文件之后执行命令. --from-file表示这两个文件的目录
kubectl create configmap game-config --from-file=/root/haha
- 使用资源清单的方式创建
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level: INFO
创建好之后 kubectl apply -f ***.yaml
Pod 中使用 ConfigMap
- 使用ConfigMap来替代环境变量
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level: INFO
创建一个pod来读取configMap作为环境变量
apiVersion: v1
kind: Pod
metadata:
name: my-test-pod
spec:
containers:
- name: test-container
image: zhucheng1992/myboot:4.0
envFrom:
- configMapRef:
name: env-config
- 使用数据卷插件使用ConfigMap
apiVersion: apps/v1
kind: Pod
metadata:
name: my-test-pod
spec:
containers:
- name: test-container
image: zhucheng1992/myboot:4.0
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
这个pod 创建了一个volume 是读取 configMap 的special-config,然后在自己的container中引用了这个volume
进入pod之后就可以看到可以在etc/config里面看到configmap的配置
secret
存储加密信息
volume
K8S中卷有明确的寿命–与 封装它的pod相同 。 所以,卷的生命比pod中所有 容器都长,当这个容器重启时,数据仍然得以保存。当然pod不在存在时,卷也不复存在。k8s支持多种类型的卷,pod可以同时使用任意数量的卷
卷的类型
emptyDir
当pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的,Pod中的容器可以读取和写入 emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同的路径上。当pod被删除的时候,emptyDir数据将被永久删除
用法:
- 暂存空间,例如用于基于磁盘的合并排序
- 用作长时间爱你计算崩溃恢复时的检查点
- web服务器容器提供数据时,把偶才能内容管理容器提取的文件
apiVersion: v1
kind: Pod
metadata:
name: empty-dir-pod
spec:
containers:
- name: test-container
image: zhucheng1992/myboot:4.0
volumeMounts:
- name: cache-volume
mountPath: /cache
volumes:
- name: cache-volume
emptyDir: {}
hostPath
hostPath卷将主机节点的文件系统中的文件或目录挂载到集群中。
除了所需path之外,用户还可以为hostPath指定type
值 | 行为 |
---|---|
空 | 空字符串(默认)用于向后兼容,这意味着在挂载hostPath卷之前不会执行任何检查 |
DirectoryOrCreate | 如果在给定的路径上没有任何东西存在,那么将根据需要在那里创建一个空目录,权限设置为0755,与kubectl具有相同的组合所有权 |
Directory | 给定的路径下必须存在目录 |
FireOrCreate | 如果给定的路径没有东西,则创建一个空文件,权限设置为0644,与kubectl 具有相同的组和所有权 |
File | 给定的路径下必须存在文件 |
socket | 给定的路径下必须存在 unix套接字 |
charDevice | 给定的路径下必须存在字符设备 |
BlockDevice | 给定的路径下必须存在块设备 |
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: test-container
image: zhucheng1992/myboot:4.0
volumeMounts:
- name: test-volume
mountPath: /cache
volumes:
- name: test-volume
hostPath:
path: /data
type: Directory
PV
是由管理员设置的存储,是集群的一部分,就像 节点是集群的资源一样,pv也是集群的资源。 pv具有独立于pod的生命周期封装了存储细节
PVC
master中的监视环路监视新的PVC,并将他们绑定在一起,一旦绑定在一起,PVC是排他性的
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accssModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
访问模式 accssModes
每个pv都有一套自己的用来描述特定功能的访问模式
- ReadWriteOnce 该卷可以被单个节点以读写的模式挂载
- ReadOnlyMany 该卷可以被多个节点以只读模式挂载
- ReadWriteMany 该卷可以被多个节点以读写模式挂载
回收策略 persistentVolumeReclaimPolicy
- retain(保留) 手动回收
- Recycle (回收) 基本擦除 (rm -rf /volume/*)
- delete(删除) 关联的存储资产将被删除
状态 pv的多种状态
- available 一块空闲资源还没有被任何声明绑定
- bound 卷已经被绑定了
- released 声明被删除,但是资源还未被集群重新声明
- failed 自动回收失败
持久化演示说明-NFS
- 安装NFS服务器
yum install -y nfs-common nfs-utils rpcbind
mkdir /nfsdata
chmod 666 /nfsdata
chown nfsnobody /nfsdata
cat /etc/exports
/nfsdata *(rw,no_root_squash,no_all_squash,sync)
systemctl start rpcbind
systemctl start nfs
- nfs客户端安装软件
yum install -y nfs-common nfs-utils rpcbind
mkdir /test
3. 挂载nfs到本地
mount -t nfs 192.168.56.111:/nfsdata /test/
- 部署PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv1
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accssModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /nfsdata
server: 192.168.56.111
- 创建pv
kubectl create -f nfspv.yaml
6. 创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
spec:
storageClassName: nfs
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
创建好之后就发现PVC 和 PV已经被绑定在一起了
7. pod中使用pvc
apiVersion: v1
kind: Pod
metadata:
name: pvc-pod
spec:
containers:
- name: test-container
image: zhucheng1992/myboot:4.0
volumeMounts:
- name: pvc-volume
mountPath: /cache
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: pvc-nfs
statefulSet 整合 pvc
更多推荐
所有评论(0)