查看k8s支持的存储类

kubectl explain pods.spec.volumes

1.emptydir

kubectl explain pods.spec.volumes.emptyDir

kubectl explain pods.spec.containers 容器中设置

kubectl explain pods.spec.containers.volumeMounts

实例:

cd manifests/

mkdir volumes

cd volumes/

cp ../pod-demo.yaml  ./

mv pod-demo.yaml pod-vol-demo.yaml

vim pod-vol-demo.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-demo

namespace: default

labels:

app: myapp

tier: frontend

spec:

containers:

- name: myapp

image: ikubernetes/myapp:v1

ports:

- name: http

containerPort: 80

volumeMounts: 容器中挂载

- name: html  关联pod存储卷名

mountPath: /data/web/html  容器中挂载的路径

- name: busybox

image: busybox:latest

imagePullPolicy: IfNotPresent

volumeMounts:

- name: html

mountPath: /data

command:

- "/bin/sh"

- "-c"

- "sleep 3600"

volumes:  pod存储卷

- name: html  pod存储卷名

emptyDir: {}  pod存储卷类型

kubectl apply -f pod-vol-demo.yaml

kubectl exec -it pod-demo -c busybox -- /bin/sh

-c  指定busybox容器

df -hT 查看挂载

cd /data

date >> index.html

kubectl exec -it pod-demo -c myapp  -- /bin/sh

连入myapp容器

df -hT

cd /data/web/html

cat index.html 可以判定两个容器共享一个目录 emptyDir

实例:

kubectl delete -f pod-vol-demo.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-demo

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:

- "/bin/sh"

- "-c"

- "while true; do echo $(date) >> /data/index.html;sleep 2;done" 命令不会终止,终止容器就会退出

volumes:

- name: html

emptyDir: {}

kubectl apply -f pod-vol-demo.yaml

curl 10.244.1.120 访问验证数据

1.1 gitrRepo

kubectl explain pod.spec.volumes.gitRepo

2.hostPath 宿主机路径 挂载宿主机真实目录,pod消失,数据还在宿主机目录上

节点级持久

kubectl explain pod.spec.volumes.hostPath

vim pod-hostpath-vol.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-vol-hostpath

namespace: default

spec:

containers:

- name: myapp

image: ikubernetes/myapp:v1

volumeMounts:

- name: html

mountPath: /usr/share/nginx/html/

volumes:

- name: html

hostPath:  pod存储卷类型

path: /data/pod/volume1 指定的hostPath存储路径,即本地目录路径

type: DirectoryOrCreate 类型 目录不存在则创建

在两个节点执行,用于验证

mkdir -p /data/pod/volume1

echo "node1.baidu.com" > /data/pod/volume1/index.html

创建

kubectl apply -f pod-hostpath-vol.yaml

kubectl get pods -o wide

验证

curl 10.244.1.122

3.网络共享存储  nfs  具有持久性

实例

node2作为 nfs共享存储

yum install nfs-utils -y

mkdir /data/volumes

vim /etc/exports

/data/volumes   192.168.81.0/24(rw,no_root_squash) 压缩root权限

systemctl start nfs  nfs工作在2049端口

去node1节点测试

mount -t nfs node2:/data/volumes /mnt

不支持挂载,安装nfs套件

yum install nfs-utils -y

mount -t nfs node2:/data/volumes /mnt 测试能挂载上才能做网络共享存储

然后卸载 umount /mnt/

cp pod-hostpath-vol.yaml pod-nfs-vol.yaml

kubectl explain pods.spec.volumes.nfs

vim pod-nfs-vol.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-vol-nfs

namespace: default

spec:

containers:

- name: myapp

image: ikubernetes/myapp:v1

volumeMounts:

- name: html

mountPath: /usr/share/nginx/html/

volumes:

- name: html

nfs:  指定pod存储卷类型为nfs网络共享存储

path: /data/volumes  nfs的共享目录

server: node2  nfs服务器地址

创建

kubectl apply -f pod-nfs-vol.yaml

验证

kubectl get pods  -o wide

去nfs共享目录创建一个网页

echo "<h1>nfs store</h1>"  > /data/volumes/index.html

curl 10.244.2.96

4.persistentVolumeClaim  PVC 持久存储申请

kubectl explain pod.spec.volumes.persistentVolumeClaim

kubectl explain pvc

pvc 与 pv一一对应

pvc可以给多个pod访问

创建pv

以前面nfs为存储

cd /data/volumes

mkdir v{1,2,3,4,5}

vim /etc/exports

/data/volumes/v1        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v2        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v3        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v4        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v5        192.168.81.0/24(rw,no_root_squash)

systemctl restart nfs

exportfs -arv

在node1上 showmount -e node2

在master上k8s把5个存储卷定义成pv

kubectl explain pv

kubectl explain pv.spec

kubectl explain pv.spec.nfs

vim pv-demo.yaml

apiVersion: v1

kind: PersistentVolume 资源类型 pv

metadata:

name: pv001  pv名

labels:  pv标签

name: pv001

polity: fast

spec:  pv规格

nfs:  pv的存储类型nfs

path: /data/volumes/v1  nfs共享的目录

server: node2  nfs服务器地址

accessModes: ["ReadWriteMany","ReadWriteOnce"]  pv读写模式 多路读写 单路读写

capacity:  pv最大容量

storage: 1Gi   最大容量1Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv002

labels:

name: pv002

polity: fast

spec:

nfs:

path: /data/volumes/v2

server: node2

accessModes: ["ReadWriteOnce"]

capacity:

storage: 5Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv003

labels:

name: pv003

polity: fast

spec:

nfs:

path: /data/volumes/v3

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 20Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv004

labels:

name: pv004

polity: fast

spec:

nfs:

path: /data/volumes/v4

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 10Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv005

labels:

name: pv005

polity: fast

spec:

nfs:

path: /data/volumes/v5

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 10Gi

创建

kubectl apply -f pv-demo.yaml

kubectl get pv

注:RECLAIM POLICY 回收策略  pvc绑定解除之后数据处理问题

创建pvc

vim pod-vol-pvc.yaml

apiVersion: v1

kind: PersistentVolumeClaim 资源类型 pvc

metadata:

name: mypvc   pvc名

namespace: default  pvc名称空间要与使用该pvc的pod名称空间一致

spec: 规格

accessModes: ["ReadWriteMany"]  指定使用pv的方式 多路读写

resources:  要求的资源大小

requests:  要求

storage: 6Gi 大小6G存储

---

apiVersion: v1

kind: Pod

metadata:

name: pod-vol-pvc

namespace: default

spec:

containers:

- name: myapp

image: ikubernetes/myapp:v1

volumeMounts:

- name: html

mountPath: /usr/share/nginx/html/

volumes:  指定pod存储类型

- name: html  pod存储名

persistentVolumeClaim:  pod存储类型为pvc

claimName: mypvc  申请名,就是pvc名

创建pvc和pod

kubectl apply -f pod-vol-pvc.yaml

验证

kubectl get pv 可以看到一个pv被绑定了

kubectl get pvc 查看pvc

kubectl get pods -o wide

kubectl describe pods pod-vol-pvc

测试:

到nfs的 v5目录

echo test node v5 > index.html

然后在任一节点

curl 10.244.2.49

kubectl delete pods pod-vol-pvc  删除pod数据依然在

k8s之数据存储的更多相关文章

  1. k8s之数据存储-高级存储

    PV和PVC 前面已经学习了使用NFS提供存储,此时就会要求用户会搭建NFS系统,并且会在yaml配置nf's,由于k8s支持的存储系统有很多,要求客户全部掌握,显然不现实.为了能够屏蔽底层存储实现的 ...

  2. k8s之数据存储-配置存储

    ConfigMap configmap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的 创建configmap.yaml,内容如下 apiVersion: v1 kind: ConfigMap ...

  3. android 数据存储Ⅰ

    本章讲述在Android开发中,简单的数据存储.涉及知识主要是SharedPreferences,及多页面切换ViewPager. 1.功能需求 做一个小应用.启动的时候有左右引导图.只有第一次启动时 ...

  4. 基于 K8S 构建数据中心操作系统

    在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...

  5. Kubernetes 持久化数据存储 StorageClass

    文章链接 PV 和 PVC 模式要先创建好 PV,然后再定义好 PVC 进行一对一的绑定.那么如果遇到大集群,也一一的创建吗?这样来说维护成本很高,工作量大.这个时候就有了 Kubernetes 提供 ...

  6. k8s 网络持久化存储之StorageClass(如何一步步实现动态持久化存储)

    StorageClass的作用: 创建pv时,先要创建各种固定大小的PV,而这些PV都是手动创建的,当业务量上来时,需要创建很多的PV,过程非常麻烦. 而且开发人员在申请PVC资源时,还不一定有匹配条 ...

  7. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

  8. Android之数据存储的五种方法

    1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...

  9. Android之网络数据存储

    一.网络保存数据介绍 可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中. 用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法. 本文利用LeanCloud ...

  10. Android之文件数据存储

    一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...

随机推荐

  1. 幻兽帕鲁/Palworld/支持网络联机 v0.1.5.1

    游戏介绍 在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. 注意事项 先启动STEAM客户端,在 ...

  2. MyBatisPlus - [07] Q&A

    题记部分 001 || Public Key Retrieval is not allowed 通常出现在使用JDBC连接数据库时,特别时在尝试通过SSL/TLS加密连接到MySQL或MariaDB数 ...

  3. 从零构建你的第一个RESTful API:HTTP协议与API设计超图解指南 🌐

    title: 从零构建你的第一个RESTful API:HTTP协议与API设计超图解指南 date: 2025/2/26 updated: 2025/2/26 author: cmdragon ex ...

  4. Flink学习(十八) 状态管理与状态编程

    Flink中的状态 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态:可以认为状态就是一个本地变量,可以被任务的业务逻辑访问:Flink会进行状态管理,包括状态一致性,故障处理以及 ...

  5. Vue + Element 实现按钮指定间隔时间点击

    1.业务需求 需要加一个按钮,调用第三方API,按钮十分钟之内只能点击一次,刷新页面也只能点击一次 2.思路 加一个本地缓存的时间戳,通过时间戳计算指定时间内不能点击按钮 3.实现 1)vue页面 & ...

  6. Windows 提权-RunAs

    本文通过 Google 翻译 RunAs – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 导航 0 前言 ...

  7. TypeError: 'NoneType' object is not iterable 一次错误场景

    TypeError: 'NoneType' object is not iterable 源码 def get_url(lines): urls=[] for line in lines: if 'i ...

  8. python实现排列组合--itertools

    这是一个python自带的工具集,简单好用功能强大,能够大大提升编写代码效率. 功能不止排列组合,其他的用用加深理解了再整理. 官方文档:https://docs.python.org/zh-cn/3 ...

  9. PVE虚拟机安装详解

    前言 PVE,全称Proxmox Virtual Environment,是基于Debian的Linux系统,虚拟机内核为KVM.硬件兼容性优秀.界面功能不强,很多操作要靠命令行,但扩展能力几乎是无限 ...

  10. 【python-数据分析】pandas数据提取

    import pandas as pd 1. 直接索引 df = pd.DataFrame({'AdmissionDate': ['2021-01-25','2021-01-22','2021-01- ...