k8s使用local pv配置本地盘作为数据存储
- 2022-12-06 20:26:41
- 运维
- 711
- shevechco
当前项目中遇到一个问题,就是sts资源类型在使用本地hostpath存储时,在某些极端情况下会导致sts资源调度到其它节点,导致本地hostpath存储的资源不存在sts资源新调度的节点,这样就会出现没有数据,数据丢失的情况。
那么这种场景下我们需要将sts的资源和pv进行绑定,然后找到了local pv这种方案,使用local pv以后生产的pvc会绑定sts资源,这样在任何情况下sts资源都会和pv绑定到同一个节点,同时再配合nodeAffinity将pv固定到指定的节点,这样就实现了sts资源固定到某一节点的需求。
接下来就是我测试的方案,实际场景是一个3副本的sts类型的mongodb组件
首先我们创建三个pv,其中需要注意storageClassName以及path目录,还有在这些pv中我们也定义了一个local字段,并在其中添加了节点亲和性nodeAffinity来指定绑定到固定的节点上。
--- apiVersion: v1 kind: PersistentVolume metadata: name: orion-mongo-pv-01 spec: capacity: storage: 200Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: orion-local-storage local: path: /root/mongodb # 本地存储位置 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-master #mongodb存储节点名,和其它两个节点名不要重复 --- apiVersion: v1 kind: PersistentVolume metadata: name: orion-mongo-pv-03 spec: capacity: storage: 200Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: orion-local-storage local: path: /root/mongodb # 本地存储位置 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-node2 #mongodb存储节点名,和其它两个节点名不要重复 --- apiVersion: v1 kind: PersistentVolume metadata: name: orion-mongo-pv-02 spec: capacity: storage: 200Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: orion-local-storage local: path: /root/mongodb # 本地存储位置 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-node1 #mongodb存储节点名,和其它两个节点名不要重复
根据上面撰写的三个pv,分别去k8s-master,k8s-node,k8s-node2三个节点创建存储目录和赋权
ssh k8s-master mkdir -p /root/mongodb chmod -R 777 ssh k8s-node1 mkdir -p /root/mongodb chmod -R 777 ssh k8s-node2 mkdir -p /root/mongodb chmod -R 777
接下来需要在我们sts资源组件中配置volumeClaimTemplates来自动创建pvc绑定上述创建的pv,局部需要添加如下配置
volumeClaimTemplates: - metadata: name: orion-mongodb-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 200Gi storageClassName: orion-local-storage #更改成为pv中的SC名称
然后apply我们的sts资源组件,查看pvc状态
通过describe这个pvc可以看到已经绑定到mongodb-0这个pod上了,这样就是实现了sts的POD不会调度到其它节点,它始终会调度到和pv绑定的节点。
-
标签
- local
- pv
- k8s
- storageclass
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://www.sulao.cn/post/899
相关推荐
- python获取k8s中使用物理卡pod列表脚本
- k8s基于clusterrole生成集群级别只读用户bash脚本
- k8s存储pv/pvc中的subPath的使用详解
- k8s容器退出码详细信息介绍
- k8s调度GPU节点并挂载GPU设备
- k8s使用nfs报错selfLink was empty, can't make reference
- centos7使用haproxy部署k8s高可用集群
- centos7部署k8s多master高可用集群(k8s+containerd+nginx+keepalived)
- centos下k8s集群docker切换containerd
- centos7使用containerd部署k8s集群