Рубрики
Uncategorized

Развертывание простого микросервиса Nodejs с использованием cdk8s

Написание более 200 строк кода YAML просто для развертывания микросервиса на Kubernetes — огромная боль для … Tagged с Kubernetes, TypeScript, CDK8S, DevOps.

Написание более 200 строк кода YAML, просто для развертывания микросервиса на Kubernetes, является огромной болью для инженера DevOps.

CDK8s можно использовать для удаления всего этого дубликата кода и облегчить развертывание микросервиса без необходимости писать массивные манифесты YAML.

Мы также получаем возможность писать код, используя наши любимые объектно-ориентированные языки.

Мы будем написать пример CDK8S -диаграммы с использованием конструкций TypeScript и OpenSource CDK8S.

Конструкции используются:

@opencdk8s/cdk8s-redis-sts v0.0.7
cdk8s-plus-17 v1.0.0-beta.8
  • Инициализировать проект CDK8S
mkdir cdk8s-node-app && cd cdk8s-node-app
cdk8s init typescript-app
  • Установите конструктивные библиотеки
npm install @opencdk8s/cdk8s-redis-sts 
  • Редактировать main.ts, чтобы включить наше приложение Redis DB и Nodejs
import { Construct } from 'constructs';
import { App, Chart, ChartProps } from 'cdk8s';
import { MyRedis } from '@opencdk8s/cdk8s-redis-sts';
import { Deployment } from 'cdk8s-plus-17';

export class MyChart extends Chart {
  constructor(scope: Construct, id: string, props: ChartProps = { }) {
    super(scope, id, props);
const redis = new MyRedis(this, 'redis', {
      image: 'redis',
      namespace: 'default',
      volumeSize: '10Gi',
      replicas: 3,
      createStorageClass: false,
    });
new Deployment(this, "deployment", {
      metadata: {
        namespace: 'default',
      },
      containers: [{
        image: "hunterthompson/node-redis-counter:latest",
        name: "hello",
        env: {
          'REDIS_URI': {
            value: redis.name
          }
        }
      }]
    })
  }
}

const app = new App();
new MyChart(app, 'microservice');
app.synth();
  • Запустить компиляцию и синтезатор
npm run compile && npm run synth

Конечным результатом команды Synth Run NPM является манифест YAML, который вы можете применить, используя kubectl

apiVersion: v1
data:
  master.conf: |-

    bind 0.0.0.0
    daemonize no
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    supervised no
  slave.conf: |-

    slaveof redis 6379
kind: ConfigMap
metadata:
  name: redis-redis-conf
  namespace: default
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis
  name: redis
  namespace: default
spec:
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis
  type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: redis
  name: redis
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  serviceName: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - command:
            - bash
            - -c
            - |-
              [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
              ordinal=${BASH_REMATCH[1]}
              if [[ $ordinal -eq 0 ]]; then
              redis-server /mnt/redis/master.conf
              else
              redis-server /mnt/redis/slave.conf
              fi
          env: []
          image: redis
          name: redis
          ports:
            - containerPort: 6379
          resources:
            limits:
              cpu: 400m
              memory: 512Mi
            requests:
              cpu: 200m
              memory: 256Mi
          volumeMounts:
            - mountPath: /data
              name: redis
            - mountPath: /mnt/redis/
              name: redis-redis-conf
      terminationGracePeriodSeconds: 10
      volumes:
        - configMap:
            name: redis-redis-conf
          name: redis-redis-conf
  volumeClaimTemplates:
    - metadata:
        name: redis
        namespace: default
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
        storageClassName: gp2
--------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment-c89e8760
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      cdk8s.deployment: microservice-deployment-c87f6fea
  template:
    metadata:
      labels:
        cdk8s.deployment: microservice-deployment-c87f6fea
    spec:
      containers:
        - env:
            - name: REDIS_URI
              value: redis
          image: hunterthompson/node-redis-counter:latest
          imagePullPolicy: Always
          name: hello
          ports: []
          volumeMounts: []
      volumes: []

Мы только что синтезировали манифест YAML 130, написав 33 строки кода CDK8S.

Оригинал: «https://dev.to/hunterthompson/deploying-a-simple-nodejs-microservice-using-cdk8s-3mjg»