草庐IT

mongodb - Kubernetes 杀死 Mongo 容器

coder 2023-10-31 原文

我们遇到这样一种情况,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"
              }
            },

最佳答案

基于 MongoDB, Inc. 的 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"})

这也很好用,但通过 kuberneties yaml 文件看起来更容易,因为要发出命令,您必须等到 mongo 启动并运行。

注意: 确保您的:

      resources:
        limits:
          memory:

允许额外的 1G 给系统。

关于mongodb - Kubernetes 杀死 Mongo 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564650/

有关mongodb - Kubernetes 杀死 Mongo 容器的更多相关文章

  1. ruby - 在 ruby​​ 中杀死一个名为 using open3 的进程 - 2

    我正在使用命令行程序,它的工作原理如下:$ROUTE_TO_FOLDER/app如果“longtext”是使用“app”需要的参数编写的,那么它将用结果填充一个文本文件。如果没有,它将连续用点填充文本文件(为了避免这种情况,我无法处理或修改“app”的代码)。在ruby​​脚本中有这样一行:text="longtextthatwillbeusedbyapp"output=system("ROUTE_TO_FOLDER/app现在,如果文本写得好,就不会有问题,我会得到一个输出文件,如前所述。当文本写得不好时,问题就来了。接下来发生的是我的ruby​​脚本挂起,我不确定如何终止它。我找到

  2. ruby - 为什么退出 Ruby 线程会杀死我的整个程序? - 2

    我有这段代码:puts"Start"loopdoThread.startdoputs"Hellofromthread"exitendtext=getsputs"#{text}"endputs"Done"我希望看到“Start”后跟“Hellofromthread”,然后我可以输入会得到回显的输入。相反,我得到“Start”和“Hellofromthread”,然后程序退出。来自关于exit的文档:Terminatesthrandschedulesanotherthreadtoberun.Ifthisthreadisalreadymarkedtobekilled,exitreturnst

  3. kubernetes集群划分节点 - 2

    Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标

  4. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  5. ruby - 为什么需要 mongo 给我 LoadError : no such file to load -- openssl - 2

    我正在使用UbuntuServer10,Ruby1.9.2当我尝试要求'mongo'时它给我这个错误:irb(main):001:0>require'mongo'LoadError:nosuchfiletoload--opensslfrom/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in`require'from/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in`require'from/usr/local/lib

  6. ruby-on-rails - 工头不会杀死进程 - 2

    对于启动应用程序,我使用Foreman。工头从Procfile开始流程web:bundleexecrailsserverthin-p$PORTworker:bundleexecrakeenvironmentresque:workQUEUE=send_mailapi:bundleexecrailsserverthin-p$PORT如果我在运行foreman的控制台中按control+C,则foreman结束但运行的进程未被终止。是否有可能在工头被杀死时杀死工头运行的进程。 最佳答案 下面的示例假设使用的端口是4567,然后执行:lso

  7. ruby-on-rails - 杀死工头产生的进程 - 2

    我有以下Procfile:web:bundleexecunicorn-p$PORT-c./config/unicorn.rbredis:bundleexecredis-server/usr/local/etc/redis.confworker:bundleexecsidekiq运行$foremanstart启动Unicorn、Redis和Sidekiq,但我应该如何停止它们?杀死工头会使这三个人都离开。我可以使用ps看到这个:$psaux|grepredis|grep-vgrepme615600.00.025067841740s000S+9:36am0:01.28redis-serve

  8. ruby-on-rails - 在一个 Rails 应用程序中使用 PostgreSQL 的 MongoDB - 2

    我可以在一个Rails应用程序中同时使用MongoDB和PostgreSQL吗?具体来说,我最终会想要使用像MongoHQ这样的东西。到目前为止,我未能在实验中进行这项工作。令我担心的是,MongoDB文档特别指出我必须禁用ActiveRecord。任何建议将不胜感激。 最佳答案 您无需禁用ActiveRecord即可使用MongoDB。查看Mongoid只需将gem加上任何模型与您现有的任何ActiveRecord模型一起添加。您应该注意到MongoHQ只是MongoDB的托管服务,可以与任何对象文档映射器(ODM)一起使用。更多

  9. ruby - 使用 mongodb/mongoid 运行时更改模型 - 2

    我必须在mongoid模型中添加几个字段,我知道MongoDB没有迁移,但如果我继续而不删除数据库,使rails完全“重新生成”数据库,它不会显示或使用新的领域!去这里最好的方法是什么?有比删除/重新打开mongodb更软的东西吗?提前致谢卢卡 最佳答案 一般来说,应该可以在运行时用新字段更新旧文档。MongoDB中不需要迁移。您可能想编写rake任务以使用新字段和默认值更新旧文档。您可以通过检查那些默认值为nil的新字段来找到这些文档。更新简单风格:如果您使用默认值定义一个新字段,只要您设置了一个新值,就应该始终使用该值:应用程序

  10. ruby-on-rails - 我如何从 Ruby 代码连接到 mongodb? - 2

    我如何从Ruby代码连接到mongodb? 最佳答案 首先,您必须安装MongoDbgem:geminstallmongo然后运行代码:require'rubygems'#notnecessaryforRuby1.9require'mongo'db=Mongo::Connection.new.db("mydb")#ORdb=Mongo::Connection.new("localhost").db("mydb")#ORdb=Mongo::Connection.new("localhost",27017).db("mydb")

随机推荐