通过配置容器内核参数增大监听队列长度
使用场景
net.core.somaxconn默认监听队列(backlog)长度为128,当服务繁忙不能满足要求时,需要增大监听队列长度。
操作步骤
- 登录对应节点。
- 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后,如果升级集群到更高版本则该配置会还原。
- 1.15及以上版本集群
- 重启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版本集群示例如下:
- 1.15及以上版本的集群
- 创建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
- 登录CCE控制台,创建工作负载。
创建工作负载时,“高级设置 > 调度策略 > 工作负载和节点的亲和性 > 与节点的亲和性”中选择1中登录的节点。
- 创建工作负载,配置内核参数值,且配置与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 #节点名称
- 登录1中的节点,进入容器查看参数配置是否生效。
例如,查看工作负载containerid ,test为工作负载名称。
docker ps –a |grep test
进入容器。
docker exec -it containerid /bin/sh
查询配置参数是否生效。
sysctl -a |grep somax
图1 查看参数配置
