Kubernetes终止Mongo容器

5
我们有一个情况,当Kubernetes达到容器的最大内存限制时,它会杀死Mongo容器。尽管这是预期的K8s工作方式,但感觉Mongo没有重复使用其内存,因为即使用户负载和交易相同,它仍然不断增加内存使用量。因此,需要检查如何限制Mongo达到容器的最大内存或定期刷新Mongo内存。
我已经尝试增加内存,这有助于Pod在K8杀死之前运行几天。
     "containers": [
          {
            "name": "mongo",
            "image": "dockercentral.com:5870/com.public/mongodb:3.6",
            "ports": [
              {
                "containerPort": 27017,
                "protocol": "TCP"
              }
            ]      
"resources": {
              "limits": {
                "cpu": "1",
                "memory": "24Gi"
              },
              "requests": {
                "cpu": "250m",
                "memory": "24Gi"
              }
            }
   "name": "MONGO_SECURITY",
                "value": "true"
              }
            ],
            "resources": {
              "limits": {
                "cpu": "500m",
                "memory": "1Gi"
              },
              "requests": {
                "cpu": "150m",
                "memory": "256Mi"
              }
            },

3
您正在运行哪个具体版本的MongoDB服务器?您是否设置了cacheSizeGB(如果是,则设置为多少)?根据MongoDB生产注意事项:如果您在容器中运行mongod(例如lxc,cgroups,Docker等),该容器没有访问系统中所有可用RAM的权限,则必须将storage.wiredTiger.engineConfig.cacheSizeGB设置为小于容器可用RAM数量的值。 - Stennie
MongoDB 3.6版本,cacheSizeGB值未设置,尽管它将考虑容器内存限制并自动分配wiredTiger缓存..我现在已经设置了wiredTigerCacheSizeGB..将检查它是否能正常工作。 - Panda
3
在可靠地检测容器内存方面存在一些历史性挑战,所以当前的建议是显式设置wiredTigerCacheSizeGB。如果将wiredTigerCacheSizeGB设置为与默认值类似(可用RAM的50%-1GB),则内存使用应更加稳定。注意:通过SERVER-16571在MongoDB 4.1.9开发分支中实现了改进,这已被迁移到即将发布的3.6.13和4.0.9服务器版本中。 - Stennie
1个回答

1
根据MongoDB公司的Stennie在评论中的写作,以下命令在kube .yaml文件中适用于我:
      command:
        - "sh"
        - "-c"
        - >
          echo "storage:" >>  /etc/mongod.conf;
          echo "    wiredTiger:" >>  /etc/mongod.conf;
          echo "       engineConfig:" >>  /etc/mongod.conf;
          echo "          cacheSizeGB: 2" >>  /etc/mongod.conf;
          echo "replication:" >> /etc/mongod.conf;
          echo "  replSetName: YOUR_REPL_NAME" >> /etc/mongod.conf;
          mongod --config /etc/mongod.conf;

还有一种在运行时设置它的方法:

db.adminCommand( { "setParameter": 1, "wiredTigerEngineRuntimeConfig":"cache_size=2G"})

这样也是可以的,但是通过kubernetes的yaml文件看起来更容易,因为如果要发出命令,您必须等待mongo启动并运行。

注意: 确保您的:

      resources:
        limits:
          memory:

允许系统使用额外的1G空间。

1
设置 wiredTigerCacheSizeGB 帮助解决了问题。感谢 @Stennie。对不起,@user2932688 和大家回复晚了,我正在测试更改,并在生产环境中等待一段时间以确保修复工作正常。 - Panda
@Panda,当我的mongodb pod重新启动时,我遇到了同样的问题,我认为这是由于内存使用过高造成的。但是我的k8容器没有任何资源限制。我很好奇你说的wiredTigerCache的大小是多少,而且这对你仍然有效吗? - Kay
@Kay,是的,WiredTigerCache对我有用。我想知道为什么你的容器没有资源限制,这是任何人在容器中使用的常见功能。 - Panda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接