Вызовите конечную точку из Kubernetes Cron Job
У меня есть веб-приложение, работающее в Docker-контейнере в кластере Kubernetes. Приложение имеет конечную точку, которую я хочу периодически вызывать. Приложение работает на нескольких узлах / модулях, и важно, чтобы только один узел выполнял задачу, инициированную конечной точкой. Я посмотрел рабочие места в Kubernetes Cron, но не нашел никакой документации по вызову конечных точек из задания Kubernetes Cron. Есть ли у кого-нибудь предложения по решению этой проблемы? Как вы управляете планированием в кластере, где важно, чтобы только один узел выполнял задачу?
1 ответ
Решение
CronJob
Это хороший выбор. Вот быстрый макет, который запускает 3 модуля nginx, принимающих весь трафик. Каждую минуту Job
кудри 1 из 3 стручков (всегда один и тот же стручок).
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: main
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: singleton
labels:
app: nginx
special: singleton
spec:
replicas: 1
selector:
matchLabels:
app: nginx
special: singleton
template:
metadata:
labels:
app: nginx
special: singleton
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: allpods
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: singleton
spec:
selector:
special: singleton
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: callout
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: callout
image: buildpack-deps:curl
args:
- /bin/sh
- -ec
- curl http://singleton
restartPolicy: Never