如何从 k8s 将配置文件导入容器

How to import a config file into a container from k8s

我有一个为 React 应用程序编写的 docker 文件。此应用采用 .json 配置文件,它在 运行 时使用。该文件不包含任何秘密。

所以我在没有配置文件的情况下构建了映像,现在我不确定如何在 运行 启动文件时传输 JSON 文件。

我正在考虑使用 CI/CD 过程在生产中部署它,这需要:

我认为我想在最后一点添加 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 生成器功能。

祝你好运:)