【问题标题】:Storing the Cassandra data using Stateful set使用有状态集存储 Cassandra 数据
【发布时间】:2020-10-29 22:59:59
【问题描述】:

我一直在阅读有关在 kubernetes 上推送数据库的方法。最初,我将数据附加到 docker 映像并部署了 servicedeployment 文件。但问题是,当容器/pod 重新启动时,数据会丢失。 然后,我遇到了持久卷声明的概念。我发现 (https://www.magalix.com/blog/kubernetes-and-database) 和 (https://kubernetes.io/docs/tutorials/stateful-application/cassandra/) 非常有用。不过,我对它们有几个问题:

PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

PV:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
  1. PVC如何从集群中的PV获取存储?如果我使用 Amazon 云运行我的服务,相同的步骤是什么(如果有)。

【问题讨论】:

    标签: amazon-web-services kubernetes cassandra


    【解决方案1】:

    PVC 将消耗您提供的 PV 资源。在Persistent Volumes 上的 Kubernetes 文档中有更详细的解释,包括卷的生命周期和 PV 声明。

    附带说明一下,如果您还没有意识到,有几个 Cassandra 运算符现成可用,这使您可以更轻松地在 Kubernetes 上部署集群,包括 Instaclustr'sOrange's CassKop 和 DataStax 的 @987654324 @

    DataStax cass-operator 允许您部署 DSE 集群或 Apache Cassandra 集群。您可以通过official docs site here 了解更多信息。如果您有任何问题,也可以通过https://community.datastax.com 直接与 cass-operator 的作者联系。干杯!

    【讨论】:

      【解决方案2】:

      Persistent Volume:

      PV 是集群中的一块存储,由管理员或dynamically provisioned 使用Storage Classes 配置。 Persistent Volume Claim PVC 是用户的存储请求。它类似于 Pod。 Pod 消耗节点资源,PVCs 消耗 PV 资源。

      如果你想绑定PVPVC,你可以选择两种Provisioning方式:

      • 静态

      集群管理员创建了多个PVs。它们携带真实存储的详细信息,可供集群用户使用。它们存在于 Kubernetes API 中,可供使用。

      • 动态

      当管理员创建的静态PVs 与用户的PersistentVolumeClaim 都不匹配时,集群可能会尝试专门为PVC 动态配置卷。此设置基于StorageClasses:PVC 必须请求storage class,并且管理员必须已创建并配置该类以进行动态设置。请求类“”的声明有效地为自己禁用动态配置。

      简而言之,如果您使用 Static 配置,则需要为每个 PVC 创建 PV,因为它们是 1:1 的绑定关系。

      你可以在this thread找到更多有用的细节。

      当您使用支持Dynamic Volume Provisioning 的云环境(亚马逊)时,您可以使用PVCDynamic Provisioning 将创建具有 PVC 要求的 PV

      当您使用Statefulset 并且需要确保每个pod 都有自己的PV 时,您可以像documentation example 一样使用VolumeClaimTemplate

      关于主要问题:

      PVC如何从集群中的PV获取存储?如果我使用亚马逊云运行我的服务,如果有的话,步骤是什么。

      • 如果您想使用静态配置,您需要为每个 pod 创建 PVPVC

      • 由于大多数云提供商都支持Dynamic Provisioning,您只需创建PVC,Cloud Provisioner 将自动创建PV 并满足PVC 的要求。另外,在statefulset中为pods创建PVPVC最常用的方法是使用VolumeClaimTemplate,这里可以指定storageclassstorage等参数:

        volumeClaimTemplates:
        - metadata:
            name: cassandra-data
          spec:
            accessModes: [ "ReadWriteOnce" ]
            storageClassName: fast
            resources:
              requests:
                storage: 1Gi
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2013-07-07
        • 1970-01-01
        • 2015-04-19
        • 2021-02-11
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多