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环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...
随机推荐
- 探秘Transformer系列之(3)---数据处理
探秘Transformer系列之(3)---数据处理 接下来三篇偏重于工程,内容略少,大家可以当作甜点 _. 0x00 概要 有研究人员认为,大模型的认知框架看起来十分接近卡尔·弗里斯顿(Karl F ...
- Kafka - 分布式消息队列
Kafka简介 Kafka原理 Kafka使用 Kafka简介 概念 基于发布/订阅的分布式消息系统 由Linkedin开发,用Scala语言编写 特性 消息持久化:采用时间复杂度O(1)的磁盘存储结 ...
- git安装教程以及生成git ssh key
问题 GitHub拉取代码需要SSH,总是忘记命令,现网百度.记录下来,以后靠自己的博文 第一步 安装git 地址: https://git-scm.com/download/win 安装它 第二步 ...
- C# 私钥加密,公钥解密
/// <summary> /// RSA加密的密匙结构 公钥和私匙 /// </summary> public struct RSAKey { public string P ...
- xxe学习笔记
什么是xxe XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的.例如PHP中的simp ...
- redmine 用户没有状态内容
- pandas 如何移动列的位置
实现效果 原来备注列在第二列 代码: mid=df['备注'] #取备注列的值 df.pop('备注') #删除备注列 df.insert(4,'备注',mid) #插入备注列
- ModuleNotFoundError: No module named '_ctypes' when Python3
前言 运行 python 报错:ModuleNotFoundError: No module named '_ctypes' when using Value from module multipro ...
- pandas(进阶操作)-- 政治献金项目数据分析
博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jup ...
- 【SpringMVC】使用 @RequestMapping 映射请求
使用 @RequestMapping 映射请求 Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求 在控制器的类定义及方法定义处都可标注 @Requ ...