文档首页> 云容器引擎 CCE> 最佳实践> 网络> 通过配置容器内核参数增大监听队列长度
更新时间:2022-05-10 GMT+08:00
分享

通过配置容器内核参数增大监听队列长度

使用场景

net.core.somaxconn默认监听队列(backlog)长度为128,当服务繁忙不能满足要求时,需要增大监听队列长度。

操作步骤

  1. 登录对应节点。

    • 1.15及以上版本集群

      登录CCE控制台,在左侧导航栏中选择“集群管理”,单击集群后的,修改kubelet配置参数。

      default节点池不支持在界面修改,请修改/var/paas/kubernetes/kubelet/kubelet文件。

    • 1.13及以下版本的集群

      编辑“/var/paas/kubernetes/kubelet/kubelet”文件,开启net.core.somaxconn开关。

      --allowed-unsafe-sysctls=net.core.somaxconn

      1.13及以下版本的集群在修改kubelet后,如果升级集群到更高版本则该配置会还原。

  2. 重启kubelet。

    • 1.15及以上版本的集群

      通过在CCE控制台中修改节点池的“配置管理”参数后,后台会自动重启kubelet,不需要手动重启。

    • 1.13版本集群

      systemctl restart kubelet

      查看kubelet状态:

      systemctl status kubelet

    • 1.11版本集群:

      su paas -c '/var/paas/monit/bin/monit restart kubelet'

      查看kubelet状态:

      su paas -c '/var/paas/monit/bin/monit summary'

    重启1.13版本集群示例如下:

  3. 创建pod安全策略。

    CCE从1.17.17集群版本开始,kube-apiserver开启了pod安全策略,需要在pod安全策略的allowedUnsafeSysctls中增加net.core.somaxconn配置才能生效(1.17.17以下版本的集群可跳过此步骤)。

    • CCE的安全策略介绍,详情请参见Pod安全策略配置
    • K8S社区安全策略介绍,详情请参见PodSecurityPolicy
    • 对于开启net.core.somaxconn开关的集群,需要在对应的Pod安全策略的allowedUnsafeSysctls中增加此项配置,如创建新的Pod安全策略,示例如下:
      apiVersion: policy/v1beta1
      kind: PodSecurityPolicy
      metadata:
        annotations:
          seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
        name: sysctl-psp
      spec:
        allowedUnsafeSysctls:
        - net.core.somaxconn
        allowPrivilegeEscalation: true
        allowedCapabilities:
        - '*'
        fsGroup:
          rule: RunAsAny
        hostIPC: true
        hostNetwork: true
        hostPID: true
        hostPorts:
        - max: 65535
          min: 0
        privileged: true
        runAsGroup:
          rule: RunAsAny
        runAsUser:
          rule: RunAsAny
        seLinux:
          rule: RunAsAny
        supplementalGroups:
          rule: RunAsAny
        volumes:
        - '*'

      创建Pod安全策略sysctl-psp后,还需要为它绑定RBAC权限控制。

      示例如下:

      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: sysctl-psp
      rules:
        - apiGroups:
            - "*"
          resources:
            - podsecuritypolicies
          resourceNames:
            - sysctl-psp
          verbs:
            - use
      
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: sysctl-psp
      roleRef:
        kind: ClusterRole
        name: sysctl-psp
        apiGroup: rbac.authorization.k8s.io
      subjects:
      - kind: Group
        name: system:authenticated
        apiGroup: rbac.authorization.k8s.io

  4. 登录CCE控制台,创建工作负载。

    创建工作负载时,“高级设置 > 调度策略 > 工作负载和节点的亲和性 > 与节点的亲和性”中选择1中登录的节点。

  5. 创建工作负载,配置内核参数值,且配置与1中节点亲和。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        description: ''
      labels:
        appgroup: ''
      name: test1
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: test1
      template:
        metadata:
          annotations:
            metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
          labels:
            app: test1
        spec:
          containers:
            - image: 'nginx:1.14-alpine-perl'
              name: container-0
              resources:
                requests:
                  cpu: 250m
                  memory: 512Mi
                limits:
                  cpu: 250m
                  memory: 512Mi
          imagePullSecrets:
            - name: default-secret
          securityContext:
            sysctls:
              - name: net.core.somaxconn
                value: '3000'
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                  - matchExpressions:
                      - key: kubernetes.io/hostname
                        operator: In
                        values:
                          - 192.168.x.x       #节点名称

  6. 登录1中的节点,进入容器查看参数配置是否生效。

    例如,查看工作负载containerid ,test为工作负载名称。

    docker ps –a |grep test

    进入容器。

    docker exec -it containerid /bin/sh

    查询配置参数是否生效。

    sysctl -a |grep somax

    图1 查看参数配置

分享:

    相关文档

    相关产品

close