【问题标题】:How much memory / CPU to allocate to Redis instance?为 Redis 实例分配多少内存/CPU?
【发布时间】:2021-04-19 23:06:12
【问题描述】:

我希望将 Redis 实例部署到 Kubernetes 集群。

在Kubernetes官网here,他们使用如下yaml配置为例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-master
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      containers:
      - name: master
        image: k8s.gcr.io/redis:e2e  # or just image: redis
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379

在使用 Redis 实例进行缓存时,100m CPU 和 100Mi 内存是一个很好的目标吗?应该设置什么限制?

【问题讨论】:

  • 尝试对此进行负载测试,然后只有您可以定义每个容器的请求和限制
  • 以突发模式运行 pod 2 周,并监控您的内存和 cpu 消耗。然后设置请求和限制设置比请求稍大。

标签: docker kubernetes deployment redis


【解决方案1】:

您的问题没有正确答案。在这种情况下,一切都取决于您的需求。

你必须考虑你的节点上的资源,你的resource requests/limits,你会使用HPA还是VPA,是在本地环境还是在云环境,这个节点上会部署多少个pod,你会用什么缓存等

背景

在您的Deployment 中,您仅设置了requests,因此redis pod 将始终至少分配CPU: 100mRAM: 100Mi。由于没有指定limits,它可能会使用越来越多的资源,直到由于资源不足而可能发生一些错误(例如它可以terminate pods 而不指定requests)。 请记住,使用 Kubernetes 部署的其他 pod 也有一些特定的 requests/limits,例如 kube-proxykube-dns 等。

要检查节点的当前资源使用情况,您可以使用命令:

$ kubectl top nodes
NAME                                       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
gke-cluster-1-default-pool-55c97a92-m2bb   61m          6%     718Mi           25%
gke-cluster-1-default-pool-55c97a92-s907   108m         11%    748Mi           26%

如果您将使用kubectl describe node <NodeName>describe 节点,您可以在Capacity 部分查看节点总资源,在Allocatable 中查看kubernetes 已使用的资源。所以Capacity - Allocatable 是你在这个特定时刻的免费资源的价值(它可能会因为requests/limits 而改变)。

另外,您可以通过Redis Request/limits查看文章。

结论

Redis pod 可以与requests: 100m and 100Mi 一起部署。由于没有设置limitsRedis pod 可能会使用越来越多的资源,这可能导致其他 pod 终止。如果此节点仅专用于Redis pod,则可以使用最大可用资源,Capacity - Allocatable 的值。现在,您可以将限制设置为node resources 的一半,稍后根据结果进行更改。如果 pod 达到limits,您可以将其更改为更高的值,如果相反,您可以更改为更低的值。

【讨论】:

    【解决方案2】:

    这取决于您的情况。如果redis用的比较多,应该缓存很多,可能100m内存太少了。

    也许你可以使用一些工具来监控你的 redis,看看它真正需要什么。

    kubectl top pods
    

    向您显示 pod 的当前使用情况。给它一个压力测试,你会看到它需要多少。如果您有 prometheus 或其他监控工具之类的工具会更好,它们还可以告诉您有关驱逐和其他行为的统计信息。

    我还会从 bitnami 购买 redis helm 图表。它允许您通过设置值或自定义值文件以简单的方式配置您的 redis。这些也是经过生产验证的。

    https://github.com/bitnami/charts/tree/master/bitnami/redis

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2011-03-03
      相关资源
      最近更新 更多