• kubernetes 配置示例 ConfigMap


    部署应用,我们经常碰到的问题是配置文件的内容会变化,我们可以通过 configMap 来保存配置文件的内容。比如:一个 spring boot 的 Java 应用,做了一个镜像,jar 包是放在容器的 /opt 目录里,程序启动命令为: 

    java -jar mock-app-1.0.jar 

    我们知道,如果在 /opt 这个目录下放上一个 application.properties 文件的话, 这个程序就会使用这个文件做为程序的配置文件。我们要做的就是把 application.properties 文件里面的内容放到 configMap 里,然后在容器的配置里挂载上一个目录。这个挂载的目录对应到 configMap 就可以实现了配置外置化了。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      # 设置这个 configMap 的名称
      name: mock-app-conf
    data:
      application.properties: |
        db.user=root
        db.password=123456
        db.driver=xxxx    
      another.conf: |
        aaa=bbb

    上面的内容保存为: configmap.yaml  (注:这里的 another.conf 只是演示一个 configMap 可以包含多个配置文件。) 运行下面的命令可以创建这个 configMap

    kubectl apply -f configmap.yaml

    下面再创建我们要部署的程序的模板(mock-app.yaml)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mock-app-deploy
      labels:
        app: mock-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mock-app
      template:
        metadata:
          labels:
            app: mock-app
        spec:
          containers:
          - name: mock-app
            image: mock/app:1.0
            volumeMounts:
            # mountPath 要指定到文件,不是目录
            - mountPath: "/opt/application.properties"
            # subPath 一定要加,要不然容器启动后,会发现 application.properties 是一个目录。
              subPath: application.properties
              name: mock-app-volume
          volumes:
          - name: mock-app-volume
            configMap:
            # 这里的 name 是上面定义的 confimap 的 name
              name: mock-app-conf
              items:
              # 这里的 key 对应的是上面定义的 configMap 中的 data 里面的某个值。下面的 key 的值写成 another.conf 的话,
              # application.properties 文件的内容就会变成 another.conf 对应的内容
              - key: application.properties
                path: application.properties

    注: 以上举例是 jar 包和配置文件是放在同一个目录下面(/opt) 下面,如果 application.properties 是放在  /opt/config 下面的话,则mountPath 可以指定为 /opt/config,然后再去掉 subPath,也是可以的。

    下面是配置多个配置文件的示例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mock-app-deploy
      labels:
        app: mock-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mock-app
      template:
        metadata:
          labels:
            app: mock-app
        spec:
          containers:
          - name: mock-app
            image: mock/app:1.0
            volumeMounts:
            # mountPath 这里指定的是目录
            - mountPath: "/opt/config"          
              name: mock-app-volume
          volumes:
          - name: mock-app-volume
            configMap:
            # 这里的 name 是上面定义的 confimap 的 name
              name: mock-app-conf
              items:         
              - key: application.properties
                path: application.properties
              - key: another.conf # 对应的是 ConfigMap 里 data 的某个值
                path: cba.conf # 把 another.conf 的内容作为容器中 /opt/config/cba.conf 这个文件的内容
  • 相关阅读:
    (十)条件判断
    (九)字符处理命令
    (八)awk命令
    (六)环境变量配置文件
    (七)grep命令行提取符号
    Ⅶ 类模板与STL编程 ②
    Ⅵ 虚函数与多态性
    Ⅴ 运算符重载
    Ⅳ 继承与派生②
    Ⅳ 继承与派生①
  • 原文地址:https://www.cnblogs.com/langfanyun/p/15827781.html
Copyright © 2020-2023  润新知