成华区微信网站建设公,捡个将军做男友啥网站能看,建立网站的链接结构有哪几种形式?,做网站的原型文件下载目录
volume 卷
官方文档#xff1a;卷 | Kubernetes
一、emptyDir#xff08;临时卷#xff09;
二、hostPath卷
type字段参数
hostPath 实验#xff1a;
三、第3方提供的存储卷#xff08;百度云、阿里云、亚马逊云、谷歌云等#xff09;
四、local卷
五、NF…目录
volume 卷
官方文档卷 | Kubernetes
一、emptyDir临时卷
二、hostPath卷
type字段参数
hostPath 实验
三、第3方提供的存储卷百度云、阿里云、亚马逊云、谷歌云等
四、local卷
五、NFS卷
参考文档https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs
六、SAN卷
七、NAS卷
pv PersistentVolumes 持久卷
官方网站持久卷 | Kubernetes
pvcPersistentVolumeClaim持久卷申领
pv和pvc、pod的关系
关系拓扑图
案例一创建 PersistentVolumePVC
参考文档配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes
创建 PVC 拓扑图
案例二在两个地方挂载相同的 PersistentVolumePV volume 卷
官方文档卷 | Kubernetes
Kubernetes 支持很多类型的卷。 Pod 可以同时使用任意数目的卷类型。 临时卷类型的生命周期与 Pod 相同 但持久卷可以比 Pod 的存活期长。 当 Pod 不再存在时Kubernetes 也会销毁临时卷不过 Kubernetes 不会销毁持久卷。 对于给定 Pod 中任何类型的卷在容器重启期间数据都不会丢失。
一、emptyDir临时卷 在宿主机上创建一个空文件夹给卷存放数据存放位置/var/lib/docker/volumes/ 用来存放临时的数据当 Pod 因为某些原因被从节点上删除时emptyDir 卷中的数据也会被永久删除。 二、hostPath卷 hostPath 卷能将主机节点文件系统上的文件或目录挂载到你的 Pod 中 hostPath 的一些用法有 运行一个需要访问 Docker 内部机制的容器可使用 hostPath 挂载 /var/lib/docker 路径。在容器中运行 cAdvisor 时以 hostPath 方式挂载 /sys。允许 Pod 指定给定的 hostPath 在运行 Pod 之前是否应该存在是否应该创建以及应该以什么方式存在。 type字段参数 hostPath 实验
配置文件
[rootmaster storage]# vim volume.yamlapiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:- image: nginxname: test-containervolumeMounts:- mountPath: /test-pdname: test-volumevolumes:- name: test-volumehostPath:# 宿主上目录位置必须每台node上都有该文件夹path: /data# 此字段为可选建议使用DirectoryOrCreate如果/data目录不在会帮助我们自动创建# Directory在给定路径上必须存在的目录。type: Directory在每台node节点服务器上创建/data文件夹
[rootnode3 ~]# mkdir /data
[rootnode3 ~]# cd /
[rootnode3 /]# ls
bin boot data dev etc home lib lib64 media mnt nginx one_creat_nginx.sh opt proc root run sbin srv sys tmp usr var
[rootnode3 /]# 执行创建Pod
[rootmaster storage]# kubectl apply -f volume.yaml
pod/test-pd created
[rootmaster storage]# #查看效果
[rootmaster storage]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-575db987b-49jnv 1/1 Running 0 68m 10.244.1.5 node1 none none
my-nginx-575db987b-rmnvh 1/1 Running 0 68m 10.244.3.5 node3 none none
my-nginx-575db987b-w2xvf 1/1 Running 0 68m 10.244.2.5 node2 none none
test-pd 1/1 Running 0 39s 10.244.1.6 node1 none none
[rootmaster storage]# 三、第3方提供的存储卷百度云、阿里云、亚马逊云、谷歌云等 四、local卷
local 卷所代表的是某个被挂载的本地存储设备例如磁盘、分区或者目录。
local 卷只能用作静态创建的持久卷。不支持动态配置。
与 hostPath 卷相比local 卷能够以持久和可移植的方式使用而无需手动将 Pod 调度到节点。系统通过查看 PersistentVolume 的节点亲和性配置就能了解卷的节点约束。
然而local 卷仍然取决于底层节点的可用性并不适合所有应用程序。 如果节点变得不健康那么 local 卷也将变得不可被 Pod 访问。使用它的 Pod 将不能运行。 使用 local 卷的应用程序必须能够容忍这种可用性的降低以及因底层磁盘的耐用性特征而带来的潜在的数据丢失风险。
五、NFS卷
nfs 卷能将 NFS (网络文件系统) 挂载到你的 Pod 中。 不像 emptyDir 那样会在删除 Pod 的同时也会被删除nfs 卷的内容在删除 Pod 时会被保存卷只是被卸载。 这意味着 nfs 卷可以被预先填充数据并且这些数据可以在 Pod 之间共享。
它的网络基于TCP/IP协议网速
它的磁盘的速度基于IOPS协议
NFS 网络文件系统 --》 保证数据一致性
参考文档https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs
六、SAN卷
SAN存储区域网络 (Storage Area Network, SAN) 是企业最常用的存储网络架构要求高吞吐量和低延迟的业务关键型业务往往采用这类架构运行。如今采用全闪存存储使用光纤传输的 SAN 部署数量增速迅猛。与旋转磁盘相比全闪存存储可提供更出色的性能、稳定一致的低延迟以及更低的总成本。SAN 将数据存储在集中式共享存储中使企业能够运用一致的方法和工具来实施安全防护、数据保护和灾难恢复。
理解为一种存储的解决方案一种架构 七、NAS卷
NASNetwork Attached Storage网络附属存储按字面简单说就是连接在网络上具备资料存储功能的装置因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心将存储设备与服务器彻底分离集中管理数据从而释放带宽、提高性能、降低总拥有成本、保护投资。
基于TCP/IP协议传输可以支持NFS协议的专业存储设备可以给局域网里的服务器或者移动设备提供NFS服务 pv PersistentVolumes 持久卷
官方网站持久卷 | Kubernetes
PersistentVolume 子系统为用户和管理员提供了一组 API 将存储如何制备的细节从其如何被使用中抽象出来。 为了实现这点我们引入了两个新的 API 资源PersistentVolume 和 PersistentVolumeClaim。
持久卷PersistentVolumePV 是集群中的一块存储可以由管理员事先制备 或者使用存储类Storage Class来动态制备。 持久卷是集群资源就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样 也是使用卷插件来实现的只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。
pvcPersistentVolumeClaim持久卷申领
持久卷申领PersistentVolumeClaimPVC表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源CPU 和内存同样 PVC 申领也可以请求特定的大小和访问模式 例如可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载参见访问模式。
pv和pvc、pod的关系
关系拓扑图 案例一创建 PersistentVolumePVC
参考文档配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes
创建 PVC 拓扑图 在每台机器上进行防止创建卷的时候报错说该台node上没有指定的文件夹
[rootmaster /]# mkdir /sc/data #创建存储文件夹
[rootmaster /]# ls
bin boot dev etc home lianxi lib lib64 media mnt nginx opt proc root run sbin sc srv sys tmp usr var
[rootmaster /]# sh -c echo Hello clay from Kubernetes storage /sc/data/index.html
[rootmaster /]# cat /sc/data/index.html #查看index.html的内容
Hello clay from Kubernetes storage
[rootmaster /]# 创建pv-volume.yaml
[rootmaster /]# mkdir pv
[rootmaster /]# cd pv
[rootmaster pv]# vim pv-volume.yaml
[rootmaster pv]# cat pv-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: task-pv-volumelabels:type: local
spec:storageClassName: manualcapacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: /sc/data
[rootmaster pv]# 此配置文件指定卷位于集群节点上的 /sc/data 路径。 其配置还指定了卷的容量大小为 10 GB访问模式为 ReadWriteOnce 这意味着该卷可以被单个节点以读写方式安装。 此配置文件还在 PersistentVolume 中定义了 StorageClass 的名称为 manual它将用于将 PersistentVolumeClaim 的请求绑定到此 PersistentVolume。 创建 PersistentVolume
[rootmaster pv]# kubectl apply -f pv-volume.yaml
persistentvolume/task-pv-volume created
[rootmaster pv]# 查看创建后的效果
[rootmaster pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Available manual 33s
[rootmaster pv]#
[rootmaster pv]# kubectl get pv task-pv-volume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Available manual 69s
[rootmaster pv]# 创建 PersistentVolumeClaim
下一步是创建一个 PersistentVolumeClaim。 Pod 使用 PersistentVolumeClaim 来请求物理存储。 在本练习中你将创建一个 PersistentVolumeClaim它请求至少 3 GB 容量的卷 该卷至少可以为一个节点提供读写访问。
[rootmaster pv]# vim pv-claim.yaml
[rootmaster pv]# cat pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: task-pv-claim
spec:storageClassName: manualaccessModes:- ReadWriteOnceresources:requests:storage: 3Gi
[rootmaster pv]# 创建PersistentVolumeClaim
[rootmaster pv]# kubectl apply -f pv-claim.yaml
persistentvolumeclaim/task-pv-claim created
[rootmaster pv]# 创建 PersistentVolumeClaim 之后Kubernetes 控制平面将查找满足申领要求的 PersistentVolume。 如果控制平面找到具有相同 StorageClass 的适当的 PersistentVolume 则将 PersistentVolumeClaim 绑定到该 PersistentVolume 上。 查看创建后的效果
[rootmaster pv]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
task-pv-claim Bound task-pv-volume 10Gi RWO manual 70s
[rootmaster pv]# kubectl get pv task-pv-volume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 6m2s
[rootmaster pv]# 创建一个使用你的 PersistentVolumeClaim 作为存储卷的 Pod。
配置文件pv-pod.yaml
[rootmaster pv]# vim pv-pod.yaml
[rootmaster pv]# cat pv-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: task-pv-pod
spec:volumes:- name: task-pv-storagepersistentVolumeClaim:claimName: task-pv-claimcontainers:- name: task-pv-containerimage: nginxports:- containerPort: 80name: http-servervolumeMounts:- mountPath: /usr/share/nginx/htmlname: task-pv-storage
[rootmaster pv]# 创建pv卷的Pod
[rootmaster pv]# kubectl apply -f pv-pod.yaml
pod/task-pv-pod created
[rootmaster pv]# 查看创建后的效果
[rootmaster pv]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-575db987b-49jnv 1/1 Running 0 137m 10.244.1.5 node1 none none
my-nginx-575db987b-rmnvh 1/1 Running 0 137m 10.244.3.5 node3 none none
my-nginx-575db987b-w2xvf 1/1 Running 0 137m 10.244.2.5 node2 none none
#创建的Pod
task-pv-pod 1/1 Running 0 44s 10.244.2.6 node2 none none
test-pd 1/1 Running 0 69m 10.244.1.6 node1 none none
[rootmaster pv]# 注意 Pod 的配置文件指定了 PersistentVolumeClaim但没有指定 PersistentVolume。 对 Pod 而言PersistentVolumeClaim 就是一个存储卷。
打开一个 Shell 访问 Pod 中的容器
[rootmaster pv]# kubectl exec -it task-pv-pod -- /bin/bash
roottask-pv-pod:/# 在 Shell 中验证 Nginx 是否正在从 hostPath 卷提供 index.html 文件
# 一定要在上一步 kubectl exec 所返回的 Shell 中执行下面三个命令
[rootmaster pv]# kubectl exec -it task-pv-pod -- /bin/bash
roottask-pv-pod:/# apt update #更新所有软件
roottask-pv-pod:/# apt install curl #下载curl
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
curl is already the newest version (7.88.1-10).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
roottask-pv-pod:/# curl http://localhost/ #访问本地的nginx服务
Hello clay from Kubernetes storage #出现了index.html内的网页内容
roottask-pv-pod:/#
#输出结果是你之前写到 hostPath 卷中的 index.html 文件中的内容
案例二在两个地方挂载相同的 PersistentVolumePV
将Pod内的nginx的配置文件nginx.conf拷贝到/sc/data/目录下
[rootmaster ~]# kubectl cp default/test-pd:/etc/nginx/nginx.conf /sc/data/nginx.conf
tar: Removing leading / from member names
[rootmaster ~]# ls /sc/data/
index.html nginx.conf修改配置文件将nginx的可以使用进程数改为4 将他传给所有node节点服务器你可以选择不传k8s会帮助你创建一个nginx.conf但是配置是默认配置
[rootmaster data]# scp nginx.conf 192.168.2.149:/sc/data/
welcome to sc SSH!
root192.168.2.149s password:
nginx.conf 100% 645 438.9KB/s 00:00
[rootmaster data]# 退出原来的Pod
[rootmaster pv]# kubectl delete -f pv-pod.yaml
pod task-pv-pod deleted
[rootmaster pv]# 创建新的配置文件
[rootmaster pv]# cat pv-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:name: test
spec:containers:- name: testimage: nginxvolumeMounts:# 网站数据挂载- name: configmountPath: /usr/share/nginx/htmlsubPath: html# Nginx 配置挂载- name: configmountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: configpersistentVolumeClaim:claimName: task-pv-claim
[rootmaster pv]# 创建Pod
[rootmaster pv]# kubectl apply -f pv-pod-2.yaml
pod/test created创建成功
[rootmaster pv]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-nginx-575db987b-49jnv 1/1 Running 0 3h3m 10.244.1.5 node1 none none
my-nginx-575db987b-rmnvh 1/1 Running 0 3h3m 10.244.3.5 node3 none none
my-nginx-575db987b-w2xvf 1/1 Running 0 3h3m 10.244.2.5 node2 none none
test 1/1 Running 0 9s 10.244.2.7 node2 none none
test-pd 1/1 Running 0 115m 10.244.1.6 node1 none none
[rootmaster pv]# 查看它是否使用我们的nginx配置4个nginx进程也可以查看nginx的配置文件