[英]Using aws-cli in cronjob
我正在尝试在 cronjob 中运行aws sts get-caller-identity
,但这会导致/bin/sh: 1: aws: not found
spec:
containers:
- command:
- /bin/sh
- -c
- aws sts get-caller-identity
正如评论中已经提到的,AWS CLI 似乎没有安装在您用于此 cronjob 的映像中。 您需要提供更多信息!
如果您是所用映像的所有者,只需在 Dockerfile 中安装 AWS CLI。 如果您不是所有者,只需创建自己的映像,从您当前使用的映像扩展它并安装 AWS CLI。
例如,如果您使用的是基于 Alpine 的图像,只需创建一个 Dockerfile
FROM <THE_ORIGINAL_IMAGE>:<TAG>
RUN apk add --no-cache python3 py3-pip && \
pip3 install --upgrade pip && \
pip3 install awscli
然后构建镜像并将其推送到 DockerHub 以作为示例。 现在您可以在您的 CronJob 资源中使用这个新图像。
但是,接下来是您的 CronJob Pod 需要访问权限才能执行 AWS STS 服务。 完成这项工作有多种可能性。 最好的方法是使用 IRSA(服务帐户的 IAM 角色)只需查看这篇博客文章https://aws.amazon.com/de/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/
如果您仍然需要帮助,请提供更多详细信息。
步骤1:
您需要将密钥添加到 kubernetes 密钥:
kubectl create secret generic aws-credd --from-literal=AWS_SECRET_ACCESS_KEY=xxxxxxxxx --from-literal=AWS_ACCESS_KEY_ID=xxxxx
第 2 步:将其复制到 -> cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: aws-cli-sync
labels:
app: aws-cli-sync
spec:
schedule: "0 17 * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: aws-cli-sync
image: mikesir87/aws-cli
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: aws-cred
key: AWS_ACCESS_KEY_ID
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: aws-cred
key: AWS_SECRET_ACCESS_KEY
args:
- /bin/sh
- -c
- date;aws s3 sync s3://xxx-backup-prod s3://elk-xxx-backup
restartPolicy: Never
第 3 步:在命名空间中添加作业,在那里添加密钥
kubectl apply -f ./cronjob.yaml
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.