0.1.298 • Published 4 days ago

cdk8s-operator v0.1.298

Weekly downloads
906
License
Apache-2.0
Repository
github
Last release
4 days ago

cdk8s-operator

Create Kubernetes CRD Operators using CDK8s Constructs

This is a multi-language (jsii) library and a command-line tool that allows you to create Kubernetes operators for CRDs (Custom Resource Definitions) using CDK8s.

Getting Started

Let's create our first CRD served by a CDK8s construct using TypeScript.

Install CDK8s

Make sure your system has the required CDK8s prerequisites.

Install the CDK8s CLI globally through npm:

$ npm i -g cdk8s-cli
Installing...

# Verify installation
$ cdk8s --version
1.0.0-beta.3

Create a new CDK8s app

Now, let's create a new CDK8s typescript app:

mkdir hello-operator && cd hello-operator
git init
cdk8s init typescript-app

Install cdk8s-operator

Next, let's install this module as a dependency of our TypeScript project:

npm install cdk8s-operator

Construct

We will start by creating the construct that implements the abstraction. This is is just a normal CDK8s custom construct:

Let's create a construct called PodCollection which represents a collection of pods:

pod-collection.ts:

import { Pod } from 'cdk8s-plus-17';
import { Construct } from 'constructs';

export interface PodCollectionProps {
  /** Number of pods */
  readonly count: number;
  /** The docker image to deploy */
  readonly image: string;
}

export class PodCollection extends Construct {
  constructor(scope: Construct, id: string, props: PodCollectionProps) {
    super(scope, id);

    for (let i = 0; i < props.count; ++i) {
      new Pod(this, `pod-${i}`, {
        containers: [ { image: props.image } ]
      });
    }
  }
}

Operator App

Now, we will need to replace out main.ts file with an "operator app", which is a special kind of CDK8s app designed to be executed by the cdk8s-server CLI which is included in this module.

The Operator app construct can be used to create "CDK8s Operators" which are CDK8s apps that accept input from a file (or STDIN) with a Kubernetes manifest, instantiates a construct with the spec as its input and emits the resulting manifest to STDOUT.

Replace the contents of main.ts with the following. We initialize an Operator app and then register a provider which handles resources of API version samples.cdk8s.org/v1alpha1 and kind PodCollection.

main.ts:

import { Operator } from 'cdk8s-operator';
import { PodCollection } from './pod-collection';

const app = new Operator();

app.addProvider({
  apiVersion: 'samples.cdk8s.org/v1alpha1',
  kind: 'PodCollection',
  handler: {
    apply: (scope, id, props) => new PodCollection(scope, id, props)
  }
})

app.synth();

A single operator can handle any number of resource kinds. Simply call addProvider() for each apiVersion/kind.

Using Operators

To use this operator, create an input.json file, e.g:

input.json:

{
  "apiVersion": "samples.cdk8s.org/v1alpha1",
  "kind": "PodCollection",
  "metadata": {
    "name": "my-collection"
  },
  "spec": {
    "image": "paulbouwer/hello-kubernetes",
    "count": 5
  }
}

Compile your code:

# delete `main.test.ts` since it has some code that won't compile
$ rm -f main.test.*

# compile
$ npm run compile

And run:

$ node main.js input.json
apiVersion: "v1"
kind: "Pod"
metadata:
  name: "my-collection-pod-0-c8735c52"
spec:
  containers:
    - env: []
      image: "paulbouwer/hello-kubernetes"
      imagePullPolicy: "Always"
      name: "main"
      ports: []
      volumeMounts: []
  volumes: []
---
apiVersion: "v1"
kind: "Pod"
metadata:
  name: "my-collection-pod-1-c89f58d7"
spec:
  containers:
    - env: []
      image: "paulbouwer/hello-kubernetes"
      imagePullPolicy: "Always"
      name: "main"
      ports: []
      volumeMounts: []
  volumes: []
---
apiVersion: "v1"
kind: "Pod"
metadata:
  name: "my-collection-pod-2-c88d4268"
spec:
  containers:
    - env: []
      image: "paulbouwer/hello-kubernetes"
      imagePullPolicy: "Always"
      name: "main"
      ports: []
      volumeMounts: []
  volumes: []
---
apiVersion: "v1"
kind: "Pod"
metadata:
  name: "my-collection-pod-3-c86866b1"
spec:
  containers:
    - env: []
      image: "paulbouwer/hello-kubernetes"
      imagePullPolicy: "Always"
      name: "main"
      ports: []
      volumeMounts: []
  volumes: []
---
apiVersion: "v1"
kind: "Pod"
metadata:
  name: "my-collection-pod-4-c8b74b1d"
spec:
  containers:
    - env: []
      image: "paulbouwer/hello-kubernetes"
      imagePullPolicy: "Always"
      name: "main"
      ports: []
      volumeMounts: []
  volumes: []

cdk8s-server

This library is shipped with a program called cdk8s-server which can be used to host your operator inside an HTTP server. This server can be used as a sidecar container with a generic CRD operator (TBD).

$ PORT=8080 npx cdk8s-server
Listening on 8080
- App command: node main.js
- Request body should include a single k8s resource in JSON format
- Request will be piped through STDIN to "node main.js"
- Response is the STDOUT and expected to be a multi-resource yaml manifest

Now, you can send input.json over HTTP:

$ curl -d @input.json http://localhost:8080
MANIFEST...

License

Apache 2.0

0.1.298

4 days ago

0.1.297

26 days ago

0.1.295

2 months ago

0.1.294

2 months ago

0.1.293

2 months ago

0.1.292

2 months ago

0.1.291

3 months ago

0.1.290

4 months ago

0.1.289

5 months ago

0.1.239

8 months ago

0.1.238

8 months ago

0.1.235

8 months ago

0.1.234

8 months ago

0.1.237

8 months ago

0.1.236

8 months ago

0.1.231

8 months ago

0.1.230

8 months ago

0.1.233

8 months ago

0.1.232

8 months ago

0.1.249

8 months ago

0.1.246

8 months ago

0.1.245

8 months ago

0.1.248

8 months ago

0.1.247

8 months ago

0.1.242

8 months ago

0.1.241

8 months ago

0.1.244

8 months ago

0.1.243

8 months ago

0.1.240

8 months ago

0.1.257

7 months ago

0.1.256

7 months ago

0.1.259

7 months ago

0.1.258

7 months ago

0.1.253

7 months ago

0.1.252

7 months ago

0.1.255

7 months ago

0.1.254

7 months ago

0.1.251

8 months ago

0.1.250

8 months ago

0.1.268

7 months ago

0.1.267

7 months ago

0.1.269

7 months ago

0.1.264

7 months ago

0.1.263

7 months ago

0.1.266

7 months ago

0.1.265

7 months ago

0.1.260

7 months ago

0.1.262

7 months ago

0.1.261

7 months ago

0.1.206

9 months ago

0.1.205

9 months ago

0.1.208

9 months ago

0.1.207

9 months ago

0.1.202

9 months ago

0.1.201

9 months ago

0.1.204

9 months ago

0.1.203

9 months ago

0.1.200

9 months ago

0.1.209

9 months ago

0.1.217

9 months ago

0.1.216

9 months ago

0.1.219

9 months ago

0.1.218

9 months ago

0.1.213

9 months ago

0.1.212

9 months ago

0.1.215

9 months ago

0.1.214

9 months ago

0.1.211

9 months ago

0.1.210

9 months ago

0.1.228

9 months ago

0.1.227

9 months ago

0.1.229

9 months ago

0.1.224

9 months ago

0.1.223

9 months ago

0.1.226

9 months ago

0.1.225

9 months ago

0.1.220

9 months ago

0.1.222

9 months ago

0.1.221

9 months ago

0.1.190

10 months ago

0.1.192

10 months ago

0.1.191

10 months ago

0.1.198

9 months ago

0.1.197

10 months ago

0.1.199

9 months ago

0.1.194

10 months ago

0.1.193

10 months ago

0.1.196

10 months ago

0.1.195

10 months ago

0.1.279

6 months ago

0.1.278

6 months ago

0.1.275

6 months ago

0.1.274

6 months ago

0.1.277

6 months ago

0.1.276

6 months ago

0.1.271

7 months ago

0.1.270

7 months ago

0.1.273

6 months ago

0.1.272

7 months ago

0.1.280

6 months ago

0.1.286

6 months ago

0.1.285

6 months ago

0.1.288

5 months ago

0.1.287

6 months ago

0.1.282

6 months ago

0.1.281

6 months ago

0.1.284

6 months ago

0.1.283

6 months ago

0.1.179

10 months ago

0.1.176

10 months ago

0.1.175

10 months ago

0.1.178

10 months ago

0.1.177

10 months ago

0.1.172

10 months ago

0.1.174

10 months ago

0.1.173

10 months ago

0.1.181

10 months ago

0.1.180

10 months ago

0.1.187

10 months ago

0.1.186

10 months ago

0.1.189

10 months ago

0.1.188

10 months ago

0.1.183

10 months ago

0.1.182

10 months ago

0.1.185

10 months ago

0.1.184

10 months ago

0.1.169

10 months ago

0.1.168

10 months ago

0.1.165

10 months ago

0.1.164

10 months ago

0.1.167

10 months ago

0.1.166

10 months ago

0.1.161

10 months ago

0.1.163

10 months ago

0.1.162

10 months ago

0.1.170

10 months ago

0.1.171

10 months ago

0.1.158

10 months ago

0.1.157

10 months ago

0.1.159

10 months ago

0.1.154

10 months ago

0.1.156

10 months ago

0.1.155

10 months ago

0.1.160

10 months ago

0.1.147

11 months ago

0.1.146

11 months ago

0.1.149

10 months ago

0.1.148

10 months ago

0.1.153

10 months ago

0.1.150

10 months ago

0.1.152

10 months ago

0.1.151

10 months ago

0.1.129

11 months ago

0.1.139

11 months ago

0.1.136

11 months ago

0.1.135

11 months ago

0.1.138

11 months ago

0.1.137

11 months ago

0.1.132

11 months ago

0.1.131

11 months ago

0.1.134

11 months ago

0.1.133

11 months ago

0.1.130

11 months ago

0.1.143

11 months ago

0.1.142

11 months ago

0.1.145

11 months ago

0.1.144

11 months ago

0.1.141

11 months ago

0.1.140

11 months ago

0.1.118

11 months ago

0.1.117

11 months ago

0.1.119

11 months ago

0.1.114

11 months ago

0.1.113

12 months ago

0.1.116

11 months ago

0.1.115

11 months ago

0.1.112

12 months ago

0.1.111

12 months ago

0.1.128

11 months ago

0.1.125

11 months ago

0.1.124

11 months ago

0.1.127

11 months ago

0.1.126

11 months ago

0.1.121

11 months ago

0.1.120

11 months ago

0.1.123

11 months ago

0.1.122

11 months ago

0.1.110

12 months ago

0.1.107

12 months ago

0.1.106

12 months ago

0.1.109

12 months ago

0.1.108

12 months ago

0.1.103

1 year ago

0.1.102

1 year ago

0.1.105

12 months ago

0.1.104

1 year ago

0.1.101

1 year ago

0.1.100

1 year ago

0.1.96

1 year ago

0.1.97

1 year ago

0.1.98

1 year ago

0.1.99

1 year ago

0.1.90

1 year ago

0.1.91

1 year ago

0.1.92

1 year ago

0.1.93

1 year ago

0.1.94

1 year ago

0.1.95

1 year ago

0.1.87

1 year ago

0.1.88

1 year ago

0.1.89

1 year ago

0.1.85

1 year ago

0.1.86

1 year ago

0.1.80

1 year ago

0.1.81

1 year ago

0.1.82

1 year ago

0.1.83

1 year ago

0.1.84

1 year ago

0.1.74

1 year ago

0.1.75

1 year ago

0.1.76

1 year ago

0.1.77

1 year ago

0.1.78

1 year ago

0.1.79

1 year ago

0.1.73

1 year ago

0.1.72

1 year ago

0.1.70

1 year ago

0.1.71

1 year ago

0.1.67

1 year ago

0.1.68

1 year ago

0.1.69

1 year ago

0.1.65

1 year ago

0.1.66

1 year ago

0.1.63

1 year ago

0.1.64

1 year ago

0.1.60

1 year ago

0.1.61

1 year ago

0.1.62

1 year ago

0.1.52

1 year ago

0.1.53

1 year ago

0.1.54

1 year ago

0.1.55

1 year ago

0.1.56

1 year ago

0.1.57

1 year ago

0.1.58

1 year ago

0.1.59

1 year ago

0.1.50

1 year ago

0.1.51

1 year ago

0.1.49

1 year ago

0.1.41

1 year ago

0.1.42

1 year ago

0.1.43

1 year ago

0.1.44

1 year ago

0.1.45

1 year ago

0.1.46

1 year ago

0.1.47

1 year ago

0.1.48

1 year ago

0.1.40

1 year ago

0.1.39

1 year ago

0.1.38

1 year ago

0.1.30

2 years ago

0.1.31

2 years ago

0.1.32

1 year ago

0.1.33

1 year ago

0.1.34

1 year ago

0.1.35

1 year ago

0.1.36

1 year ago

0.1.37

1 year ago

0.1.27

2 years ago

0.1.28

2 years ago

0.1.29

2 years ago

0.1.20

2 years ago

0.1.21

2 years ago

0.1.22

2 years ago

0.1.23

2 years ago

0.1.24

2 years ago

0.1.25

2 years ago

0.1.26

2 years ago

0.1.15

2 years ago

0.1.16

2 years ago

0.1.17

2 years ago

0.1.18

2 years ago

0.1.19

2 years ago

0.1.10

2 years ago

0.1.11

2 years ago

0.1.12

2 years ago

0.1.13

2 years ago

0.1.14

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.9

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.0.216

2 years ago

0.0.215

2 years ago

0.0.214

2 years ago

0.0.218

2 years ago

0.0.217

2 years ago

0.0.213

2 years ago

0.0.212

2 years ago

0.0.211

2 years ago

0.0.210

2 years ago

0.0.205

2 years ago

0.0.204

2 years ago

0.0.203

2 years ago

0.0.202

2 years ago

0.0.209

2 years ago

0.0.208

2 years ago

0.0.207

2 years ago

0.0.206

2 years ago

0.0.201

2 years ago

0.0.200

2 years ago

0.0.197

2 years ago

0.0.196

2 years ago

0.0.195

2 years ago

0.0.194

2 years ago

0.0.199

2 years ago

0.0.198

2 years ago

0.0.193

2 years ago

0.0.192

2 years ago

0.0.191

2 years ago

0.0.190

2 years ago

0.0.186

2 years ago

0.0.185

2 years ago

0.0.184

2 years ago

0.0.189

2 years ago

0.0.188

2 years ago

0.0.187

2 years ago

0.0.159

2 years ago

0.0.158

2 years ago

0.0.150

2 years ago

0.0.157

2 years ago

0.0.156

2 years ago

0.0.155

2 years ago

0.0.154

2 years ago

0.0.169

2 years ago

0.0.164

2 years ago

0.0.163

2 years ago

0.0.162

2 years ago

0.0.161

2 years ago

0.0.168

2 years ago

0.0.167

2 years ago

0.0.166

2 years ago

0.0.165

2 years ago

0.0.160

2 years ago

0.0.175

2 years ago

0.0.174

2 years ago

0.0.173

2 years ago

0.0.172

2 years ago

0.0.179

2 years ago

0.0.178

2 years ago

0.0.177

2 years ago

0.0.176

2 years ago

0.0.171

2 years ago

0.0.170

2 years ago

0.0.183

2 years ago

0.0.182

2 years ago

0.0.181

2 years ago

0.0.180

2 years ago

0.0.149

2 years ago

0.0.148

2 years ago

0.0.147

2 years ago

0.0.142

2 years ago

0.0.141

2 years ago

0.0.146

2 years ago

0.0.145

2 years ago

0.0.144

2 years ago

0.0.143

2 years ago

0.0.139

2 years ago

0.0.140

2 years ago

0.0.138

3 years ago

0.0.137

3 years ago

0.0.136

3 years ago

0.0.135

3 years ago

0.0.131

3 years ago

0.0.134

3 years ago

0.0.133

3 years ago

0.0.132

3 years ago

0.0.130

3 years ago

0.0.127

3 years ago

0.0.129

3 years ago

0.0.126

3 years ago

0.0.125

3 years ago

0.0.124

3 years ago

0.0.123

3 years ago

0.0.122

3 years ago

0.0.121

3 years ago

0.0.120

3 years ago

0.0.117

3 years ago

0.0.116

3 years ago

0.0.119

3 years ago

0.0.118

3 years ago

0.0.115

3 years ago

0.0.114

3 years ago

0.0.113

3 years ago

0.0.112

3 years ago

0.0.111

3 years ago

0.0.110

3 years ago

0.0.109

3 years ago

0.0.108

3 years ago

0.0.107

3 years ago

0.0.106

3 years ago

0.0.105

3 years ago

0.0.104

3 years ago

0.0.103

3 years ago

0.0.102

3 years ago

0.0.101

3 years ago

0.0.100

3 years ago

0.0.99

3 years ago

0.0.97

3 years ago

0.0.98

3 years ago

0.0.96

3 years ago

0.0.95

3 years ago

0.0.94

3 years ago

0.0.92

3 years ago

0.0.93

3 years ago

0.0.90

3 years ago

0.0.91

3 years ago

0.0.87

3 years ago

0.0.88

3 years ago

0.0.89

3 years ago

0.0.84

3 years ago

0.0.85

3 years ago

0.0.86

3 years ago

0.0.83

3 years ago

0.0.82

3 years ago

0.0.81

3 years ago

0.0.80

3 years ago

0.0.79

3 years ago

0.0.77

3 years ago

0.0.78

3 years ago

0.0.76

3 years ago

0.0.74

3 years ago

0.0.73

3 years ago

0.0.72

3 years ago

0.0.71

3 years ago

0.0.70

3 years ago

0.0.69

3 years ago

0.0.67

3 years ago

0.0.68

3 years ago

0.0.65

3 years ago

0.0.66

3 years ago

0.0.63

3 years ago

0.0.64

3 years ago

0.0.62

3 years ago

0.0.61

3 years ago

0.0.60

3 years ago

0.0.59

3 years ago

0.0.58

3 years ago

0.0.57

3 years ago

0.0.56

3 years ago

0.0.55

3 years ago

0.0.54

3 years ago

0.0.53

3 years ago

0.0.52

3 years ago

0.0.51

3 years ago

0.0.50

3 years ago

0.0.49

3 years ago

0.0.48

3 years ago

0.0.47

3 years ago

0.0.46

3 years ago

0.0.44

3 years ago

0.0.45

3 years ago

0.0.42

3 years ago

0.0.43

3 years ago

0.0.41

3 years ago

0.0.40

3 years ago

0.0.39

3 years ago

0.0.38

3 years ago

0.0.37

3 years ago

0.0.36

3 years ago

0.0.34

3 years ago

0.0.35

3 years ago

0.0.33

3 years ago

0.0.31

3 years ago

0.0.32

3 years ago

0.0.30

3 years ago

0.0.29

3 years ago

0.0.27

3 years ago

0.0.28

3 years ago

0.0.26

3 years ago

0.0.25

3 years ago

0.0.24

3 years ago

0.0.23

3 years ago

0.0.22

3 years ago

0.0.21

3 years ago

0.0.20

3 years ago

0.0.19

3 years ago

0.0.17

3 years ago

0.0.18

3 years ago

0.0.16

3 years ago

0.0.15

3 years ago

0.0.14

3 years ago

0.0.13

3 years ago

0.0.12

3 years ago

0.0.11

3 years ago

0.0.10

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago