Karpenter Controller を Fargate で動かしているけど NodeClaim が Unknown になる InvalidParameterValue: 'karpenter.k8s.aws/ec2nodeclass' is not a valid tag key
事象
Karpenter Controller Pod を Fargate で起動し、Pod Schedule を Karpenter にやってもらおうとしても Node が起動しない。
NodeClaim を調べたら以下のエラーが出ていた。
$ kubectl describe nodeclaim default-xxxx
~~~
creating instance, with fleet error(s), InvalidParameterValue: 'karpenter.k8s.aws/ec2nodeclass' is not a valid tag key.
Tag keys must match pattern ([0-9a-zA-Z\\-_+=,.@:]{1,255}), and must not be a reserved name ('.', '..', '_index'); RequestLimitExceeded: Request limit exceeded.; UnfulfillableCapac...
~~~
原因(と思われるところ)
インスタンスメタデータのタグへのアクセスを許可すると、以下の制約が発生する。 docs.aws.amazon.com
インスタンスメタデータのタグへのアクセスを許可する場合、インスタンスタグキーが具体的な制限の対象になります。 コンプライアンスに違反すると、新しいインスタンスの起動が失敗したり、既存のインスタンスのエラーが発生します。制限は次のとおりです。 - 英字 (a-z、A-Z)、数字 (0-9)、および + - = . , _ : @ の各文字のみを含めることができます。 - スペースと / を含めることはできません。 - . (1 つのピリオド)、.. (2 つのピリオド)、または _index だけで構成することはできません。 詳細については、「タグの制限」を参照してください。
NodeClaim は karpenter.k8s.aws/ec2nodeclass などの / (スラッシュ) 付のタグを使用するため、上記のエラーが発生していた。
対処方法
AWS コンソールの [EC2]-[ダッシュボード]-[アカウントの属性]-[データ保護とセキュリティ]-[IMDS デフォルト]-[管理]から「メタデータ内のタグへのアクセス」を無効化した。
