Запустите задание Kubernetes Cron из OpenShift, чтобы периодически вызывать конечную точку REST - PullRequest
0 голосов
/ 09 февраля 2020

Я изучаю, как запустить задание Spring Batch в RedHat OpenShift в качестве запланированного задания Kubernetes. Шаги сделаны,

1) Создан пример приложения Spring Batch, которое считывает файл .csv, который выполняет простую обработку, и помещает некоторые данные в h2 DB в памяти. Средство запуска задания вызывается как конечная точка REST ( / load ). Исходный код можно найти здесь . Пожалуйста, смотрите файл README для информации о конечной точке.

2) Создан Docker образ и помещен в DockerHub

3) Развернут с использованием этого образа в мой OpenShift Online кластеризация как приложение

Я хочу сделать следующее:

Запустить задание Kubernetes Cron из OpenShift для вызова / load REST-конечной точки, которая запускает работа SpringBatch периодически

Может кто-нибудь подсказать мне, как мне этого добиться?

Спасибо

Samme

1 Ответ

0 голосов
/ 11 февраля 2020

Самый простой способ - свернуть конечную точку REST /load. Вот способ сделать это:

Определение Pod, которое я использовал в качестве замены для вашего приложения (в целях тестирования):

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: mendhak/http-https-echo

Я использовал это изображение, потому что он отправляет различные свойства HTTP-запроса обратно клиенту.

Создание службы для pod :

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp the selector
  ports:
    - protocol: TCP
      port: 80 #Port that service is available on
      targetPort: 80 #Port that app listens on

Создание CronJob:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: curljob
spec:
  jobTemplate:
    metadata:
      name: curljob
    spec:
      template:
        metadata:
        spec:
          containers:
          - command:
            - curl
            - http://myapp-service:80/load
            image: curlimages/curl
            imagePullPolicy: Always
            name: curljobt
          restartPolicy: OnFailure
  schedule: '*/1 * * * *'

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

kubectl create cronjob --image curlimages/curl curljob -oyaml --schedule "*/1 * * * *" -- curl  http://myapp-service:80/load 

Когда "*/1 * * * *" будет указывать, как часто будет запускаться CronJob. Я настроил его запускать каждую минуту. Подробнее о настройке задания cron здесь и здесь

Здесь приведены результаты журналов kubectl из одного модуля работы :

{
  "path": "/load",
  "headers": {
    "host": "myapp-service",
    "user-agent": "curl/7.68.0-DEV",
    "accept": "*/*"
  },
  "method": "GET",
  "body": "",
  "fresh": false,
  "hostname": "myapp-service",
  "ip": "::ffff:192.168.197.19",
  "ips": [],
  "protocol": "http",
  "query": {},
  "subdomains": [],
  "xhr": false,
  "os": {
    "hostname": "myapp-pod"

Как видите, приложение получает GET запрос с путем: /load.

Дайте мне знать, если это поможет.

...