存储卷查看: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中

最新文章

  1. 为什么document.firstChild找到的不是html节点
  2. SharePoint 2013 搜索高级配置(Search Scope)
  3. Linux服务器使用命令操作MySQL插入数据乱码问题
  4. exception is org.hibernate.exception.DataException: Could not execute JDBC batch update at
  5. 炼数成金hadoop视频干货06-10
  6. gwt 创建 超链接cell (HyperTextCell)
  7. ubuntu12.04下使用qemu模拟mips处理器安装debian
  8. 如何使用chown?
  9. gitlab 安装报错:Could not find modernizr-2.6.2 in any of the sources
  10. 列举一些常见的Python HTTP服务器
  11. SQL Server 审计操作概念
  12. JAVA异步加回调的例子
  13. js设计模式(六)---组合模式
  14. Spring 学习——Resources接口
  15. JavaScript进阶系列01,函数的声明,函数参数,函数闭包
  16. sql用逗号连接多张表对应哪个join?
  17. Python3.5 学习十二 数据库介绍
  18. [LeetCode]Maximum Subarray题解
  19. PHP 基础函数(四)回调函数
  20. 【并查集】POJ2236-Wireless Network

热门文章

  1. ASE &quot;黄金点游戏&quot;
  2. valueOf()对象返回值
  3. Failed to load C:\ProgramFilesTwo\Android\sdk\build-tools\27.0.3\lib\dx.jar
  4. 06.Linux-RedHat系统网卡服务连不上活跃连接路径变化
  5. CentOS-7 开放80端口
  6. 微信小程序学习二 微信小程序的项目结构
  7. [BZOJ4278] [ONTAK2015]Tasowanie 贪心+后缀数组
  8. controllerpom
  9. 每天一个linux命令:which(17)
  10. 基于oracle 的PL/SQL编程 - 存储过程