【问题标题】:Python scripts executes Kubernetes command: kubectl apply -f config_file.yamlPython 脚本执行 Kubernetes 命令:kubectl apply -f config_file.yaml
【发布时间】:2019-01-03 13:06:30
【问题描述】:

我生成了一个 python 脚本,它使用 pyyaml 打开一个部署 config_file.yaml,修改了一些参数并再次保存它。该 python 脚本将在 Kubernetes 集群的主节点中执行。

一旦生成了新文件,我的意图是执行

kubectl apply -f config_file.yaml

在 python 脚本中将修改应用于部署。

我一直在阅读如何使用 kubernetes python 客户端进行操作,但似乎还没有准备好执行 kubectl apply。

所以另一种选择是创建一个 bash 脚本并从 python 脚本执行它。

Bash 脚本:

#!/bin/bash
sudo kubectl apply -f config_file.yaml

我给它权限 chmod +x shell_scipt.sh

Python 脚本:

import subprocess
subprocess.call(['./shell_script.sh'])

但是出现错误: _execute_child 中的文件“/usr/lib/python2.7/subprocess.py”,第 1047 行 引发 child_exception OSError: [Errno 13] 权限被拒绝

我不知道如何解决这个错误,我已经测试了 bash 脚本的权限,但没有任何效果。

【问题讨论】:

  • 你是从 sudo 运行的吗?

标签: python bash kubernetes kubectl


【解决方案1】:

如果我理解正确,您正在使用 python 动态 修改 静态 yaml 文件。如果是这种情况,我建议使用 helm,如果它非常适合使静态 yaml 文件动态化:-)

【讨论】:

    【解决方案2】:

    我对 Kubernetes 一无所知,但我想我可能会有所帮助。

    我基本上建议您直接从 Python 脚本运行命令,而不是让 Python 运行运行命令的 bash 脚本。

    import os
    
    command = 'kubectl apply -f config_file.yaml'
    password = 'yourpassword'
    p = os.system('echo %s|sudo -S %s' % (passs, command))
    

    【讨论】:

      【解决方案3】:

      你是如何运行 python 脚本的?

      我认为您正在使用非 sudo 用户运行 python 脚本。尝试以 sudo 用户身份运行 python 脚本,这样您的子进程就可以访问该文件。

      如果这能解决您的问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2021-11-25
        • 2021-03-27
        • 2019-06-03
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        相关资源
        最近更新 更多