kubernetes 挂载传播

news2024/9/28 21:19:23

kubernetes 挂载传播

  • kubernetes 的 mountPropagation 翻译成中文就是挂载传播。挂载传播提供了共享卷挂载的能力, 它允许在同一个 Pod, 甚至同一个节点内, 在多个容器之间共享卷的挂载。 说白了就是在容器或 host 内的挂载目录中 再 mount 了一个别的挂载。

  • kubernetes 中 卷的挂载传播由 Container.volumeMountsmountPropagation 字段控制。它的值包含如下三种

    • None: - 这种卷挂载将不会收到任何后续由 host 创建的在这个卷上或其子目录上的挂载。同样的, 由容器创建的挂载在 host 上也是不可见的。这是默认的模式。这个其实很好理解, 就是容器内和 host 的后续挂载完全隔离
    • HostToContainer: - 这种卷挂载将会收到之后所有的由 host 创建在该卷上或其子目录上的挂载。换句话说, 如果 host 在卷挂载内挂载的任何内容, 在容器中都是可见的。同样, 如果任何具有 Bidirectional 的 Pod 挂载传播到该卷挂载上, 具有 HostToContainer 的挂载传播都可以看见
    • Bidirectional: - 这种挂载机制和 HostToContainer 类似。此外, 任何在容器中创建的挂载都会传播到 host, 然后传播到使用相同卷的所有 Pod 的所有容器。注意: Bidirectional 挂载传播是很危险的。可能会危害到 host 的操作系统。因此只有特权 securityContext: privileged: true 容器在允许使用它

在这里插入图片描述

mountPropagation: None

[root@k8s-master-1 mountPropagation]# cat mountPropagation_none.yaml 
apiVersion: v1
kind: Pod
metadata:
    name: mount-none
spec:
    containers:
    - name: busybox
      image: busybox:1.28
      command: ["/bin/sh","-c","sleep 300000"]
      volumeMounts:
      - name: testmount
        mountPath: /mnt
        mountPropagation: None
    volumes:
    - name: testmount
      hostPath:
        path: /data/mounttest
# 将本机的/var 目录挂载过来
	mount --bind /var /data/mounttest

# 本机查看目录,已挂载过来
[root@k8s-master-1 mountPropagation]# ls /data/mounttest/
adm  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp

# 查看容器内目录,可以发现宿主机挂载的目录在容器内并没有看到
[root@k8s-master-1 mountPropagation]# kubectl exec mount-none -- ls /mnt
[root@k8s-master-1 mountPropagation]# 

# 卸载挂载点
	umount /data/mounttest

mountPropagation: HostToContainer

[root@k8s-master-1 mountPropagation]# cat mountPropagation_hosttocontainer.yaml 
apiVersion: v1
kind: Pod
metadata:
    name: mount-host-to-container
spec:
    containers:
    - name: busybox
      image: busybox:1.28
      command: ["/bin/sh","-c","sleep 300000"]
      volumeMounts:
      - name: testmount
        mountPath: /mnt
        mountPropagation: HostToContainer
    volumes:
    - name: testmount
      hostPath:
        path: /data/mounttest
# 将本机的/var 目录挂载过来
	mount --bind /var /data/mounttest

# 本机查看目录,已挂载过来
[root@k8s-master-1 mountPropagation]# ls /data/mounttest/
adm  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp

# 查看容器文件夹内容,并创建一个文件,可见宿主机挂载的文件在容器内可见
[root@k8s-master-1 mountPropagation]# kubectl exec mount-host-to-container -- /bin/sh -c "touch /mnt/a.txt && ls /mnt"
adm  a.txt  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp

# 查看挂载点,宿主机也可见
[root@k8s-master-1 mountPropagation]# ls /data/mounttest/
adm  a.txt  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp

mountPropagation: Bidirectional

apiVersion: v1
kind: Pod
metadata:
    name: mount-bidir-a
spec:
    containers:
    - name: busybox
      image: busybox:1.28
      command: ["/bin/sh","-c","sleep 300000"]
      volumeMounts:
      - name: testmount
        mountPath: /mnt
        mountPropagation: Bidirectional
      securityContext:
        privileged: true
    volumes:
    - name: testmount
      hostPath:
        path: /data/mounttest
---
apiVersion: v1
kind: Pod
metadata:
    name: mount-bidir-b
spec:
    containers:
    - name: busybox
      image: busybox:1.28
      command: ["/bin/sh","-c","sleep 300000"]
      volumeMounts:
      - name: testmount
        mountPath: /mnt
        mountPropagation: Bidirectional
      securityContext:
        privileged: true
    volumes:
    - name: testmount
      hostPath:
        path: /data/mounttest
---
# 在容器mount-bidir-a创建挂载点
[root@k8s-master-1 mountPropagation]# kubectl exec mount-bidir-a -- /bin/sh -c "mount --bind /var /mnt && ls /mnt"
run
spool
www

# 在host 上查看目录, 这里可以看到已经将挂载传递到了host上
[root@k8s-master-1 mountPropagation]# ls /data/mounttest/
run  spool  www

# 查看mount-bidir-b挂载点,可以发现也已经将挂载传递到了 另一个容器b上
[root@k8s-master-1 mountPropagation]# kubectl exec mount-bidir-b -- ls /mnt
run
spool
www

linux mount 的几种类型

mount 分为下面几种:

  • shared mount: - 相当于上面所说的 Bidirectional 的挂载传播。
  • slave mount: - 每个 slave mount 都有一个 shared master mount, 挂载传播只能从 master -> slave, 等同于上面的 HostToContainer, host 是 master,container 是 slave。
  • private mount: - 很明显, private 就是相当于 None,挂载不会向任何一方传播。
  • unbindable mount: - 其实就是 unbindable private mount, 也就是不允许使用 –bind 的挂载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第18章 条件概率

第18章 条件概率 18.1蒙特霍尔困惑 对于上一章的三个门的问题,有一个漏洞。假设参赛者选择门A且门B后有一只山羊,刚好产生3个结果: 以上结果出现的概率分别是1/18,1/18,1/9。 在这些结果中,只有最后一个结果(C,A,B)&#xff0c…

Redis常见面试题(三)

目录 1、Redis String值最大存储多少? 2、Redis事务有什么用? 3、Redis事务相关的命令有哪几个? 4、Redis事务是原子性的吗? 5、Redis持久化有什么用? 6、Redis有哪几种持久化方式? 7、Redis持久化方式如何选择? 8、如何保证Redis中的数据都是热点数据? 9、Red…

vue前后端分离项目打包成app,部署成移动端

将vue项目打包成app,在手机上运行。 1. vue打包 npm run build 先将vue的前端项目打包成dist文件夹 2. 安装hbuilderX Hbuilder官网地址 3. hbuilderX 1)新建项目 我是vue的,所以直接选择的h5app,然后起个名字,选择路径。 2…

微服务实用篇6-分布式搜索elasticsearch篇2

今天我们继续学习分布式搜索引擎elasticsearch,今天主要学习四个模块,分别为DSL查询文档,搜索结果处理,RestClient查询文档,还有最好演示一个旅游案例。下面开始今天的学习吧。 目录 一、DSL查询文档 1.1、DSL查询分…

Hadoop学习----软件安装

Hadoop源码下载重新编译 软件下载:https://hadoop.apache.org/releases.html 建议是下载源码包。 源码包和官方编译安装包有什么不一样呢? 正常情况下,非生产环境直接使用官方编译安装包即可,但是官方提供的安装包不支持本地库。…

ANTLR4入门(二):图示说明eclipse安装Antlr4IDE插件的过程

如果你能正常通过Eclipse Market找到antlr4的插件并正常安装,可以忽略本文。 如果不能,那多半是因为网络问题导致安装Antlr4IDE插件时无法下载文件造成的。我就遇到了这个问题,无法下载的原因很复杂,我不想去深究了,我…

WPF/XAML关于x:key和x:name的区别,全面解读超详细

x:key和x:name的区别 x:Keyx:Name用于xaml Resources,ResourceDictionary用在ResourceDictionary以外任何地方使用key访问xaml指定对象使用name访问xaml对象标识资源创建和引用,存在于 ResourceDictionary 中的元素唯一标识对象元素,以便于从…

【Spring】SpringCloud

目录 一、SpringCloud 二、微服务介绍 1.系统架构演变 1.1 单体应用架构 1.2 垂直应用架构 1.3 分布式架构 1.4 SOA架构(面向服务的架构) 1.5 微服务架构(服务的原子化拆分) 2.微服务架构介绍 2.1 问题: 2.2…

与新手一起快速了解「什么是次世代」?

次世代(英文:Next Generation),源自日本语,即下一个时代,未来的时代。与传统游戏相比,次世代游戏是把次世代游戏开发技术融入到现代游戏之中,通过增加模型的面数和贴图的数据量并使用…

JDK8系列之使用Function函数式接口

一、函数式接口是jdk8的新特性之一&#xff0c;函数式接口是只包含一个抽象方法声明的接口。按分类主要分为四大接口类型: Function、Consumer、Predicate、Supplier。 接口参数返回值说明Supplier<T>无T供给型&#xff0c;无参&#xff0c;返回一个指定泛型的对象Consu…

设计解谜游戏的30堂课

设计解谜游戏的30堂课 文章目录1.什么是Eureka Moment&#xff1f;2.谜题与幽默是同构的3.最大限度提高Sparkle4.避免无意义的谜题5.惊喜是Sparkle的重要源泉6.有趣的事实是惊喜的源泉7.尤里卡时刻并不是自豪8.不同解密者所寻求的解密体验是不尽相同的9.尤里卡是可以分享的10.创…

OVS-DPDK

要使用 ovs-dpdk&#xff0c;需要在node上构建 DPDK 并使用相应的 DPDK flag重新构建 ovs。 OVS-DPDK需要从源码编译&#xff0c;因为高度依赖内核等所在机器的环境&#xff0c;并需要配置很多参数以达到高性能。这意味着很难提供一个ovs-dpdk docker镜像来满足所有情况。OVS-D…

推荐系统学习笔记-基于图的模型

由来 基于图的模型&#xff08; graph-based model &#xff09;是推荐系统中的重要内容。其实&#xff0c;很多研究人员把基于邻域的模型也称为基于图的模型&#xff0c;因为可以把基于邻域的模型看做基于图的模型的简单形式。 在研究基于图的模型之前&#xff0c;首先需要将…

毫米波传感器原理介绍:角度估计

前边两篇博文从距离和速度两个维度进行了介绍&#xff0c;本篇将沿着第三个维度&#xff0c;角度进行分析&#xff0c;这也是毫米波传感器原理介绍的最后一篇理论基础。还是老规矩&#xff0c;我们先把公式列出来。 假设雷达两个接收天线之间的距离为d&#xff0c;θ 是物体相…

IS-95前向链路系统误码率matlab仿真,包括扩频调制,匹配滤波,RAKE接收

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 前向链路指由基站发往移动台的无线通信链路&#xff0c;也称作下行链路。IS-95系统前向链路最多可以有64个同时传输的信道&#xff0c;它们是在PN序列上再采用正交的Walsh码进行区分的信道&#…

网上书店系统/书店管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

C51 ——433M 射频信号控制喇叭

遥控按下后信号怎么被接受接 接收后的表现 &#xff1a; 厂商会告诉我们 这款告诉我们 接收模块对应针脚输出高电平 。 遥控控制喇叭 #include "reg52.h" sbit switcher P1^1; // 把继电器IN口 接到 P1.1 sbit D0_ON P1^2; // 把433M 射频信号接收器D0 口 接到P1.…

postman上传文件(multipart/form-data请求)

postman上传文件&#xff08;multipart/form-data请求&#xff09; 背景 网页的form表单中&#xff0c;如果存在上传文件的表单&#xff0c;则需要将form标签设置enctype"multipart/form-data"属性&#xff0c;意思是将Content-Type设置成multipart/form-data。 那…

今日小惊喜

今日限定小惊喜&#xff0c;一抬头突然发现有花开。

ESP32基础应用之lvgl显示中文

文章目录1 工程简介2 工程实现2.1 制作字库2.2 为字库自作分区表2.3 将字库移植到lvgl工程中2.4 将字库myFont.bin烧录到分区表中2.5 编写程序测试3 存在问题1 工程简介 该工程在《ESP32基础应用之LVGL基础》之上实现中文的显示。 参考文章 《ESP32 IDF LVGL8.0 flash 外部字…