我可以从外部文件中获取 configMap 值吗?
Can i get a configMap value from an external file?
我定义了这个 configMap :
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
labels:
app: my-config
data:
myConfiguration.json: |
{
"configKey": [
{
"key" : "value"
},
{
"key" : "value"
}
}
这就是我在 pod 中使用它的方式:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: someimage
name: someimage
spec:
selector:
matchLabels:
app: someimage
replicas: 1
template:
metadata:
labels:
app: someimage
spec:
containers:
- image: someimage
name: someimage
command:
- mb
- --configfile
- /configFolder/myConfig.json
ports:
- containerPort: 2525
volumeMounts:
- name: config-volume
mountPath: /configFolder
hostname: somehost
restartPolicy: Always
nodeSelector:
beta.kubernetes.io/os: linux
volumes:
- name: config-volume
configMap:
name: my-config
items:
- key: myConfiguration.json
path: myConfiguration.json
我的问题是:是否可以将 myconfiguration(json 字符串)的值保存在一个单独的文件中,与 configmap 分开?为了保持清洁?我需要如何更改部署和 configmap yaml 定义,这样我就不必更改应用程序?
重要:我不能使用任何单独的模板工具。
谢谢
是的,你可以!使用 Kustomize。
Kustomize 是 kubectl sub-command 在 1.14 中引入的,它具有许多有助于自定义部署的功能。
要做到这一点,您必须使用 ConfigMaps Generators
。这将需要一个额外的文件 kustomization.yml
.
因此,如果您的部署 yaml 文件是 deployment.yaml
并且您的 configMap 的名称是 my-config
,那么 kustomization.yaml
应该看起来像这样
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
configMapGenerator:
- name: my-config
files:
- myConfiguration.json
- myConfiguration2.json # you can use multiple files
要 运行 kustomize,您必须使用带有 -k
选项的 kubectl apply
。
编辑:Kustomize 会将您的 ConfigMap 的哈希值附加到它们的名称中。有了它,它将能够跟踪您的配置更改,并在它们发生更改时为您触发重新部署。
因此,无论何时更改 configMaps,都无需删除 pods。
我定义了这个 configMap :
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
labels:
app: my-config
data:
myConfiguration.json: |
{
"configKey": [
{
"key" : "value"
},
{
"key" : "value"
}
}
这就是我在 pod 中使用它的方式:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: someimage
name: someimage
spec:
selector:
matchLabels:
app: someimage
replicas: 1
template:
metadata:
labels:
app: someimage
spec:
containers:
- image: someimage
name: someimage
command:
- mb
- --configfile
- /configFolder/myConfig.json
ports:
- containerPort: 2525
volumeMounts:
- name: config-volume
mountPath: /configFolder
hostname: somehost
restartPolicy: Always
nodeSelector:
beta.kubernetes.io/os: linux
volumes:
- name: config-volume
configMap:
name: my-config
items:
- key: myConfiguration.json
path: myConfiguration.json
我的问题是:是否可以将 myconfiguration(json 字符串)的值保存在一个单独的文件中,与 configmap 分开?为了保持清洁?我需要如何更改部署和 configmap yaml 定义,这样我就不必更改应用程序?
重要:我不能使用任何单独的模板工具。
谢谢
是的,你可以!使用 Kustomize。
Kustomize 是 kubectl sub-command 在 1.14 中引入的,它具有许多有助于自定义部署的功能。
要做到这一点,您必须使用 ConfigMaps Generators
。这将需要一个额外的文件 kustomization.yml
.
因此,如果您的部署 yaml 文件是 deployment.yaml
并且您的 configMap 的名称是 my-config
,那么 kustomization.yaml
应该看起来像这样
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
configMapGenerator:
- name: my-config
files:
- myConfiguration.json
- myConfiguration2.json # you can use multiple files
要 运行 kustomize,您必须使用带有 -k
选项的 kubectl apply
。
编辑:Kustomize 会将您的 ConfigMap 的哈希值附加到它们的名称中。有了它,它将能够跟踪您的配置更改,并在它们发生更改时为您触发重新部署。
因此,无论何时更改 configMaps,都无需删除 pods。