我正在尝试在吊舱终止之前将日志转移到S3。为此,我们需要
配置我们的容器以使用AWS-CLI。我成功做到了 在postStart挂钩中使用脚本。
执行AWS S3命令以将文件从hostPath传输到S3 桶。几乎有这个!!!
这是我的Kube部署(在minikube上运行):
pi@raspberrypi:/tmp $ ./a.out
Testing fgets() function:
Reading contents of myfile.txt:
P2
# CREATOR: GIMP PNM Filter Ve
rsion 1.1
445 243
255
108
107
104
102
102
installS3Script.sh
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: logtransfer-poc
spec:
replicas: 1
template:
metadata:
labels:
app: logs
spec:
volumes:
- name: secret-resources
secret:
secretName: local-secrets
- name: testdata
hostPath:
path: /data/testdata
containers:
- name: logtransfer-poc
image: someImage
ports:
- name: https-port
containerPort: 8443
command: ["/bin/bash","-c","--"]
args: ["while true; do sleep 30; done;"]
volumeMounts:
- name: secret-resources
mountPath: "/data/apache-tomcat/tomcat/resources"
- name: testdata
mountPath: "/data/testdata"
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cd /data/testdata/ && chmod u+x installS3Script.sh && ./installS3Script.sh > postInstall.logs"]
preStop:
exec:
command: ["/bin/sh", "-c", "cd /data/testdata/ && chmod u+x transferFilesToS3.sh && ./transferFilesToS3.sh > postTransfer.logs"]
terminationMessagePath: /data/testdata/termination-log
terminationGracePeriodSeconds: 30
imagePullSecrets:
- name: my-docker-credentials
transferFilesToS3.sh
#!/bin/bash
apt-get update
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
chmod u+x get-pip.py
echo "PATH=$PATH:/root/.local/bin" >> ~/.bashrc && echo "Path Exported !!"
source ~/.bashrc && echo "Refreshed profile !"
pip3 install awscli --upgrade --user
mkdir -p ~/.aws
cp /data/testdata/config/config ~/.aws
cp /data/testdata/config/credentials ~/.aws
失败的原因:transferFilesToS3.sh成功运行,但不执行AWS命令。
有效方法:我创建了测试日志文件,并将aws命令放在postStart挂钩(installS3Script.sh)中,并且工作正常!
我想我可能对preStop挂钩有不同的看法。我在lifecycle和preStop钩子上读了几篇文章。对于使用preStop hook with grace period也有一个相对的问题。
对我可能会缺少的任何建议/帮助,表示赞赏。
答案 0 :(得分:1)
使用Skbn也许会更容易。
Skbn 是用于在Kubernetes和云存储提供商之间复制文件和目录的工具。它以1981年的视频游戏Sokoban命名。 Skbn在复制过程中使用内存缓冲区,以避免过多的内存消耗。 Skbn当前支持以下提供程序: -AWS S3 -Minio S3 -Azure Blob存储
您可以使用:
skbn cp \
--src k8s://<namespace>/<podName>/<containerName>/<path> \
--dst s3://<bucket>/<path>
您应该查看in-cluster的用法,因为这将需要设置ClusterRole,ClusterRoleBinding和ServiceAccount。