Kubernetes:用configmap替换文件

时间:2020-06-04 05:50:03

标签: kubernetes

这是我的配置图:

apiVersion: v1
kind: ConfigMap
metadata:
    name: chart-1591249502-zeppelin
    namespace: ra-iot-dev
    labels:
        helm.sh/chart: zeppelin-0.1.0
        app.kubernetes.io/name: zeppelin
        app.kubernetes.io/instance: chart-1591249502
        app.kubernetes.io/version: "0.9.0"
        app.kubernetes.io/managed-by: Helm
data:
  log4j.properties: |-
    log4j.rootLogger = INFO, dailyfile
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n
    log4j.appender.dailyfile.DatePattern=.yyyy-MM-dd
    log4j.appender.dailyfile.DEBUG = INFO
    log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.dailyfile.File = ${zeppelin.log.file}
    log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
    log4j.appender.dailyfile.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n
    log4j.logger.org.apache.zeppelin.python=DEBUG
    log4j.logger.org.apache.zeppelin.spark=DEBUG

我正在尝试将此文件安装到/zeppelin/conf/log4j.properties pod目录文件中。

这是我的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: chart-1591249502-zeppelin
  labels:
    helm.sh/chart: zeppelin-0.1.0
    app.kubernetes.io/name: zeppelin
    app.kubernetes.io/instance: chart-1591249502
    app.kubernetes.io/version: "0.9.0"
    app.kubernetes.io/managed-by: Helm
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: zeppelin
      app.kubernetes.io/instance: chart-1591249502
  template:
    metadata:
      labels:
        app.kubernetes.io/name: zeppelin
        app.kubernetes.io/instance: chart-1591249502
    spec:
      serviceAccountName: chart-1591249502-zeppelin
      securityContext:
        {}
      containers:
        - name: zeppelin
          securityContext:
            {}
          image: "apache/zeppelin:0.9.0"
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
            {}
          env:
            - name: ZEPPELIN_PORT
              value: "8080"
            - name: ZEPPELIN_K8S_CONTAINER_IMAGE
              value: apache/zeppelin:0.9.0
            - name: ZEPPELIN_RUN_MODE
              value: local
          volumeMounts:
            - name: log4j-properties-volume
              mountPath: /zeppelin/conf/log4j.properties
      volumes:
        - name: log4j-properties-volume
          configMap:
            name: chart-1591249502-zeppelin
            items:
              - key: log4j.properties
                path: keys

我在kubernetes中收到此错误事件:

错误:无法启动容器“ zeppelin”:来自守护程序的错误响应:oci运行时错误:container_linux.go:247:启动容器进程引起了“ process_linux.go:364:容器初始化引起了\“ rootfs_linux.go:54:将\\“ / var / lib / origin / openshift.local.volumes / pods / 63ac209e-a626-11ea-9e39-0050569f5f65 / volumes / kubernetes.io〜configmap / log4j-properties-volume \”安装到rootfs \\“ / var / lib / docker / overlay2 / 33f3199e46111afdcd64d21c58b010427c27761b02473967600fb95abd6d / conf / properties \ j21 / blogs / el / 7 \ n // files / blogs // \“ \”“:您是否正在尝试将目录挂载到文件上(反之亦然)?检查指定的主机路径是否存在并且是预期的类型

请记住,我只想替换现有文件。我的意思是,在/zeppelin/conf/目录中有几个文件。我只想替换/zeppelin/conf/log4j.properties

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

从日志中,我看到您正在OpenShift上工作,但是我能够在GKE上进行工作。

从您的示例中,我已经部署了纯齐柏林飞艇部署。

zeppelin@chart-1591249502-zeppelin-557d895cd5-v46dt:~/conf$ cat log4j.properties
#
# Licensed to the Apache Software Foundation (ASF) under one or more
...
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
...
# limitations under the License.
#

log4j.rootLogger = INFO, stdout

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n
zeppelin@chart-1591249502-zeppelin-557d895cd5-v46dt:~/conf$ 

如果要补充一个特定文件,则需要使用subPath。还有一篇文章提供了另一个示例,here

问题1。ConfigMap属于namespace

您的部署不包含任何名称空间,因此已部署在default名称空间中。 ConfigMap包括namespace: ra-iot-dev

$ kubectl api-resources
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
...
configmaps                        cm                                          true         ConfigMap
...

如果保留此命名空间,则可能会出现类似以下错误:

MountVolume.SetUp failed for volume "log4j-properties-volume" : configmap "chart-1591249502-zeppelin" not found

问题2.替换文件的子路径

我更改了deployment中的一部分(已添加subPath

    volumeMounts:
      - name: log4j-properties-volume
        mountPath: /zeppelin/conf/log4j.properties
        subPath: log4j.properties
volumes:
  - name: log4j-properties-volume
    configMap:
      name: chart-1591249502-zeppelin

ConfigMap中的另一个(已删除名称空间并设置了正确的名称)

apiVersion: v1
kind: ConfigMap
metadata:
    name: chart-1591249502-zeppelin
    labels:
        helm.sh/chart: zeppelin-0.1.0
        app.kubernetes.io/name: zeppelin
        app.kubernetes.io/instance: chart-1591249502
        app.kubernetes.io/version: "0.9.0"
        app.kubernetes.io/managed-by: Helm
data:
  log4j.properties: |-
...

之后,文件输出如下:

$ kubectl exec -ti chart-1591249502-zeppelin-64495dcfc8-ccddr -- /bin/bash
zeppelin@chart-1591249502-zeppelin-64495dcfc8-ccddr:~$ cd conf
zeppelin@chart-1591249502-zeppelin-64495dcfc8-ccddr:~/conf$ ls
configuration.xsl  log4j.properties   log4j_yarn_cluster.properties  zeppelin-env.cmd.template  zeppelin-site.xml.template
interpreter-list   log4j.properties2  shiro.ini.template             zeppelin-env.sh.template
zeppelin@chart-1591249502-zeppelin-64495dcfc8-ccddr:~/conf$ cat log4j.properties
log4j.rootLogger = INFO, dailyfile
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n
log4j.appender.dailyfile.DatePattern=.yyyy-MM-dd
log4j.appender.dailyfile.DEBUG = INFO
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = ${zeppelin.log.file}
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n
log4j.logger.org.apache.zeppelin.python=DEBUG
log4j.logger.org.apache.zeppelin.spark=DEBUGzeppelin@chart-1591249502-zeppelin-64495dcfc8-ccddr:~/conf$

答案 1 :(得分:0)

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: application-config-test
  namespace: ***
  labels:
    app: test
    environment: ***
    tier: backend
data:
  application.properties: |-
    ulff.kafka.configuration.acks=0
    ulff.kafka.configuration[bootstrap.servers]=IP
    ulff.kafka.topic=test-topic
    ulff.enabled=true
    logging.level.com.anurag.gigthree.ulff.kafka=DEBUG

    management.port=9080
    management.security.enabled=false 
    management.endpoints.web.exposure.include= "metrics,health,threaddump,prometheus,heapdump"
    management.endpoint.prometheus.enabled=true
    management.metrics.export.prometheus.enabled=true
    ## For apigee PROD
    apigee.url=****   
    
    ### Secrets in Kubenetes accessed by ENV variables
    apigee.clientID=apigeeClientId
    apigee.clientsecret=apigeeClientSecret

    spring.mvc.throw-exception-if-no-handler-found=true

    #For OAuth details for apigee
    oauth2.config.clientId=${apigee.clientID}
    oauth2.config.clientSecret=${apigee.clientsecret}
    oauth2.config.authenticationScheme=form
    oauth2.config.scopes[0]=test_INTEGRATION_ALL
    oauth2.config.accessTokenUri=${apigee.url}/oauth2/token
    oauth2.config.requestTimeout=55000

    oauth2.restTemplateBuilder.enabled=true

    #spring jackson properties
    spring.jackson.default-property-inclusion=always
    spring.jackson.generator.ignore-unknown=true
    spring.jackson.mapper.accept-case-insensitive-properties=true
    spring.jackson.deserialization.fail-on-unknown-properties=false

    # service urls for apply profile
    services.apigeeIntegrationAPI.doProfileChangeUrl=${apigee.url}/v1/testintegration
    services.apigeeIntegrationAPI.modifyServiceOfSubscriberUrl=${apigee.url}/v1/testintegration/subscribers

    # service urls for retrieve profile
    services.apigeeIntegrationAPI.getProfileUrl=${apigee.url}/v1
    services.apigeeIntegrationAPI.readKeyUrl=${apigee.url}/v1/testintegration

   

    

    test.acfStatusConfig[1].country-prefix=
    test.acfStatusConfig[1].country-code=
    test.acfStatusConfig[1].profile-name=
    test.acfStatusConfig[1].adult=ON
    test.acfStatusConfig[1].hvw=ON
    test.acfStatusConfig[1].ms=ON
    test.acfStatusConfig[1].dc=ON
    test.acfStatusConfig[1].at=OFF
    test.acfStatusConfig[1].gambling=
    test.acfStatusConfig[1].dating=OFF
    test.acfStatusConfig[1].sex=OFF
    test.acfStatusConfig[1].sn=OFF


    logging.pattern.level=%X{ulff.transaction-id:-} -%5p
    logging.config=/app/config/log4j2.yml
  log4j2.yml: |-
    Configutation:
      name: test-ms
      packages : 
      Appenders:
        Console:
          - name: sysout
            target: SYSTEM_OUT
            PatternLayout:
              pattern: "%d{HH:mm:ss.SSS} %-5p [%-7t] %F:%L - %m%n"
          - name: syserr
            target: SYSTEM_ERR
            PatternLayout:
              pattern: "%d{HH:mm:ss.SSS} %-5p [%-7t] %F:%L - %m%n"
            Filters:
              ThresholdFilter :
                level: "WARN"
                onMatch: "ACCEPT"
        Kafka:
          name : kafkaAppender
          topic: af.prod.ms.test.tomcat
          JSONLayout:
            complete: "false"
            compact: "false"
            eventEol: "true"
            includeStacktrace: "true"
            properties: "true"
          Property:
            name: "bootstrap.servers"
            value: ""
      Loggers:
        Root:
          level: INFO
          AppenderRef:
           - ref: sysout
           - ref: syserr
        #### test 1 test 2 Separate kafka log from application log
        Logger:
          - name: com.anurag
            level: INFO
            AppenderRef:
              - ref: kafkaAppender
          - name: org.springframework
            level: INFO
            AppenderRef:
              - ref: kafkaAppender