对于 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
提交
取消