我正在使用Zero to Jupyterhub Helm软件包,以便将Jupyterhub部署到我们的kubernetes集群中。各个笔记本图像需要一些额外的环境变量(主要是数据库连接信息),我希望它们从k8s命名空间中现有秘密中获取值。我该怎么做?
使用以下配置的幼稚方法不起作用:
singleuser:
extraEnv:
SECURE_ENVIRONMENT_VARIABLE:
valueFrom:
secretKeyRef:
name: secret
value: key
这将SECURE_ENVIRONMENT_VARIABLE
设置为map[valueFrom:map[secretKeyRef:map[name:secret value:key]]]
。
我也尝试过根据KubeSpawner config docs使用singleuser.extraConfig
来设置c.KubeSpawner.extra_container_config
,但是如果您使用它来设置env
,则显然会覆盖现有的环境变量,这会破坏系统:
extraConfig: |
c.KubeSpawner.extra_container_config = {
"env": [
{
"name": "SECURE_ENVIRONMENT_VARIABLE",
"value": "test" # even a hardcoded value results in the container failing
}
]
}
为便于记录,我可以通过helm upgrade --debug --dry-run
创建部署.yaml并在需要时手动进行编辑,但我不知道如何将这些信息获取到动态生成的Pod中。 / p>
答案 0 :(得分:0)
这里https://github.com/jupyterhub/kubespawner/issues/306#issuecomment-474934945 我提供了使用非字符串值设置环境变量的解决方案。
基本思想是使用c.KubeSpawner.modify_pod_hook将变量添加到pod规范中。
hub:
extraConfig:
ipaddress: |
from kubernetes import client
def modify_pod_hook(spawner, pod):
pod.spec.containers[0].env.append(client.V1EnvVar("MY_POD_IP", None, client.V1EnvVarSource(None, client.V1ObjectFieldSelector(None, "status.podIP"))))
return pod
c.KubeSpawner.modify_pod_hook = modify_pod_hook