当前位置: 首页 > 知识库问答 >
问题:

IndentationError:由Python 3引发的意外缩进。在库伯内特斯args条目中使用的代码在Pod部署YAML

易超
2023-03-14

目标和问题

使容器/吊舱部署能够持续运行。容器应该执行的命令是:/usr/local/bin/python3,该命令的参数是:“-c$'import time\\n while(True):\\n print(\“\”);time.sleep(5);”。但是,当我执行kubectl apply-f“PATH\u TO\u KUBERNETES\u YAML\u文件”时,部署会出现以下Python异常错误:indicationerror:unexpected indent

Pod部署用作调用Python代码的媒介,在使用LetsEncrypt证书时,Python代码作为任务的一部分与Certbot客户端交互。

在这里查看项目

所以应该可以部署吊舱

尝试:

定义库伯内特斯命令args行的各种方法。

>

  • 通过exec Python选项。例如:python3-c exec(\"导入时间\n true:打印(\".\"); time.sleep(5);\")
  • 用'和"的不同组合封装要执行的代码。
  • $'textwrap.dedent(""导入时间,而True:print(".")time.sleep(5)""")'...
  • 尝试使用:

    args:
     - "-c $'import time\\nwhile (True):\\n print(\".\");time.sleep(5);'"
    

    作为args的替代方法:[“-c$”导入时间\\n而(True):\\n打印(\“\”);时间。睡眠(5);“]

    确认Python代码本身可以工作。

    进一步资料

    • Python是v3.7.2
    • 库伯内特斯v1.12.5-gke.10

    它似乎是在Kubernetes Pod部署YAML文件中指定Python代码的组合。。。这与Pythons对显著空格和缩进的要求不符。正如您在#trued部分中所读到的,它在直接调用Python或通过Docker run/exec命令调用Python时工作。

    我如何解决这个问题?

  • 共有1个答案

    葛浩阔
    2023-03-14

    所以我在Kubernetes Slack频道上得到了帮助。这是一个YAML语法问题。

      args:
        - |-
          -c
          import time
          while True:
              print('.')
              time.sleep(5)
    

    这与Dockerfile的...

    FROM larssb/certbot-dns-cloudflare-python3
    LABEL author="https://github.com/larssb"
    
    #
    # Container config
    #
    WORKDIR /letsencryptit
    
    #
    # COPY IN DATA
    #
    COPY ./scripts /scripts/
    COPY ./letsencryptit /letsencryptit/
    
    #
    # INSTALL
    #
    RUN pip install --upgrade google-api-python-client --disable-pip-version-check --no-cache-dir \
        && pip install --upgrade oauth2client --disable-pip-version-check --no-cache-dir \
        && pip install --upgrade sty --disable-pip-version-check --no-cache-dir \
        && chmod +x /scripts/deploy-hook-runner.sh
    
    # Set an ENTRYPOINT to override the entrypoint specified in certbot/certbot
    ENTRYPOINT ["/usr/local/bin/python3"]
    CMD ["-c"]
    

    ENTRYPOINT,因为这会被Pod部署重新使用。但是,Dockerfile的CMD被Pod部署YAML文件中的args属性覆盖。

    • -c是Python二进制文件的参数
    • 其余的是std。Python代码,让容器通过Pod部署部署,持续运行,以便它可以通过kubectl exec
    • 待命

    args属性的这一部分

    • 带有args属性中所需语法的示例代码的要点。在这里找到它。
    • 使用的Dockerfile
    • 库伯内特斯Pod部署YAML文件。看看这里
    • 关于YAML的条语法

    感谢@wizzwizz4,@a_客人提出的意见和建议。他们帮我解决了这个问题,找到了一个解决方案。同时非常感谢Kubernetes Slack频道的@grampelberg先生帮助我并提供了解决方案。

     类似资料:
    • 我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url

    • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

    • 我正在尝试使用helm图表部署我的应用程序。我已经将statefulSet定义为一种正在部署的类型。yaml并根据规范serviceName提供无头服务。来自部署的代码片段。yaml如下所示。 部署后,当我启动“kubectl get pods”时,其显示的POD名称为“MyApp-100-deployment-n”,其中n 如果我使用kubectl exec进入Pod,并触发“主机名”命令,我会

    • 问题内容: 我是Python的新手,正在收到此错误: 在这段代码上: 问题答案: 尽管缩进错误在StackOverflow页面上很明显,但它们可能不在您的编辑器中。您在这里混合使用不同的缩进类型,1、4和8个空格。根据PEP8,您应始终使用四个空格进行缩进。您还应该避免混用制表符和空格。 我还建议您尝试使用‘ ‘命令行选项 来运行脚本,以确定何时意外混合使用制表符和空格。当然,任何体面的编辑器都可

    • 是否可以在库伯内特斯中配置入口控制器,仅当传入请求的标头具有特定值时才将HTTP请求路由到服务? 实例 带有以下标头的HTTP请求 应该转发给服务1 带有以下标头的HTTP请求 应该被阻止 如果可能的话,你能详细一点或指向一些文档,因为我找不到这种用例的文档吗

    • 我只是想知道如何手动设置库伯内特斯Web仪表板使用的外部endpoint。 创建名称空间kube系统后,我运行了以下操作: 是否有一个标志可以用来指定外部访问使用哪个tcp端口?据我所知,这只是随机分配一个。我已经查看了留档,但我很难找到解决方案。如果有任何帮助,将不胜感激。