血と汗となみだを流す

個人の思ったこと、やったことの吐き出し口です。

Karpenter Controller を Fargate で動かしているけど Pod が起動しない EC2MetadataRequestError

事象

Karpenter Controller Pod を Fargate で起動しようとしたら失敗。以下のエラーが出力された。

$ kubectl logs -n karpenter karpenter-db9c68466-8jzjj
panic: failed to get region from metadata server: EC2MetadataRequestError: failed to get EC2 instance identity document
caused by: RequestError: send request failed
caused by: Get "http://169.254.169.254/latest/dynamic/instance-identity/document": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

goroutine 1 [running]:
github.com/samber/lo.must({0x296ac40, 0xc000942dc0}, {0xc000a1fbf8, 0x1, 0x1})
        github.com/samber/lo@v1.46.0/errors.go:51 +0x1bb
github.com/samber/lo.Must[...](...)
        github.com/samber/lo@v1.46.0/errors.go:65
github.com/aws/karpenter-provider-aws/pkg/operator.NewOperator({0x347c438, 0xc000706f00}, 0xc000653980)
        github.com/aws/karpenter-provider-aws/pkg/operator/operator.go:110 +0x213
main.main()
        github.com/aws/karpenter-provider-aws/cmd/controller/main.go:32 +0x2a

原因(と思われるところ)

アカウントレベルでIMDS(インスタンスメタデータサービス)を有効化していなかった。

対処方法

AWS コンソールの [EC2]-[ダッシュボード]-[アカウントの属性]-[データ保護とセキュリティ]-[IMDS デフォルト]-[管理]からインスタンスメタデータサービスを有効化した。
メタデータのバージョンは「V2のみ(トークンは必須)」

Pod を削除して再起動したところ、無事 Fargate 上で Pod が起動した。

$ kubectl get pod -n karpenter -o wide
NAME                        READY   STATUS    RESTARTS   AGE     IP                NODE                                      NOMINATED NODE   READINESS GATES
karpenter-db9c68466-h844g   1/1     Running   0          4m21s   192.168.106.138   fargate-ip-192-168-106-138.ec2.internal   <none>           <none>
karpenter-db9c68466-jr8kt   1/1     Running   0          4m22s   192.168.76.92     fargate-ip-192-168-76-92.ec2.internal     <none>           <none>

補足

インスタンスメタデータサービスの有効化はリージョン単位で実行する必要がある。

プライバシーポリシー