diff --git a/src/constructs/core-addon.ts b/src/constructs/core-addon.ts index 7cbb7d4..1725b84 100644 --- a/src/constructs/core-addon.ts +++ b/src/constructs/core-addon.ts @@ -92,4 +92,16 @@ export class KubeProxyAddon extends CoreAddonAbstract { serviceAccountName: 'kube-proxy', }); } +} + +export class KubeCostAddon extends CoreAddonAbstract { + /** + * + */ + constructor(scope: Construct, id: string, props: CoreAddonProps) { + super(scope, id, { + ...props, + addonName: 'kubecost_kubecost', + }); + } } \ No newline at end of file diff --git a/src/constructs/eks-cluster.ts b/src/constructs/eks-cluster.ts index a4fc301..80293e9 100644 --- a/src/constructs/eks-cluster.ts +++ b/src/constructs/eks-cluster.ts @@ -6,7 +6,7 @@ import * as kms from 'aws-cdk-lib/aws-kms'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import { Construct } from 'constructs'; import { CommonHelmCharts, StandardHelmProps } from './common-helm-charts'; -import { CoreDnsAddon, KubeProxyAddon } from './core-addon'; +import { CoreDnsAddon, KubeProxyAddon, KubeCostAddon } from './core-addon'; import { VpcCniAddonVersion, VpcEniAddon, @@ -105,6 +105,7 @@ export interface EKSClusterProps { readonly addonProps?: AddonProps; readonly coreDnsAddonProps?: CoreAddonValuesProps; readonly kubeProxyAddonProps?: CoreAddonValuesProps; + readonly kubeCostAddonProps?: CoreAddonValuesProps; readonly region: string; } @@ -411,6 +412,19 @@ export class EKSCluster extends Construct { }); } + if (props.kubeCostAddonProps) { + const kubeDnsAddonConfig = this.props.kubeCostAddonProps?.addonVersion && this.props.kubeCostAddonProps?.configurationValues + ? { addonVersion: this.props.kubeCostAddonProps?.addonVersion, configurationValues: this.props.kubeCostAddonProps?.configurationValues } + : { addonVersion: this.props.kubeCostAddonProps?.addonVersion }; + + new KubeCostAddon(this, 'KubeCostAddon', { + cluster: this.cluster, + ...kubeDnsAddonConfig, + resolveConflicts: true, + }); + } + + const storageclassDefault = new eks.KubernetesManifest(this, 'gp2', { overwrite: true, cluster: this.cluster, diff --git a/src/constructs/eks-managed-addon.ts b/src/constructs/eks-managed-addon.ts index 63ceb7b..ff3b401 100644 --- a/src/constructs/eks-managed-addon.ts +++ b/src/constructs/eks-managed-addon.ts @@ -2,6 +2,7 @@ import * as cdk from 'aws-cdk-lib'; import * as eks from 'aws-cdk-lib/aws-eks'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Construct } from 'constructs'; + export interface VpcCniAddonProps extends EksManagedAddonProps { readonly addonVersion?: VpcCniAddonVersion; readonly configurationValues?: string; @@ -208,4 +209,4 @@ export class VpcEniAddon extends EksManagedAddonAbstract { awsManagedPolicyName: 'AmazonEKS_CNI_Policy', }); } -} +} \ No newline at end of file