Kuectl部署-如何从JSON文件加载env-var



我正在使用kubectl将ASP.Net核心应用程序部署到K8S集群。目前,我对数据库的容器PORTs和ConnectionString进行了硬编码,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeploy
spec:
replicas: 1
selector:
matchLabels:
app: mydeploy
template:
metadata:
labels:
app: mydeploy
spec:
containers:
- name: mydeploy
image: harbor.com/my_app:latest
env:
- name: MyApp__ConnectionString
value: "Host=postgres-ap-svc;Port=5432;Database=db;Username=postgres;Password=password"
ports:
- containerPort: 5076

但我认为最好的解决方案是使用appsettings.json文件(ASP.Net配置文件(中的这些变量。所以我的问题-如何从JSON文件加载这个vars并在yaml文件中使用

JSON文件如下:

{
"MyApp": {
"ConnectionString": "Host=postgres-ap-svc;Port=5432;Database=db;Username=postgres;Password=password"
},
"ClientBaseUrls": {
"MyApp": "http://mydeploy-svc:5076/api",
}
}

您可以使用以下命令创建configmap,然后将其安装到您的contianer

kubectl create configmap appsettings --from-file=appsettings.json --dry-run -o yaml

对于挂载,您应该向您的部署或sts添加一个卷,如下所示:

volumes:
- name: config
configMap:
name: appsettings

然后将其安装到您的容器:

volumeMounts:
- mountPath: /appropriate/path/to/config/appsettings.json
subPath: appsettings.json
name: config

此外,如果你愿意,你可以使用配置映射作为你的环境变量源,如下所示:

envFrom:
- configMapRef:
name: config

您可以尝试使用文字模式:

kubectl create configmap appsettings --from-literal='ConnectionString'='Host=postgres-ap-svc;Port=5432;Database=db;Username=postgres;Password=password' --from-literal='MyApp'='http://mydeploy-svc:5076/api'

如果这不起作用,您可能需要编写单独的JSON-YAML解析器。

为了更好地使用,我将所有评论作为社区wiki答案。

如果在容器中运行printenv,请参阅:

appsettings.json={ "MyApp": { "ConnectionString": "Host=postgres-ap-svc;Port=5432;Database=db;Username=postgres;Password=password" }, "ClientBaseUrls": { "MyApp": "http://mydeploy-svc:5076/api", } }

而不是类似的:"MyApp__ConnectionString":"...""ClientBaseUrls__MyApp":"..."

您应该使用--from-env-file选项来创建configmap。

例如:kubectl create configmap appsettings --from-env-file=appsettings.json --dry-run -o yaml和使用envFrom,就像在后kubernetes.io/docs/tasks/configure pod container/中提到的那样。

相关内容

  • 没有找到相关文章

最新更新