k8s的存储卷
存储卷查看:kubectl explain pods.spec.volumes
一、简单的存储方式
1)2个容器之间共享存储.。(删除则数据消失)
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
annotations:
magedu.com/created-by: "clusten admin"
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort:
volumeMounts:
- name: html
mountPath: /data/web/html/
- name: busybox
image: busybox:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /data/
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
volumes:
- name: html
emptyDir: {}
pod-vol-demo.yaml
创建容器
[root@master volume]# kubectl apply -f pod-vol-demo.yaml
pod/pod-demo created
进入容器测试
进入其中一个创建数据
[root@master volume]# kubectl exec -it pod-demo -c busybox -- /bin/sh
/ #
/ # echo $(date) >> /data/index.html
/ # echo $(date) >> /data/index.html
/ # cat /data/index.html
Sun Jun :: UTC
Sun Jun :: UTC
进入第二查看数据
[root@master volume]# kubectl exec -it pod-demo -c myapp -- /bin/sh
/ # cat /data/web/html/index.html
Sun Jun :: UTC
Sun Jun :: UTC
2)根据2个容器的存储,一个容器创造数据,一个数据读取数据。(删除则数据消失)
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
annotations:
magedu.com/created-by: "clusten admin"
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort:
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html/
- name: busybox
image: busybox:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: html
mountPath: /data/
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date) >> /data/index.html; sleep 2; done"]
volumes:
- name: html
emptyDir: {}
pod-vol-demo.yaml
读取测试
[root@master volume]# kubectl apply -f pod-vol-demo.yaml
pod/pod-demo created
[root@master volume]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo / Running 10s 10.244.2.8 node01 <none> <none>
[root@master volume]# curl 10.244.2.8
Sun Jun :: UTC
Sun Jun :: UTC
Sun Jun :: UTC
Sun Jun :: UTC
Sun Jun :: UTC
Sun Jun :: UTC
Sun Jun :: UTC
3)将内容存储与节点机器上
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:
path: /data/pod/volume1
type: DirectoryOrCreate
pod-hostpath-vol.yaml
创建容器
[root@master volume]# kubectl apply -f pod-hostpath-vol.yaml
pod/pod-vol-hostpath created
[root@master volume]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-vol-hostpath / Running 51s 10.244.2.9 node01 <none> <none>
进入容器内创建数据,则可在存储卷中查看到数据内容
[root@master volume]# kubectl exec -it pod-vol-hostpath /bin/sh
/ # cd /usr/share/nginx/html
/usr/share/nginx/html # echo "hello world" >> index.html
[root@master volume]# curl 10.244.2.9
hello world 登陆到 node01 服务器
[root@node01 ~]# cat /data/pod/volume1/index.html
hello world
3.1)测试删除了容器,内容是否还在
[root@master volume]# kubectl delete -f pod-hostpath-vol.yaml
pod "pod-vol-hostpath" deleted
[root@master volume]# kubectl get pods
No resources found.
[root@master volume]# kubectl apply -f pod-hostpath-vol.yaml
pod/pod-vol-hostpath created
[root@master volume]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-vol-hostpath / Running 39s 10.244.2.10 node01 <none> <none>
[root@master volume]# curl 10.244.2.10
hello world
二、使用nfs来做存储卷
1)先测试 nfs 共享存储的可用性
1.1)node 机器和pv机器编辑hosts主机解析
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.5 master
192.168.1.6 node01 n1
192.168.1.7 node02 n2
192.168.1.8 pv01 p1
cat /etc/hosts
1.2)pv 机器安卓nfs 并启动
[root@pvz01 ~]# yum install -y nfs-utils
[root@pvz01 ~]# mkdir -pv /data/volumes
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/volumes’
[root@pvz01 ~]# cat /etc/exports
/data/volumes 192.168.1.0/(rw,no_root_squash)
[root@pvz01 ~]# systemctl start nfs
[root@pvz01 ~]# ss -tnl|grep
LISTEN *: *:*
LISTEN ::: :::
节点机器也需要安装nfs,并测试挂载服务
[root@node01 ~]# yum install -y nfs-utils
[root@node01 ~]# mount -t nfs pv01:/data/volumes /mnt
[root@node01 ~]# df -h|grep mnt
pv01:/data/volumes 19G .1G 18G % /mnt
[root@node01 ~]# df -h|grep mnt
pv01:/data/volumes 19G .1G 18G % /mnt
1.3)挂在服务正常可用。取消挂载
[root@node01 ~]# umount /mnt
[root@node01 ~]# df -h|grep mnt
2)使用k8s来管理节点调用 nfs的存储功能
[root@master ~]# cat /etc/hosts|grep 192.168.1.8
192.168.1.8 pv01 p1 pv01.test.com
2.1)master机器编辑 相应的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:
path: /data/volumes
server: pv01.test.com
pod-vol-nfs.yaml
2.2)创建该pod
[root@master nfs_volume]# kubectl apply -f pod-vol-nfs.yaml
pod/pod-vol-nfs created
[root@master nfs_volume]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-vol-nfs / Running 10s 10.244.2.11 node01 <none> <none>
2.3)进入pv服务,在挂载卷下随便创建内容,进入访问测试
[root@pvz01 ~]# echo $(date) > /data/volumes/index.html
[root@pvz01 ~]# echo $(date) >> /data/volumes/index.html
[root@pvz01 ~]# echo $(date) >> /data/volumes/index.html [root@master nfs_volume]# curl 10.244.2.11
Sun Jun :: CST
Sun Jun :: CST
Sun Jun :: CST
三、pv 和 pvc的使用
1)在pv机器创建好存储卷
[root@pvz01 volumes]# ls
index.html
[root@pvz01 volumes]# mkdir v{,,,,}
[root@pvz01 volumes]# ls
index.html v1 v2 v3 v4 v5
[root@pvz01 volumes]# cat /etc/exports
/data/volumes/v1 192.168.1.0/(rw,no_root_squash)
/data/volumes/v2 192.168.1.0/(rw,no_root_squash)
/data/volumes/v3 192.168.1.0/(rw,no_root_squash)
/data/volumes/v4 192.168.1.0/(rw,no_root_squash)
/data/volumes/v5 192.168.1.0/(rw,no_root_squash)
[root@pvz01 volumes]# exportfs -arv
exporting 192.168.1.0/:/data/volumes/v5
exporting 192.168.1.0/:/data/volumes/v4
exporting 192.168.1.0/:/data/volumes/v3
exporting 192.168.1.0/:/data/volumes/v2
exporting 192.168.1.0/:/data/volumes/v1
[root@pvz01 volumes]# showmount -e
Export list for pvz01:
/data/volumes/v5 192.168.1.0/
/data/volumes/v4 192.168.1.0/
/data/volumes/v3 192.168.1.0/
/data/volumes/v2 192.168.1.0/
/data/volumes/v1 192.168.1.0/
2)创建pv 绑定pv机器上的存储卷
[root@master ~]# kubectl explain pv # pv 相关参数
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
spec:
nfs:
path: /data/volumes/v1
server: pv01.test.com
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv002
labels:
name: pv002
spec:
nfs:
path: /data/volumes/v2
server: pv01.test.com
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv003
labels:
name: pv003
spec:
nfs:
path: /data/volumes/v3
server: pv01.test.com
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv004
labels:
name: pv004
spec:
nfs:
path: /data/volumes/v4
server: pv01.test.com
accessModes: ["ReadWriteOnce"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv005
labels:
name: pv005
spec:
nfs:
path: /data/volumes/v5
server: pv01.test.com
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 5Gi
pv-demo.yaml
创建可利用的pv
[root@master volume]# kubectl apply -f pv-demo.yaml
persistentvolume/pv001 created
persistentvolume/pv002 created
persistentvolume/pv003 created
persistentvolume/pv004 created
persistentvolume/pv005 created
[root@master volume]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 2Gi RWO,RWX Retain Available 37s
pv002 2Gi RWO,RWX Retain Available 37s
pv003 1Gi RWO,RWX Retain Available 37s
pv004 5Gi RWO Retain Available 37s
pv005 5Gi RWO,RWX Retain Available 37s
3)定义pod资源, 使用pvc调用可利用的pv
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
namespace: default
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 4Gi
---
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:
- name: html
persistentVolumeClaim:
claimName: mypvc
pod-vol-pvc.yaml
创建pod的资源查看 pv 的情况
[root@master volume]# kubectl apply -f pod-vol-pvc.yaml
persistentvolumeclaim/mypvc unchanged
pod/pod-vol-pvc created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-vol-pvc / Running 6m16s
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 2Gi RWO,RWX Retain Available 22m
pv002 2Gi RWO,RWX Retain Available 22m
pv003 1Gi RWO,RWX Retain Available 22m
pv004 5Gi RWO Retain Available 22m
pv005 5Gi RWO,RWX Retain Bound default/mypvc 22m
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc Bound pv005 5Gi RWO,RWX 8m33s
此时根据调度算法,数据已经绑定在了pv005中
k8s的存储卷的更多相关文章
- k8s之存储卷及pvc
1.存储卷概述 因为pod是有生命周期的,pod一重启,里面的数据就没了,所以我们需要数据持久化存储,在k8s中,存储卷不属于容器,而是属于pod,也就是说同一个pod中的容器可以共享一个存储卷,存储 ...
- K8s的存储卷使用总结
K8s的存储卷: 它有四种存储卷: 1. emptyDir: 空目录,这种存储卷会随着Pod的删除而被清空,它一般作为缓存目录使用,或临时目录, 当做缓存目录时,通常会将一块内存空间映射到该目录上,让 ...
- k8s volume存储卷
k8s volume存储卷 介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价, ...
- k8s volume存储卷(四)
介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价,首先,kubernetes中的v ...
- k8s系列---存储卷pv/pvc。configMap/secert
因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...
- 12.k8s的存储卷创建过程
数据持久化需要数据卷.kubernetes生态提供海量的存储驱动和存储使用方式. [root@master song]# cat pod-demo.yml apiVersion: v1 kind: P ...
- Kubernetes学习之路(十六)之存储卷
目录 一.存储卷的概念和类型 二.emptyDir存储卷演示 三.hostPath存储卷演示 四.nfs共享存储卷演示 五.PVC和PV的概念 六.NFS使用PV和PVC 1.配置nfs存储 2.定义 ...
- k8s学习笔记之八:存储卷
第一章.前言 默认情况下容器的数据都是非持久化的, 在容器消亡以后数据也跟着丢失, 所以 Docker 提供了 Volume 机制以便将数据持久化存储. 类似的, Kubernetes 提供了更强大的 ...
- 从零开始入门 K8s | 应用存储和持久化数据卷:核心知识
作者 | 至天 阿里巴巴高级研发工程师 一.Volumes 介绍 Pod Volumes 首先来看一下 Pod Volumes 的使用场景: 场景一:如果 pod 中的某一个容器在运行时异常退出,被 ...
随机推荐
- Java JNA (一)—— 调用dll
Java调用C++动态链接库的方式很多,有jnative,jna等.这里介绍如何通过jna的方式调用动态链接库. 调用代码很简单,就是需要注意几个问题. 补充:如dll内部访问配置文件,需将配置文件放 ...
- smbsh - 允许用UNIX命令访问NT文件系统
总览 smbsh 描述 此程序是Samba套件的一部分. smbsh允许你用UNIX命令诸如ls,egrep和rcp等来访问NT文件系统.必须用动态链接的shell以便使smbsh工作正常. 从命令提 ...
- Mac brew 安装Postgres 开机自启动
以下所有命令在mac 终端执行 1.安装postgres brew install postgres 2.brew 安装的程序都可以在/usr/local/Cellar/下找到,去/usr/local ...
- 【学习笔记】圆方树(CF487E Tourists)
终于学了圆方树啦~\(≧▽≦)/~ 感谢y_immortal学长的博客和帮助 把他的博客挂在这里~ 点我传送到巨佬的博客QwQ! 首先我们来介绍一下圆方树能干什么呢qwq 1.将图上问题简化到树上问题 ...
- find按照文件大小查找
例如,find -size +1M:查找大于 1 MB 的文件.其他参数: b: 512-byte blocks. This is the default if no unit is specifie ...
- Window平台下tree 命令使用
WIndow 平台要想打印目录树,可以用cmd工具或者power shell 的tree命令实现 tree 命令格式和参数: TREE [drive:][path] [/F] [/A] /F 显示每个 ...
- 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)
代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...
- Angular JS - 3 - Angular JS 双向数据绑定
一 .数据绑定 1. 数据绑定: 数据从一个地方A转移(传递)到另一个地方B, 而且这个操作由框架来完成2. 双向数据绑定: 数据可以从View(视图层)流向Model(模型,也就是数据), 也可以从 ...
- c#消息窗体
C#模拟弹出窗体系统菜单介绍 using System.Runtime.InteropServices; ; ; ; ; ; ; const uint TPM_VCENTERALIGN = 0x10; ...
- mysql审计插件
Audit Plugin安装使用 原文: https://www.cnblogs.com/waynechou/p/mysql_audit.html#_label0 #有卸载方法 下载地址: htt ...