赞
踩
K8S存储是通过 卷:Volumn
docker 目录结构:bootfs rootfs 镜像
容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet
会重启它,但是容器中的文件将丢供—容器以干净的状态(镜像最初的状态〉重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的Volume抽象就很好的解决了这些问题。Pod中的容器通过Pause容器共享Volume。
当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除Pod 时,emptyDir中的数据将被永久删除。
随着pod 的诞生而诞生,pod 一被删除重建,emptyDir 存储卷 数据就会丢失。不是持久化存储到磁盘中的。
用处:pod 临时存储数据。
mkdir /opt/volumes cd /opt/volumes vim pod-emptydir.yaml apiVersion: v1 kind: Pod metadata: name: pod-emptydir namespace: default labels: app: myapp tier: frontend spec: containers: - name: myapp image: ikubernetes/myapp: v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 #定义容器挂载内容 volumeMounts: #使用的存储卷名称,如果跟下面volume字段name值相同,则表示使用volume的这个存储卷 - name: html #挂载至容器中哪个目录 mountPath: /usr/share/nginx/html/ - name:busybox image: busybox: latest imagePullPolicy: IfNotPresent volumeMounts: - name: html #在容器内定义挂载存储名称和挂载路径 mountPath: /data/ #每两秒往磁盘写时间信息 command: [ '/bin/sh' , '-c' , 'while true;do echo $(date) >> /data/index.html;sleep 2;done'] #定义存储卷 volumes: #定义存储卷名称 - name: html #定义存储卷类型 emptyDir: {} apiVersion: v1 kind: Pod metadata: name: pod-emptydir namespace: default labels: app: myapp tier: frontend spec: containers: - name: myapp image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 volumeMounts: - name: html mountPath: /usr/share/nginx/html/ - name: busybox image: busybox:latest imagePullPolicy: IfNotPresent volumeMounts: - name: html mountPath: /data/ command: ['sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done'] volumes: - name: html emptyDir: {}
PV是由管理员创建的一种存储空间(存储资源)
PVC申请PV的资源
动态资源:自动创建PV资源
静态资源:需要管理员手动从存储服务中创建指定大小的PV
NFS 操作
创建五个目录
静态 PV由K8s管理员创建的供k8s集群使用的存储资源,从远程NFS或者分布式存储系统中创建得来,PV有存储空间大小,读写模式
PVC K8s管理员在创建pod时,要为pod申请使用的存储资源的请求,向 PV申请存储资源
StorageClass 是用于动态创建PV供 Pod 使用,相匹配 PVC申请的资源
读写模式(访问模型):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。