k8s之存储篇---数据卷-挂载
挂载是指将定义在 Pod 中的数据卷关联到容器,同一个 Pod 中的同一个数据卷可以被挂载到该 Pod 中的多个容器上。
数据卷内子路径
有时候我们需要在同一个 Pod 的不同容器间共享数据卷。使用 volumeMounts.subPath 属性,可以使容器在挂载数据卷时指向数据卷内部的一个子路径,而不是直接指向数据卷的根路径。
下面的例子中,一个 LAMP(Linux Apache Mysql PHP)应用的 Pod 使用了一个共享数据卷,HTML 内容映射到数据卷的 html 目录,数据库的内容映射到了 mysql 目录:
apiVersion: v1
kind: Pod
metadata:name: my-lamp-site
spec:containers:- name: mysqlimage: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalue: "rootpasswd"volumeMounts:- mountPath: /var/lib/mysqlname: site-datasubPath: mysqlreadOnly: false- name: phpimage: php:7.0-apachevolumeMounts:- mountPath: /var/www/htmlname: site-datasubPath: htmlreadOnly: falsevolumes:- name: site-datapersistentVolumeClaim:claimName: my-lamp-site-data
apiVersion: v1: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的 Kubernetes API 的版本。kind: Pod: 这表明我们正在定义一个 Pod 对象。metadata: 这是 Pod 对象的元数据部分,包含关于该 Pod 的信息,比如名称(name)。name: my-lamp-site: 这是 Pod 对象的名称。在这个例子中,它命名为 “my-lamp-site”。spec: 这是 Pod 对象的规范部分,定义了实际的 Pod 规则。containers: 这是一个包含容器定义的列表。name: mysql: 这是第一个容器的名称。image: mysql: 这指定了该容器要使用的 Docker 镜像,这里使用的是 MySQL 官方镜像。env: 这是一个环境变量列表。name: MYSQL_ROOT_PASSWORD: 这是一个环境变量的名称,表示 MySQL 的 root 用户的密码。value: "rootpasswd": 这是MYSQL_ROOT_PASSWORD环境变量的值,设置为 “rootpasswd”。
volumeMounts: 这是一个挂载卷的列表。mountPath: /var/lib/mysql: 这是卷要挂载到容器中的路径,表示 MySQL 数据库文件将被存储在这个路径下。name: site-data: 这是要挂载的卷的名称,与下面volumes中的定义对应。subPath: mysql: 这是卷在容器中挂载的子路径,表示 MySQL 数据将存储在/var/lib/mysql/mysql路径下。readOnly: false: 这表示卷是否以只读模式挂载。这里设置为 false,表示 MySQL 容器可以对卷进行读写操作。
name: php: 这是第二个容器的名称。image: php:7.0-apache: 这指定了该容器要使用的 Docker 镜像,这里使用的是带有 Apache 的 PHP 7.0 镜像。volumeMounts: 这是一个挂载卷的列表。mountPath: /var/www/html: 这是卷要挂载到容器中的路径,表示 PHP 代码将被存储在这个路径下。name: site-data: 这是要挂载的卷的名称,与下面volumes中的定义对应。subPath: html: 这是卷在容器中挂载的子路径,表示 PHP 代码将存储在/var/www/html/html路径下。readOnly: false: 这表示卷是否以只读模式挂载。这里设置为 false,表示 PHP 容器可以对卷进行读写操作。
volumes: 这是一个包含持久化存储卷定义的列表。name: site-data: 这是持久化存储卷的名称,与上面containers中的volumeMounts对应。persistentVolumeClaim: 这是一个持久卷声明(PersistentVolumeClaim)的定义,它将请求一个已经存在的持久化存储资源,该资源必须事先在 Kubernetes 中定义。claimName: my-lamp-site-data: 这是持久卷声明的名称,它表示这个 Pod 请求使用名称为 “my-lamp-site-data” 的持久化存储卷。
该 Pod 使用 subPathExpr 在 hostPath 数据卷 /var/log/pods 中创建了一个目录 pod1(该参数来自于Pod的名字)。此时,宿主机目录 /var/log/pods/pod1 挂载到了容器的 /logs 路径:
apiVersion: v1
kind: Pod
metadata:name: pod1
spec:containers:- name: container1env:- name: POD_NAMEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.nameimage: busyboxcommand: [ "sh", "-c", "while [ true ]; do echo 'Hello'; sleep 10; done | tee -a /logs/hello.txt" ]volumeMounts:- name: workdir1mountPath: /logssubPathExpr: $(POD_NAME)readOnly: falserestartPolicy: Nevervolumes:- name: workdir1hostPath:path: /var/log/pods
容器内路径
mountPath 数据卷被挂载到容器的路径,不能包含 :
权限
容器对挂载的数据卷是否具备读写权限,如果 readOnly 为 true,则只读,否则可以读写(为 false 或者不指定)。默认为 false
挂载传播
数据卷的挂载传播(Mount Propagation)由 Pod 的 spec.containers[*].volumeMounts.mountPropagation 字段控制。可选的取值有:
- None: 默认值。在数据卷被挂载到容器之后,此数据卷不会再接受任何后续宿主机或其他容器挂载到该数据卷对应目录下的子目录的挂载。同样的,在容器中向该数据卷对应目录挂载新目录时,宿主机也不能看到。对应 Linux 的
privatemount propagation 选项 Linux内核文档(opens new window) - HostToContainer:在数据卷被挂载到容器之后,宿主机向该数据卷对应目录添加挂载时,对容器是可见的。对应 Linux 的
rslavemount propagation 选项 Linux内核文档(opens new window) - Bidirectional:在数据卷被挂载到容器之后,宿主机向该数据卷对应目录添加挂载时,对容器是可见的;同时,从容器中向该数据卷创建挂载,同样也对宿主机可见。对应 Linux 的
rsharedmount propagation 选项 Linux内核文档
Bidirectional mount propagation 选项隐藏风险。如果在容器内进行不合适的挂载,可能影响宿主机的操作系统正常执行,因此,只有 privileged 容器才可以使用该选项。使用此选项时,建议对 Linux 内核的行为有所熟悉。此外,使用 Bidirectional 选项时,任何由 Pod 中容器在对应数据卷目录创建的挂载必须在容器终止时销毁(umounted)。
额外配置
在部分系统中(CoreOS、RedHat/Centos、Ubuntu),Docker 的 mount share 选项必须事先配置好,步骤如下:
-
编辑 Docker 的
systemdservice 文件,将MountFlags设定如下:MountFlags=shared或者移除
MountFlags=slave -
重启 Docker 守护进程:
sudo systemctl daemon-reload sudo systemctl restart docker
相关文章:
k8s之存储篇---数据卷-挂载
挂载是指将定义在 Pod 中的数据卷关联到容器,同一个 Pod 中的同一个数据卷可以被挂载到该 Pod 中的多个容器上。 数据卷内子路径 有时候我们需要在同一个 Pod 的不同容器间共享数据卷。使用 volumeMounts.subPath 属性,可以使容器在挂载数据卷时指向数…...
无涯教程-JavaScript - TDIST函数
The TDIST function replaces the T.DIST.2T & T.DIST.RT functions in Excel 2010. 描述 该函数返回学生t分布的百分点(概率),其中数值(x)是t的计算值,将为其计算百分点。 t分布用于小样本数据集的假设检验。使用此函数代替t分布的临界值表。 语法 TDIST(x,deg_fr…...
IP子网的划分
文章目录 一、子网掩码1. 产生背景2. 定义3. 分类 二、VLSM算法1. 得出下列参数2. 计算划分结果3. 举例子计算 三、常见子网划分对应关系四、练习IP编址题目需求解题1. 192.168.1.100/282. 172.16.0.58/263. 25.83.149.222/254. 100.100.243.18/205. 10.100.100.100/10 首先可以…...
弹性盒子的使用
一、定义 弹性盒子是一种用于按照布局元素的一维布局方法,它可以简便、完整、响应式地实现各种页面布局。 容器中存在两条轴,主轴和交叉轴(相当于我们坐标轴的x轴和y轴)。我们可以通过flex-direction来决定主轴的方向。 主轴(main axis&am…...
软件测试/测试开发丨Selenium 网页frame与多窗口处理
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27048 一、多窗口处理. 1.1、多窗口简介 点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作࿰…...
MySQL高阶语句(三)
一、NULL值 在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空…...
链表OJ练习(2)
一、分割链表 题目介绍: 思路:创建两个链表,ghead尾插大于x的节点,lhead尾插小于x的节点。先遍历链表。最后将ghead尾插到lhead后面,将大小链表链接。 我们需要在创建两个链表指针,指向两个链表的头节点&…...
ssh常用操作
ssh常用操作 SSH是一种安全协议,ssh是该协议的客户端程序,openssh-server则是该协议的服务端程序 常用系统都自带了ssh客户端程序,服务端程序则可能要安装 密码远程登陆 前提:服务器安装了openssh-server,未安装时…...
从AD迁移至AAD,看体外诊断领军企业如何用网络准入方案提升内网安全基线
摘要: 某医用电子跨国集团中国分支机构在由AD向AzureAD Global迁移时,创新使用宁盾网络准入,串联起上海、北京、无锡等国内多个职场与海外总部,实现平滑、稳定、全程无感知的无密码认证入网体验,并通过合规基线检查,确…...
Flutter系列文章-Flutter在实际业务中的应用
不同场景下的解决方案 1. 跨平台开发: 在移动应用开发中,面对不同的平台(iOS和Android),我们通常需要编写两套不同的代码。而Flutter通过一套代码可以构建适用于多个平台的应用,大大提高了开发效率&#x…...
FPGA | Verilog仿真VHDL文件
当VHDL模块中有Generic块时,应该怎么例化? VHDL模块代码 entity GenericExample isgeneric (DATA_WIDTH : positive : 8; -- 泛型参数:数据宽度ENABLE_FEATURE : boolean : true -- 泛型参数:是否启用特定功能);Port ( clk : …...
微服务--Gatway:网关
routes: - id:order_route(路由唯一 标识,路由到order) uri:http://localhost:8020 #需要转发的地址 #断言规则(用于路由规则的匹配) predicates: -path/order-serv/** -pathlb://order-service # lb: 使用nacos中的本地…...
Django传递dataframe对象到前端网页
在django前端页面上展示的数据,还是使用django模板自带的语法 方式1 不推荐使用 直接使用 【df.to_html(indexFalse)】 使用to_html他会生成一个最基本的表格没有任何的样式,一点都不好看,如果有需要的话可以自行修改表格的样式,…...
iOS swift5 弹出提示文字(停留1~2s)XHToastSwift
CoderZhuXH/XHToastSwift - github // // XHToast.swift // XHToastSwiftExample // // Created by xiaohui on 16/8/12. // Copyright © 2016年 CoderZhuXH. All rights reserved. // 代码地址:https://github.com/CoderZhuXH/XHToastSwiftimport UIKit/*** Toast…...
Spring Bean 的生命周期,如何被管理的
实例化一个Bean,也就是我们通常说的new 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID 如…...
MATLAB算法实战应用案例精讲-【概念篇】量子机器学习
目录 前言 几个高频面试题目 机器学习的方法论 知识储备 机器学习的实现...
【kubernetes】Argo Rollouts -- k8s下的自动化蓝绿部署
蓝绿(Blue-Green)部署简介 在现代软件开发和交付中,确保应用程序的平稳更新和发布对于用户体验和业务连续性至关重要。蓝绿部署是一种备受推崇的部署策略,它允许开发团队在不影响用户的情况下,将新版本的应用程序引入生产环境。 蓝绿部署的核心思想在于维护两个独立的环…...
vue Cesium接入在线地图
Cesium接入在线地图只需在创建时将imageryProvider属性换为在线地图的地址即可。 目录 天地图 OSM地图 ArcGIS 地图 谷歌影像地图 天地图 //矢量服务let imageryProvider new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?s…...
OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能
导读OBS Studio 30.0 现已推出公开测试版,承诺为这款广受欢迎的免费开源截屏和流媒体应用程序提供多项令人兴奋的新功能,以及大量其他更改和错误修复。 OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV(快速同步视频)、WHIP/WebRT…...
springboot整合SpringSecurity
先写了一个配置类 给这个访问路径,加上角色权限 package com.qf.config;import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; impo…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
