# Deploying Kubernetes Clusters to AWS with k8s-cdk

The Kubernetes CDK (k8s-cdk) is an open-source project that makes it easy to define and provision Kubernetes infrastructure on AWS using the AWS CDK. It provides constructs for core Kubernetes resources like Clusters, Nodes, and Services that simplify the deployment of Kubernetes applications to AWS.

**So let's start to create:**

To get started, install the k8s-cdk library:

```plaintext
npm install --save @kubernetes-cdk/cdk-core
```

Then create a new CDK app:

```plaintext
cdk init app --language=typescript
```

This will set up a basic CDK app structure with TypeScript support.

## **Defining a Cluster**

To define a Kubernetes cluster, import the Cluster construct and provide configuration:

```plaintext
import { Cluster } from '@kubernetes-cdk/cdk-core';

//...

new Cluster(this, 'MyCluster', {
  version: k8s.KubernetesVersion.V1_21,
  subnets: [subnet1, subnet2] 
});
```

This will provision a managed EKS cluster running Kubernetes across the specified subnets.

## **Deploying Resources**

Additional Kubernetes resources like Pods, Services, etc. can then be defined and added to the cluster:

```plaintext
const nginxDeployment = new k8s.Deployment(this, 'NginxDeployment', {
  cluster: cluster,
  spec: {
    selector: {
      matchLabels: {
        app: 'nginx',
      },
    },
    //...
  },
});
```

## **Deploying**

Finally, synthesize and deploy the CDK app to provision the Kubernetes infrastructure and deploy the resources:

```plaintext
cdk deploy
```

The k8s-cdk makes it simple to define Kubernetes clusters and applications using familiar AWS CDK patterns. This allows for infrastructure as code deployments of Kubernetes on AWS.
