0.1.345 • Published 3 months ago

cdk8s-operator v0.1.345

Weekly downloads
906
License
Apache-2.0
Repository
github
Last release
3 months 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.345

3 months ago

0.1.344

3 months ago

0.1.343

3 months ago

0.1.342

3 months ago

0.1.339

4 months ago

0.1.341

3 months ago

0.1.340

4 months ago

0.1.338

4 months ago

0.1.337

4 months ago

0.1.336

4 months ago

0.1.335

4 months ago

0.1.334

4 months ago

0.1.333

5 months ago

0.1.330

5 months ago

0.1.332

5 months ago

0.1.331

5 months ago

0.1.329

5 months ago

0.1.328

5 months ago

0.1.327

5 months ago

0.1.326

5 months ago

0.1.325

6 months ago

0.1.324

6 months ago

0.1.323

6 months ago

0.1.322

6 months ago

0.1.321

7 months ago

0.1.318

7 months ago

0.1.317

7 months ago

0.1.319

7 months ago

0.1.320

7 months ago

0.1.316

8 months ago

0.1.315

8 months ago

0.1.314

9 months ago

0.1.309

10 months ago

0.1.308

10 months ago

0.1.312

9 months ago

0.1.311

9 months ago

0.1.313

9 months ago

0.1.310

10 months ago

0.1.307

10 months ago

0.1.306

11 months ago

0.1.305

11 months ago

0.1.304

12 months ago

0.1.303

12 months ago

0.1.302

1 year ago

0.1.301

1 year ago

0.1.300

1 year ago

0.1.299

1 year ago

0.1.298

1 year ago

0.1.297

1 year ago

0.1.295

1 year ago

0.1.294

1 year ago

0.1.293

1 year ago

0.1.292

1 year ago

0.1.291

1 year ago

0.1.290

1 year ago

0.1.289

2 years ago

0.1.239

2 years ago

0.1.238

2 years ago

0.1.235

2 years ago

0.1.234

2 years ago

0.1.237

2 years ago

0.1.236

2 years ago

0.1.231

2 years ago

0.1.230

2 years ago

0.1.233

2 years ago

0.1.232

2 years ago

0.1.249

2 years ago

0.1.246

2 years ago

0.1.245

2 years ago

0.1.248

2 years ago

0.1.247

2 years ago

0.1.242

2 years ago

0.1.241

2 years ago

0.1.244

2 years ago

0.1.243

2 years ago

0.1.240

2 years ago

0.1.257

2 years ago

0.1.256

2 years ago

0.1.259

2 years ago

0.1.258

2 years ago

0.1.253

2 years ago

0.1.252

2 years ago

0.1.255

2 years ago

0.1.254

2 years ago

0.1.251

2 years ago

0.1.250

2 years ago

0.1.268

2 years ago

0.1.267

2 years ago

0.1.269

2 years ago

0.1.264

2 years ago

0.1.263

2 years ago

0.1.266

2 years ago

0.1.265

2 years ago

0.1.260

2 years ago

0.1.262

2 years ago

0.1.261

2 years ago

0.1.206

2 years ago

0.1.205

2 years ago

0.1.208

2 years ago

0.1.207

2 years ago

0.1.202

2 years ago

0.1.201

2 years ago

0.1.204

2 years ago

0.1.203

2 years ago

0.1.200

2 years ago

0.1.209

2 years ago

0.1.217

2 years ago

0.1.216

2 years ago

0.1.219

2 years ago

0.1.218

2 years ago

0.1.213

2 years ago

0.1.212

2 years ago

0.1.215

2 years ago

0.1.214

2 years ago

0.1.211

2 years ago

0.1.210

2 years ago

0.1.228

2 years ago

0.1.227

2 years ago

0.1.229

2 years ago

0.1.224

2 years ago

0.1.223

2 years ago

0.1.226

2 years ago

0.1.225

2 years ago

0.1.220

2 years ago

0.1.222

2 years ago

0.1.221

2 years ago

0.1.190

2 years ago

0.1.192

2 years ago

0.1.191

2 years ago

0.1.198

2 years ago

0.1.197

2 years ago

0.1.199

2 years ago

0.1.194

2 years ago

0.1.193

2 years ago

0.1.196

2 years ago

0.1.195

2 years ago

0.1.279

2 years ago

0.1.278

2 years ago

0.1.275

2 years ago

0.1.274

2 years ago

0.1.277

2 years ago

0.1.276

2 years ago

0.1.271

2 years ago

0.1.270

2 years ago

0.1.273

2 years ago

0.1.272

2 years ago

0.1.280

2 years ago

0.1.286

2 years ago

0.1.285

2 years ago

0.1.288

2 years ago

0.1.287

2 years ago

0.1.282

2 years ago

0.1.281

2 years ago

0.1.284

2 years ago

0.1.283

2 years ago

0.1.179

2 years ago

0.1.176

2 years ago

0.1.175

2 years ago

0.1.178

2 years ago

0.1.177

2 years ago

0.1.172

2 years ago

0.1.174

2 years ago

0.1.173

2 years ago

0.1.181

2 years ago

0.1.180

2 years ago

0.1.187

2 years ago

0.1.186

2 years ago

0.1.189

2 years ago

0.1.188

2 years ago

0.1.183

2 years ago

0.1.182

2 years ago

0.1.185

2 years ago

0.1.184

2 years ago

0.1.169

2 years ago

0.1.168

2 years ago

0.1.165

2 years ago

0.1.164

2 years ago

0.1.167

2 years ago

0.1.166

2 years ago

0.1.161

2 years ago

0.1.163

2 years ago

0.1.162

2 years ago

0.1.170

2 years ago

0.1.171

2 years ago

0.1.158

2 years ago

0.1.157

2 years ago

0.1.159

2 years ago

0.1.154

2 years ago

0.1.156

2 years ago

0.1.155

2 years ago

0.1.160

2 years ago

0.1.147

2 years ago

0.1.146

2 years ago

0.1.149

2 years ago

0.1.148

2 years ago

0.1.153

2 years ago

0.1.150

2 years ago

0.1.152

2 years ago

0.1.151

2 years ago

0.1.129

2 years ago

0.1.139

2 years ago

0.1.136

2 years ago

0.1.135

2 years ago

0.1.138

2 years ago

0.1.137

2 years ago

0.1.132

2 years ago

0.1.131

2 years ago

0.1.134

2 years ago

0.1.133

2 years ago

0.1.130

2 years ago

0.1.143

2 years ago

0.1.142

2 years ago

0.1.145

2 years ago

0.1.144

2 years ago

0.1.141

2 years ago

0.1.140

2 years ago

0.1.118

2 years ago

0.1.117

2 years ago

0.1.119

2 years ago

0.1.114

2 years ago

0.1.113

2 years ago

0.1.116

2 years ago

0.1.115

2 years ago

0.1.112

2 years ago

0.1.111

2 years ago

0.1.128

2 years ago

0.1.125

2 years ago

0.1.124

2 years ago

0.1.127

2 years ago

0.1.126

2 years ago

0.1.121

2 years ago

0.1.120

2 years ago

0.1.123

2 years ago

0.1.122

2 years ago

0.1.110

2 years ago

0.1.107

2 years ago

0.1.106

2 years ago

0.1.109

2 years ago

0.1.108

2 years ago

0.1.103

2 years ago

0.1.102

2 years ago

0.1.105

2 years ago

0.1.104

2 years ago

0.1.101

2 years ago

0.1.100

2 years ago

0.1.96

2 years ago

0.1.97

2 years ago

0.1.98

2 years ago

0.1.99

2 years ago

0.1.90

2 years ago

0.1.91

2 years ago

0.1.92

2 years ago

0.1.93

2 years ago

0.1.94

2 years ago

0.1.95

2 years ago

0.1.87

2 years ago

0.1.88

2 years ago

0.1.89

2 years ago

0.1.85

2 years ago

0.1.86

2 years ago

0.1.80

2 years ago

0.1.81

2 years ago

0.1.82

2 years ago

0.1.83

2 years ago

0.1.84

2 years ago

0.1.74

2 years ago

0.1.75

2 years ago

0.1.76

2 years ago

0.1.77

2 years ago

0.1.78

2 years ago

0.1.79

2 years ago

0.1.73

2 years ago

0.1.72

2 years ago

0.1.70

2 years ago

0.1.71

2 years ago

0.1.67

2 years ago

0.1.68

2 years ago

0.1.69

2 years ago

0.1.65

2 years ago

0.1.66

2 years ago

0.1.63

2 years ago

0.1.64

2 years ago

0.1.60

2 years ago

0.1.61

2 years ago

0.1.62

2 years ago

0.1.52

2 years ago

0.1.53

2 years ago

0.1.54

2 years ago

0.1.55

2 years ago

0.1.56

2 years ago

0.1.57

2 years ago

0.1.58

2 years ago

0.1.59

2 years ago

0.1.50

2 years ago

0.1.51

2 years ago

0.1.49

2 years ago

0.1.41

3 years ago

0.1.42

3 years ago

0.1.43

3 years ago

0.1.44

3 years ago

0.1.45

2 years ago

0.1.46

2 years ago

0.1.47

2 years ago

0.1.48

2 years ago

0.1.40

3 years ago

0.1.39

3 years ago

0.1.38

3 years ago

0.1.30

3 years ago

0.1.31

3 years ago

0.1.32

3 years ago

0.1.33

3 years ago

0.1.34

3 years ago

0.1.35

3 years ago

0.1.36

3 years ago

0.1.37

3 years ago

0.1.27

3 years ago

0.1.28

3 years ago

0.1.29

3 years ago

0.1.20

3 years ago

0.1.21

3 years ago

0.1.22

3 years ago

0.1.23

3 years ago

0.1.24

3 years ago

0.1.25

3 years ago

0.1.26

3 years ago

0.1.15

3 years ago

0.1.16

3 years ago

0.1.17

3 years ago

0.1.18

3 years ago

0.1.19

3 years ago

0.1.10

3 years ago

0.1.11

3 years ago

0.1.12

3 years ago

0.1.13

3 years ago

0.1.14

3 years ago

0.1.0

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.8

3 years ago

0.1.7

3 years ago

0.1.9

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.0.216

3 years ago

0.0.215

3 years ago

0.0.214

3 years ago

0.0.218

3 years ago

0.0.217

3 years ago

0.0.213

3 years ago

0.0.212

3 years ago

0.0.211

3 years ago

0.0.210

3 years ago

0.0.205

3 years ago

0.0.204

3 years ago

0.0.203

3 years ago

0.0.202

3 years ago

0.0.209

3 years ago

0.0.208

3 years ago

0.0.207

3 years ago

0.0.206

3 years ago

0.0.201

3 years ago

0.0.200

3 years ago

0.0.197

3 years ago

0.0.196

3 years ago

0.0.195

3 years ago

0.0.194

3 years ago

0.0.199

3 years ago

0.0.198

3 years ago

0.0.193

3 years ago

0.0.192

3 years ago

0.0.191

3 years ago

0.0.190

3 years ago

0.0.186

3 years ago

0.0.185

3 years ago

0.0.184

3 years ago

0.0.189

3 years ago

0.0.188

3 years ago

0.0.187

3 years ago

0.0.159

3 years ago

0.0.158

3 years ago

0.0.150

3 years ago

0.0.157

3 years ago

0.0.156

3 years ago

0.0.155

3 years ago

0.0.154

3 years ago

0.0.169

3 years ago

0.0.164

3 years ago

0.0.163

3 years ago

0.0.162

3 years ago

0.0.161

3 years ago

0.0.168

3 years ago

0.0.167

3 years ago

0.0.166

3 years ago

0.0.165

3 years ago

0.0.160

3 years ago

0.0.175

3 years ago

0.0.174

3 years ago

0.0.173

3 years ago

0.0.172

3 years ago

0.0.179

3 years ago

0.0.178

3 years ago

0.0.177

3 years ago

0.0.176

3 years ago

0.0.171

3 years ago

0.0.170

3 years ago

0.0.183

3 years ago

0.0.182

3 years ago

0.0.181

3 years ago

0.0.180

3 years ago

0.0.149

3 years ago

0.0.148

4 years ago

0.0.147

4 years ago

0.0.142

4 years ago

0.0.141

4 years ago

0.0.146

4 years ago

0.0.145

4 years ago

0.0.144

4 years ago

0.0.143

4 years ago

0.0.139

4 years ago

0.0.140

4 years ago

0.0.138

4 years ago

0.0.137

4 years ago

0.0.136

4 years ago

0.0.135

4 years ago

0.0.131

4 years ago

0.0.134

4 years ago

0.0.133

4 years ago

0.0.132

4 years ago

0.0.130

4 years ago

0.0.127

4 years ago

0.0.129

4 years ago

0.0.126

4 years ago

0.0.125

4 years ago

0.0.124

4 years ago

0.0.123

4 years ago

0.0.122

4 years ago

0.0.121

4 years ago

0.0.120

4 years ago

0.0.117

4 years ago

0.0.116

4 years ago

0.0.119

4 years ago

0.0.118

4 years ago

0.0.115

4 years ago

0.0.114

4 years ago

0.0.113

4 years ago

0.0.112

4 years ago

0.0.111

4 years ago

0.0.110

4 years ago

0.0.109

4 years ago

0.0.108

4 years ago

0.0.107

4 years ago

0.0.106

4 years ago

0.0.105

4 years ago

0.0.104

4 years ago

0.0.103

4 years ago

0.0.102

4 years ago

0.0.101

4 years ago

0.0.100

4 years ago

0.0.99

4 years ago

0.0.97

4 years ago

0.0.98

4 years ago

0.0.96

4 years ago

0.0.95

4 years ago

0.0.94

4 years ago

0.0.92

4 years ago

0.0.93

4 years ago

0.0.90

4 years ago

0.0.91

4 years ago

0.0.87

4 years ago

0.0.88

4 years ago

0.0.89

4 years ago

0.0.84

4 years ago

0.0.85

4 years ago

0.0.86

4 years ago

0.0.83

4 years ago

0.0.82

4 years ago

0.0.81

4 years ago

0.0.80

4 years ago

0.0.79

4 years ago

0.0.77

4 years ago

0.0.78

4 years ago

0.0.76

4 years ago

0.0.74

4 years ago

0.0.73

4 years ago

0.0.72

4 years ago

0.0.71

4 years ago

0.0.70

4 years ago

0.0.69

4 years ago

0.0.67

4 years ago

0.0.68

4 years ago

0.0.65

4 years ago

0.0.66

4 years ago

0.0.63

4 years ago

0.0.64

4 years ago

0.0.62

4 years ago

0.0.61

4 years ago

0.0.60

4 years ago

0.0.59

4 years ago

0.0.58

4 years ago

0.0.57

4 years ago

0.0.56

4 years ago

0.0.55

4 years ago

0.0.54

4 years ago

0.0.53

4 years ago

0.0.52

4 years ago

0.0.51

4 years ago

0.0.50

4 years ago

0.0.49

4 years ago

0.0.48

4 years ago

0.0.47

4 years ago

0.0.46

4 years ago

0.0.44

4 years ago

0.0.45

4 years ago

0.0.42

4 years ago

0.0.43

4 years ago

0.0.41

4 years ago

0.0.40

4 years ago

0.0.39

4 years ago

0.0.38

4 years ago

0.0.37

4 years ago

0.0.36

4 years ago

0.0.34

4 years ago

0.0.35

4 years ago

0.0.33

4 years ago

0.0.31

4 years ago

0.0.32

4 years ago

0.0.30

4 years ago

0.0.29

4 years ago

0.0.27

4 years ago

0.0.28

4 years ago

0.0.26

4 years ago

0.0.25

4 years ago

0.0.24

4 years ago

0.0.23

4 years ago

0.0.22

4 years ago

0.0.21

4 years ago

0.0.20

4 years ago

0.0.19

4 years ago

0.0.17

4 years ago

0.0.18

4 years ago

0.0.16

4 years ago

0.0.15

5 years ago

0.0.14

5 years ago

0.0.13

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago