目标和问题
拥有可以持续运行的容器/Pod部署。容器应该执行的命令是:/usr/local/bin/python3
,命令的args是:"-c $'import time\\nwhile (True):\\n print(\".\");time.sleep(5);'"
。但是,当我执行kubectl apply -f "PATH_TO_THE_KUBERNETES_YAML_FILE"
时,除了这个Python:IndentationError: unexpected indent
之外,部署就会出错。
错误的截图:
Pod部署被用作调用Python代码的媒介,这些代码在使用证书时作为任务的一部分与LetsEncrypt Certbot客户端交互。
请参阅项目这里
因此,应该可以将Pod >> do kubectl exec ...
部署到作为Kubernetes部署的一部分运行的容器中。
试过:
定义Kubernetes命令args行的各种方法。
python3 -c exec(\"import time\nwhile True: print(\".\");time.sleep(5);\")
$'textwrap.dedent("""import time while True: print(".") time.sleep(5)""")'
...args: ["-c $'import time\\nwhile (True):\\n print(\".\");time.sleep(5);'"]
的替代方案Python3 -c "..."
并通过docker run
命令从这个Dockerfile到容器调用它...apply -f YAML_FILE
时不会抱怨YAML文件的格式和Pod部署规范的遵守情况。["/bin/bash", "-ecx", "while :; do printf '.'; sleep 5 ; done"]
<--这是可行的。进一步信息
它似乎是在Kubernetes Pod部署YAML文件中指定Python代码的组合。这与Pythons对重要空格和缩进的要求不太一致。正如您可以在“尝试”部分中看到的那样,它在直接调用Python或通过Docker /exec命令时工作。
我如何解决这个问题?
发布于 2019-04-09 06:23:35
所以我在库伯内特斯斯拉克频道上得到了帮助。这是YAML语法问题。
Pod部署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
属性覆盖。
详细解释了args属性。
-c
是Python二进制文件的一个参数。kubectl exec
对其进行命令调用关键
args
属性的这一部分> - |-
。它剥离行馈送和任何尾随的空行。使声明多行Python代码块成为可能。
文档
args
属性中所需语法的示例代码的gist。找到它,这里。@wizzwizz4 4,@a_guest,以获得您的评论和建议。他们帮助我解决这个问题,缩小了解决方案的范围。同时也非常感谢Kubernetes Slack频道的@grampelberg先生帮助我并提供了解决方案。
https://stackoverflow.com/questions/55463094
复制相似问题