【问题标题】:Exception: OSError: [Errno 8] Exec format error: './kubectl' when publish to Azure Function App异常:OSError:[Errno 8] Exec 格式错误:发布到 Azure Function App 时出现“./kubectl”
【发布时间】:2019-07-09 21:10:49
【问题描述】:

我正在尝试编写 API 并在 Azure Function 应用程序上发布和运行。在函数中我需要从 kubectl 中读取。 在 localhost 上读取 kubectl 和配置可以正常工作。 但是当我发布到 azure 函数应用程序时,它返回错误消息:“异常:OSError:[Errno 8] Exec 格式错误:'./kubectl'”。

我在 Mac 设备上使用 Python 在 Azure 中创建 HTTP 触发函数。而 Azure 服务计划是 LinusDynamicPlan。我使用的 kubectl 是一个 mac 二进制文件。

读取 kubectl 的代码:

deployments = subprocess.check_output(["./kubectl", "get", "deployments", cluster_config_name])

我可以在本地主机上成功运行脚本。但不在 Azure 函数应用中。 我在 Azure 中收到的错误消息:

2019-07-09T07:37:38.168 [Error] Executed 'Functions.nc6v3_usage' (Failed, Id=71d76d36-95ab-4bd6-9656-5578141c4c3f)
Result: Failure
Exception: OSError: [Errno 8] Exec format error: './kubectl'

Stack:   File "/usr/local/lib/python3.6/site-packages/azure/functions_worker/dispatcher.py", line 300, in _handle__invocation_request
    self.__run_sync_func, invocation_id, fi.func, args)

  File "/usr/local/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)

  File "/usr/local/lib/python3.6/site-packages/azure/functions_worker/dispatcher.py", line 389, in __run_sync_func
    return func(**params)

  File "/home/site/wwwroot/nc6v3_usage/__init__.py", line 18, in main
    deployments = subprocess.check_output(["./kubectl", "get", "deployments", cluster_config_name])

  File "/usr/local/lib/python3.6/subprocess.py", line 356, in check_output
    **kwargs).stdout

  File "/usr/local/lib/python3.6/subprocess.py", line 423, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/local/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/local/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)

【问题讨论】:

    标签: azure exec kubectl


    【解决方案1】:

    我使用的 kubectl 是一个 mac 二进制文件。

    如果我没有正确理解你,请纠正我。您是否在 Azure 实例的 Linux 系统上使用 mac 二进制文件?如果是这样,你就是做不到,Mac =/= Linux。

    尝试按照 Kubernetes 官方文档提供的 this instruction 在您的 Azure 实例上安装 kubectl,然后为您的脚本提供为您的系统安装的 kubectl 二进制文件的完整路径。如果您按照上述说明操作,它将是/usr/local/bin/kubectl

    【讨论】:

    • 是的,这就是问题所在。我更改为 Linux kubectl,它现在可以工作了。非常感谢!
    猜你喜欢
    • 2016-12-14
    • 2019-02-28
    • 2016-04-15
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2018-11-12
    • 2019-08-14
    相关资源
    最近更新 更多