学习对象:kubectl explain pod.spec.volumespod.spec.containers.image.volumeMounts

介绍Volumes

容器内部也有自己的空间,但这里面保存的数据会在容器重启后就没了;所以为了保证容器重新启动时,数据保存不丢失,可以使用Volume挂载到pod上;另外,如果一个Pod中有多个容器,那么这个卷可以同时被所有的容器使用。

多容器的Pod中,容器之间无法互相访问彼此里面存的东西,所以可以用Volume来实现。

使用Volume首先要弄清楚:.spec.volumes.spec.containers.image.volumeMounts

spec:
containers:
- image: demoimage:latest
name: containername
volumeMounts:
- name: thisVolumeName # 和下面保持一致
mountPath: /data # 挂载在容器内的路径
readOnly: true
volumes:
- name: thisVolumeName # 保持一致
emptyDir: {} # 一种volume类型
  • .spec.volumes.name.spec.containers.image.volumeMounts.name这样就可以将volume挂载到容器的对应位置;
  • 挂载点路径不存在的话是会自动创建的,而且可以设置挂载点权限readOnly: true;

当我设置readOnly: true,在容器中看挂载文件夹的权限是777,但尝试写入时:

# touch aaa
touch: aaa: Read-only file system

Volume重要参数

持续更新ing

subPath

挂载到一个容器里已有的文件夹,如挂载volume到容器的/etc下,那么/etc下的所有原有文件都会被覆盖;

我们只是想把某少量文件,放到容器内原有的文件夹里,不对原有文件更改,

  1. K8s提供了 volumeMounts.subPath 属性用于挂在单个文件而不是整个目录。
spec:
containers:
- name: php
image: php:7.0-apache
volumeMounts:
- mountPath: /var/www/html/index.php
name: index
subPath: indexaaa.php
volumes:
- name: index
configMap:
name: php-index
items:
- key: index.php
path: indexaaa.php # configmap中的目录index.php对应的值给了相对路径 indexaaa.php,所以上面的subpath要用 相对路径indexaaa.php
  1. 用subpath挂载文件夹到容器内已存在文件夹里
spec:
containers:
- name: mysql
image: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: site-data
subPath: mysql # /var/lib/mysql/mysql
- name: php
image: php
volumeMounts:
- mountPath: /var/www/html
name: site-data
subPath: html #
volumes:
- name: site-data
persistentVolumeClaim: xxx

Volume的类型

目标对象:kubectl explain pod.spec.volumes

volume有太多类型,会详细介绍一些,官网有每一种Volume的具体使用方式 https://v1-18.docs.kubernetes.io/zh/docs/concepts/storage/volumes/:

EmptyDir

emptyDir卷对于在同一个pod中运行的容器之间共享文件特别有用。但是它用于将数据临时写入磁盘,当删除pod时卷的数据就会丢失。

使用emptyDir

spec:
containers:
- image: luksa/fortune
name: html-generator
volumeMounts:
- name: html
mountPath: /var/htdocs
volumes:
- name: html
emptyDir: {}

使用emptyDir创建的volume实际是在节点磁盘上创建的,我们可以将这个暂时存在的volume(tmfs)创建在内存上:

  volumes:
- name: html
emptyDir: {}
medium: Memory

HostPath:访问节点主机上的文件

HostPath卷需要和节点绑定,hostPath中的路径是Pod创建节点的绝对路径;

Pod删除后该路径下的数据不会被删除;

apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
nodeSelector:
kubernetes.io/hostname: nodename
containers:
- image: hub-mirror.c.163.com/library/busybox
name: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
volumeMounts:
- name: test
mountPath: /data/test
volumes:
- name: test
hostPath:
path: /home/rancher/test

NFS

这个和NFS的StorageClass不同,这种会将nfs的整个资源池挂载在pod里,而不是在里面创建一个文件夹给pod使用的这种形式。

spec:
containers:
- name: php
image: php:7.0-apache
volumeMounts:
- mountPath: /var/www/html/index.php
name: index
subPath: index.php

ISCSI

建议先使用:kubectl explain pod.spec.volumes.iscsi

spec:
volumes:
- name: iscsipd-rw
iscsi:
targetPortal: 10.0.2.15:3260
portals: ['10.0.2.16:3260', '10.0.2.17:3260'] # 没有多个可以省略
iqn: iqn.2001-04.com.example:storage.kube.sys1.xyz # iscsi target端的iqn
lun: 0
fsType: ext4
readOnly: true

K8s中的volumes-容器数据存放类型及位置的更多相关文章

  1. K8s中的多容器Pod和Pod内容器间通信

    容器(Container)常被用来解决比如微服务的单个问题,但在实际场景中,问题的解决往往需要多容器方案.本文会讨论将多个容器整合进单个Kubernetes Pod 中,以及Pod中的容器之间是如何通 ...

  2. k8s中pod的容器日志查看命令

    如果容器已经崩溃停止,您可以仍然使用 kubectl logs --previous 获取该容器的日志,只不过需要添加参数 --previous. 如果 Pod 中包含多个容器,而您想要看其中某一个容 ...

  3. k8s中初始化容器(init container)的作用及其使用方法

    概述 在容器的部署过程中,有的时候需要在容器运行之前进行一些预配置的工作,比如下载配置,判断某些服务是否启动,修改配置等一些准备的工作,想要实现这些功能,在k8s中可以使用初始化容器,在应用容器运行之 ...

  4. k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景

    k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...

  5. 06006_redis数据存储类型——String

    1.概述 (1)字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等: (2)在Redis中 ...

  6. 直接在安装了redis的Linux机器上操作redis数据存储类型--String类型

    一.概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型 ...

  7. Docker数据管理-数据卷 data volumes和数据卷容器data volumes containers的使用详解

    此文来源于:https://yq.aliyun.com/ziliao/43471 参考原文件之外,做了些修改. Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录 ...

  8. python小白——进阶之路——day3天-———容器类型数据+Number类型强制类型转换

    -->Number 部分 int :     整型   浮点型 布尔类型  纯数字字符串 float:    整型   浮点型 布尔类型  纯数字字符串 complex:  整型   浮点型 布 ...

  9. 微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG

    开篇介绍 这是今天在帮别人看一个 2008R2 版本的项目时发现的一个 Bug,这个 Bug 在 SQL SERVER 2012 有的版本中可能已经解决,但在论坛上看到有的仍然存在. 在 SQL SE ...

随机推荐

  1. C语言程序设计:二分查找(折半查找)

    目录 C语言程序设计:二分查找(折半查找) 1.什么是二分查找 2.二分查找的优点 3.二分查找的缺点 4.二分查找原理 5.源代码实现 6.后话 C语言程序设计:二分查找(折半查找) 1.什么是二分 ...

  2. LuoguP7059 [NWRRC2015]Lucky Chances 题解

    Content 有一个名叫 Lucky chances 的游戏,游戏一开始给出一个 \(r\times c\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...

  3. java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:

    什么是Queue集合: Queue用于模拟队列这种数据结构,队列通常是"先进先出"(FIFO)的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素.    ...

  4. [源码解析] PyTorch 分布式之弹性训练(3)---代理

    [源码解析] PyTorch 分布式之弹性训练(3)---代理 目录 [源码解析] PyTorch 分布式之弹性训练(3)---代理 0x00 摘要 0x01 总体背景 1.1 功能分离 1.2 Re ...

  5. JAVA在JDK1.8中Stream流的使用

    Stream流的map使用 转换大写 List<String> list3 = Arrays.asList("zhangSan", "liSi", ...

  6. 【LeetCode】485. Max Consecutive Ones 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...

  7. 【LeetCode】16. 3Sum Closest 最接近的三数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:3sum, three sum, 三数之和,题解,lee ...

  8. [源码解析] PyTorch 分布式之弹性训练(5)---Rendezvous 引擎

    [源码解析] PyTorch 分布式之弹性训练(5)---Rendezvous 引擎 目录 [源码解析] PyTorch 分布式之弹性训练(5)---Rendezvous 引擎 0x00 摘要 0x0 ...

  9. freeswitch APR-UTIL库线程池实现分析

    概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. APR库在之前的文章中已经介绍过了,APR-UTIL库是和APR并列的工具库,它们都是由APACHE开源出来 ...

  10. [C++]C++四舍五入保留到n位小数

    #include <sstream> #include <iostream> #include <iomanip> using namespace std; /** ...