kubernetes
kube-aws

kube-awsのカーネルパラメータチューニング

More than 1 year has passed since last update.

背景

ホストOS(CoreOS)のデフォルトのカーネルパラメータがいくつか渋かったのでチューニングしたかった。
kubernetesのノードレベルでオートスケールする想定なので、スケール時にチューニングされている必要があった。
kube-awsの customFilescustomSystemdUnits で実装することでチューニング済みのノードが生成されるようになった。

現状確認

パラメータはこちらの記事を参考にした。
Dockerホストのパフォーマンスを引き出すTCPカーネルパラメータチューニング

CoreOS Stable(1520.6.0)のデフォルトのカーネルパラメータはこんな感じ。
sysctl -a とか sysctl net.core.somaxconn で確認できる。記事で言われている値がけっこう渋い。

fs.file-max = 400143
net.core.somaxconn = 128
net.ipv4.tcp_max_syn_backlog = 128
net.core.netdev_max_backlog = 1000
net.ipv4.ip_local_port_range = 32768    60999
net.ipv4.tcp_tw_reuse = 0

設定

customFiles だけでは適用されないので customSystemdUnits の設定も使う。
実際のcluster.yamlの設定はこちら。clusterをアップデートしたらパラメータの反映を確認できた。

      # User defined files that will be added to the NodePool cloud-init configuration in the "write_files:" section.
      customFiles:
        - path: "/etc/sysctl.d/nf.conf"
          permissions: 0644
          content: |
            net.core.somaxconn = 65535
            net.ipv4.tcp_max_syn_backlog = 65535
            net.core.netdev_max_backlog = 16384
            net.ipv4.ip_local_port_range = 1024 65535
            net.ipv4.tcp_tw_reuse = 1

      # User defined systemd units that will be added to the NodePool cluster cloud-init configuration in the "units:" section.
      customSystemdUnits:
        - name: update-sysctl.service
          command: start
          enable: true
          content: |
            [Unit]
            Description=Update sysctl values written by customFiles
            [Service]
            ExecStart=/usr/lib/systemd/systemd-sysctl