持续集成部署-k8s-配置与存储-配置管理:HostPath 的使用

持续集成部署-k8s-配置与存储-配置管理:HostPath 的使用

  • 1. 简介
  • 2. 创建一个 Pod 使用 HostPath 的方式挂载目录

1. 简介

在 Kubernetes 中,HostPath 是一种用于挂载宿主机上文件或目录到容器中的卷类型。使用 HostPath 卷类型,可以让你在容器内部访问宿主机上的文件或目录。

具体来说,当你在 Pod 中定义了 HostPath 卷类型时,Kubernetes 将会在宿主机上创建指定的目录,并将其挂载到容器中。这个目录的位置是由你自己指定的,通常是在宿主机上一个已经存在的目录或文件。在容器内部,你可以像访问普通的文件系统一样访问这个挂载的目录或文件。

将节点上的文件或目录挂载到 Pod 上,此时该目录会变成持久化存储目录,即使 Pod 被删除后重启,也可以重新加载到该目录,该目录下的文件不会丢失。

2. 创建一个 Pod 使用 HostPath 的方式挂载目录

新建文件:volume-test-pd.yaml

apiVersion: v1
kind: Pod
metadata:name: test-volume-pd
spec:containers:- image: nginxname: nginx-volumevolumeMounts:- mountPath: /test-pd # 挂载到容器的哪个目录name: test-volume # 挂载哪个 volumevolumes:- name: test-volumehostPath: # 与主机共享目录,加载主机中的指定目录到容器中path: /data # 节点中的目录type: DirectoryOrCreate # 检查类型,在挂载前对挂载目录做什么检查操作,有多种选项,默认为空字符串,不做任何检查

这里新建了一个 Nginx 的 Pod 和 一个名为 test-volume的 Volume,并且配置的是 hostPath,这里对应的path是宿主机上的目录。

其中 type的类型支持以下几种:

  • 空字符串:默认类型,不做任何检查
  • DirectoryOrCreate:如果给定的 path 不存在,就创建一个 755 的空目录
  • Directory:这个目录必须存在
  • FileOrCreate:如果给定的文件不存在,则创建一个空文件,权限为 644
  • File:这个文件必须存在
  • Socket:UNIX 套接字,必须存在
  • CharDevice:字符设备,必须存在
  • BlockDevice:块设备,必须存在

当 type 的校验未满足时,创建 Pod 时会报错。

接着创建 Pod :kubectl create -f volume-test-pd.yaml

[root@docker-54 volumes]# kubectl get po
NAME                           READY   STATUS              RESTARTS          AGE
dns-test                       1/1     Running             1 (41d ago)       41d
fluentd-p2znm                  1/1     Running             0                 39d
fluentd-qx22q                  1/1     Running             0                 39d
nginx-deploy-bcc5c945c-988wb   1/1     Running             44 (4m9s ago)     44h
nginx-deploy-bcc5c945c-ptqc6   1/1     Running             148 (4m39s ago)   6d4h
private-image-pull-pod         0/1     Completed           0                 5d21h
test-configfile-po             0/1     Completed           0                 20d
test-volume-pd                 0/1     ContainerCreating   0                 7s
[root@docker-54 volumes]# kubectl get po -o wide
NAME                           READY   STATUS      RESTARTS          AGE     IP             NODE        NOMINATED NODE   READINESS GATES
dns-test                       1/1     Running     1 (41d ago)       41d     10.244.1.35    docker-55   <none>           <none>
fluentd-p2znm                  1/1     Running     0                 39d     10.244.1.44    docker-55   <none>           <none>
fluentd-qx22q                  1/1     Running     0                 39d     10.244.2.62    docker-56   <none>           <none>
nginx-deploy-bcc5c945c-988wb   1/1     Running     44 (4m53s ago)    44h     10.244.1.60    docker-55   <none>           <none>
nginx-deploy-bcc5c945c-ptqc6   1/1     Running     148 (5m23s ago)   6d4h    10.244.2.96    docker-56   <none>           <none>
private-image-pull-pod         0/1     Completed   0                 5d21h   10.244.2.98    docker-56   <none>           <none>
test-configfile-po             0/1     Completed   0                 20d     10.244.2.71    docker-56   <none>           <none>
test-volume-pd                 1/1     Running     0                 51s     10.244.2.113   docker-56   <none>           <none>
[root@docker-54 volumes]# 
[root@docker-54 volumes]# 

可以看到,这个 test-volume-pd是运行在 我的 docker-56 节点上的。

连接到 docker-56节点,来到 /data 目录下,新建一个文件:index.html

接着进入 Pod 容器里面看下这个文件是否存在:

[root@docker-54 volumes]# kubectl exec -it test-volume-pd -- sh
# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test-pd  tmp  usr  var
# cd /data
sh: 2: cd: can't cd to /data
# cd /test-pd
# ls
index.html
# 

可以看到,我们进入容器后,直接到 /data 目录下,发现目录是不存在的,是因为这个目录是宿主机的目录,而映射到我们的容器内部的路径是 /test-pd,这个 index.html文件确实存在。

接着我们在容器内,给这个 index.html 添加点儿 内容:

# echo 'Hello Volume, HostPath....' > index.html
# ls
index.html
# cat index.html  
Hello Volume

然后回到宿主机docker-56 节点上,看下这个文件:

[root@docker-56 data]# touch index.html
[root@docker-56 data]# 
[root@docker-56 data]# cat index.html 
Hello Volume, HostPath....
[root@docker-56 data]# 

可以看到,宿主机上确实存在该文件最新的内容了。

接着我们在宿主机上修改这个index.html 文件内容,然后再回到容器内部看下,发现宿主机上修改后,容器内也是可以马上看到的。

有了这个功能之后,我们可以将宿主机上的文件跟我们的容器内部实现了共享。

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

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

相关文章

isbn api开放接口

接口地址&#xff1a;http://openapi.daohe168.com.cn/api/library/isbn/query?isbn9787115618085&appKeyd7c6c07a0a04ba4e65921e2f90726384 响应结果&#xff1a; { "success": true, "code": "200", "message": …

[element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案

问题描述 在没有进行任何操作的时候&#xff0c;使用 this.$refs.xxxx 无法获取el-dialog中的内部元素&#xff0c;这个问题会导致很多bug. 官方解释&#xff0c;在open事件回调中进行&#xff0c;但是open()是弹窗打开时候的会调&#xff0c;有可能在此处获取的时候&#xff…

03 _ 系统设计目标(一):如何提升系统性能?

提到互联网系统设计&#xff0c;可能听到最多的词就是“三高”&#xff0c;也就是“高并发”“高性能”“高可用”&#xff0c;它们是互联网系统架构设计永恒的主题。这里将整体探讨下高并发系统设计的目标&#xff0c;然后在此基础上&#xff0c;探讨下&#xff1a;如何提升系…

Python---函数的参数类型----位置参数(不能顺序乱)、关键词参数(键值对形式,顺序可乱)

位置参数 理论上&#xff0c;在函数定义时&#xff0c;可以为其定义多个参数。但是在函数调用时&#xff0c;也应该传递多个参数&#xff0c;正常情况&#xff0c;要一一对应。 相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&#xff08;调用…

Python基础:JSON保存结构化数据(详解)

1. JSON概念 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;也易于机器解析和生产。   虽然JSON使用JavaScript语法来描述数据对象&#xff0c;但是JSON仍然独立于语言和平台&#xff0c;JSON解…

二开的基础资料设置 为辅助核算项目的两种方式

一、第一种 自己插入相关表数据 T_BD_AsstActType //辅助核算项目表 insert into T_BD_AsstActType(FID, FName_L1, FName_L2, FName_L3, FNumber, FDescription_L1, FDescription_L2, FDescription_L3, FSimpleName, FAssistantType, FIsSelfAsstActaiatem, FIsSystemA…

HTML新特性【缩放图像、图像切片、平移、旋转、缩放、变形、裁切路径、时钟、运动的小球】(二)-全面详解(学习总结---从入门到深化)

目录 绘制图像_缩放图像 绘制图像_图像切片 Canvas状态的保存和恢复 图形变形_平移 图形变形_旋转 图形变形_缩放 图形变形_变形 裁切路径 动画_时钟 动画_运动的小球 引入外部SVG 绘制图像_缩放图像 ctx.drawImage(img, x, y, width, height) img &#xf…

快速修改mysql密码的方法

快速修改mysql密码的方法 方法1&#xff1a; 用SET PASSWORD命令 首先登录MySQL。格式&#xff1a;mysql> set password for 用户名localhost password(新密码);例子&#xff1a;mysql> set password for rootlocalhost password(123);方法2&#xff1a;用mysqladmin…

想要打开vue ui界面--下面是我的解决方式

npm -v 8.1.0 node -v v16.13.0 vue -V vue/cli 5.0.8 就可以打开vue ui界面啦

每日一题:LeetCode-103/107.二叉树的(层序/锯齿形层序)遍历

每日一题系列&#xff08;day 04&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

AD9528学习笔记

前言 AD9528是ADI的一款时钟芯片&#xff0c;由2-stage PLL组成&#xff0c;并且集成JESD204B/JESD204C SYSREF信号发生器&#xff0c;SYSREF发生器输出单次、N次或连续信号&#xff0c;并与PLL1和PLL2输出同步&#xff0c;从而可以实现多器件之间的同步。 AD9528总共有14路输…

JMeter+Python 实现异步接口测试

当使用JMeter和Python来实现异步接口测试时&#xff0c;可以按照以下步骤进行操作&#xff1a; 1、安装JMeter和Java Development Kit&#xff08;JDK&#xff09;&#xff1a; 下载并安装JMeter&#xff08;https://jmeter.apache.org/download_jmeter.cgi&#xff09;和适用…

性能优化中使用Profiler进行内存泄露的排查及解决方式

文章目录 一、前言二、内存泄露的排查方式三、参考链接 一、前言 对于常规意义上的线程使用要及时关闭&#xff0c;数据库用完要及时关闭&#xff0c;数据用完要及时清空等等这里不再赘述&#xff0c;但是在开发中总会有不熟悉的api&#xff0c;开发进度过快&#xff0c;开发人…

网络通信基础概念介绍

网络通信基础概念介绍 局域网LAN 局域网&#xff0c;即 Local Area Network&#xff0c;简称LAN。 局域网内的主机之间能方便的进行网络通信&#xff0c;又称为内网&#xff1b;局域网和局域网之间在没有连接的情况下&#xff0c;是无法通信的。 局域网是指在一个相对较小的…

【【linux C 编程记述 之 VIM的用法讲述】】

linux C 编程记述 之 VIM的用法讲述 我们所说的编写代码包括两部分&#xff1a;代码编写和编译&#xff0c;在Windows下可以使用Visual Studio来完成这两部&#xff0c;可以在 Visual Studio 下编写代码然后直接点击编译就可以了。但是在 Linux 下这两部分是分开的&#xff0c…

Linux:Ubuntu虚拟机安装详解:VMware下的逐步指南

目录 1. centOS系统 2. ubuntu系统 1. 下载Ubuntu映像 step1 step2 step3 2. 新建虚拟机 step1 step2 Step3 step4 step5 step6 内存 内核 映像 显示 网络 3. 网络配置 NAT模式 本机IP获取 ​编辑 bridge模式 4. 开启虚拟机 5. 虚拟机常用配置 语言 …

Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip

Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip 文章目录 Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip一、more1.1 输出重定向>和>>1.2 输入重定向< 二、 再谈一切皆文件三、less指令【重要】四、head指令五、tail指令…

Banana Pi BPI-R3 Mini 开源路由器,也能拍出艺术美感

香蕉派BPI-R3 Mini路由器板开发板采用联发科MT7986A(Filogic 830)四核ARM A53芯片设计&#xff0c;板载2G DDR 内存&#xff0c;8G eMMC和128MB SPI NAND存储&#xff0c;是一款非常高性能的开源路由器开发板&#xff0c;支持Wi-Fi6 2.4G/5G&#xff08;MT7976C&#xff09;&am…

ACL权限

ACL权限 目录&#xff1a; 1. 什么是ACL 2. 操作步骤 1. 什么是ACL ACL是Access Control List的缩写&#xff0c;即访问控制列表 每个项目成员在有一个自己的项目目录&#xff0c;对自己的目录有完全权限 项目组中的成员对项目目录也有完全权限 其他人对项目目录没有…