Развертывание Kubernetes: preStop не выполняет команды aws
Я пытаюсь перенести логи на S3 как раз перед тем, как завершить работу модуля. Для этого нам нужно
Настройте наш контейнер на использование AWS-CLI. Я сделал это успешно с помощью скрипта в перезапуске postStart.
Выполните команду AWS S3 для передачи файлов из hostPath в корзину S3. Почти был этот!!!
Вот мой Kube Deployment (работает на миникубе):
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
installS3Script.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
#!/bin/bash
# export AWS_DEFAULT_PROFILE=admin
echo "Transfering files to S3.."
aws s3 cp /data/testdata/data s3://testpratham --recursive --profile admin
aws s3 ls s3://testpratham --profile admin
echo "Transfer to S3 successfull !!"
Что не удалось: TransferFilesToS3.sh выполняется успешно, НО НЕ выполняет команды AWS.
Что работает: я создал файлы журнала испытаний и поместил команды aws в хук postStart (installS3Script.sh), и он работает отлично!!
Я думаю, что я могу смотреть на preStop хуки по-другому. Я прочитал несколько статей о жизненном цикле и preStop hook. Также был относительный вопрос об использовании preStop hook с льготным периодом.
Любые предложения / помощь в том, что я мог бы упустить, приветствуются.
1 ответ
Может быть, было бы проще использовать Skbn.
Skbn - это инструмент для копирования файлов и каталогов между Kubernetes и поставщиками облачных хранилищ. Он назван в честь видеоигры Sokoban1981 года. Skbn использует буфер в памяти для процесса копирования, чтобы избежать чрезмерного потребления памяти. В настоящее время Skbn поддерживает следующих поставщиков: - AWS S3 - Minio S3 - хранилище BLOB-объектов Azure
Вы можете использовать:
skbn cp \
--src k8s://<namespace>/<podName>/<containerName>/<path> \
--dst s3://<bucket>/<path>
Вы должны посмотреть на использование в кластере, так как это потребует настройки ClusterRole, ClusterRoleBinding и ServiceAccount.