web-dev-qa-db-fra.com

Point de terminaison d'appel à partir de Kubernetes Cron Job

J'ai une webapp en cours d'exécution dans un Docker-conteneur dans un cluster Kubernetes. L'application a un point de terminaison que je souhaite appeler périodiquement. L'application s'exécute sur plusieurs nœuds/modules, et il est important qu'un seul nœud exécute la tâche lancée par le point de terminaison. J'ai examiné les travaux Kubernetes Cron, mais je n'ai trouvé aucune documentation sur l'appel des points de terminaison à partir d'un travail Kubernetes Cron. Quelqu'un at-il une proposition de solution à ce problème? Comment gérez-vous la planification dans un cluster où il est crucial qu'un seul nœud exécute la tâche?

11
user1119371

CronJobs sont un bon choix. Voici une présentation rapide qui exécute 3 pods nginx acceptant tout le trafic. Chaque minute, un Job boucle 1 des 3 pods (toujours le même pod).

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
16
coreypobrien