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 中的某一个容器在运行时异常退出,被 ...
随机推荐
- ABP框架按条件导出
web层 .js导出事件: //导出为excel文档 $('#btn-export').click(function () { //得到查询的参数 var temp = { //这里的键的名字和控制器 ...
- Prometheus + Grafana
Prometheus ubuntu安装prometheus非常简单: apt update apt install prometheus systemctl enable prometheus sys ...
- 前端每日实战:63# 视频演示如何用纯 CSS 创作一台烤面包机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEBJRN 可交互视频 此视频是可 ...
- 特斯拉通过GitHub发布了这些源代码,用意何在?
特斯拉多年来一直在软件社区使用开源软件而不遵守许可证. 在迈向合规性的一步中,特斯拉现在正在发布其软件的一些部分,这对特斯拉黑客和安全研究人员来说非常有用. 特斯拉是一家软件强大的公司,它一直在使用大 ...
- hdu 1695: GCD 【莫比乌斯反演】
题目链接 这题求[1,n],[1,m]gcd为k的对数.而且没有顺序. 设F(n)为公约数为n的组数个数 f(n)为最大公约数为n的组数个数 然后在纸上手动验一下F(n)和f(n)的关系,直接套公式就 ...
- pycharm之black配置for python file(代码格式化工具)
一.介绍下black 源码;https://github.com/ambv/blackpei 二.具体步骤 第一步 安装black: 从命令行安装:例如Windows的cmd窗口,运行命令pip3 i ...
- git 往远端Dev推送
- Git使用包括切换分支
- SpringBoot编程思想
Spring Boot的特性 1).创建独立的Spring应用 2).直接嵌入Tomcat.Jetty或Undertow等Web容器(不需要部署WAR文件) 3).提供固化的starter依赖,简化构 ...
- .NET Core 使用 mongodb
1.运行环境 开发工具:Visual Studio 2017 JDK版本:.NET Core 2.0 项目管理工具:nuget 2.GITHUB地址 https://github.com/nbfujx ...