kubernetes StorageClass 不保留现有数据

2024-01-10

当 Pod 被删除并与我的 postgresql 数据库一起部署回时,我的 Kubernetes StorageClass 卷不会保留现有数据。当我删除 Pod 时,会创建新的 Pod,但数据库为空。

我遵循了不同版本的教程的变体(https://kubernetes.io/docs/concepts/storage/persistent-volumes/ https://kubernetes.io/docs/concepts/storage/persistent-volumes/)但似乎没有任何作用。

我粘贴了所有 YAML 文件,因为问题可能出在组合中。

存储-google.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: spingular-pvc
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 7Gi
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-east4-a

jhipsterpress-postgresql.yml

apiVersion: v1
kind: Secret
metadata:
  name: jhipsterpress-postgresql
  namespace: default
  labels:
    app: jhipsterpress-postgresql
type: Opaque
data:
  postgres-password: NjY0NXJxd24=
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jhipsterpress-postgresql
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: jhipsterpress-postgresql
    spec:
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: spingular-pvc
      containers:
      - name: postgres
        image: postgres:10.4
        env:
        - name: POSTGRES_USER
          value: jhipsterpress
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: jhipsterpress-postgresql
              key: postgres-password
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: data
          mountPath: /var/lib/postgresql/
---
apiVersion: v1
kind: Service
metadata:
  name: jhipsterpress-postgresql
  namespace: default
spec:
  selector:
    app: jhipsterpress-postgresql
  ports:
  - name: postgresqlport
    port: 5432
  type: LoadBalancer

jhipsterpress-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jhipsterpress
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jhipsterpress
      version: "v1"
  template:
    metadata:
      labels:
        app: jhipsterpress
        version: "v1"
    spec:
      initContainers:
        - name: init-ds
          image: busybox:latest
          command:
            - '/bin/sh'
            - '-c'
            - |
                while true
                do
                  rt=$(nc -z -w 1 jhipsterpress-postgresql 5432)
                  if [ $? -eq 0 ]; then
                    echo "DB is UP"
                    break
                  fi
                  echo "DB is not yet reachable;sleep for 10s before retry"
                  sleep 10
                done
      containers:
      - name: jhipsterpress-app
        image: galore/jhipsterpress
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: prod
        - name: SPRING_DATASOURCE_URL
          value: jdbc:postgresql://jhipsterpress-postgresql.default.svc.cluster.local:5432/jhipsterpress
        - name: SPRING_DATASOURCE_USERNAME
          value: jhipsterpress
        - name: SPRING_DATASOURCE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: jhipsterpress-postgresql
              key: postgres-password
        - name: JAVA_OPTS
          value: " -Xmx256m -Xms256m"
        resources:
          requests:
            memory: "256Mi"
            cpu: "500m"
          limits:
            memory: "512Mi"
            cpu: "1"
        ports:
        - name: http
          containerPort: 8080
        readinessProbe:
          httpGet:
            path: /management/health
            port: http
          initialDelaySeconds: 20
          periodSeconds: 15
          failureThreshold: 6
        livenessProbe:
          httpGet:
            path: /management/health
            port: http
          initialDelaySeconds: 120

jhipsterpress-service.yml

apiVersion: v1
kind: Service
metadata:
  name: jhipsterpress
  namespace: default
  labels:
    app: jhipsterpress
spec:
  selector:
    app: jhipsterpress
  type: LoadBalancer
  ports:
  - name: http
    port: 8080

当我包含保留策略时,我收到此错误:

@cloudshell:~ (academic-veld-230622)$ kubectl apply -f storage-google.yaml
error: error validating "storage-google.yaml": error validating data: 
ValidationError(PersistentVolumeClaim.spec): unknown field "persistentVolumeReclaimPolicy" in io.k8s.api.core.v1.PersistentVolumeClaimSpec; if you choose to ignore these errors, turn validation off with --validate=false

请,如果您知道有效的公共图像的完整示例(在 postgresql 中,我可以使其与 Mongo 一起工作),我将非常感激。

谢谢大家。


请注意,要实现此功能,您需要让 PVC 动态配置 PV 以满足其要求,然后就会有一个永久的binding https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding在 PVC 和 PV 之间,每次工作负载使用 PVC 时,它将使用相同的 PV。这段摘录具体指出:

如果为新 PVC 动态配置 PV,则循环将始终将该 PV 绑定到 PVC

如果在您的情况下,Google 持久磁盘由 PVC 进行配置,并且您可以在 GCP 上验证每次使用的 PV 是否相同,那么这可能是 pod 启动过程中的问题,它会删除所有数据。 (您有什么理由使用/var/lib/postgresql/ vs /var/lib/postgresql?)

Also, persistentVolumeReclaimPolicy: Retain适用于 PV,不适用于 PVC。对于动态配置的 PV,该值为Delete。在您的情况下,它不适用,因为您的动态配置卷应该绑定到您的 PVC。换句话说,您没有回收该卷。

话虽如此,部署数据库的推荐方法是使用有状态集 https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/与此类似mysql https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/示例使用volumeClaimTemplate.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes StorageClass 不保留现有数据 的相关文章

随机推荐

  • 如何在 Swift 中将 Int 转换为 NSData?

    在 Objective C 中我使用以下代码 转换一个Int变量变为NSData 一个字节包 int myScore 0 NSData packet NSData dataWithBytes myScore length sizeof my
  • 如何从其余客户端推送通知以进行测试

    您好 我正在尝试将通知从其余客户端推送到 Android 应用程序 我正在做如下 URL https android googleapis com gcm send Method POST Headers Authorization my
  • Heroku (Docker) nginx 中的 PORT 环境变量

    我只需对 Dockerfile 进行一些修改 即可在 Heroku 上使用 nginx 运行它 Heroku 的特别之处在于 一切都以非 root 身份运行 第二个特定行为是使用来自 Heroku 本身的随机端口 并且无法修改 他们提供了
  • 序列输出的循环 - python

    我一直在努力寻找一种方法 将序列中的 6 聚体打印在单独的行上 这样 注意每行的间距 atgctagtcatc tgctag gctagt ctagtc tagtca etc 到目前为止 我已经能够在字符串中获取序列 如下所示 from B
  • 如何通过代码将Jupyter Notebook保存为HTML?

    我有一个 Jupyter Notebook 程序 它可以为我进行分析 运行后 我想将其保存为 HTML 以便稍后查看 然后我可以更改输入数据文件以对其他数据进行分析 通常 我手动执行此操作 这看起来像 但这对我来说感觉非常乏味 所以我想知道
  • 数据表 - 动态列

    我知道这个问题之前已经被问过 但我的变体与其他答案不匹配 我有一个这种形式的 json 数据源 columns title Store Number data StoreNbr title Store Name data StoreName
  • 如何添加和删除拉斐尔元素的发光?

    我正在尝试为拉斐尔元素设置悬停 以便当鼠标位于元素上时 它会发光 当鼠标离开时 发光会被移除 我已经弄清楚如何添加发光 但我在删除它时遇到了麻烦 我的脚本如下所示 document ready function var paper Raph
  • 如何找到现有数组的下一个数字索引?

    我正在寻找一种简单的方法来获取 PHP 也会选择的新元素的数组的下一个数字索引 示例1 array array array new index 对于这种情况 该值将为 0 示例 1a array array 100 gt prefill 1
  • 一种生成数据集中项目配对的所有可能方式的有效方法

    这在某种程度上是一个组合问题 我正在尝试找出一种有效的方法来配对数据集中的所有项目 例如 我有一个长度为 6 的数组 1 2 3 4 5 6 我想对数组中的内容进行所有可能的配对 如下所示 1 2 3 4 5 6 1 2 3 5 4 6 1
  • sql 按函数分组

    我只需要获取每个产品 ID 具有最高交易时间的行 所以在这种情况下 我需要获取第一行 并且所有其他带有productid 224的行都应该消失 我怎样才能解决这个问题 现在我按 NQ 进行分组 但有多行 因为 NQ 根据每笔交易而变化 我也
  • 如何在 Linux 中正确安装 gsl 库?

    我在安装 GNU Scientific Library gsl 时遇到问题 我将软件包放在桌面上 并根据包含的文档执行了 configure make 和 sudo make install 我检查了 usr local include 目
  • .NET 的未来版本是否支持 C# 中的元组?

    Net 3 5 不支持元组 太糟糕了 但不确定 net 的未来版本是否会支持元组 我刚刚从 MSDN 杂志上读到这篇文章 构建元组 http msdn microsoft com en us magazine dd942829 aspx 以
  • 遍历目录并检查文件的大小

    我想遍历目录和子目录 并检查每个文件的文件大小 如果它与定义的文件大小匹配 它将被删除 我知道 我必须使用 os walk 但我不太确定以哪种方式 我用于目录列表的代码是 import os path C Python27 i 0 for
  • 从两个表中获取数据?

    我有两张桌子 说出表 A 和表 B Table A id Article Name date 1 ABC 25 2 2011 2 xyz 26 2 2011 Table B id Comment Article id 1 good 1 2
  • 我可以在没有 MySQL 表的情况下将 CSS 值保存在我的 WordPress 主题中吗?

    我是 WordPress 主题开发的新手 我无法在这里或通过很多 Google foo 找到答案 所以我想知道这种情况是否可能 我正在为 Themetatic 编写一个子主题 我想为最终用户提供从主题控件中的对话框更改 CSS 颜色值和字体
  • VS2010:在构建后事件中我们可以有多个 if 吗?

    我们可以有这样的东西吗 if Debug ConfigurationName goto nocopy else if Release ConfigurationName del TargetPath config copy ProjectD
  • Lawnchair-IndexedDB 不支持多记录

    我尝试在索引数据库中创建多个记录 但它不允许我 例如耐克和阿迪达斯objectStores var nike Lawnchair adapter indexed db name stores record nike function e c
  • List l = new ArrayList() 和 List l = new ArrayList() 的区别[重复]

    这个问题在这里已经有答案了 以下两个声明有什么区别 List
  • 在监控模式下使用 libpcap 嗅探 wifi

    问题陈述 Calling pcap activate 结果是PCAP ERR RFMON NOTSUP错误 即不支持 RF 监控模式 Context 我正在编写一个小型 C 程序 其工作是在监视器模式下监听我的笔记本电脑的 wifi 卡 该
  • kubernetes StorageClass 不保留现有数据

    当 Pod 被删除并与我的 postgresql 数据库一起部署回时 我的 Kubernetes StorageClass 卷不会保留现有数据 当我删除 Pod 时 会创建新的 Pod 但数据库为空 我遵循了不同版本的教程的变体 https