Kubernetes 中是否有办法按需触发作业在我的容器上运行?
用例是能够让容器按需从 S3 同步到持久卷。在应用程序的当前架构中,新内容被添加到 S3 并同步到由 Chef 管理的一组服务器。我需要一种方法让团队能够在 Kubernetes 上运行的容器中触发此功能。
答案1
实际上,Kubernetes 代表了一种灵活的机制,用于自动化任务工作负载,例如一次性流程工作以及诸如此类的周期性过程CronJobs,包含在batch/v1
Kubernetes API 对象中模型,因此@Tim 的解决方案对我来说相当不错。
我认为你可能可以在板上启动一些带有 的吊舱aws-cli
,以触发映射之间的同步操作PVC进入此容器并定位到 S3 存储。为此,您可以构建自己的镜像,并移植必要的二进制文件,或者使用现成的解决方案,例如docker-kubectl-awscli
由@Expert360。
以下作业将aws s3 sync
在特定容器内执行命令并在目标方之间启动同步操作:
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
您必须提供存储在特定 Kubernetes 中的aws-cli
相应AWS_ACCESS_KEY_ID
环境变量AWS_SECRET_ACCESS_KEY
秘密对象。
答案2
看一下项目:https://github.com/nuvo/skbn. 它还可以使用 kube2iam 功能