【问题标题】:Redis deployment in KubernetesKubernetes 中的 Redis 部署
【发布时间】:2020-07-18 01:01:26
【问题描述】:

我正在尝试在 Kubernetes 上运行 Redis 集群。我不打算将任何 Redis 数据保存到磁盘。是否可以将 Redis 集群作为 Kubernetes 部署而不是作为有状态集运行?

【问题讨论】:

    标签: kubernetes redis kubernetes-statefulset kubernetes-deployment


    【解决方案1】:

    是的,尽管我可能仍会专门使用 StatefulSet 来确保一次只启动一个 pod。

    【讨论】:

    • 谢谢,但为什么我们需要这个功能,即一次只能启动一个 pod?我们不应该为 HA 和负载平衡运行多个 pod 吗?
    • 是的,多个将运行,StatefulSets 只是确保它一次启动一个,这样您就不会在尝试一次全部加入集群时遇到踩踏问题。
    • 所有可用示例都显示 Redis 集群被部署为 Kubernetes 的 StatefulSets 和 PersistentVolumes 的组合。这也很有意义,因为每个 Redis 实例都依赖于一个配置文件,该文件跟踪其他集群实例及其角色。您是否知道我们使用部署控制器在集群中部署 Redis 的任何示例?
    【解决方案2】:

    是的,可以使用有状态集在 PVC 中持久化数据,但是在 HA redis 集群的掌舵图中,它们仅使用有状态集:

    apiVersion: v1
    kind: Service
    metadata:
      name: redis
    spec:
      ports:
        - port: 6379
          name: redis
      clusterIP: None
      selector:
        app: redis
    ---
    apiVersion: apps/v1beta2
    kind: StatefulSet
    metadata:
      name: redis
    spec:
      selector:
        matchLabels:
          app: redis  
      serviceName: redis
      replicas: 1
      template:
        metadata:
          labels:
            app: redis 
        spec:
          containers:
            - name: redis
              image: redislabs/redis
              args: ["--requirepass", "admin", "--appendonly", "yes", "--save", "900", "1", "--save", "30", "2"]
              ports:
                - containerPort: 6379
                  name: redis
              resources:
                limits:
                  cpu: .50
                  memory: 1500Mi
                requests:
                  cpu: .25
                  memory: 1024Mi
              volumeMounts:
                - name: redis-volume
                  mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: redis-volume
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 20Gi
    

    【讨论】:

    • 是的,我看到了舵图和问题。为什么我们需要有状态集?为什么我们不能只使用部署控制器并运行无状态部署?
    • 我希望您对无状态和有状态应用程序有所了解。当应用程序没有在内存或卷中存储任何内容时,您可以使用无状态部署,但是当应用程序在内存中存储任何内容时使用有状态的部署,因此它始终确保副本在一个正确终止后启动。
    • 同意,但在我的情况下,我没有使用任何持久卷,我可以释放内存中的数据。为什么我还要为 Redis 定义一个有状态集?
    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2022-11-03
    • 1970-01-01
    • 2019-07-03
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多