【问题标题】:Replacing properties file in container using configmaps in kubernetes使用 kubernetes 中的 configmaps 替换容器中的属性文件
【发布时间】:2021-08-10 07:44:27
【问题描述】:

我正在尝试使用 deployment.yaml 文件中的 configMapvolumeMount 替换容器中的属性文件。 以下是我的部署文件:

apiVersion: apps/v1
kind: Deployment
metadata:
   name: deployment-properties
spec:
   selector:
      matchLabels:
      app: agent-2
   replicas: 2
   template:
      metadata:
      labels:
         app: agent-2
      spec:
         containers:
         - name: agent-2
           image: agent:latest
           ports:
         - containerPort: 8080
           volumeMounts:
         -  mountPath: "/usr/local/tomcat/webapps/agent/WEB-INF/classes/conf/application.properties"
           name: "applictaion-conf"
           subPath: "application.properties"
         volumes:
          - name: applictaion-conf
            configMap:
             name: dddeagent-configproperties
             items:
              - key: "application.properties"
                path: "application.properties"

下面是来自configMap的sn-p:

apiVersion: v1
kind: ConfigMap
metadata:
    name: agent-configp
data:
   application.properties: |-
      AGENT_HOME = /var/ddeagenthome
      LIC_MAXITERATION=5
    LIC_MAXDELAY=10000

部署后,会挂载完整的文件夹结构,而不是单个文件。因此,所有文件都将从现有文件夹中删除。

版本 - 1.21.13

【问题讨论】:

    标签: kubernetes configmap


    【解决方案1】:

    我检查了这个配置,几乎没有拼写错误。您指的是配置映射“dddeagent-configproperties”,但您定义了一个名为“agent-configp”的 ConfigMap 对象。

    configMap:名称:dddeagent-configproperties

    应该是:

    configMap: name: agent-configp
    

    除了有一些缩进错误,所以我将在答案末尾粘贴一个固定的文件。

    就您的问题而言:您的方法是正确的,并且正如我在我的设置中测试的那样,一切都正常工作,没有任何问题。我创建了一个示例 pod,并以与您相同的方式安装了 ConfigMap(在有其他文件的目录中)。 ConfigMap 已按原样挂载为文件,并且该目录中的其他文件仍然可用。

    坐骑: /app/upload/test-folder/file-1 来自 application-conf (rw,path="application.properties")

    您的方法与here 描述的方法相同。

    请仔细检查没有挂载配置映射的 pod 上的目录 /usr/local/tomcat/webapps/agent/WEB-INF/classes/conf 确实存在并且其他文件在这里。由于您的图像不公开,我检查了tomcat 图像并且/usr/local/tomcat/webapps/ 目录为空。注意,即使这个目录是空的,当你想挂载一个文件时,Kubernetes 也会在这里创建agent/WEB-INF/classes/conf 目录和application.properties 文件。

    修复了部署和 ConfigMap 文件,缩进良好且没有拼写错误:

    部署文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
       name: deployment-properties
    spec:
       selector:
          matchLabels:
            app: agent-2
       replicas: 2
       template:
         metadata:
           labels:
             app: agent-2
         spec:
           containers:
           - name: agent-2
             image: agent:latest
             ports:
             - containerPort: 8080
             volumeMounts:
             - mountPath: "/usr/local/tomcat/webapps/agent/WEB-INF/classes/conf/application.properties"
               name: "application-conf"
               subPath: "application.properties"
           volumes:
           - name: application-conf
             configMap:
               name: agent-configp
               items:
               - key: "application.properties"
                 path: "application.properties"
    

    配置文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: agent-configp
    data:
       application.properties: |-
          AGENT_HOME = /var/ddeagenthome
          LIC_MAXITERATION=5
          LIC_MAXDELAY=1000
    

    【讨论】:

    • 抱歉拼写错误。由于 IP 问题,我尝试更新文件。我通过在路径“/usr/local/tomcat/webapps”中挂载文件来尝试您的建议,并且它在不删除现有文件的情况下工作得很好。 “/usr/local/tomcat/webapps”目录是由tomcat映像创建的,其余目录(/agent/WEB-INF/classes/conf)是在我部署应用程序后创建的
    • 嗨@Abhijeet,您的问题是否已解决或需要支持?
    • 问题尚未解决,但作为 WA,我已将 application.properties 文件复制到 /var 并从那里进行裁判
    • Kubernetes 创建的目录/agent/WEB-INF/classes/ (在此目录中挂载文件时)可能具有其他权限,这意味着您的脚本、应用程序(或用于复制/创建文件的任何内容)可以不能正常工作,这就是目录为空的原因。你有一些日志吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多