0.1.345 • Published 1 year ago

cdk8s-operator v0.1.345

Weekly downloads
906
License
Apache-2.0
Repository
github
Last release
1 year 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

1 year ago

0.1.344

1 year ago

0.1.343

1 year ago

0.1.342

1 year ago

0.1.339

1 year ago

0.1.341

1 year ago

0.1.340

1 year ago

0.1.338

1 year ago

0.1.337

1 year ago

0.1.336

1 year ago

0.1.335

1 year ago

0.1.334

1 year ago

0.1.333

1 year ago

0.1.330

1 year ago

0.1.332

1 year ago

0.1.331

1 year ago

0.1.329

1 year ago

0.1.328

1 year ago

0.1.327

1 year ago

0.1.326

1 year ago

0.1.325

1 year ago

0.1.324

1 year ago

0.1.323

1 year ago

0.1.322

1 year ago

0.1.321

1 year ago

0.1.318

1 year ago

0.1.317

1 year ago

0.1.319

1 year ago

0.1.320

1 year ago

0.1.316

1 year ago

0.1.315

2 years ago

0.1.314

2 years ago

0.1.309

2 years ago

0.1.308

2 years ago

0.1.312

2 years ago

0.1.311

2 years ago

0.1.313

2 years ago

0.1.310

2 years ago

0.1.307

2 years ago

0.1.306

2 years ago

0.1.305

2 years ago

0.1.304

2 years ago

0.1.303

2 years ago

0.1.302

2 years ago

0.1.301

2 years ago

0.1.300

2 years ago

0.1.299

2 years ago

0.1.298

2 years ago

0.1.297

2 years ago

0.1.295

2 years ago

0.1.294

2 years ago

0.1.293

2 years ago

0.1.292

2 years ago

0.1.291

2 years ago

0.1.290

2 years ago

0.1.289

2 years ago

0.1.239

3 years ago

0.1.238

3 years ago

0.1.235

3 years ago

0.1.234

3 years ago

0.1.237

3 years ago

0.1.236

3 years ago

0.1.231

3 years ago

0.1.230

3 years ago

0.1.233

3 years ago

0.1.232

3 years ago

0.1.249

3 years ago

0.1.246

3 years ago

0.1.245

3 years ago

0.1.248

3 years ago

0.1.247

3 years ago

0.1.242

3 years ago

0.1.241

3 years ago

0.1.244

3 years ago

0.1.243

3 years ago

0.1.240

3 years ago

0.1.257

3 years ago

0.1.256

3 years ago

0.1.259

3 years ago

0.1.258

3 years ago

0.1.253

3 years ago

0.1.252

3 years ago

0.1.255

3 years ago

0.1.254

3 years ago

0.1.251

3 years ago

0.1.250

3 years ago

0.1.268

3 years ago

0.1.267

3 years ago

0.1.269

3 years ago

0.1.264

3 years ago

0.1.263

3 years ago

0.1.266

3 years ago

0.1.265

3 years ago

0.1.260

3 years ago

0.1.262

3 years ago

0.1.261

3 years ago

0.1.206

3 years ago

0.1.205

3 years ago

0.1.208

3 years ago

0.1.207

3 years ago

0.1.202

3 years ago

0.1.201

3 years ago

0.1.204

3 years ago

0.1.203

3 years ago

0.1.200

3 years ago

0.1.209

3 years ago

0.1.217

3 years ago

0.1.216

3 years ago

0.1.219

3 years ago

0.1.218

3 years ago

0.1.213

3 years ago

0.1.212

3 years ago

0.1.215

3 years ago

0.1.214

3 years ago

0.1.211

3 years ago

0.1.210

3 years ago

0.1.228

3 years ago

0.1.227

3 years ago

0.1.229

3 years ago

0.1.224

3 years ago

0.1.223

3 years ago

0.1.226

3 years ago

0.1.225

3 years ago

0.1.220

3 years ago

0.1.222

3 years ago

0.1.221

3 years ago

0.1.190

3 years ago

0.1.192

3 years ago

0.1.191

3 years ago

0.1.198

3 years ago

0.1.197

3 years ago

0.1.199

3 years ago

0.1.194

3 years ago

0.1.193

3 years ago

0.1.196

3 years ago

0.1.195

3 years ago

0.1.279

2 years ago

0.1.278

2 years ago

0.1.275

2 years ago

0.1.274

3 years ago

0.1.277

2 years ago

0.1.276

2 years ago

0.1.271

3 years ago

0.1.270

3 years ago

0.1.273

3 years ago

0.1.272

3 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

3 years ago

0.1.176

3 years ago

0.1.175

3 years ago

0.1.178

3 years ago

0.1.177

3 years ago

0.1.172

3 years ago

0.1.174

3 years ago

0.1.173

3 years ago

0.1.181

3 years ago

0.1.180

3 years ago

0.1.187

3 years ago

0.1.186

3 years ago

0.1.189

3 years ago

0.1.188

3 years ago

0.1.183

3 years ago

0.1.182

3 years ago

0.1.185

3 years ago

0.1.184

3 years ago

0.1.169

3 years ago

0.1.168

3 years ago

0.1.165

3 years ago

0.1.164

3 years ago

0.1.167

3 years ago

0.1.166

3 years ago

0.1.161

3 years ago

0.1.163

3 years ago

0.1.162

3 years ago

0.1.170

3 years ago

0.1.171

3 years ago

0.1.158

3 years ago

0.1.157

3 years ago

0.1.159

3 years ago

0.1.154

3 years ago

0.1.156

3 years ago

0.1.155

3 years ago

0.1.160

3 years ago

0.1.147

3 years ago

0.1.146

3 years ago

0.1.149

3 years ago

0.1.148

3 years ago

0.1.153

3 years ago

0.1.150

3 years ago

0.1.152

3 years ago

0.1.151

3 years ago

0.1.129

3 years ago

0.1.139

3 years ago

0.1.136

3 years ago

0.1.135

3 years ago

0.1.138

3 years ago

0.1.137

3 years ago

0.1.132

3 years ago

0.1.131

3 years ago

0.1.134

3 years ago

0.1.133

3 years ago

0.1.130

3 years ago

0.1.143

3 years ago

0.1.142

3 years ago

0.1.145

3 years ago

0.1.144

3 years ago

0.1.141

3 years ago

0.1.140

3 years ago

0.1.118

3 years ago

0.1.117

3 years ago

0.1.119

3 years ago

0.1.114

3 years ago

0.1.113

3 years ago

0.1.116

3 years ago

0.1.115

3 years ago

0.1.112

3 years ago

0.1.111

3 years ago

0.1.128

3 years ago

0.1.125

3 years ago

0.1.124

3 years ago

0.1.127

3 years ago

0.1.126

3 years ago

0.1.121

3 years ago

0.1.120

3 years ago

0.1.123

3 years ago

0.1.122

3 years ago

0.1.110

3 years ago

0.1.107

3 years ago

0.1.106

3 years ago

0.1.109

3 years ago

0.1.108

3 years ago

0.1.103

3 years ago

0.1.102

3 years ago

0.1.105

3 years ago

0.1.104

3 years ago

0.1.101

3 years ago

0.1.100

3 years ago

0.1.96

3 years ago

0.1.97

3 years ago

0.1.98

3 years ago

0.1.99

3 years ago

0.1.90

3 years ago

0.1.91

3 years ago

0.1.92

3 years ago

0.1.93

3 years ago

0.1.94

3 years ago

0.1.95

3 years ago

0.1.87

3 years ago

0.1.88

3 years ago

0.1.89

3 years ago

0.1.85

3 years ago

0.1.86

3 years ago

0.1.80

3 years ago

0.1.81

3 years ago

0.1.82

3 years ago

0.1.83

3 years ago

0.1.84

3 years ago

0.1.74

3 years ago

0.1.75

3 years ago

0.1.76

3 years ago

0.1.77

3 years ago

0.1.78

3 years ago

0.1.79

3 years ago

0.1.73

3 years ago

0.1.72

3 years ago

0.1.70

3 years ago

0.1.71

3 years ago

0.1.67

3 years ago

0.1.68

3 years ago

0.1.69

3 years ago

0.1.65

3 years ago

0.1.66

3 years ago

0.1.63

3 years ago

0.1.64

3 years ago

0.1.60

3 years ago

0.1.61

3 years ago

0.1.62

3 years ago

0.1.52

3 years ago

0.1.53

3 years ago

0.1.54

3 years ago

0.1.55

3 years ago

0.1.56

3 years ago

0.1.57

3 years ago

0.1.58

3 years ago

0.1.59

3 years ago

0.1.50

3 years ago

0.1.51

3 years ago

0.1.49

3 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

3 years ago

0.1.46

3 years ago

0.1.47

3 years ago

0.1.48

3 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

4 years ago

0.1.21

4 years ago

0.1.22

4 years ago

0.1.23

4 years ago

0.1.24

4 years ago

0.1.25

4 years ago

0.1.26

4 years ago

0.1.15

4 years ago

0.1.16

4 years ago

0.1.17

4 years ago

0.1.18

4 years ago

0.1.19

4 years ago

0.1.10

4 years ago

0.1.11

4 years ago

0.1.12

4 years ago

0.1.13

4 years ago

0.1.14

4 years ago

0.1.0

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.9

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.0.216

4 years ago

0.0.215

4 years ago

0.0.214

4 years ago

0.0.218

4 years ago

0.0.217

4 years ago

0.0.213

4 years ago

0.0.212

4 years ago

0.0.211

4 years ago

0.0.210

4 years ago

0.0.205

4 years ago

0.0.204

4 years ago

0.0.203

4 years ago

0.0.202

4 years ago

0.0.209

4 years ago

0.0.208

4 years ago

0.0.207

4 years ago

0.0.206

4 years ago

0.0.201

4 years ago

0.0.200

4 years ago

0.0.197

4 years ago

0.0.196

4 years ago

0.0.195

4 years ago

0.0.194

4 years ago

0.0.199

4 years ago

0.0.198

4 years ago

0.0.193

4 years ago

0.0.192

4 years ago

0.0.191

4 years ago

0.0.190

4 years ago

0.0.186

4 years ago

0.0.185

4 years ago

0.0.184

4 years ago

0.0.189

4 years ago

0.0.188

4 years ago

0.0.187

4 years ago

0.0.159

4 years ago

0.0.158

4 years ago

0.0.150

4 years ago

0.0.157

4 years ago

0.0.156

4 years ago

0.0.155

4 years ago

0.0.154

4 years ago

0.0.169

4 years ago

0.0.164

4 years ago

0.0.163

4 years ago

0.0.162

4 years ago

0.0.161

4 years ago

0.0.168

4 years ago

0.0.167

4 years ago

0.0.166

4 years ago

0.0.165

4 years ago

0.0.160

4 years ago

0.0.175

4 years ago

0.0.174

4 years ago

0.0.173

4 years ago

0.0.172

4 years ago

0.0.179

4 years ago

0.0.178

4 years ago

0.0.177

4 years ago

0.0.176

4 years ago

0.0.171

4 years ago

0.0.170

4 years ago

0.0.183

4 years ago

0.0.182

4 years ago

0.0.181

4 years ago

0.0.180

4 years ago

0.0.149

4 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

5 years ago

0.0.137

5 years ago

0.0.136

5 years ago

0.0.135

5 years ago

0.0.131

5 years ago

0.0.134

5 years ago

0.0.133

5 years ago

0.0.132

5 years ago

0.0.130

5 years ago

0.0.127

5 years ago

0.0.129

5 years ago

0.0.126

5 years ago

0.0.125

5 years ago

0.0.124

5 years ago

0.0.123

5 years ago

0.0.122

5 years ago

0.0.121

5 years ago

0.0.120

5 years ago

0.0.117

5 years ago

0.0.116

5 years ago

0.0.119

5 years ago

0.0.118

5 years ago

0.0.115

5 years ago

0.0.114

5 years ago

0.0.113

5 years ago

0.0.112

5 years ago

0.0.111

5 years ago

0.0.110

5 years ago

0.0.109

5 years ago

0.0.108

5 years ago

0.0.107

5 years ago

0.0.106

5 years ago

0.0.105

5 years ago

0.0.104

5 years ago

0.0.103

5 years ago

0.0.102

5 years ago

0.0.101

5 years ago

0.0.100

5 years ago

0.0.99

5 years ago

0.0.97

5 years ago

0.0.98

5 years ago

0.0.96

5 years ago

0.0.95

5 years ago

0.0.94

5 years ago

0.0.92

5 years ago

0.0.93

5 years ago

0.0.90

5 years ago

0.0.91

5 years ago

0.0.87

5 years ago

0.0.88

5 years ago

0.0.89

5 years ago

0.0.84

5 years ago

0.0.85

5 years ago

0.0.86

5 years ago

0.0.83

5 years ago

0.0.82

5 years ago

0.0.81

5 years ago

0.0.80

5 years ago

0.0.79

5 years ago

0.0.77

5 years ago

0.0.78

5 years ago

0.0.76

5 years ago

0.0.74

5 years ago

0.0.73

5 years ago

0.0.72

5 years ago

0.0.71

5 years ago

0.0.70

5 years ago

0.0.69

5 years ago

0.0.67

5 years ago

0.0.68

5 years ago

0.0.65

5 years ago

0.0.66

5 years ago

0.0.63

5 years ago

0.0.64

5 years ago

0.0.62

5 years ago

0.0.61

5 years ago

0.0.60

5 years ago

0.0.59

5 years ago

0.0.58

5 years ago

0.0.57

5 years ago

0.0.56

5 years ago

0.0.55

5 years ago

0.0.54

5 years ago

0.0.53

5 years ago

0.0.52

5 years ago

0.0.51

5 years ago

0.0.50

5 years ago

0.0.49

5 years ago

0.0.48

5 years ago

0.0.47

5 years ago

0.0.46

5 years ago

0.0.44

5 years ago

0.0.45

5 years ago

0.0.42

5 years ago

0.0.43

5 years ago

0.0.41

5 years ago

0.0.40

5 years ago

0.0.39

5 years ago

0.0.38

5 years ago

0.0.37

5 years ago

0.0.36

5 years ago

0.0.34

5 years ago

0.0.35

5 years ago

0.0.33

5 years ago

0.0.31

5 years ago

0.0.32

5 years ago

0.0.30

5 years ago

0.0.29

5 years ago

0.0.27

5 years ago

0.0.28

5 years ago

0.0.26

5 years ago

0.0.25

5 years ago

0.0.24

5 years ago

0.0.23

5 years ago

0.0.22

5 years ago

0.0.21

5 years ago

0.0.20

5 years ago

0.0.19

5 years ago

0.0.17

5 years ago

0.0.18

5 years ago

0.0.16

5 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