企业建立网站需要提供什么,wordpress手机颜色,天津专业做网站公司,如何做阿里详情页面链接到外部网站持续集成部署-k8s-配置与存储-配置管理#xff1a;HostPath 的使用 1. 简介2. 创建一个 Pod 使用 HostPath 的方式挂载目录 1. 简介
在 Kubernetes 中#xff0c;HostPath 是一种用于挂载宿主机上文件或目录到容器中的卷类型。使用 HostPath 卷类型#xff0c;可以让你在容… 持续集成部署-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如果给定的文件不存在则创建一个空文件权限为 644File这个文件必须存在SocketUNIX 套接字必须存在CharDevice字符设备必须存在BlockDevice块设备必须存在
当 type 的校验未满足时创建 Pod 时会报错。
接着创建 Pod kubectl create -f volume-test-pd.yaml
[rootdocker-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
[rootdocker-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
[rootdocker-54 volumes]#
[rootdocker-54 volumes]# 可以看到这个 test-volume-pd是运行在 我的 docker-56 节点上的。
连接到 docker-56节点来到 /data 目录下新建一个文件index.html
接着进入 Pod 容器里面看下这个文件是否存在
[rootdocker-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: cant 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 节点上看下这个文件
[rootdocker-56 data]# touch index.html
[rootdocker-56 data]#
[rootdocker-56 data]# cat index.html
Hello Volume, HostPath....
[rootdocker-56 data]# 可以看到宿主机上确实存在该文件最新的内容了。
接着我们在宿主机上修改这个index.html 文件内容然后再回到容器内部看下发现宿主机上修改后容器内也是可以马上看到的。
有了这个功能之后我们可以将宿主机上的文件跟我们的容器内部实现了共享。