Skip to content

Запуск системы Emcee в Kubernetes

Запуск системы с использованием Kubernetes и Minikube#

Для запуска Emcee нужно сконфигурировать и запустить ресурсы Kubernetes.

Для запуска кластера Kubernetes будет использоваться Minikube. Либо вы можете использовать свой готовый кластер Kubernetes.

После установки Minikube запускаем команду для старта кластера:

minikube start

Конфигурация ресурсов Kubernetes#

Для запуска нам потребуется Deployment для воркеров, очереди и Artifactory; Service для очереди и Artifactory.

Конфигурация файла emcee-worker-deployment.yaml с Deployment для создания 3х воркеров.

Обратите внимание что в env указываются переменные окружения для настройки воркера. См. главу Конфигурация воркера.

emcee-worker-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: emcee-worker-deployment
  labels:
    app: emcee-app
spec:
  replicas: 3
  selector:
    matchLabels:
      component: emcee-worker
  template:
    metadata:
      labels:
        component: emcee-worker
    spec:
      containers:
        - name: emcee-worker
          image: avitotech/emcee-worker:20.1.0
          imagePullPolicy: IfNotPresent
          resources:
            requests:
              cpu: "1.15"
            limits:
              memory: "4.5Gi"
              cpu: "1.3"
          volumeMounts:
            - mountPath: /dev/kvm
              name: kvm
          securityContext:
            privileged: true
          ports:
            - containerPort: 41001
          args: [ "$(EMCEE_WORKER_LOG_LEVEL)" ]
          env:
            - name: EMCEE_WORKER_QUEUE_URL
              value: "http://emcee-queue-service:41000"
            - name: EMCEE_WORKER_LOG_LEVEL
              value: "info"
      volumes:
        - name: kvm
          hostPath:
            path: /dev/kvm

Конфигурация файла emcee-queue-deployment.yaml с Deployment для очереди:

emcee-queue-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: emcee-queue-deployment
  labels:
    app: emcee-app
spec:
  selector:
    matchLabels:
      component: emcee-queue
  template:
    metadata:
      labels:
        component: emcee-queue
    spec:
      containers:
        - name: emcee-queue
          image: avitotech/emcee-queue:20.1.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 41000

Конфигурация файла emcee-queue-service.yaml с Service для очереди:

emcee-queue-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: emcee-queue-service
spec:
  type: NodePort
  selector:
    component: emcee-queue
  ports:
    - name: emcee-queue-service-ports
      protocol: TCP
      port: 41000
      targetPort: 41000

Конфигурация файла emcee-artifactory-deployment.yaml с Deployment для Artifactory:

emcee-artifactory-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: emcee-artifactory-deployment
  labels:
    app: emcee-app
spec:
  selector:
    matchLabels:
      component: emcee-artifactory
  template:
    metadata:
      labels:
        component: emcee-artifactory
    spec:
      containers:
        - name: emcee-artifactory
          image: docker.bintray.io/jfrog/artifactory-oss:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8081
            - containerPort: 8082
          volumeMounts:
            - mountPath: /var/opt/jfrog/artifactory
              name: artifactory
      volumes:
        - name: artifactory
          emptyDir: {}

Конфигурация файла emcee-artifactory-service.yaml с Service для Artifactory:

emcee-artifactory-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: emcee-artifactory-service
spec:
  type: NodePort
  selector:
    component: emcee-artifactory
  ports:
    - name: emcee-artifactory-service-port-1
      protocol: TCP
      port: 8081
      targetPort: 8081
    - name: emcee-artifactory-service-port-2
      protocol: TCP
      port: 8082
      targetPort: 8082

Запуск ресурсов Kubernetes#

Для запуска системы нужно последовательно запустить ресурсы:

kubectl apply --filename ./emcee-queue-deployment.yaml
kubectl apply --filename ./emcee-queue-service.yaml
kubectl apply --filename ./emcee-worker-deployment.yaml
kubectl apply --filename ./emcee-artifactory-deployment.yaml
kubectl apply --filename ./emcee-artifactory-service.yaml

Или запустить ресурсы сразу одной командой. Для этого ресурсы складываем в одну директорию и вызываем команду:

kubectl apply --filename ./

Для проверки что ресурсы запустились вызываем команду:

kubectl get pods

Вывод в консоли должен выглядеть примерно так:

NAME                                           READY   STATUS    RESTARTS   AGE
emcee-artifactory-deployment-db979bd5b-7fdbm   1/1     Running   0          6m5s
emcee-queue-deployment-5b49cf5884-wkmv9        1/1     Running   0          6m5s
emcee-worker-deployment-66c6b8bdb4-2kxqq       1/1     Running   0          6m5s
emcee-worker-deployment-66c6b8bdb4-96rfs       1/1     Running   0          6m5s
emcee-worker-deployment-66c6b8bdb4-pbtjv       1/1     Running   0          6m5s

Получение адресов очереди и Artifactory#

Для получения локального адреса очереди выполняем:

minikube service emcee-queue-service --url

В выводе команды будет ip:port очереди, который нужно использовать в Gradle плагине Emcee в качестве адреса очереди.

Для получения локального адреса Artifactory выполняем:

minikube service emcee-artifactory-service --url

В выводе команды будет ip:port Artifactory, который нужно использовать в Gradle плагине Emcee в качестве адреса Artifactory.

Если Emcee развернута на удаленном компьютере с кластером Kubernetes, то доступ до него нужно настроить в зависимости от кофигурации вашей сети и настроек Kubernetes.