建设网站用哪个主机好本地建站discuz

当前位置: 首页 > news >正文

建设网站用哪个主机好,本地建站discuz,外贸管理软件有哪些,网页设计规范有哪些前言#xff1a;容器磁盘上的文件的生命周期是短暂的#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先#xff0c;当容器崩溃时#xff0c;kubelet 会重启它#xff0c;但是容器中的文件将丢失——容器以干净的状态#xff08;镜像最初的状态#xff09;…前言容器磁盘上的文件的生命周期是短暂的这就使得在容器中运行重要应用时会出现一些问题。首先当容器崩溃时kubelet 会重启它但是容器中的文件将丢失——容器以干净的状态镜像最初的状态重新启动。其次在Pod中同时运行多个容器时这些容器之间通常需要共享文件。Kubernetes 中的Volume抽象就很好的解决了这些问题。Pod中的容器通过Pause容器共享Volume。一.PV和PVC的引入Volume 提供了非常好的数据持久化方案不过在可管理性上还有不足。拿前面 AWS EBS 的例子来说要使用 VolumePod 必须事先知道如下信息当前 Volume 来自 AWS EBS。EBS Volume 已经提前创建并且知道确切的 volume-id。Pod 通常是由应用的开发人员维护而 Volume 则通常是由存储系统的管理员维护。开发人员要获得上面的信息要么询问管理员。要么自己就是管理员。这样就带来一个管理上的问题应用开发人员和系统管理员的职责耦合在一起了。如果系统规模较小或者对于开发环境这样的情况还可以接受。但当集群规模变大特别是对于生成环境考虑到效率和安全性这就成了必须要解决的问题。Kubernetes 给出的解决方案是 PersistentVolume PV和 PersistentVolumeClaimPVC。PersistentVolume (PV) 是外部存储系统中的一块存储空间由管理员创建和维护。与 Volume 一样PV 具有持久性生命周期独立于 Pod。PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时用户可以创建一个 PVC指明存储资源的容量大小和访问模式比如只读等信息Kubernetes 会查找并提供满足条件的 PV。有了 PersistentVolumeClaim用户只需要告诉 Kubernetes 需要什么样的存储资源而不必关心真正的空间从哪里分配如何访问等底层细节信息。这些 Storage Provider 的底层信息交给管理员来处理只有管理员才应该关心创建 PersistentVolume 的细节信息二、通过NFS实现持久化存储2.1配置nfs需要安装k8s-master: nfs-serverk8s-node1: nfs-clientk8s-node2: nfs-client所有节点安装nfs在master节点创建共享目录授权共享目录编辑exports文件配置生效启动rpc和nfs注意顺序作为准备工作我们已经在 k8s-master 节点上搭建了一个 NFS 服务器目录为 /nfsdata2.1 创建PV下面创建一个 PV mypv1配置文件 nfs-pv1.yml 如下① capacity 指定 PV 的容量为 1G。② accessModes 指定访问模式为 ReadWriteOnce支持的访问模式有ReadWriteOncePV 能以 read-write 模式 mount 到单个节点。ReadOnlyManyPV 能以 read-only 模式 mount 到多个节点。ReadWriteMany PV 能以 read-write 模式 mount 到多个节点。③ persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle支持的策略有Retain 需要管理员手工回收。Recycle清除 PV 中的数据效果相当于执行 rm -rf /thevolume/*。Delete 删除 Storage Provider 上的对应存储资源例如 AWS EBS、GCE PD、Azure Disk、- OpenStack Cinder Volume 等。④ storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类PVC 可以指定 class 申请相应 class 的 PV。⑤ 指定 PV 在 NFS 服务器上对应的目录。创建 mypv1STATUS 为 Available表示 mypv1 就绪可以被 PVC 申请。2.3 创建PVC接下来创建 PVC mypvc1配置文件 nfs-pvc1.yml 如下PVC 就很简单了只需要指定 PV 的容量访问模式和 class。执行命令创建 mypvc1从 kubectl get pvc 和 kubectl get pv 的输出可以看到 mypvc1 已经 Bound 到 mypv1申请成功。2.4 创建pod上面已经创建好了pv和pvcpod中直接使用这个pvc即可与使用普通 Volume 的格式类似在 volumes 中通过 persistentVolumeClaim 指定使用 mypvc1 申请的 Volume。通过命令创建mypod12.5 验证三.PV的回收当 PV 不再需要时可通过删除 PVC 回收。未删除pvc之前 pv的状态是Bound删除pod删除pvc再次查看pv的状态删除pvc之后pv的状态变为Available此时解除绑定后则可以被新的 PVC 申请。/nfsdata文件中的文件被删除了因为 PV 的回收策略设置为 Recycle所以数据会被清除但这可能不是我们想要的结果。如果我们希望保留数据可以将策略设置为 Retain回收策略已经变为 Retain通过下面步骤验证其效果虽然 mypv1 中的数据得到了保留但其 PV 状态会一直处于 Released不能被其他 PVC 申请。为了重新使用存储资源可以删除并重新创建 mypv1。删除操作只是删除了 PV 对象存储空间中的数据并不会被删除。新建的 mypv1 状态为 Available已经可以被 PVC 申请。PV 还支持 Delete 的回收策略会删除 PV 在 Storage Provider 上对应存储空间。NFS 的 PV 不支持 Delete支持 Delete 的 Provider 有 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。四. PV/PVC的静态供给五. PV的动态供给前面的例子中我们提前创建了 PV然后通过 PVC 申请 PV 并在 Pod 中使用这种方式叫做静态供给Static Provision。与之对应的是动态供给Dynamical Provision即如果没有满足 PVC 条件的 PV会动态创建 PV。相比静态供给动态供给有明显的优势不需要提前创建 PV减少了管理员的工作量效率高。动态供给是通过 StorageClass 实现的StorageClass 定义了如何创建 PV下面是两个例子。StorageClass standardStorageClass slow这两个 StorageClass 都会动态创建 AWS EBS不同在于 standard 创建的是 gp2 类型的 EBS而 slow 创建的是 io1 类型的 EBS。不同类型的 EBS 支持的参数可参考 AWS 官方文档。StorageClass 支持 Delete 和 Retain 两种 reclaimPolicy默认是 Delete。与之前一样PVC 在申请 PV 时只需要指定 StorageClass 和容量以及访问模式比如除了 AWS EBSKubernetes 支持其他多种动态供给 PV 的 Provisioner完整列表请参考 https://kubernetes.io/docs/concepts/storage/storage-classes/#provisioner六. PVPVC在应用中的持久化存储查看pod运行在了哪个节点将节点关闭。发现另外一个节点会接手而且数据仍然存在七.PVPVC在应用在mysql的持久化存储实战项目下面演示如何为 MySQL 数据库提供持久化存储步骤为创建 PV 和 PVC。部署 MySQL。向 MySQL 添加数据。模拟节点宕机故障Kubernetes 将 MySQL 自动迁移到其他节点。验证数据一致性。首先创建 PV 和 PVC配置如下mysql-pv.ymlmysql-pvc.yml接下来部署 MySQL配置文件如下PVC mysql-pvc Bound 的 PV mysql-pv 将被 mount 到 MySQL 的数据目录 var/lib/mysql。MySQL 被部署到 k8s-node1① 切换到数据库 mysql。② 创建数据库表 my_id。③ 插入一条数据。④ 确认数据已经写入。关闭 k8s-node1模拟节点宕机故障关闭 k8s-node1模拟节点宕机故障。验证数据的一致性由于node1节点已经宕机node2节点接管了这个任务,pod转移需要等待一段时间我这里等待了5分钟左右。。MySQL 服务恢复数据也完好无损。八. PV/PVC动态供给项目实战提前说明由于本地动态实战我在v1.22.2版本中尝试多次未成功采用了v1.19.0版本的k8s集群Dynamic Provisioning机制工作的核心在于StorageClass的API对象。StorageClass声明存储插件用于自动创建PV当我们k8s业务上来的时候大量的pvc,此时我们人工创建匹配的话工作量就会非常大了需要动态的自动挂载相应的存储‘我们需要使用到StorageClass来对接存储靠他来自动关联pvc,并创建pv。Kubernetes支持动态供给的存储插件https://kubernetes.io/docs/concepts/storage/storage-classes/因为NFS不支持动态存储所以我们需要借用这个存储插件。nfs动态相关部署可以参考https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy部署步骤1、部署nfs2、定义一个storage3、部署授权因为storage自动创建pv需要经过kube-apiserver,所以要进行授权创建1个sa创建1个clusterrole并赋予应该具有的权限比如对于一些基本api资源的增删改查创建1个clusterrolebinding将sa和clusterrole绑定到一起这样sa就有权限了然后pod中再使用这个sa那么pod再创建的时候会用到sasa具有创建pv的权限便可以自动创建pv4、部署一个自动创建pv的服务这里自动创建pv的服务由nfs-client-provisioner 完成创建查看创建好的storage:nfs-client-provisioner 会以pod运行在k8s中5、部署有状态服务测试自动创建pv部署yaml文件参考https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/我们部署一个nginx服务让其html下面自动挂载数据卷进入其中一个容器创建一个文件直接在web-1的目录下创建一个文件[rootmaster pvc-test]# touch /opt/container_data/default-www-web-1-pvc-5efd9492-c13d-414b-8df3-68b0c37961dd/2.txt而且删除一个pod web-0数据仍然存在不会丢失。保证了数据持久化