【问题标题】:Error setting sysctl parameters "net.ipv4.tcp_retries2" for a specific pod in the AKS cluster为 AKS 群集中的特定 pod 设置 sysctl 参数“net.ipv4.tcp_retries2”时出错
【发布时间】:2022-07-18 15:27:10
【问题描述】:

我正在处理一项要求,我们希望将 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 无法运行并出现错误

禁止的 sysctl:“net.ipv4.tcp_retries2”未列入白名单

我知道我们可以在裸机 Kubernetes 集群上修改 Kubelet 级别的内核级别设置,但在我的例子中,它是来自 Azure 的托管集群。

【问题讨论】:

    标签: kubernetes azure-aks


    【解决方案1】:

    使用初始化容器来设置:

    ...
    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"]
        ...
    

    【讨论】:

    • 此解决方案有效,但您是否发现在生产中使用 privileged:true 存在任何安全问题?
    • 上述权限设置仅适用于初始化容器。您的其他容器可以保持无特权。
    • 谢谢,伙计。只是为了理解,您能否解释一下 initContainers 和容器如何共享相同的内核设置?还有为什么它不会影响其他 POD 内核设置以及实际节点的 net.ipv4.tcp_retries2?任何文档供参考?我的理解是每个容器都是独立运行的,那么 initConatiner 的变化如何反映在普通容器中?
    • 要介绍的内容很多...这里有一个good article 介绍。
    【解决方案2】:

    我通过将参数传递给 kubelet 来解决。

    1. 找到kubelet配置文件的路径
    systemctl status kubelet
    

    它给出了 kubelet 配置所在的路径。就我而言,它是 /var/lib/kubelet/config.yaml

    1. 添加 allowedUnsafeSysctls 选项

    在文件中添加 allowedUnsafeSysctls 选项。

    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    ...
    allowedUnsafeSysctls:
    - "net.ipv4.tcp_retries2"
    
    1. 重启 Kubelet
    systemctl restart kubelet
    

    完成!但是你应该确保 pod 应该被调度到 kubelet 配置发生变化的节点上。

    【讨论】:

      猜你喜欢
      • 2015-11-23
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多