對于 K8 的專家來說,這聽起來像是一個非常愚蠢的問題。但是我已經為此苦苦掙扎了一段時間,因此是下面的問題。我正在嘗試通過 Minikube 和 docker 在本地部署一個簡單的 Kubernetes 應用程序來測試 sidecar 容器模式。讓我們從邊車容器元素開始:文件FROM python:3.6-alpineRUN pip install boto3==1.14.20RUN pip install --upgrade awscli s3cmd ENV APP_HOME_DIR=/home/sidecarRUN mkdir $APP_HOME_DIRADD run.sh $APP_HOME_DIRADD s3_sync.py $APP_HOME_DIRRUN chmod +x $APP_HOME_DIR/s3_sync.pyRUN chmod +x $APP_HOME_DIR/run.shENV BUCKET_NAME=ENV PROJECT_NAME=ENV FEATURE_BRANCH=ENV LOCAL_DIR=WORKDIR $APP_HOME_DIRENTRYPOINT ["./run.sh"]run.sh#!/bin/shwhile truedo echo "Triggering an S3-SYNC" python /home/sidecar/s3_sync.py -b $BUCKET_NAME -p $PROJECT_NAME -f $FEATURE_BRANCH -l $LOCAL_DIR sleep 10done以及 python 文件s3_sync.py的簡化版本:import loggingimport argparselogging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", handlers=[logging.FileHandler("debug.log"), logging.StreamHandler()],)logger = logging.getLogger(__name__)MASTER = "master"def main(): bucket_name = args.bucket_name project_name = args.project_name branch = args.feature_branch local_dir = args.local_dir sync_type = "production" if branch == MASTER else "review" logger.info(f"S3-SYNC starting for {sync_type} environment")if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-b", "--bucket_name", help="s3 bucket name", required=True) parser.add_argument("-p", "--project_name", help="project name to sync", default="") parser.add_argument("-f", "--feature_branch", help="git feature branch name", default="master") parser.add_argument("-l", "--local_dir", help="local dir where to sync the s3 objects", required=True) args = parser.parse_args() main()如果我構建上面的內容并運行它:docker build -t sidecar_python .docker run -e BUCKET_NAME=MYBUCKET -e PROJECT_NAME=MYPROJECT -e FEATURE_BRANCH=MYBRANCH -e LOCAL_DIR=/home sidecar_python事情進展順利。
1 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
該/usr目錄包含各種系統和應用軟件。特別是,Python 二進制文件通常位于/usr/bin/python3Linux 系統(或容器)中。
您的 Kubernetes YAMLemptyDir在/usr. 這會隱藏該目錄樹中的所有內容,包括 Python 二進制文件和所有 Python 系統庫。這導致了這個錯誤。
將卷安裝在其他地方可以避免這個問題。容器化應用程序往往不會對“標準”FHS 路徑過于挑剔,所以我可能會設置
env:
- name: LOCAL_DIR
value: "/dags"
volumeMounts:
- name: dags
mountPath: /dags
添加回答
舉報
0/150
提交
取消