在GKE上为节点配置net.core.somaxconn

时间:2017-05-12 13:28:20

标签: python kubernetes uwsgi google-kubernetes-engine

我们有一个Python uWSGI REST API服务器,可以处理大量的调用。当api通过外部资源调用峰值时,队列立即被填充,因为默认情况下uWSGI队列大小设置为100。经过一番挖掘后,我们发现这是根据服务器的net.core.somaxconn设置。在Kubernetes的情况下,因为节点的设置。

我们发现此文档使用sysctl来更改net.core.somaxconn。 https://kubernetes.io/docs/concepts/cluster-administration/sysctl-cluster/ 但这不适用于GKE,因为它需要docker 1.12或更新版本。

我们也发现了这个片段,但这看起来真的很糟糕。 https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/sysctl/change-proc-values-rc.yaml DaemonSet不是更好而不是伴侣容器吗?

将net.core.somaxconn设置为高于节点池所有节点上的默认值的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

一种好的方法是使用具有特权的守护程序集,因为它可以在所有现有和新节点上运行。 只需使用提供的启动容器,例如:

https://github.com/kubernetes/contrib/blob/master/startup-script/startup-script.yml

针对您的情况:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: startup
spec:
  updateStrategy:
    type: RollingUpdate
  template:
    spec:
      hostPID: true
      containers:
        - name: system-tweak
          image: gcr.io/google-containers/startup-script:v1
          imagePullPolicy: Always
          securityContext:
            privileged: true
          env:
          - name: STARTUP_SCRIPT
            value: |
              #! /bin/bash
              echo 32768 > /proc/sys/net/core/somaxconn