如何从 k8s 将配置文件导入容器
How to import a config file into a container from k8s
我有一个为 React 应用程序编写的 docker 文件。此应用采用 .json
配置文件,它在 运行 时使用。该文件不包含任何秘密。
所以我在没有配置文件的情况下构建了映像,现在我不确定如何在 运行 启动文件时传输 JSON 文件。
我正在考虑使用 CI/CD 过程在生产中部署它,这需要:
- git构建图像的实验室(操作)
- 将其推送到 docker 存储库
- Kubernetes 拾取它并running/starting 容器
我认为我想在最后一点添加 JSON 配置。
我的问题是:如何在k8启动时将配置文件添加到应用程序中?
如果我没理解错的话,k8s 没有任何本地存储来创建一个卷来复制它?我可以给 docker run
一个单独的 git 存储库来保存配置文件吗?
你应该看看 configmap。
来自 k8s 文档 configmap:
A ConfigMap is an API object used to store non-confidential data in key-value pairs. Pods can consume ConfigMaps as environment variables, command-line arguments, or as configuration files in a volume.
在你的情况下,你希望作为一个卷有一个文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: your-app
data:
config.json: #you file name
<file-content>
可以手动创建 configmap 或使用以下文件从文件生成:
- 直接在集群中:
kubectl create configmap <name> --from-file <path-to-file>
.
- 在 yaml 文件中:
kubectl create configmap <name> --from-file <path-to-file> --dry-run=client -o yaml > <file-name>.yaml
.
获得 configmap 后,您必须修改 deployment/pod 以添加卷。
apiVersion: apps/v1
kind: Deployment
metadata:
name: <your-name>
spec:
...
template:
metadata:
...
spec:
...
containers:
- name: <container-name>
...
volumeMounts:
- mountPath: '<path>/config.json'
name: config-volume
readOnly: true
subPath: config.json
volumes:
- name: config-volume
configMap:
name: <name-of-configmap>
要部署到您的集群,您可以使用纯 yaml 或者我建议您看一下 Kustomize or Helm charts。
它们都是部署应用程序的流行系统。如果 kustomize,则有适合您情况的 configmap 生成器功能。
祝你好运:)
我有一个为 React 应用程序编写的 docker 文件。此应用采用 .json
配置文件,它在 运行 时使用。该文件不包含任何秘密。
所以我在没有配置文件的情况下构建了映像,现在我不确定如何在 运行 启动文件时传输 JSON 文件。
我正在考虑使用 CI/CD 过程在生产中部署它,这需要:
- git构建图像的实验室(操作)
- 将其推送到 docker 存储库
- Kubernetes 拾取它并running/starting 容器
我认为我想在最后一点添加 JSON 配置。
我的问题是:如何在k8启动时将配置文件添加到应用程序中?
如果我没理解错的话,k8s 没有任何本地存储来创建一个卷来复制它?我可以给 docker run
一个单独的 git 存储库来保存配置文件吗?
你应该看看 configmap。
来自 k8s 文档 configmap:
A ConfigMap is an API object used to store non-confidential data in key-value pairs. Pods can consume ConfigMaps as environment variables, command-line arguments, or as configuration files in a volume.
在你的情况下,你希望作为一个卷有一个文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: your-app
data:
config.json: #you file name
<file-content>
可以手动创建 configmap 或使用以下文件从文件生成:
- 直接在集群中:
kubectl create configmap <name> --from-file <path-to-file>
. - 在 yaml 文件中:
kubectl create configmap <name> --from-file <path-to-file> --dry-run=client -o yaml > <file-name>.yaml
.
获得 configmap 后,您必须修改 deployment/pod 以添加卷。
apiVersion: apps/v1
kind: Deployment
metadata:
name: <your-name>
spec:
...
template:
metadata:
...
spec:
...
containers:
- name: <container-name>
...
volumeMounts:
- mountPath: '<path>/config.json'
name: config-volume
readOnly: true
subPath: config.json
volumes:
- name: config-volume
configMap:
name: <name-of-configmap>
要部署到您的集群,您可以使用纯 yaml 或者我建议您看一下 Kustomize or Helm charts。
它们都是部署应用程序的流行系统。如果 kustomize,则有适合您情况的 configmap 生成器功能。
祝你好运:)