查看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. 2. MySQL的数据目录(详解讲解)

    2. MySQL的数据目录(详解讲解) @ 目录 2. MySQL的数据目录(详解讲解) 1. MySQL8 的主要目录结构 1.1 相关命令目录 1.2 配置文件目录 2. 数据库和文件系统的关系 ...

  2. Deepseek学习随笔(5)--- DeepSeek 在职场中的应用

    自动化办公 在职场中,DeepSeek 可以帮助自动化办公流程,如生成日报.撰写邮件等: 日报生成:请根据今日工作内容生成一份日报 DeepSeek 会生成一份简洁的工作日报,帮助你总结当天的工作内容 ...

  3. Java进阶 - [1-5] 集合容器

    ArrayList add 1.先确认是否需要扩容,如果需要,则进行扩容操作ensureExplicitCapacity. 2.进行赋值 elementData[size++] = e; 扩容 1.如 ...

  4. factor

    factor easy_factor1 task.py from Crypto.Util.number import * from Crypto.Util.Padding import * from ...

  5. next.js 添加 PWA 渐进式WEB应用(service-worker) 支持

    本文仅作为 next 系列文章中的一部分,其他 next 文章参考: https://blog.jijian.link/categories/nextjs/ 去 github 搜索了一把,估计是我关键 ...

  6. idea 导入普通的项目后,无法发布

    之前一直都是在eclipse开发,现在改idea,但是很多隐藏的功能,都不晓得在哪里找到. 问题: 新导入一个spring 项目(没有maven),在界面上看是没有问题,但是使用tomcat部署项目的 ...

  7. js发送get 、post请求

    前言 我们经常会用到js发送网络请求,这里用到XMLHttpRequest,主要是为了考虑早期的IE.分为三步:创建需要的对象.连接和发送.接收. GET请求 var httpRequest = ne ...

  8. 编写你的第一个 Django 应用程序,第7部分

    本教程从教程 6 停止的地方开始.我们将继续使用网络投票应用程序,并将专注于自定义 Django 自动生成的管理站点,这是我们在教程 2 中首次探索的. 一.自定义管理表单 通过用 admin.sit ...

  9. 如何删除Docker Swarm中的Node

    好吧,我又回来了...断了那么久主要是因为懒...现在有空会更新一些docker相关的知识.本文主要是总结下在工作中需要管理Docker Swarm中的Node遇到的问题:如何删除一个Swarm中的N ...

  10. [每日算法 - 华为机试] leetcode20 :有效的括号 「栈」

    入口 力扣https://leetcode.cn/problems/valid-parentheses/submissions/ 题目描述 给定一个只包括 '(',')','{','}','[','] ...