gpt4 book ai didi

kubernetes - 将值从 initContainers 传递到容器规范

转载 作者:行者123 更新时间:2023-12-02 12:01:34 24 4
gpt4 key购买 nike

我有一个 kubernetes 部署,具有以下规范,通过 helm 3 安装。

apiVersion: apps/v1
kind: Deployment
metadata:
name: gatekeeper
spec:
replicas: 1
template:
spec:
containers:
- name: gatekeeper
image: my-gatekeeper-image:some-sha
args:
- --listen=0.0.0.0:80
- --client-id=gk-client
- --discovery-url={{ .Values.discoveryUrl }}

我需要将 discoveryUrl 值作为 helm 值传递,这是我通过不同的 helm chart 部署的 nginx-ingress pod 的公共(public) IP 地址。我安装上面的部署如下:

helm3 install my-nginx-ingress-chart
INGRESS_IP=$(kubectl get svc -lapp=nginx-ingress -o=jsonpath='{.items[].status.loadBalancer.ingress[].ip}')
helm3 install my-gatekeeper-chart --set discovery_url=${INGRESS_IP}

这工作正常,但是,现在我不想安装这两个 helm3,而是想安装一个 helm3,其中应创建 nginx-ingress 和 gatekeeper 部署。

我知道在 my-gatekeeper-imageinitContainer 中我们可以获得 nginx-ingress 的 ip 地址,但我无法理解如何设置它作为环境变量或传递给容器规范。

有一些 stackoverflow 问题提到我们可以创建一个持久卷或 secret 来实现这一点,但我不确定,如果我们必须删除它们,那将如何工作。我不想创建任何额外的对象并维护它们的生命周期。

最佳答案

如果不安装持久卷,则无法执行此操作。但是持久卷的创建可以仅由内存中的存储而不是 block 存储设备来支持。这样,我们就不必进行任何额外的生命周期管理。实现的方法是:

apiVersion: v1
kind: ConfigMap
metadata:
name: gatekeeper
data:
gatekeeper.sh: |-
#!/usr/bin/env bash
set -e

INGRESS_IP=$(kubectl get svc -lapp=nginx-ingress -o=jsonpath='{.items[].status.loadBalancer.ingress[].name}')
# Do other validations/cleanup
echo $INGRESS_IP > /opt/gkconf/discovery_url;
exit 0

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gatekeeper
labels:
app: gatekeeper
spec:
replicas: 1
selector:
matchLabels:
app: gatekeeper
template:
metadata:
name: gatekeeper
labels:
app: gatekeeper
spec:
initContainers:
- name: gkinit
command: [ "/opt/gk-init.sh" ]
image: 'bitnami/kubectl:1.12'
volumeMounts:
- mountPath: /opt/gkconf
name: gkconf
- mountPath: /opt/gk-init.sh
name: gatekeeper
subPath: gatekeeper.sh
readOnly: false
containers:
- name: gatekeeper
image: my-gatekeeper-image:some-sha
# ENTRYPOINT of above image should read the
# file /opt/gkconf/discovery_url and then launch
# the actual gatekeeper binary
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /opt/gkconf
name: gkconf
volumes:
- name: gkconf
emptyDir:
medium: Memory
- name: gatekeeper
configMap:
name: gatekeeper
defaultMode: 0555

关于kubernetes - 将值从 initContainers 传递到容器规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61097712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com