Mongodb 如何将本地文件复制到helm部署中

Mongodb 如何将本地文件复制到helm部署中,mongodb,docker,kubernetes,kubernetes-helm,Mongodb,Docker,Kubernetes,Kubernetes Helm,我正试图在Kubernetes中使用mongo映像部署几个pod,其中包含一个初始化脚本。我正在使用头盔进行部署。因为我是从官方的Mongo docker映像开始的,所以我尝试在/docker entrypoint initdb.d添加一个脚本,以便在开始时执行它来初始化Mongo的一些参数 我不知道的是如何插入脚本,也就是说,在我的本地机器中,使用helm在/docker entrypoint initdb.d中插入脚本 我试图做一些类似docker run-v hostfile:mongof

我正试图在Kubernetes中使用mongo映像部署几个pod,其中包含一个初始化脚本。我正在使用头盔进行部署。因为我是从官方的Mongo docker映像开始的,所以我尝试在/docker entrypoint initdb.d添加一个脚本,以便在开始时执行它来初始化Mongo的一些参数

我不知道的是如何插入脚本,也就是说,在我的本地机器中,使用helm在/docker entrypoint initdb.d中插入脚本


我试图做一些类似docker run-v hostfile:mongofile的事情,但我需要在helm中使用等效的工具,因此这将在部署的所有POD中完成,您可以使用configmap。让我们通过configmap将nginx配置文件放入容器。我们有一个名为nginx的目录名,具有相同的级别值.yml。在里面我们有实际的配置文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config-file
  labels:
    app: ...    
data:
  nginx.conf: |-
{{ .Files.Get "nginx/nginx.conf" | indent 4 }}

---

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: SomeDeployment
  ...  
spec:
  replicas: 
  selector:
    matchLabels:
      app: ...
      release: ...
  template:
    metadata:
      labels:
        app: ...
        release: ...
    spec:
      volumes:
        - name: nginx-conf
          configMap:
            name: nginx-config-file
            items:
            - key: nginx.conf
              path: nginx.conf
      containers:        
        - name: ...
          image: ...          
          volumeMounts:
            - name: nginx-conf
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf
您还可以通过以下链接检查initContainers概念:
您可以使用configmap。让我们通过configmap将nginx配置文件放入容器。我们有一个名为nginx的目录名,具有相同的级别值.yml。在里面我们有实际的配置文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config-file
  labels:
    app: ...    
data:
  nginx.conf: |-
{{ .Files.Get "nginx/nginx.conf" | indent 4 }}

---

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: SomeDeployment
  ...  
spec:
  replicas: 
  selector:
    matchLabels:
      app: ...
      release: ...
  template:
    metadata:
      labels:
        app: ...
        release: ...
    spec:
      volumes:
        - name: nginx-conf
          configMap:
            name: nginx-config-file
            items:
            - key: nginx.conf
              path: nginx.conf
      containers:        
        - name: ...
          image: ...          
          volumeMounts:
            - name: nginx-conf
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf
您还可以通过以下链接检查initContainers概念:

在这种情况下,我会将文件直接添加到我的自定义图像中。在这种情况下,我会将文件直接添加到我的自定义图像中。非常感谢您的回答!我正试图做到这一点,在helm安装期间添加一个nginx配置文件。nginx.conf文件中的某些字段依赖于此安装运行,您对如何在安装期间设置此值有何建议?e、 g.:
server_name{{{.Values.server.name}我知道这不起作用,因为conf文件不是一个go文件template@Kajsa你可以用多种方法来做。您可以将配置文件直接放入confimap中,并通过helm渲染在其中使用它。或者使用initContainers,您可以通过某种bash脚本更改配置文件。因为initContainers在实际的容器和卷可以共享之前运行。我刚刚意识到,这段代码不一定会启动带有nginx入口控制器的pod,而nginx入口控制器可能会在这个helm安装启动之前运行。我找不到关于这些东西(入口控制器吊舱、入口实例、配置文件等)如何实际结合在一起的好解释。您正在通过ConfigMap导入的配置文件,应该是入口控制器部署的一部分,还是您希望入口将流量发送到的应用程序部署的一部分?@Kajsa不要对此示例感到困惑。Ingress controller是定制的nginx,在kubernetes中具有定制资源。此示例仅显示如何添加一些配置。您可以使用另一个映像代替nginx。不,您不能使用此配置文件,您应该使用k8s入口资源来定义nginx规则,其中包括路径、tls和服务属性。您可以动态地定义许多入口资源,而不是定义静态的单一nginx conf,这些资源可以由kubectl&helm部署。非常感谢您的回答!我正试图做到这一点,在helm安装期间添加一个nginx配置文件。nginx.conf文件中的某些字段依赖于此安装运行,您对如何在安装期间设置此值有何建议?e、 g.:
server_name{{{.Values.server.name}我知道这不起作用,因为conf文件不是一个go文件template@Kajsa你可以用多种方法来做。您可以将配置文件直接放入confimap中,并通过helm渲染在其中使用它。或者使用initContainers,您可以通过某种bash脚本更改配置文件。因为initContainers在实际的容器和卷可以共享之前运行。我刚刚意识到,这段代码不一定会启动带有nginx入口控制器的pod,而nginx入口控制器可能会在这个helm安装启动之前运行。我找不到关于这些东西(入口控制器吊舱、入口实例、配置文件等)如何实际结合在一起的好解释。您正在通过ConfigMap导入的配置文件,应该是入口控制器部署的一部分,还是您希望入口将流量发送到的应用程序部署的一部分?@Kajsa不要对此示例感到困惑。Ingress controller是定制的nginx,在kubernetes中具有定制资源。此示例仅显示如何添加一些配置。您可以使用另一个映像代替nginx。不,您不能使用此配置文件,您应该使用k8s入口资源来定义nginx规则,其中包括路径、tls和服务属性。您可以动态地定义许多入口资源,而不是定义静态的单一nginx conf,这些资源可以由kubectl&helm部署。