我有我们正在运行的供应商应用程序的 helm 部署脚本。对于日志记录解决方案,我需要为 fluentbit 添加一个 sidecar 容器,以将日志推送到聚合日志服务器(在本例中为 splunk)。
现在要定义这个 sidecar 容器,我想避免更改供应商定义的部署脚本。相反,我想要一些替代方法将边车容器附加到正在运行的 pod(s)。
到目前为止,我已经了解到可以在同一个部署脚本(部署配置)中定义 sidecar 容器。
我有我们正在运行的供应商应用程序的 helm 部署脚本。对于日志记录解决方案,我需要为 fluentbit 添加一个 sidecar 容器,以将日志推送到聚合日志服务器(在本例中为 splunk)。
现在要定义这个 sidecar 容器,我想避免更改供应商定义的部署脚本。相反,我想要一些替代方法将边车容器附加到正在运行的 pod(s)。
到目前为止,我已经了解到可以在同一个部署脚本(部署配置)中定义 sidecar 容器。
回答评论中的问题:
谢谢@大卫。这必须在部署之前完成。我想知道是否可以将边车容器附加到已经部署(运行)的 pod。
您不能将附加容器附加到正在运行的Pod
. 您可以更新(修补)资源定义。这将强制使用新规范重新创建资源。
有一个关于此功能的 github 问题已关闭,并附有以下评论:
在讨论了 SIG Node 的目标之后,明确的共识是 pod 规范中的容器列表应该保持不变。#27140将由kubernetes/community#649更好地解决,它允许在现有 pod 中运行临时调试容器。这将不会实施。
回答帖子的一部分:
现在要定义这个 sidecar 容器,我想避免更改供应商定义的部署脚本。相反,我想要一些替代方法将边车容器附加到正在运行的 pod(s)。
下面我介绍了两种将边车添加到Deployment
. 这两种方法都将重新加载Pods
以匹配新规范:
$ kubectl patch
Helm
图表并使用$ helm upgrade
在这两种情况下,我都鼓励您检查 Kubernetes 如何处理其资源的更新。您可以通过以下链接阅读更多内容:
$ kubectl patch
完全避免编辑 Helm 图表的方法是使用:
$ kubectl patch
此方法将“修补”现有Deployment/StatefulSet/Daemonset
并添加边车。这种方法的缺点是它不像 Helm 那样自动化,您需要为每个资源(每个Deployment
/ Statefulset
/Daemonset
等)创建一个“补丁”。如果来自 Helm 等其他来源的任何更新,此“补丁”将被覆盖。
有关更新 API 对象的文档:
Helm
图表并使用$ helm upgrade
此方法需要编辑 Helm 图表。添加边车之类的更改将在更新中持续存在。进行更改后,您将需要使用$ helm upgrade RELEASE_NAME CHART
.
你可以在这里读更多关于它的内容: