use*_*156 4 python subprocess python-3.x kubernetes kubectl
我正在尝试使用 python 脚本执行kubectl命令,但不断收到错误。我需要执行kubectl命令来创建 pod 并检查pod日志是否有任何失败。
我在这里做错了什么?
import subprocess
command = 'kubectl apply -f deployment.yaml'
check_output= subprocess.check_output(command)
print(check_output)
Run Code Online (Sandbox Code Playgroud)
错误
Traceback (most recent call last):
File "/usr/bin/cma-scripts/kubectl.py", line 6, in <module>
check_output= subprocess.check_output(command)
File "/usr/local/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/lib/python3.9/subprocess.py", line 505, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/local/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/local/lib/python3.9/subprocess.py", line 1821, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'kubectl apply -f deployment.yaml'
Run Code Online (Sandbox Code Playgroud)
您可以使用kubectlPython 执行命令,但也可以使用Kubernetes API 的Python 客户端。
下面我将给出这两个选项的示例。
您可以使用子流程模块:
$ cat script-1.py
#!/usr/bin/python3.7
import subprocess
subprocess.run(["kubectl", "apply", "-f", "deployment.yaml"])
$ ./script-1.py
deployment.apps/web-app created
Run Code Online (Sandbox Code Playgroud)
您还可以使用 os模块:
$ cat script-1.py
#!/usr/bin/python3.7
import os
os.system("kubectl apply -f deployment.yaml")
$ ./script-1.py
deployment.apps/web-app created
Run Code Online (Sandbox Code Playgroud)
如前所述,您还可以使用 Python 客户端来创建 Deployment。
基于deployment_create.py示例,我创建了一个要deployment.yaml在default命名空间中部署的脚本:
$ cat script-2.py
#!/usr/bin/python3.7
from os import path
import yaml
from kubernetes import client, config
def main():
config.load_kube_config()
with open(path.join(path.dirname(__file__), "deployment-1.yaml")) as f:
dep = yaml.safe_load(f)
k8s_apps_v1 = client.AppsV1Api()
resp = k8s_apps_v1.create_namespaced_deployment(
body=dep, namespace="default")
print("Deployment created. status='%s'" % resp.metadata.name)
if __name__ == '__main__':
main()
$ ./script-2.py
Deployment created. status='web-app'
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE
web-app 1/1 1 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18571 次 |
| 最近记录: |