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

这篇具有很好参考价值的文章主要介绍了持续集成部署-k8s-配置与存储-配置管理: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: nginx
    name: nginx-volume
    volumeMounts:
    - mountPath: /test-pd # 挂载到容器的哪个目录
      name: test-volume # 挂载哪个 volume
  volumes:
  - name: test-volume
    hostPath: # 与主机共享目录,加载主机中的指定目录到容器中
      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 文件内容,然后再回到容器内部看下,发现宿主机上修改后,容器内也是可以马上看到的。

有了这个功能之后,我们可以将宿主机上的文件跟我们的容器内部实现了共享。文章来源地址https://www.toymoban.com/news/detail-788602.html

到了这里,关于持续集成部署-k8s-配置与存储-配置管理:HostPath 的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s安装hostPath方式存储的PostgreSQL15

    在这里,我们使用本地目录/路径作为永久存储资源(/mnt/data) 查看运行结果

    2024年02月03日
    浏览(29)
  • 持续集成部署-k8s-部署利器-Helm

    Helm 是一个用于 Kubernetes 应用程序部署和管理的开源工具。它可以帮助简化 Kubernetes 应用程序的打包、发布、配置和升级过程。 Helm 使用称为 “ chart ” 的预定义模板来定义应用程序的结构和配置,并提供了命令行工具来管理这些 charts 。 Helm 的重要概念: Charts :是创建 Ku

    2024年02月06日
    浏览(38)
  • 持续集成部署-k8s-服务发现-Ingress

    Ingress 是 Kubernetes 中的一个核心组件,用于管理和暴露集群内部的服务到集群外部。它充当了一个入口( Gateway )的角色,可以将外部流量路由到集群内部的服务。 Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由

    2024年02月08日
    浏览(49)
  • 持续集成部署-k8s-服务发现-Service

    在K8s中, Service 是一种可以暴露一个或多个 Pod 的稳定的网络终点,从而形成逻辑上的应用服务单元,为服务发现、负载均衡、容错等提供了基础设施支持。 Service 的主要作用包括以下几个方面: 1. 实现内部服务发现 :在K8s中,往往会有多个 Pod 运行同一种应用服务, Servi

    2024年02月08日
    浏览(47)
  • 持续集成部署-k8s-资源调度:DaemonSet

    在 Kubernetes 中, DaemonSet 是一种用于在集群中运行一个 Pod 副本的控制器对象。它可以保证在每个节点上都运行一个 Pod 副本,并且在节点加入或退出集群时自动地更新。 DaemonSet 通常用于在集群中部署一些系统级别的服务,例如日志收集、监控、网络代理等。它们需要在每个

    2024年02月08日
    浏览(33)
  • 持续集成部署-k8s-深入了解 Pod:探针

    Kubernetes 中的探针是指容器内的进程用于告知 Kubernetes 组件其自身状态的机制; Readiness Probe :就绪探针用于告诉 Kubernetes 该容器是否已准备好处理请求。就绪探针会定期执行一个 HTTP 请求、TCP 套接字连接或命令,如果返回成功,则认为容器已准备好,可以接收流量。如果在

    2024年02月07日
    浏览(44)
  • k8s的jenkins部署java项目到k8s集群cicd持续集成

    k8s1.16.0-k8s的jenkins部署java项目到k8s集群cicd(ci成,cd手动部署的) 注意: 本文档只是实现了ci,cd是通过ci生成的镜像,再手工再k8s-master执行的部署(只因pod部署的jenkins连接k8s的认证不知怎么操作,若jenkins是单独部署在k8s-master机器上,能直接在master执行kubectl命令就没这个问题了

    2024年02月03日
    浏览(44)
  • 持续集成部署-k8s-资源调度:标签和选择器

    在 Kubernetes 中,标签( Labels )和选择器( Selectors )是用于对资源进行分类和识别的关键概念。 标签 是键值对的形式,可以附加到Kubernetes对象上(例如Pod、Service、Deployment等)。它们用于对资源进行描述、区分和组织,可以根据实际需求自定义。例如,给一个Pod对象添加标

    2024年02月07日
    浏览(41)
  • 持续集成部署-k8s-命令行工具:基础命令的使用

    资源类型 缩写别名 clusters componentstatuses cs

    2024年02月07日
    浏览(31)
  • 持续集成部署-k8s-数据持久化-NFS安装与使用

    网络文件系统(Network File System, NFS),是基于内核的文件系统,nfs主要是通过网络实现服务器和客户端之间的数据传输,采用远程过程调用RPC(Romete Procedure Call)机制,让不同的机器节点共享文件目录。只需将nfs服务器共享的文件目录挂载到nfs客户端,这样客户端就可以对远程

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包