网站网页压缩,百度一下官网网址,怎样将网站开发说清楚,apmserv配置多个网站1、概述
为什么 kubernetes 要持久化存储#xff1f;
在 kubernetes 中部署应用都是以 Pod 的容器运行的#xff0c;而 Pod 是有生命周期#xff0c;一旦 Pod 被删除或重启后#xff0c;这些数据也会随着丢失#xff0c;则需要对这些数据进行持久化存储。
PV#xff1…1、概述
为什么 kubernetes 要持久化存储
在 kubernetes 中部署应用都是以 Pod 的容器运行的而 Pod 是有生命周期一旦 Pod 被删除或重启后这些数据也会随着丢失则需要对这些数据进行持久化存储。
PVPersistent Volume 简称PV 描述的是持久化存储数据卷。API 对象定义的是一个持久化存储在宿主机上的目录如NFS的挂载目录。这个PV通常是由运维人员事先创建好的在 kubernetes 集群里面等待使用。
PVCPersistentVolumeClaim简称PVC 主要是用来向 kubernetes 申请存储资源的PVC 是给 Pod 使用的对象代表 Pod 去系统申请资源 PV。如果申请成功kubernetes 会把 PV 和 PVC 绑定。
StorageClass当作 PV的模板PVC 绑定不到合适的PV时可以动态创建的一种机制。在大规模的 kubernetes 生产集群中可能会有很多的 PVC随着项目的增加可能还需要不断添加新的 PV否则可能为某个新的 Pod 因 PVC 绑定不到 PV 而创建失败。于是 kubernetes 提供可以自动创建 PV 的机制核心是 StorageClass API对象。
2、示例
首先运维人员事先创建好 PV在 kubernetes 集群里待用这里定义一个 nfs(network file system)网络文件系统yaml 文件如下
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-demonamespace: default
spec:storageClassName: nfs-storeage # 存储名称capacity:storage: 1GiaccessModes:- ReadWriteOncenfs:server: 192.168.120.11 # IP 是NFS服务器的地址path: /nfs/data/haha/ # 该目录需要提前创建好否则可能失败开发人员要去使用首先创建 PVC比如想要使用 一个 1GiB 大小的 PVCyaml 文件如下
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-demonamespace: default
spec:storageClassName: nfs-storeage # 存储类的名称(必须与PV的storageClassName相同)accessModes:- ReadWriteOnce # 单节点读写resources:requests:storage: 1GiaccessModes 访问模式
ReadWriteOnce卷可以被一个节点以读写方式挂载ReadOnlyMany可以被多个节点以只读方式挂载ReadWriteMany卷可以被多个节点以读写方式挂载ReadWriteOncePod卷可以被单个Pod以读写方式挂载
这样就可以使用的了但是要真正让容器使用起来需要注意的点
PV 和 PVC 的storageClassName 字段必须一样必须满足 PVC 的要求还有值得注意的是Kubernetes 里定义存储容量使用的是国际标准日常习惯使用的 KB/MB/GB 的基数是 1024要写成 Ki/Mi/Gi 否则单位不一致实际容量就会对不上。
以上示例Kubernetes 就会根据 PVC 里的描述去找能够匹配 StorageClass 和容量的 PV然后把 PV 和 PVC“绑定”在一起实现存储的分配。当将 PVC 和 PV 进行绑定之后Pod 就能够像使用 hostPath 等常规类型的 Volume 一样有了持久卷存储现在就可以为 Pod 挂载存储卷了在 YAML 文件里声明使用这个 PVC 了如下所示
apiVersion: v1
kind: Pod
metadata:name: nginx-pvcnamespace: defaultlabels:app: nginx-pvc
spec:containers:- name: nginx-pvcimage: nginxports:- containerPort: 80name: httpvolumeMounts:- name: localtimemountPath: /etc/localtime- name: htmlmountPath: /usr/share/nginx/html/volumes:- name: localtimehostPath:path: /usr/share/zoneinfo/Asia/Shanghai- name: htmlpersistentVolumeClaim:claimName: nginx-pvc # 申请书的名字restartPolicy: Always这样就把存储卷挂载到 Nginx 容器的 /etc/localtime 和 /usr/share/nginx/html/ 目录了。
3、PV 与 PVC 小结 PV 和 PVC: 只要有PV那么PVC先是Pending状态PV被创建后正好PVC要用那么PVC自动绑定到这个PV卷上PVC可以被提前创建并和PV绑定以后Pod需要关联PVC即可 Pod 删除PVC 还在吗 PVC 并不会影响需要手动删除PVC。yaml遵循Pod和PVC写在文件 PVC 删除会不会影响 PV 根据回事策略不同决定的。如NFS回收策略是Recycle那么PV不会被删除但内容被清空PV重新变回可用状态。如果是Retain策略PVC删除PV是不受影响的要删除自己手动。
Retain策略场景如Pod部署数据库的如删除Pod时希望k8s重新拉起(不能用Retain和Recycle一旦删除啥都没有了)所以Retain是默认的。 状态表示: Released PV 释放释放了和PVC关联关系绑定不存在新的不同PVC不能重新绑定上来Available PV 可用也可以和任意的PVC绑定Failed失败可能卷不支持Bound已绑定
4、emptyDir 存储卷
使用 emptyDir 时Pod 分配到某个 Node 上时emptyDir 会被创建当Pod在该节点运行期间卷一直存在的卷最初时空的。
尽管Pod中的容器挂载 emptyDir 卷的路径可能相同也可能不同这些容器都可以读写 emptyDir卷中相同的文件。
当Pod因为某些原因被从节点删除时这时emptyDir卷中数据也会被永久删除的。
示例
定义了 2 个容器两个容器之间挂载的 emptyDir 它们是可以实现共享。
apiVersion: v1
kind: Pod
metadata:name: nginx-test
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: nginx-containersports:- name: httpcontainerPort: 80volumeMounts:- name: htmlmountPath: /usr/share/nginx/html- name: busyboximage: busybox:latestname: busybox-containersimagePullPolicy: IfNotPresentvolumeMounts:- name: htmlmountPath: /data/command: [/bin/sh,-c,while true;do echo $(date) /data/index.html;sleep 2;done]volumes:- name: htmlemptyDir: {} 说明Pod里面容器无论重启或崩溃期间 emptyDir 卷是安全的不会导致卷丢失。但 Pod被删除重新拉起或Pod超出资源限制被 Kubelet 杀死了emptyDir 卷中的数据也会被永久删除这种存储卷也称为“临时存储”。 5、hostPath 存储卷
指的是 Pod 挂载宿主机的某个目录或文件hostPath 卷使得容器可以使用宿主机的文件系统进行存储。
示例
apiVersion: v1
kind: Pod
metadata:name: pod-hostpath-testnamespace: defaultlabels:app: pod-hostpath-test
spec:containers:- name: pod-timeimage: busyboxcommand: [sleep,60000]volumeMounts:- name: localtimemountPath: /etc/localtimevolumes:- name: localtime # 卷名称一定要一样hostPath: # 宿主机路径这个文件挂在到容器目录(/etc/localtime)path: /usr/share/zoneinfo/Asia/Shanghaitype: Directory # 细节可以声明类型是文件夹还是文件说明当 Pod 被删除这个存储卷还在只要保证同一个 Pod 被调度到同一个节点上 在 pod 被删除重新被调度到这个节点之后对应的数据依然是存在的。 6、emptyDir 与 hostPath 小结
emptyDir与hostPath属于节点级别的卷类型emptyDir的生命周期与Pod资源相同一旦Pod被删除数据也就丢失hostPath卷的Pod一旦被重新调度至其他节点那么它将无法再使用此前的数据