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

k8s:手动创建PV,解决postgis数据库本地永久存储

1.离线环境


CPU:Hygon C86 7285 32-core Processor
操作系统:麒麟操作系统
containerd:1.7.27
Kubernetes:1.26.12
KubeSphere:4.1.2
kubekey:3.1.10
Harbor:2.13.1
Postgis:17-3.5

2创建StorageClass


2.1创建 

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

  name: local-postgresql

provisioner: kubernetes.io/no-provisioner

volumeBindingMode: WaitForFirstConsumer

reclaimPolicy: Retain

apiVersion: storage.k8s.io/v1
表示使用的是 Kubernetes 的 storage.k8s.io/v1 API 版本,适用于 StorageClass 资源。
kind: StorageClass
表示这是一个 StorageClass 资源对象。
name: local-postgresql
StorageClass 的名称为 local-postgresql,在创建 PVC(PersistentVolumeClaim)时可以通过 storageClassName 字段引用它。
reclaimPolicy: Retain
当 PVC 被删除后,PV 的回收策略为 Retain,即保留 PV 及其数据。
这样管理员可以手动清理数据或回收 PV,而不是自动删除数据。
provisioner: kubernetes.io/no-provisioner: 指定不自动供给卷,因为本地存储不能动态供给。
volumeBindingMode: WaitForFirstConsumer: 等待第一个消费者出现后才绑定PV,这对于本地存储是必要的,因为它允许调度器考虑Pod和节点之间的亲缘性。

 2.2执行

kubectl apply -f postgresql-storage.yaml

2.3查看

kubectl get storageclass

 

2.4 详情

kubectl describe storageclass local-postgresql

Name: StorageClass 的名称。

IsDefaultClass: 指示这个 StorageClass 是否被设置为默认。如果是,默认的新 PVC 将自动使用这个 StorageClass,除非另有指定。

Provisioner: 描述了哪个提供程序负责动态供应卷。在本例中是 kubernetes.io/no-provisioner,意味着不会自动供应卷,适用于本地存储。

Parameters: 存储类的参数,这里没有特别的参数。

AllowVolumeExpansion: 显示是否允许通过编辑 PVC 来扩展卷大小。

ReclaimPolicy: 当一个与之相关的 PVC 被删除时,决定 PV 应该如何处理(保留或删除)。

VolumeBindingMode: 决定了何时进行卷绑定和动态卷创建。WaitForFirstConsumer 模式会在调度 Pod 之前延迟卷绑定和动态卷创建,这样可以使调度器考虑 Pod 的资源需求。

 

4手动创建PV


4.1创建 

apiVersion: v1

kind: PersistentVolume

metadata:

  name: postgresql-pv

spec:

  capacity:

    storage: 10Gi

  accessModes:

  - ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: local-postgresql

  local:

    path: /app/postdata 

  nodeAffinity:

    required:

      nodeSelectorTerms:

      - matchExpressions:

        - key: kubernetes.io/hostname

          operator: In

          values:

          - master

如果您的集群中有多个节点,并且每个节点都有一个类似的本地目录,则需要为每个节点创建一个对应的 PV。

apiVersion: v1: 表示使用的是 Kubernetes API 的 v1 版本。

kind: PersistentVolume: 指定了此资源对象的类型是 PersistentVolume,即持久卷。

name: postgresql-pv: 定义了这个持久卷的名字为 postgresql-pv。

capacity: 容量部分指定了该持久卷提供的存储大小为 10Gi。

accessModes: 访问模式,这里设置为 ReadWriteOnce,意味着该卷可以被一个节点以读写模式挂载。

persistentVolumeReclaimPolicy: 设置了当持久卷被释放时的策略为 Retain,即保留数据,不自动删除卷上的数据。

storageClassName: 存储类名称为 local-postgresql,这通常用于将 PV 与 PVC (PersistentVolumeClaim) 匹配起来。

local: 这个字段表明这是一个本地存储类型的持久卷,并且通过 path: /app/postdata 指定了宿主机上的实际路径,也就是该持久卷对应的数据存储位置。

nodeAffinity: 节点亲和性配置,确保该持久卷只能被特定节点使用。在这个例子中,required 下的 nodeSelectorTerms 和 matchExpressions 用来指定必须满足的条件:key 是 kubernetes.io/hostname,operator 是 In,而 values 列表中只有一个值 master,这意味着该持久卷只能被 hostname 为 master 的节点使用。

4调整postgresql-sts.yaml

将storageClassName:local改成   storageClassName: local-postgresql

 

http://www.xdnf.cn/news/15664.html

相关文章:

  • React条件渲染
  • 零信任产品联合宁盾泛终端网络准入,打造随需而变、精准贴合业务的网络安全访问体系
  • Docker 与 GPU 训练
  • OSPF路由协议的协商过程
  • Java全栈面试实录:从电商场景到AIGC的深度技术考察
  • 基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析
  • Maven私服仓库,发布jar到私服仓库,依赖的版本号如何设置,规范是什么
  • 精通 triton 使用 MLIR 的源码逻辑 - 第002节:再掌握一些 triton 语法 — 通过 02 softmax
  • 生成式引擎优化(GEO)核心解析:下一代搜索技术的演进与落地策略
  • Python包发布与分发全指南:从PyPI到企业私有仓库
  • LiteCloud超轻量级网盘项目基于Spring Boot
  • Solr7升级Solr8全攻略:从Core重命名到IK分词兼容,零业务中断实战指南
  • css样式中的选择器和盒子模型
  • 《汇编语言:基于X86处理器》第8章 高级过程(2)
  • QT跨平台应用程序开发框架(10)—— Qt窗口
  • PyCharm 高效入门指南(引言 + 核心模块详解)
  • C++拷贝构造
  • 【数据结构】栈和队列
  • 李宏毅《生成式人工智能导论》 | 第15讲-第18讲:生成的策略-影像有关的生成式AI
  • 【读论文】AgentOrchestra 解读:LLM 智能体学会「团队协作」去解决复杂任务
  • 河南萌新联赛2025第一场-河南工业大学
  • Python--plist文件的读取
  • 【Linux】LVS(Linux virual server)
  • python-字典、集合、序列切片、字符串操作(笔记)
  • 大型语言模型的白日梦循环
  • Git简介与特点:从Linux到分布式版本控制的革命
  • Python 网络爬虫 —— 代理服务器
  • github不能访问怎么办
  • echart设置trigger: ‘axis‘不显示hover效果
  • C 语言基础第 08 天:数组与冒泡排序