Развертывание Kubernetes: preStop не выполняет команды aws - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь перенести логи на S3 непосредственно перед завершением работы модуля.Для этого нам необходимо

  1. Сконфигурировать наш контейнер для использования AWS-CLI.Я сделал это успешно, используя скрипт в перехвате postStart.

  2. Выполнение команды AWS S3 для передачи файлов из hostPath в корзину S3.Почти был этот !!!

Вот мое развертывание Kube (работает на мини-кубе):

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 по-другому.Я прочитал несколько статей о lifecycle и preStop hook.Также у меня был относительный вопрос об использовании preStop hook с льготным периодом .

Будем благодарны за любые предложения / помощь по поводу того, чего мне не хватает.

1 Ответ

0 голосов
/ 22 февраля 2019

Возможно, было бы проще, если бы Skbn .

Skbn - это инструмент для копирования файлов и каталогов между Kubernetes и поставщиками облачных хранилищ.Он назван в честь видеоигры 1981 года Сокобан .Skbn использует буфер в памяти для процесса копирования, чтобы избежать чрезмерного потребления памяти.В настоящее время Skbn поддерживает следующих провайдеров: - AWS S3 - Minio S3 - хранилище BLOB-объектов Azure

Вы можете использовать:

skbn cp \
    --src k8s://<namespace>/<podName>/<containerName>/<path> \
    --dst s3://<bucket>/<path>

Вы должны посмотреть на в кластере использование, так как для этого потребуется настроить ClusterRole, ClusterRoleBinding и ServiceAccount.

...