一、存储卷的类型

  • emptyDir:在宿主机上分一块内存空间给pod当做存储空间
  • hostPath:在宿主机上分一块磁盘空间给pod当做存储空间
  • 网络存储:
    • SAN:iSCSI,FC
    • NAS:nfs,cifs
    • 分布式存储:glusterfs,rbd,cephfs,...
    • 云存储:EBS,Azure,Disk
# kubectl explain  pods.spec.volumes  #查看k8s支持的存储

二、emptyDir

apiVersion: v1
kind: Pod
metadata:name: pod-vol-demonamespace: defaultlabels:app: myapptier: frontendannotations:dongfei.tech/created-by: "cluster admin"
spec:containers:- name: myappimage: dongfeimg/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80volumeMounts:- name: htmlvomumesmountPath: /data/web/html2/volumes:- name: htmlvomumesemptyDir: medium: ""  #使用宿主机内存当做磁盘挂载sizeLimit: "1024"  #限制使用的内存

三、hostPath

apiVersion: v1
kind: Pod
metadata:name: pod-vol-hostpathnamespace: default
spec:containers:- name: myappimage: dongfeimg/myapp:v1volumeMounts:- name: htmlmountPath: /usr/share/nginx/html/volumes:- name: htmlhostPath:path: /data/pod/volume1  #node节点路径type: DirectoryOrCreate  #文件夹不存在则创建

四、nfs

  • 搭建/测试nfs-server
# yum install nfs-utils -y
# mkdir /data/volumes/
# vim /etc/exports
/data/volumes   192.168.100.0/24(rw,no_root_squash)
# systemctl start nfs
# systemctl enable nfs# mount -t nfs 192.168.100.1:/data/volumes /mnt/
apiVersion: v1
kind: Pod
metadata:name: pod-vol-nfsnamespace: default
spec:containers:- name: myappimage: dongfeimg/myapp:v1volumeMounts:- name: htmlmountPath: /usr/share/nginx/html/volumes:- name: htmlnfs:path: /data/volumesserver: 192.168.100.1

五、pv和pvc

# kubectl explain pv
# kubectl explain pvc
# kubectl get pv
# kubectl get pvc

1、提前准备PV的方式

  • 准备存储空间
# mkdir -p /data/volumes/v{1,2,3,4,5}
# vim /etc/exports
/data/volumes/v1        192.168.100.0/24(rw,no_root_squash)
/data/volumes/v2        192.168.100.0/24(rw,no_root_squash)
/data/volumes/v3        192.168.100.0/24(rw,no_root_squash)
/data/volumes/v4        192.168.100.0/24(rw,no_root_squash)
/data/volumes/v5        192.168.100.0/24(rw,no_root_squash)
# exportfs -arv
# showmount -e
  • 创建pv

访问模型(accessModes <[]string>):https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes

apiVersion: v1
kind: PersistentVolume
metadata:name: pv001labels:name: pv001
spec:nfs:path: /data/volumes/v1server: 192.168.100.1accessModes: ["ReadWriteMany","ReadWriteOnce"]capacity:storage: 3Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002labels:name: pv002
spec:nfs:path: /data/volumes/v2server: 192.168.100.1accessModes: ["ReadWriteOnce"]capacity:storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/volumes/v3server: 192.168.100.1accessModes: ["ReadWriteOnce"]capacity:storage: 50Gi
  • 创建pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc001namespace: default
spec:accessModes: ["ReadWriteOnce"]resources: requests: storage: 6Gi  #要求绑定大于6G的pv
---
apiVersion: v1
kind: Pod
metadata:name: pod-vol-pvcnamespace: default
spec:containers:- name: myappimage: dongfeimg/myapp:v1volumeMounts:- name: htmlmountPath: /usr/share/nginx/html/volumes:- name: htmlpersistentVolumeClaim:claimName: pvc001

2、按pvc需要自动创建pv

  • 需要支持resfull风格api的存储来请求动态创建存储,实现动态请求创建pv

六、configmap和secret

  • secret和configmap是两个特殊的存储卷,用于用户将集群外的配置注入pod
  • secret和configmap的功能相同,configmap以明文存储,secret是用base64编码存放

配置容器化应用的方式:

  1. 自定义命令行参数:args: []
  2. 把配置文件直接copy进镜像
  3. 环境变量加载配置
    1. cloud native的应用程序一般可通过环境变量加载配置
    2. 通过entrypoint脚本来预处理变量为配置文件中的配置信息
  4. 存储卷
# kubectl explain cm
  • 命令行直接创建cm
# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.dongfei.tech
# kubectl get cm
# kubectl describe cm nginx-config
  • 命令行创建secret
# kubectl create secret generic mysql-root-password --from-literal=password=My@Pass
# kubectl get secret
# kubectl describe secret mysql-root-password
# kubectl get secret mysql-root-password -o yaml
# echo TXlAUGFzcw== |base64 -d  #解码
My@Pass
  • 将配置文件创建为cm
# cat www.conf
server {server_name myapp.dongfei.tech;listen 80;root /data/web/html;
}
# kubectl create configmap nginx-www --from-file=./www.conf  #不指定key则将文件名当做key,文件内容当做value
  • 将cm通过环境变量注入pod
apiVersion: v1
kind: Pod
metadata:name: pod-cm-1namespace: defaultlabels:app: myapptier: frontendannotations:dongfei.tech/created-by: "cluster admin"
spec:containers:- name: myappimage: dongfeimg/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80env:- name: NGINX_SERVER_PORTvalueFrom:configMapKeyRef:name: nginx-configkey: nginx_port- name: NGINX_SERVER_NAMEvalueFrom:configMapKeyRef:name: nginx-configkey: server_name
  • 将cm通过存储卷方式以文件注入容器
apiVersion: v1
kind: Pod
metadata:name: pod-cm-2namespace: defaultlabels:app: myapptier: frontendannotations:dongfei.tech/created-by: "cluster admin"
spec:containers:- name: myappimage: dongfeimg/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80volumeMounts:- name: nginxconfmountPath: /etc/nginx/conf.d/readOnly: truevolumes:- name: nginxconfconfigMap:name: nginx-www
  • 将secret通过环境变量方式注入容器
apiVersion: v1
kind: Pod
metadata:name: pod-secret-1namespace: defaultlabels:app: myapptier: frontendannotations:dongfei.tech/created-by: "cluster admin"
spec:containers:- name: myappimage: dongfeimg/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-root-passwordkey: password

转载于:https://www.cnblogs.com/L-dongf/p/11439882.html

8、kubernetes之存储卷资源相关推荐

  1. Kubernetes 本地存储卷 pod volume emptyDir

    Volume 本节我们讨论 Kubernetes 的存储模型 Volume,学习如何将各种持久化存储映射到容器. 我们经常会说:容器和 Pod 是短暂的. 其含义是它们的生命周期可能很短,会被频繁地销 ...

  2. Kubernetes—动态存储卷配置(StorageClass资源)(十二)

    StorageClass的介绍   StorageClass是对存储资源的一个抽象定义.与静态模式的存储卷配置(就是集群管理员手动去创建持久卷PV),StorageClass是一种动态模式的存储卷配置 ...

  3. 资源利用率监控与存储卷(pv/pvc)

    官网:https://kubernetes.io/zh/ 一.资源利用率的概述 k8s容器创建的时候是随机分配的,如果随机分配时,有一个节点分配得比较多时,则会出现卡顿等等的事情: 1.metrics ...

  4. 阿里云Kubernetes CSI实践—NAS动态存储卷使用

    1. 前言 NAS存储盘能将nfs(网络文件系统)挂载到你的Pod中,阿里云Kubernetes CSI支持静态存储卷挂载和动态存储卷挂载2种方式, 在静态存储卷挂载的方式中,通常需要手动编辑和创建一 ...

  5. @kubernetes(k8s)数据持久化Volume存储卷(emptyDir、hostPath、NFS、StorageClass)

    文章目录 kubernetes(k8s)数据持久化Volume 一.数据持久化 1.Vlolume概述 2.数据卷的分类 3.常用的四种数据卷 4.Pod使用Volume步骤: 5. volume基本 ...

  6. kubernetes系列12—二个特色的存储卷configmap和secret

    本文收录在容器技术学习系列文章总目录 1.configmap 1.1 认识configmap ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件.ConfigMa ...

  7. kubernetes系列10—存储卷详解

    kubernetes系列10-存储卷详解 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kub ...

  8. Kubernetes(K8s)基本概念:Volume(存储卷)、Persistent Volume

    Kubernetes(K8s)基本概念:Volume(存储卷) 一.Volume(存储卷) Volume是Pod中能够被多个容器访问的共享目录. K8s中的Volume定义在Pod上,然后被一个Pod ...

  9. 为什么Kubernetes的存储如此艰难?

    随着像Kubernetes这样的容器编排工具的大火,应用程序的开发与部署方式正经历着一场巨大的变革.微服务体系结构的兴起,以及从开发人员的角度,将基础架构与应用程序逻辑间相互解耦,使得开发人员越来越关 ...

  10. 云原生存储详解:容器存储与 K8s 存储卷

    作者 | 阚俊宝 阿里云技术专家 导读:云原生存储详解系列文章将从云原生存储服务的概念.特点.需求.原理.使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战.本文为该系列文章的第二篇,会对容 ...

最新文章

  1. mysql构建镜像时写入密码_用Dockerfile手动创建mysql5.7主从镜像
  2. mysql5.7.20非安装版_mysql 5.7.20\5.7.21 免安装版安装配置教程
  3. spring的aop注解配置(了解)
  4. ​Cookie 从入门到进阶:一文彻底弄懂其原理以及应用
  5. 按钮开关java代码,Android自定义实现开关按钮代码
  6. Android实现支持缩放平移图片
  7. matlab 多重循环在最外层加断点_循环优化之循环分块(loop tiling)
  8. 升级php7_PHP 5.6 已结束安全支持,你升级到 PHP 7 系列了吗?
  9. MySQL安装与java配合
  10. 语音通话视频通话前端_无需互联网即可进行数十亿视频通话
  11. 数学分析教程(科大)——1.7笔记+习题
  12. Linux挂载报错:Mount is denied because the NTFS volume is already exclusively opened. The volume may be a
  13. P32-前端基础-CSS盒子尺寸box-sizing: border-box
  14. lua搭建ui_[专栏作家] Lua写UI的一些使用心得
  15. mysql重叠的词_举例说明叠音词,重叠式复合词,词的重叠,三者有何不同?
  16. Redis上踩过的一些坑-美团
  17. sql server 函數
  18. EXCEL表格-系统时间及进度自动记录工具制作
  19. HowTo create a basic Maphack
  20. Python爬虫实践(入门篇)——抓取《天使降临到我身边》图片

热门文章

  1. 30 个 ElasticSearch 调优知识点,都给你整理好了!
  2. 你还在用 Date?快使用 LocalDateTime 了!
  3. 2017年最具价值的十大开源项目:tensorflow 第一
  4. 小米终于开始对外输出了!
  5. 移动开发者的未来在哪里?
  6. java 配置文件设计,在设计注册控制器中添加用户配置文件
  7. 归并排序验证性实验_性能优化技巧:有序归并
  8. win7上python2.7连接mysql数据库
  9. 百度web前端面试2015.10.18
  10. 面向对象设计模式与原则