はじめに
EKS を構成するときに、kubelet の Configuration や、カーネルパラメータの変更をしたい時があります。独自に AMI を作成しても良いのですが、都度 AMI を作成するのは何かと手間なので、eksctl では overrideBootstrapCommand
を指定することでカスタマイズを行える仕組みがあります。kubelet に関する config を変更できたり、任意のコマンドを実行させることができます。sysctl
でカーネルパラメータを変更したり、独自の変更が容易になっています。
また、kubelet に関する Config を変更するために、EKS で利用する AMI に 簡単なカスタマイズを行える仕組みとして /etc/eks/bootstrap.sh
があります。/etc/eks/bootstrap.sh
の引数に --kubelet-extra-args
と指定することで、kubelet に関する設定のカスタマイズが可能です。
kubelet に関するコンフィグレーションに関する情報は以下の URL をご確認ください。
- https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration
- https://github.com/awslabs/amazon-eks-ami#customizing-kubelet-config
- https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/
例えば、次の指定を行ったとします。
/etc/eks/bootstrap.sh my-cluster --kubelet-extra-args '--registry-qps=20 --registry-burst=40'
registry-qps
は、1秒あたりの Registry Pull の上限を指定しています。デフォルトは 5 になっていますが、20 と指定することで、秒間あたり 20 回の Pull が可能になります。このように、kubelet の動作をカスタマイズする仕組みがあります。
eksctl で overrideBootstrapCommand の指定
eksctl で、EKS を作成する際の挙動を設定可能です。例えば、次のような YAML ファイルを準備します。
apiVersion: eksctl.io/v1alpha5
iam:
withOIDC: true
kind: ClusterConfig
kubernetesNetworkConfig:
ipFamily: IPv4
managedNodeGroups:
- amiFamily: AmazonLinux2
ami: ami-08ba895a802ee90a8
desiredCapacity: 2
name: ng-containerd
ssh:
allow: true
publicKeyPath: /home/ec2-user/.ssh/id_rsa.pub
overrideBootstrapCommand: |
#!/bin/bash
sudo sysctl -w kernel.sched_rt_runtime_us=-1 >> /etc/sysctl.conf
/etc/eks/bootstrap.sh eks-bootstrap01 --container-runtime containerd --kubelet-extra-args "--cpu-manager-policy=static"
metadata:
name: eks-bootstrap01
region: ap-northeast-1
version: "1.23"
vpc:
autoAllocateIPv6: false
cidr: 10.0.0.0/16
clusterEndpoints:
privateAccess: false
publicAccess: true
id: vpc-0b8b2123a16d03528
manageSharedNodeSecurityGroupRules: true
nat:
gateway: Disable
subnets:
private:
ap-northeast-1a:
az: ap-northeast-1a
cidr: 10.0.100.0/24
id: subnet-0c414bf2d11f17bba
ap-northeast-1c:
az: ap-northeast-1c
cidr: 10.0.101.0/24
id: subnet-09023225144fa1c62
ap-northeast-1d:
az: ap-northeast-1d
cidr: 10.0.102.0/24
id: subnet-0cf48d891b1bea31c
public:
ap-northeast-1a:
az: ap-northeast-1a
cidr: 10.0.0.0/24
id: subnet-0d9a1ae8571fa7c30
ap-northeast-1c:
az: ap-northeast-1c
cidr: 10.0.1.0/24
id: subnet-0355f72e6534092bf
ap-northeast-1d:
az: ap-northeast-1d
cidr: 10.0.2.0/24
id: subnet-0c4b7c352a610baf4
細かい部分は説明を省略しますが、一番重要な部分は overrideBootstrapCommand
です。Bash 形式で、EKS の Node に実行したい設定をカスタマイズしています。
-
sudo sysctl -w kernel.sched_rt_runtime_us=-1 >> /etc/sysctl.conf
: カーネルパラメータの変更 -
/etc/eks/bootstrap.sh eks-bootstrap01 --container-runtime containerd --kubelet-extra-args "--cpu-manager-policy=static"
: CPU Manager を static に指定。排他的な CPU の利用を許可する設定。
overrideBootstrapCommand: |
#!/bin/bash
sudo sysctl -w kernel.sched_rt_runtime_us=-1 >> /etc/sysctl.conf
/etc/eks/bootstrap.sh eks-bootstrap01 --container-runtime containerd --kubelet-extra-args "--cpu-manager-policy=static"
このように、Bash 形式で、好きなコマンドを任意に変更可能です。適宜、ユースケースに合わせてカスタムされるのが良いと思います。
なお、上記のファイルを準備したあとに、eksctl create cluster
で実際に EKS クラスターを作成できます。
eksctl create cluster \
-f eksctl-configure.yaml
参考 URL