Kubernetes 指向文件的env变量的Configmap
我有一个名为Kubernetes 指向文件的env变量的Configmap,kubernetes,Kubernetes,我有一个名为app_conf_path的env变量,它指向一个\location\file.yaml,该文件反过来包含应用程序运行所需的所有值。应用程序需要这个app_conf_path变量,该变量的位置为file.yaml。如何为这种类型的设置创建configmap。现在我在一个persistentvolume中有一个file.yaml,并且有一个env变量指向该mountlocation。我最近才知道configmaps。在此方面的任何帮助都将不胜感激。通常会在configmap中设置以下配
app_conf_path
的env
变量,它指向一个\location\file.yaml
,该文件反过来包含应用程序运行所需的所有值。应用程序需要这个app_conf_path
变量,该变量的位置为file.yaml
。如何为这种类型的设置创建configmap
。现在我在一个persistentvolume
中有一个file.yaml
,并且有一个env
变量指向该mountlocation
。我最近才知道configmaps
。在此方面的任何帮助都将不胜感激。通常会在configmap中设置以下配置:
data:
file.yaml: |
# Some config
# content goes here
然后在你的pod模板中,你有如下内容:
containers:
- ...
env:
- name: app_conf_path
value: /config/file.yml
volumeMounts:
- name: config
mountPath: /config
volumes:
- name: config
configMap:
name: your-configmap
可以使用YAML清单或kubectl创建配置映射
kubectl create configmap app_conf_path --from-file=file.yaml
OR
configmap/configmap-multikeys.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app_conf_path
data:
Key1: very
Key2: value2
kubectl创建-f filename.yaml
apiVersion: v1
kind: Pod
metadata:
name: busy
spec:
containers:
- name: busy
image: busybox
volumeMounts:
- name: config
mountPath: /etc/config
volumes:
- name: config
configMap:
name: app_conf_path
我有一个名为app_conf_path
的env
变量,它指向一个\location\file.yaml
,该文件反过来包含应用程序运行所需的所有值。应用程序需要这个app_conf_path
变量,该变量的位置为file.yaml
。如何为这种类型的设置创建configmap
我将开始讨论ConfigMaps的概念:
- ConfigMap是配置设置的字典。它由字符串的键值对组成
- ConfigMaps有助于将代码与配置分开
- 您可以生成configmap,或者我们想要的:
- 可以像kubernetes中的卷一样处理:
- 存储在
对象中的数据可以在ConfigMap
类型的卷中引用,然后由Pod中运行的容器化应用程序使用ConfigMap
- 引用
对象时,只需在卷中提供其名称即可引用它。您还可以自定义用于ConfigMap中特定条目的路径configMap
- 存储在
- 要创建configmap,请运行以下命令:
kubectl创建configmap--from file=/location/file.yaml
apiVersion: v1
kind: Pod
metadata:
name: busy
spec:
containers:
- name: busy
image: busybox
volumeMounts:
- name: config
mountPath: /etc/config
volumes:
- name: config
configMap:
name: app_conf_path
- 您还可以向单个configmap添加多个文件,只需重复
参数,例如:--from file
file.yaml
不是很常见,我用它来模拟您的环境,通常我们使用类似app.properties
的东西,它不需要任何以前的结构,只需要key:value
成对形式中的所有值,就像我的示例一样
- 现在,我们将从文件
创建名为file.yaml
的configmap。文件位于运行命令的同一文件夹中,因此我不必指定完整路径:app.config
- 让我们看看我们创建的configmap:
configmap
创建卷
,并将所需位置设置为装载该卷
。configmap
的每个部分都将是该文件夹中的一个文件。因为我们只从一个文件创建了它,所以它是唯一要挂载的文件。我们还使用值
设置所需的ENV name
作为文件路径
- 现在,让我们应用它并使用
kubectl exec-it--/bin/bash
打开pod内的一个shell,以查看结果:
现在我们达到了你要求的目标
pod内部有一个名为file.yaml
的配置文件,其中包含我们用来生成配置文件的配置设置
您不必担心单独创建和维护卷
如果您对此还有任何疑问,请在评论中告诉我。是,我想停止挂载包含此文件的persistentvolume
。yaml
和文件。yaml
是一个简单的yaml
文件,包含其他应用程序的dbconnectionString
和路径的详细信息谢谢您提供的信息。我注意到你得到了两个新的答案,两个答案看起来都是正确的,但它们缺乏解释、参考和完整的可复制示例。我正在准备一个更详细的答案,以帮助您进一步扩大对此事的了解。我正在准备您的答案,您能否确认您的应用程序是否接受文件.yaml的其他名称?例如,它可以是名为location/config.data的文件吗?另外,你的应用程序是否只从yaml格式的文件中读取数据?或者它可以是一个只有key:value
行的简单文件吗?是的filename
可以是任何内容。应用程序只读.yaml
格式我刚刚发布了我的答案,看到了这条评论。现在这是一个问题,因为配置文件仅定义为key:value
pair,这就是它们存储到配置映射中的方式。获取一个奇怪的错误配置映射“app\u conf\u path”无效:元数据。名称:无效值:“app\u conf\u path”:DNS-1123子域必须由小写字母数字字符组成,“-”或“.”,并且必须以字母数字字符开头和结尾(例如“example.com”,用于验证的正则表达式是“[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])”
从名称中删除下划线(\),并尝试创建正确映射的表达式?我的意思是app\u conf\u path
是应用程序所寻找的。如果我们给出app conf path
它会工作吗?你必须在pod清单文件的configmap和undet volumes部分中提供相同的名称。这是对configmap
的一个非常好的解释,实际上我在尝试给出文件名的时候
$ cat file.yaml
key1: value1
key2: value2
key3: value3
$ kubectl create configmap app.config --from-file=file.yaml
configmap/app.config created
$ kubectl describe configmap app.config
Name: app.config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
file.yaml:
----
key1: value1
key2: value2
key3: value3
Events: <none>
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: ubuntu
image: ubuntu
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 3000; done;" ]
volumeMounts:
- name: config-volume
mountPath: /tmp
env:
- name: app_conf_path
value: "/tmp/file.yaml"
volumes:
- name: config-volume
configMap:
name: app.config
$ kubectl apply -f app-deploy.yaml
deployment.apps/my-app created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-app-68b5b69fc8-xxqpw 1/1 Running 0 3s
$ kubectl exec -it my-app-68b5b69fc8-xxqpw -- /bin/bash
root@my-app-68b5b69fc8-xxqpw:/# printenv | grep app_conf_path
app_conf_path=/tmp/file.yaml
root@my-app-68b5b69fc8-xxqpw:/# cat $app_conf_path
key1: value1
key2: value2
key3: value3