繁体   English   中英

如何在永不结束的脚本上运行 kubectl exec

[英]How to run kubectl exec on scripts that never end

我有一个 mssql pod,我需要使用sql_exporter来导出其指标。 我能够手动设置整个事情:

  1. 下载二进制文件
  2. 安装软件包
  3. 在 pod 上运行 ./sql_exporter 以开始在端口上侦听指标

我尝试使用kubectl exec -it ...自动执行此操作,并且能够执行第 1 步和第 2 步。当我尝试使用kubectl exec -it "$mssql_pod_name" -- bash -c ./sql_exporter执行第 3 步时,脚本只是挂起,我理解服务器将永远在监听,但这会停止我的其余安装脚本。

I0722 21:26:54.299112     435 main.go:52] Starting SQL exporter (version=0.5, branch=master, revision=fc5ed07ee38c5b90bab285392c43edfe32d271c5) (go=go1.11.3, user=root@f24ba5099571, date=20190114-09:24:06)
I0722 21:26:54.299534     435 config.go:18] Loading configuration from sql_exporter.yml
I0722 21:26:54.300102     435 config.go:131] Loaded collector "mssql_standard" from mssql_standard.collector.yml
I0722 21:26:54.300207     435 main.go:67] Listening on :9399
<nothing else, never ends>

任何关于让它静音并让它在后台运行的提示(我不能按 ctrl-c,因为这会停止端口监听)。 或者有没有更好的方法在 pod 部署时自动安装插件? 谢谢

要回答您的问题:

这个答案应该对你有所帮助。 您应该(!?)能够使用./sql_exporter &在后台运行该进程(当使用--stdin --tty时)。 如果这不起作用,您可以按照相同答案的描述尝试nohup

推荐一个更好的方法:

使用kubectl exec不是编写 Kubernetes 集群的好方法。

kubectl exec最适合用于调试而不是将解决方案部署到集群。

我假设有人为 Microsoft SQL Server 创建了一个 Kubernetes 部署(或类似的)。 您现在想要使用导出器来补充该部署。

您有以下选择:

  1. 扩充现有的 Deployment,并将sql_exporter作为 Sidecar(另一个容器)添加到包含 Microsoft SQL Server 容器的 Pod 中。 导出器通过localhost访问 SQL Server。 这是部署补充应用程序的功能(例如日志记录、监控)时的常见模式
  2. sql_exporter创建一个新的 Deployment(或类似的)并将其作为独立服务运行。 配置它抓取一个|更多的 Microsoft SQL Server 实例。

这两种方法:

  • 做更多的工作,但它们是“更多的 Kubernetes”解决方案,并提供更好的可重复性|可审计性等。
  • 要求您sql_exporter创建一个容器 (尽管我假设导出器的作者已经提供了这个)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM