Controller Configを利用して、CrossplaneのProviderにresourcesを設定する方法
内容
CrossplaneのAWS Providerを動作させるPodにresources(CPU,memory)を設定する方法を紹介します。
何が起きたか
CrossplaneをAWS EKS (Fargate)に導入していたところ、以下のようなエラーが発生し、正常にCrossplaneからAWS Resource(managed resources)を作成できなかった。
current package revision is unhealthy
failed to instantiate provider "registry.terraform.io/hashicorp/aws" to obtain schema: timeout while waiting for plugin to start
原因
上記エラーの原因として、CrossplaneのProviderを動作させているPodがリソース不足で正常に動作していないことがわかった。そのため、Providerが動作するPodにresourcesを設定して解消することにした。
Provider Settings
上記のCrossplane公式ドキュメント通りに、AWS Providerをセッティングすると以下のようなyamlファイルになります。
---
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-secret
key: creds
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: upbound-provider-aws
spec:
package: xpkg.upbound.io/upbound/provider-aws:v0.30.0
このyamlファイルのまま、applyすると、Provider kindによって作成されるPod(Deployment)にresourcesパラメーターが設定されていないため、EKS(Fargate)の場合、リソース不足で、正常にCrossplaneが動作しません。
そのため、以下のように、ControllerConfigを追加して、Providerが動作するPodに多めにリソースが割り当てられるようにしました。
---
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-secret
key: creds
---
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: upbound-provider-aws
spec:
package: xpkg.upbound.io/upbound/provider-aws:v0.30.0
controllerConfigRef:
name: upbound-provider-aws-controller-config
---
apiVersion: pkg.crossplane.io/v1alpha1
kind: ControllerConfig
metadata:
name: upbound-provider-aws-controller-config
spec:
resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: 500m
memory: 0.5Gi
この状態でapplyしたところ、正常にmanaged resourcesを作成できるようになりました。
EKS (Fargate)は意外と癖があった
EKS(fargate)は、nodeの管理をmanagedサービスに任せられるので運用が楽になるかと思いきや、意外と使ってみると運用コストが高くなる部分も多かったです(まだ、1週間ぐらいしか運用していませんが)。
これからも、EKSを運用していく上で発生したエラーハンドリングでzennの記事にしていきます。
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion