kubernetes - 如何使用 ytt 将 sidecar 容器添加到现有的 Kubernetes Deployment?
问题描述
我想将 fluent-bit 代理作为 sidecar 容器添加到通过外部工具 ( ) 生成的现有Istio Ingress Gateway 中。我认为使用ytt及其覆盖将是实现此目的的好方法,因为它应该让我在 the和一些额外的内容上附加一个附加内容,同时保持生成的 YAML 的其余部分完好无损。Deployment
istioctl
container
Deployment
volumes
Deployment
这是一个近似的占位符istio-ingressgateay
以帮助可视化结构:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: istio-ingressgateway
namespace: istio-system
spec:
selector:
matchLabels:
app: istio-ingressgateway
template:
metadata:
labels:
app: istio-ingressgateway
spec:
containers:
- args:
- example-args
command: ["example-command"]
image: gcr.io/istio/proxyv2
imagePullPolicy: Always
name: istio-proxy
volumes:
- name: example-volume-secret
secret:
secretName: example-secret
- name: example-volume-configmap
configMap:
name: example-configmap
我想为此添加一个容器,如下所示:
- name: fluent-bit
image: fluent/fluent-bit
resources:
limits:
memory: 100Mi
requests:
cpu: 10m
memory: 10Mi
volumeMounts:
- name: fluent-bit-config
mountPath: /fluent-bit/etc
- name: varlog
mountPath: /var/log
- name: dockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
看起来volumes
像:
- name: fluent-bit-config
configMap:
name: ingressgateway-fluent-bit-forwarder-config
- name: varlog
hostPath:
path: /var/log
- name: dockercontainers
hostPath:
path: /var/lib/docker/containers
我设法通过修改 ytt 游乐场中的覆盖文件示例来破解一些东西,这看起来像这样:
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind": "Deployment", "metadata":{"name":"istio-ingressgateway"}}),expects=1
---
spec:
template:
spec:
containers:
#@overlay/append
- name: fluent-bit
image: fluent/fluent-bit
resources:
limits:
memory: 100Mi
requests:
cpu: 10m
memory: 10Mi
volumeMounts:
- name: fluent-bit-config
mountPath: /fluent-bit/etc
- name: varlog
mountPath: /var/log
- name: dockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
#@overlay/match by=overlay.subset({"kind": "Deployment", "metadata":{"name":"istio-ingressgateway"}}),expects=1
---
spec:
template:
spec:
volumes:
#@overlay/append
- name: fluent-bit-config
configMap:
name: ingressgateway-fluent-bit-forwarder-config
#@overlay/append
- name: varlog
hostPath:
path: /var/log
#@overlay/append
- name: dockercontainers
hostPath:
path: /var/lib/docker/containers
不过,我想知道的是,最好、最惯用的方法是ytt
什么?
谢谢!
解决方案
你现在的东西很好!我要提出的一个建议是,如果总是需要将卷和容器添加在一起,则将它们组合到同一个叠加层中,如下所示:
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind": "Deployment", "metadata":{"name":"istio-ingressgateway"}}),expects=1
---
spec:
template:
spec:
containers:
#@overlay/append
- name: fluent-bit
image: fluent/fluent-bit
resources:
limits:
memory: 100Mi
requests:
cpu: 10m
memory: 10Mi
volumeMounts:
- name: fluent-bit-config
mountPath: /fluent-bit/etc
- name: varlog
mountPath: /var/log
- name: dockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
#@overlay/append
- name: fluent-bit-config
configMap:
name: ingressgateway-fluent-bit-forwarder-config
#@overlay/append
- name: varlog
hostPath:
path: /var/log
#@overlay/append
- name: dockercontainers
hostPath:
path: /var/lib/docker/containers
这将保证在任何时候添加容器时,也会包含适当的卷。
推荐阅读
- c# - 如何在应用程序启动之间保留文本框数据?
- r - 我如何使用 R studio 来模拟带有 Backshift 运算符(时间序列)的过程
- windows - python3.8中导入dll模块
- laravel - 传递给 Illuminate\Auth\SessionGuard::__construct() 的参数 2 必须实现接口 Illuminate\Contracts\Auth\UserProvider,给定 null
- javascript - 检查 int 输入长度
- python - 有没有什么好的方法来表示对数据框中的值进行排序之前和之后的顺序变化?
- python - 在 pytest 中使用自定义测试资源修补第三方客户端
- ios - iOS 13 中 TabBar 上的 CGAffineTransform
- python - 从 fortran 返回四精度变量
- java - 在 Intellij IDEA Edu 中单击“运行”时如何过滤输出?