kubernetes 为AKS群集中的特定pod设置sysctl参数“net.ipv4.tcp_retries2”时出错

wfauudbj  于 2023-01-08  发布在  Kubernetes
关注(0)|答案(3)|浏览(248)

我正在处理一个需求,其中我们希望将Kubernetes POD中的特定内核参数“net.ipv4.tcp_retries2”更新为“5”。

我们使用的是AKS群集v1.21.7

我尝试使用securityContext设置上述sysctl参数,但失败了

template:
    metadata:
      labels:
        app.kubernetes.io/name: weather-forecast-api
        app.kubernetes.io/instance: RELEASE-NAME
    spec:
      serviceAccountName: RELEASE-NAME-weather-forecast-api
      securityContext:
        sysctls:
        - name: net.ipv4.tcp_retries2
          value: "5"

当我在AKS中应用上述更改时,pod无法运行并给出错误
禁用系统:“net.ipv4.tcp_retries2”未列入白名单
我知道我们可以在Kubelet级别上修改裸Kubernetes集群上的内核级别设置,但在我的示例中,它是Azure中的托管集群。

k4aesqcs

k4aesqcs1#

使用init容器设置:

...
template:
  metadata:
    labels:
      app.kubernetes.io/name: weather-forecast-api
      app.kubernetes.io/instance: RELEASE-NAME
  spec:
    serviceAccountName: RELEASE-NAME-weather-forecast-api
    initContainers:
    - name: sysctl
      image: busybox
      securityContext:
        privileged: true
      command: ["sh", "-c", "sysctl -w net.ipv4.tcp_retries2=3"]
    ...
5gfr0r5j

5gfr0r5j2#

我通过传递参数给kubelet来解决。
1.查找kubelet配置文件的路径

systemctl status kubelet

它给出了kubelet配置所在的路径,在我的例子中是**/var/lib/kubelet/config.yaml**
1.添加允许的不安全系统选项
将allowedUnsafeSysctls选项添加到文件中。

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
allowedUnsafeSysctls:
- "net.ipv4.tcp_retries2"

1.重启Kubelet

systemctl restart kubelet

完成!但是您应该确保在更改了Kubelet配置的节点上调度Pod。

xoshrz7s

xoshrz7s3#

以下步骤解决了我的问题:(用于在pod级别设置netIpv4TcpFinTimeOut值)
1.* * 创建了如下所示的配置(名称为linuxconfig.json)**
{"允许的不安全系统":[" net. *"],

"sysctls":{
            "netIpv4TcpFinTimeOut": 20,
     }

}
1.* * 使用--kubelet-config添加了节点池**
az aks节点池add-名称节点池名称-群集名称群集名称-资源组资源组名称-kubelet-config ./linuxconfig.json
1.使用以下YAML创建pod:
api版本:v1
种类:Pod
元数据:
名称:试验
规格:
安全上下文:

sysctls:

- name: net.ipv4.tcp_fin_timeout

  value: "30"

容器:

  • 产品名称:

图片:nginx

相关问题