修改k8s内核参数

发布于 22 天前  50 次阅读


1、场景

由于haproxy的随机端口,是通过系统分配的,也就是32768 60999,,但是业务端口的随机端口范围是30000-40000会偶尔冲突,导致服务起不来

猜测有2个原因

1、临时端口冲突
2、haproxy的bing端口和游戏端口冲突(因为可能分配到同一台node)

listen 910001007_37186_2887385566
        bind *:37186
        server 910001007_37186_2887385566 172.26.1.222:37186 maxconn 20480

对应的解决办法:

1、临时端口冲突

容器,里面是不可以修改内核参数的,无论是docker还是k8s
报错:

参考资料
k8s: https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/
docker: https://blog.csdn.net/xingzuo_1840/article/details/129247014

docker的解决办法:

  emqx:
    image: "emqx/emqx:4.3.11"
    sysctls:
     - net.ipv4.ip_local_port_range=1024 65535

或者直接启动指定

docker run --sysctl net.ipv4.ip_local_port_range="40000 65000" -d --name test  helloworld:latest

测试:

docker exec jenkins sysctl net.ipv4.ip_local_port_range

k8s的解决办法:

spec:
  # 确保没有启用 hostNetwork
  #hostNetwork: false
  securityContext:
    sysctls:
      - name: net.ipv4.ip_local_port_range
        value: "40000 65000"

如果是pod的,需要先删除再创建,因为创建了,就不允许更改内核之类的

kubectl delete pod test-sysctl  # 删除旧 Pod
kubectl apply -f test.yaml      # 创建新 Pod

如果通过 Deployment 管理 Pod(生产环境最佳实践)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-sysctl-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-sysctl
  template:
    metadata:
      labels:
        app: test-sysctl
    spec:
      securityContext:
        sysctls:
          - name: net.ipv4.ip_local_port_range
            value: "40000 65000"
      containers:
      - name: busybox
        image: busybox
        command: ["/bin/sh", "-c", "sleep 3600"]
kubectl apply -f test.yaml  # 自动触发 Pod 重建

上面的都是安全的参数的,如果是不安全的,需要额外加,比如说开特权用户的权限

securityContext:
  privileged: true  # 启用特权模式(不推荐,存在安全隐患)

测试

kubectl exec test-sysctl-pod -- sysctl net.ipv4.ip_local_port_range
# 预期输出:net.ipv4.ip_local_port_range = 40000 65000

2、 haproxy绑定的端口和游戏端口冲突

解决办法:修改haproxy

{{ range gets "/YunFan/roomsvr/*" }}{{ $data := json .Value }}
listen {{ base .Key }}
        bind *:{{ $data.port | math.Add 10000 }}  <!-- 关键修改:端口值 +10000 -->
        server {{ base .Key }} {{ $data.ip }}:{{ $data.port }} maxconn 20480
{{ end }}