
Gibt es in Kubernetes eine Möglichkeit, bei Bedarf einen Job auszulösen, der in meinen Containern ausgeführt wird?
Der Anwendungsfall besteht darin, die Container bei Bedarf von S3 auf ein persistentes Volume synchronisieren zu können. In der aktuellen Architektur der Anwendung werden neue Inhalte zu S3 hinzugefügt und mit einer Gruppe von Servern synchronisiert, die mit Chef verwaltet werden. Ich muss eine Möglichkeit finden, wie ein Team diese Funktionalität in den auf Kubernetes laufenden Containern auslösen kann.
Antwort1
Tatsächlich stellt Kubernetes einen flexiblen Mechanismus für automatisierte Aufgaben-Workloads wie einmalige Prozesse dar.Arbeitsplätzeund periodische Prozesse wieZeitgesteuerte Aufgabenbatch/v1
, die im Kubernetes API-Objekt enthalten sindModell, daher ist die Lösung von @Tim für mich ganz anständig.
Ich nehme an, dass es für Sie möglich sein könnte, einen Pod mit einem auf einem Board zu starten, aws-cli
um eine Synchronisierungsaktion zwischen zugeordnetenaus PVCin diesen Container und Ziel-S3-Speicher. Zu diesem Zweck können Sie ein eigenes Image erstellen, das mit der erforderlichen Binärdatei portiert wurde, oder Sie verwenden eine fertige Lösung wie docker-kubectl-awscli
das Image, das von verwaltet wird@Expert360.
Der folgende Job führt aws s3 sync
einen Befehl in einem bestimmten Container aus und startet eine Synchronisierungsaktion zwischen den Zielparteien:
apiVersion: batch/v1
kind: Job
metadata:
name: backup-s3
spec:
template:
spec:
containers:
- name: kubectl-aws
image: expert360/kubectl-awscli:v1.11.2
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: aws-s3-key
key: aws-access-key-id
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: aws-s3-access-key
key: aws-secret-access-key
command: [ "/bin/bash", "-c", "aws s3 sync s3://my-bucket/ /data/backup" ]
volumeMounts:
- name: backup-aws
mountPath: /data/backup
volumes:
- name: backup-aws
persistentVolumeClaim:
claimName: backup-aws-claim
restartPolicy: Never
Sie müssen aws-cli
entsprechende AWS_ACCESS_KEY_ID
und AWS_SECRET_ACCESS_KEY
in bestimmten Kubernetes gespeicherte Umgebungsvariablen bereitstellenGeheimnisObjekte.
Antwort2
Werfen Sie einen Blick in das Projekt:https://github.com/nuvo/skbn. Es kann auch kube2iam-Funktionalitäten nutzen