簡體   English   中英

Kubernetes 部署:preStop 不執行 aws 命令

[英]Kubernetes Deployment: preStop does not execute aws commands

我正在嘗試在 pod 終止之前將日志傳輸到 S3。 為此,我們需要

  1. 將我們的容器配置為具有 AWS-CLI。 我使用 postStart 鈎子中的腳本成功地做到了這一點。

  2. 執行 AWS S3 命令將文件從 hostPath 傳輸到 S3 存儲桶。 差點有這個!!!

這是我的 Kube 部署(在 minikube 上運行):

 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

安裝S3Script.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鈎子的文章。 也有一個關於在寬限期使用preStop hook的相關問題。

對我可能遺漏的任何建議/幫助表示贊賞。

也許使用Skbn會更容易。

Skbn是一種用於在 Kubernetes 和雲存儲提供商之間復制文件和目錄的工具。 它以 1981 年的電子游戲推箱子命名。 Skbn 使用內存緩沖區進行復制過程,以避免過多的內存消耗。 Skbn 目前支持以下供應商: - AWS S3 - Minio S3 - Azure Blob 存儲

你可以使用:

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

您應該查看集群內使用情況,因為它需要設置 ClusterRole、ClusterRoleBinding 和 ServiceAccount。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM