EKS Pod의 Keep Alive 설정

  • EKS pod의 keep alive 설정을 위해 unsafe sysctls enable하는 방법
  • unsafe sysctls enable은 kubelet extra arguments에 ‘–allowed-unsafe-sysctls' 파라미터를 통해 가능하십니다 [1].
  • EKS에서 kubelet arguments는 기본적으로 node가 생성될 때 bootstrap 스크립트[2]에 의해 설정됩니다.
  • '–allowed-unsafe-sysctls' 파라미터가 설정된 kubelet을 기동하는 node group을 생성하기 위해, eksctl config file 설정 [3] 중 ‘overrideBootstrapCommand' 설정을 통해 bootstrap script를 지정하실 수 있으며 해당 설정을 사용하기위해서는 Custom AMI가 지정되어야 합니다.

  • 참고로 한번 생성된 node group의 설정을 수정하는 것은 불가능하므로 [4] 새로운 설정을 위해서는 node group을 새로 생성해주셔야 합니다.

참고 코드 스니펫입니다.

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
spec:
  containers:
  - name: ubuntu
    image: ubuntu
    command: ["sleep"]
    args: ["1d"]
  securityContext:
    sysctls:
    - name: net.ipv4.tcp_keepalive_intvl
      value: "60"

eksctl-config.yaml

apiVersion: eksctl.io/v1alpha5 
kind: ClusterConfig

metadata:
  name: <cluster name>
  region: <region>

managedNodeGroups:
- name: <nodegroup name>
  ami: <ami id>
  amiFamily: AmazonLinux2
  minSize: 0
  maxSize: 10
  desiredCapacity: 2
  ssh:
    allow: true
    publicKeyName: <public key>
  overrideBootstrapCommand: |
    #!/bin/bash
    set -ex
    /etc/eks/bootstrap.sh <cluster name> --kubelet-extra-args "--node-labels=alpha.eksctl.io/cluster-name=<cluster name>,alpha.eksctl.io/nodegroup-name=<nodegroup-name>,eks.amazonaws.com/nodegroup=<nodegroup-name>,eks.amazonaws.com/nodegroup-image=<ami  id> --allowed-unsafe-sysctls 'net.ipv4.tcp_keepalive_intvl'"
  • 테스트 결과 $ kc exec -it ubuntu – sysctl -a | grep -i keepalive
    net.ipv4.tcp_keepalive_intvl = 60
    net.ipv4.tcp_keepalive_probes = 9
    net.ipv4.tcp_keepalive_time = 7200
    
  • 위의 eksctl config file에서는 ‘–allowed-unsafe-sysctls' 파라미터 테스트를 위해 overrideBootstrapCommand의 최소한의 설정을 한 것
  • 환경을 고려하여 충분한 테스트 후 적용하시길 추천함
  • 관련 더 자세한 내용은 다음 문서[5, 6, 7]를 참조 가능

  • 참고로 일시적인 파라미터 테스트를 위해 노드 접속 후 직접 kubelet config file을 수정하시어 kubelet restart 하셔서 확인해 볼수 있음

[1] https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/
[2] https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh
[3] https://eksctl.io/usage/schema/#nodeGroups-overrideBootstrapCommand
[4] https://eksctl.io/usage/managing-nodegroups/#nodegroup-immutability
[5] https://aws.amazon.com/blogs/containers/introducing-launch-template-and-custom-ami-support-in-amazon-eks-managed-node-groups/
[6] https://eksctl.io/usage/eks-managed-nodes/#creating-managed-nodegroups
[7] https://eksctl.io/announcements/nodegroup-override-announcement/