k8s之数据存储
查看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之数据存储的更多相关文章
- k8s之数据存储-高级存储
PV和PVC 前面已经学习了使用NFS提供存储,此时就会要求用户会搭建NFS系统,并且会在yaml配置nf's,由于k8s支持的存储系统有很多,要求客户全部掌握,显然不现实.为了能够屏蔽底层存储实现的 ...
- k8s之数据存储-配置存储
ConfigMap configmap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的 创建configmap.yaml,内容如下 apiVersion: v1 kind: ConfigMap ...
- android 数据存储Ⅰ
本章讲述在Android开发中,简单的数据存储.涉及知识主要是SharedPreferences,及多页面切换ViewPager. 1.功能需求 做一个小应用.启动的时候有左右引导图.只有第一次启动时 ...
- 基于 K8S 构建数据中心操作系统
在 12 月 22 日 ECUG 的下午场 ,七牛云容器计算部技术总监袁晓沛为大家带来了主题为<基于 K8S 的 DCOS 之路>的精彩分享,向大家介绍了七牛容器云目前 K8S 的状况和产 ...
- Kubernetes 持久化数据存储 StorageClass
文章链接 PV 和 PVC 模式要先创建好 PV,然后再定义好 PVC 进行一对一的绑定.那么如果遇到大集群,也一一的创建吗?这样来说维护成本很高,工作量大.这个时候就有了 Kubernetes 提供 ...
- k8s 网络持久化存储之StorageClass(如何一步步实现动态持久化存储)
StorageClass的作用: 创建pv时,先要创建各种固定大小的PV,而这些PV都是手动创建的,当业务量上来时,需要创建很多的PV,过程非常麻烦. 而且开发人员在申请PVC资源时,还不一定有匹配条 ...
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
- Android之数据存储的五种方法
1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...
- Android之网络数据存储
一.网络保存数据介绍 可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中. 用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法. 本文利用LeanCloud ...
- Android之文件数据存储
一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...
随机推荐
- 幻兽帕鲁/Palworld/支持网络联机 v0.1.5.1
游戏介绍 在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. 注意事项 先启动STEAM客户端,在 ...
- MyBatisPlus - [07] Q&A
题记部分 001 || Public Key Retrieval is not allowed 通常出现在使用JDBC连接数据库时,特别时在尝试通过SSL/TLS加密连接到MySQL或MariaDB数 ...
- 从零构建你的第一个RESTful API:HTTP协议与API设计超图解指南 🌐
title: 从零构建你的第一个RESTful API:HTTP协议与API设计超图解指南 date: 2025/2/26 updated: 2025/2/26 author: cmdragon ex ...
- Flink学习(十八) 状态管理与状态编程
Flink中的状态 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态:可以认为状态就是一个本地变量,可以被任务的业务逻辑访问:Flink会进行状态管理,包括状态一致性,故障处理以及 ...
- Vue + Element 实现按钮指定间隔时间点击
1.业务需求 需要加一个按钮,调用第三方API,按钮十分钟之内只能点击一次,刷新页面也只能点击一次 2.思路 加一个本地缓存的时间戳,通过时间戳计算指定时间内不能点击按钮 3.实现 1)vue页面 & ...
- Windows 提权-RunAs
本文通过 Google 翻译 RunAs – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 导航 0 前言 ...
- TypeError: 'NoneType' object is not iterable 一次错误场景
TypeError: 'NoneType' object is not iterable 源码 def get_url(lines): urls=[] for line in lines: if 'i ...
- python实现排列组合--itertools
这是一个python自带的工具集,简单好用功能强大,能够大大提升编写代码效率. 功能不止排列组合,其他的用用加深理解了再整理. 官方文档:https://docs.python.org/zh-cn/3 ...
- PVE虚拟机安装详解
前言 PVE,全称Proxmox Virtual Environment,是基于Debian的Linux系统,虚拟机内核为KVM.硬件兼容性优秀.界面功能不强,很多操作要靠命令行,但扩展能力几乎是无限 ...
- 【python-数据分析】pandas数据提取
import pandas as pd 1. 直接索引 df = pd.DataFrame({'AdmissionDate': ['2021-01-25','2021-01-22','2021-01- ...