Amazon EKSを使う際、お世話になるのがEKSアドオンという仕組みです。今回はこのEKSアドオンの設定をする際のパラメータをどのように書けばいいのかということについて記録します。
仕事を進めている際、このEKS アドオンの設定を書いているときに色々詰まったので備忘録代わりのメモです。
なお、この記事で書いていることはAWS公式の以下の記事を読み通せば分かる内容なので、深い内容が知りたい人はこの記事を丹念に読むといいと思います。
aws.amazon.com
DescribeAddonConfiguration APIを呼び出すとよい
さっそく答えですが、Amazon EKSに用意されている新しめのAPI、DescribeAddonConfiguration APIを呼び出せばconfigurationValues
パラメータに入れるべき設定のスキーマをJSONスキーマの形で知ることができます。
docs.aws.amazon.com
もちろん、APIだけでなく、AWSCLIにも同APIを呼び出せるeks describe-addon-configuration
コマンドが用意されています。各自で使いやすい方を使うといいでしょう。
awscli.amazonaws.com
どちらも、アドオンの名前とバージョンを指定して呼び出す必要があります。
例えば、記事執筆時点で最新バージョンであるAmazon VPC CNIプラグインのバージョンv1.16.2-eksbuild.1
の設定のスキーマを知りたいときはこんな感じでAWSCLIを実行し、jqでパースすれば、望みの設定のスキーマを得られます。
aws eks describe-addon-configuration \
--addon-name vpc-cni \
--addon-version v1.16.2-eksbuild.1 | \
jq -r '.configurationSchema' | \
jq -r '.'
返ってくる値は以下の様な感じです。
{
"$ref": "#/definitions/VpcCni",
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"Affinity": {
"type": [
"object",
"null"
]
},
"EniConfig": {
"additionalProperties": false,
"properties": {
"create": {
"type": "boolean"
},
"region": {
"type": "string"
},
"subnets": {
"additionalProperties": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"securityGroups": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"id"
],
"type": "object"
},
"minProperties": 1,
"type": "object"
}
},
"required": [
"create",
"region",
"subnets"
],
"type": "object"
},
"Env": {
"additionalProperties": false,
"properties": {
"ADDITIONAL_ENI_TAGS": {
"type": "string"
},
"ANNOTATE_POD_IP": {
"format": "boolean",
"type": "string"
},
"AWS_EC2_ENDPOINT": {
"type": "string"
},
"AWS_EXTERNAL_SERVICE_CIDRS": {
"type": "string"
},
"AWS_MANAGE_ENIS_NON_SCHEDULABLE": {
"format": "boolean",
"type": "string"
},
"AWS_VPC_CNI_NODE_PORT_SUPPORT": {
"format": "boolean",
"type": "string"
},
"AWS_VPC_ENI_MTU": {
"format": "integer",
"type": "string"
},
"AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG": {
"format": "boolean",
"type": "string"
},
"AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS": {
"type": "string"
},
"AWS_VPC_K8S_CNI_EXTERNALSNAT": {
"format": "boolean",
"type": "string"
},
"AWS_VPC_K8S_CNI_LOGLEVEL": {
"type": "string"
},
"AWS_VPC_K8S_CNI_LOG_FILE": {
"type": "string"
},
"AWS_VPC_K8S_CNI_RANDOMIZESNAT": {
"type": "string"
},
"AWS_VPC_K8S_CNI_VETHPREFIX": {
"type": "string"
},
"AWS_VPC_K8S_PLUGIN_LOG_FILE": {
"type": "string"
},
"AWS_VPC_K8S_PLUGIN_LOG_LEVEL": {
"type": "string"
},
"CLUSTER_ENDPOINT": {
"type": "string"
},
"DISABLE_INTROSPECTION": {
"format": "boolean",
"type": "string"
},
"DISABLE_LEAKED_ENI_CLEANUP": {
"format": "boolean",
"type": "string"
},
"DISABLE_METRICS": {
"format": "boolean",
"type": "string"
},
"DISABLE_NETWORK_RESOURCE_PROVISIONING": {
"format": "boolean",
"type": "string"
},
"DISABLE_POD_V6": {
"format": "boolean",
"type": "string"
},
"ENABLE_BANDWIDTH_PLUGIN": {
"format": "boolean",
"type": "string"
},
"ENABLE_POD_ENI": {
"format": "boolean",
"type": "string"
},
"ENABLE_PREFIX_DELEGATION": {
"format": "boolean",
"type": "string"
},
"ENABLE_V4_EGRESS": {
"format": "boolean",
"type": "string"
},
"ENABLE_V6_EGRESS": {
"format": "boolean",
"type": "string"
},
"ENI_CONFIG_ANNOTATION_DEF": {
"type": "string"
},
"ENI_CONFIG_LABEL_DEF": {
"type": "string"
},
"INTROSPECTION_BIND_ADDRESS": {
"type": "string"
},
"IP_COOLDOWN_PERIOD": {
"format": "integer",
"type": "string"
},
"MAX_ENI": {
"format": "integer",
"type": "string"
},
"MINIMUM_IP_TARGET": {
"format": "integer",
"type": "string"
},
"POD_SECURITY_GROUP_ENFORCING_MODE": {
"type": "string"
},
"WARM_ENI_TARGET": {
"format": "integer",
"type": "string"
},
"WARM_IP_TARGET": {
"format": "integer",
"type": "string"
},
"WARM_PREFIX_TARGET": {
"format": "integer",
"type": "string"
}
},
"title": "Env",
"type": "object"
},
"Init": {
"additionalProperties": false,
"properties": {
"env": {
"$ref": "#/definitions/InitEnv"
},
"resources": {
"$ref": "#/definitions/Resources"
}
},
"title": "Init",
"type": "object"
},
"InitEnv": {
"additionalProperties": false,
"properties": {
"DISABLE_TCP_EARLY_DEMUX": {
"format": "boolean",
"type": "string"
},
"ENABLE_V6_EGRESS": {
"format": "boolean",
"type": "string"
}
},
"title": "InitEnv",
"type": "object"
},
"Limits": {
"additionalProperties": false,
"properties": {
"cpu": {
"type": "string"
},
"memory": {
"type": "string"
}
},
"title": "Limits",
"type": "object"
},
"NodeAgent": {
"additionalProperties": false,
"properties": {
"conntrackCacheCleanupPeriod": {
"format": "integer",
"type": "integer"
},
"enableCloudWatchLogs": {
"format": "boolean",
"type": "string"
},
"enablePolicyEventLogs": {
"format": "boolean",
"type": "string"
},
"enabled": {
"type": "boolean"
},
"healthProbeBindAddr": {
"format": "integer",
"type": "string"
},
"metricsBindAddr": {
"format": "integer",
"type": "string"
},
"resources": {
"$ref": "#/definitions/Resources"
}
},
"title": "NodeAgent",
"type": "object"
},
"Resources": {
"additionalProperties": false,
"properties": {
"limits": {
"$ref": "#/definitions/Limits"
},
"requests": {
"$ref": "#/definitions/Limits"
}
},
"title": "Resources",
"type": "object"
},
"Tolerations": {
"additionalProperties": false,
"items": {
"type": "object"
},
"type": "array"
},
"VpcCni": {
"additionalProperties": false,
"properties": {
"affinity": {
"$ref": "#/definitions/Affinity"
},
"branchENICooldown": {
"type": "integer"
},
"enableNetworkPolicy": {
"format": "boolean",
"type": "string"
},
"enableWindowsIpam": {
"format": "boolean",
"type": "string"
},
"enableWindowsPrefixDelegation": {
"format": "boolean",
"type": "string"
},
"eniConfig": {
"$ref": "#/definitions/EniConfig"
},
"env": {
"$ref": "#/definitions/Env"
},
"init": {
"$ref": "#/definitions/Init"
},
"livenessProbeTimeoutSeconds": {
"type": "integer"
},
"minimumWindowsIPTarget": {
"type": "integer"
},
"nodeAgent": {
"$ref": "#/definitions/NodeAgent"
},
"podAnnotations": {
"additionalProperties": {
"not": {
"type": [
"object",
"array",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"podLabels": {
"additionalProperties": {
"not": {
"type": [
"object",
"array",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"readinessProbeTimeoutSeconds": {
"type": "integer"
},
"resources": {
"$ref": "#/definitions/Resources"
},
"tolerations": {
"$ref": "#/definitions/Tolerations"
},
"warmWindowsIPTarget": {
"type": "integer"
},
"warmWindowsPrefixTarget": {
"type": "integer"
}
},
"title": "VpcCni",
"type": "object"
}
},
"description": "vpc-cni"
}
JSONスキーマに慣れてない私からすると大分読みにくいのですが、これでconfigurationValuesに書くべき値がどんなものかを調べながら書けるようになりました。
このENIConfig絡みの設定でまた色々と詰まったのですが、それはまた別記事にして書こうと思います。