为了给您提供更优质的服务,请您先完善以下信息:
确认提交

扫码关注

爱数技术支持中心公众号

请选择:

请选择咨询类型

AnyShare
AnyBackUp
AnyRobot

扫码关注

爱数技术支持中心公众号

contact us

提交成功!

我们将在 24 小时之内联系你。

性能爆表
AnyShare
如何购买
我已是Anyshare 客户
AnyRobot
如何购买
购买 AnyRobot 订阅服务
我已是 AnyRobot 客户
一对一在线咨询
我是 AnyRobot 新客户
一对一在线咨询

爱数博客

全部 AnyBackup AnyShare AnyRobot AnyDATA AnyFabric

AnyRobot Pod和ConfigMap有何关联

2023-06-19 978 0
     在AnyRobot环境中,Pod需要依赖各种配置以及配置文件,这些配置不能写死在镜像中,否则会影响到镜像的扩展性。此时ConfigMap作为K8S中提供的配置管理组件登场了。ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改,本文重点讲解下AnyRobot pod和ConfigMap之间的关联。

一、ConfigMap简介
     ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,Pod可以将其用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap 的主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

使用 ConfigMap 的限制条件

  • ConfigMap 需要在 Pod 启动前创建出来。
  • 只有当 ConfigMap 和 Pod 处于同一 NameSpace(命名空间)时,Pod 才可以引用它。
  • 当 Pod 对 ConfigMap 进行挂载(VolumeMount)操作时,在容器内部只能挂载为目录,并不能挂载为文件。
  • 同时,当挂载已经存在的目录时,且目录内含有其它文件,ConfigMap 会将其覆盖掉。

二、ConfigMap使用方式
    ConfigMap API 资源用来保存 key-value pair 配置数据,这个数据可以在 Pod里使用,或者被用来为像 controller 一样的系统组件存储配置数据。虽然 ConfigMap 跟 Secrets 类似,但是 ConfigMap 更方便的处理不含敏感信息的字符串。
ConfigMap的使用方式主要分为三种:
  • volume挂载
  • 环境变量注入
  • 环境变量实例化

volume挂载
     这种使用方式的场景是当一个镜像需要依赖某些配置文件,而这些配置文件中有某些变量需要根据不同的环境进行变更时,为了提高镜像的复用性,就会将这些配置文件抽象出来作成ConfigMap。在镜像部署时,通过ConfigMap依赖将配置文件挂载到Pod中的固定路径下供业务系统使用。

环境变量注入

    这种方式比较简单,其实就是在应用的yaml中将ConfigMap中的配置数据通过ENV的方式注入到Pod中供Pod直接使用。

环境变量实例化
      如果需要配置一个elasticsearch的有状态服务,需要进行节点的横向扩容,此时肯定需要一个ConfigMap来进行节点配置文件elasticsearch.yml的实例化。但是由于每个节点配置文件上都有各自定制化如IP等私有化配置,此时如果使用常规的ConfigMap处理方式,可能一个节点就需要一个ConfigMap来管理。这在集群规模较小的时候尚可以接受,但是如果集群规模很大,那么维护ConfigMap也是一个负担很重的工作量。
      针对这种场景,我们可以通过ConfigMap模板的方式来进行支持,将ConfigMap中elasticsearch.yml的变量部分通过环境变量的方式注入进来,每次在通过yaml调用ConfigMap时对ConfigMap进行实例化,然后再进行配置文件volume的挂载。

三、AnyRobot Pod和ConfigMap之间有何关联
下面我们将以AnyRobot中 Pod名为logstash-filter-85945574fc-b9wcw 是如何和ConfigMap进行关联的。
1、查看logstash-filter-85945574fc-b9wcw yaml文件,发现其应用了ConfigMap为logstash-set 配置文件(仅截取部分yaml文件)。
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - hostPath:
      path: /etc/localtime
      type: File
    name: local-time
  - emptyDir: {}
    name: logstash-conf   
  - configMap:
      defaultMode: 420
      items:
      - key: logstash.yaml
        path: logstash.yml
      name: logstash-set  ##configMap 配置文件
    name: logstash-set


2、参看引用configMap logstash-set配置文件yaml
Name:         logstash-set
Namespace:    anyrobot
Labels:       app=logstash
Annotations:  

Data
====
logstash.yaml:
----
pipeline.ordered: auto
pipeline.java_execution: false
config.reload.automatic: true
path.config: /anyrobot/logstash/conf   ##配置文件路径
http.host: 0.0.0.0
pipeline.workers: 4
pipeline.batch.size: 2000
config.reload.interval: 10s

BinaryData
====

Events:  

3、进入Pod中,查看配置文件
[root@logstash-filter-85945574fc-b9wcw conf]# ls /anyrobot/logstash/conf/
pipeline_auto.conf

(部分pipeline_auto.conf配置文件如下)
input{


    kafka {
        bootstrap_servers => "kafka-headless.resource:9097"
        security_protocol => "SASL_PLAINTEXT"
        sasl_mechanism => "PLAIN"
        sasl_jaas_config => "org.apache.kafka.common.security.plain.PlainLoginModule required username='anyrobot'  password='eisoo.com123';"
        topics => ["kafka_topic"]
        #topics_partition => "${POD_NAME}"
        auto_offset_reset => "earliest"
        group_id => "kafka_topic"
        codec => "json"
        isolation_level => "read_committed"
        max_partition_fetch_bytes => "20971520"
        max_poll_records => "500"
        session_timeout_ms => "400000"
        request_timeout_ms => "400000"
        max_poll_interval_ms => "300000"
        decorate_events => true
    }
    kafka {
        bootstrap_servers => "kafka-headless.resource:9097"
        security_protocol => "SASL_PLAINTEXT"
        sasl_mechanism => "PLAIN"
        sasl_jaas_config => "org.apache.kafka.common.security.plain.PlainLoginModule required username='anyrobot'  password='eisoo.com123';"
        topics_pattern => "^((?!kafka_topic)(?!anyrobot_audit)(?!anyrobot_flink)(?!anyrobot_flink_config)(?!alert_rule_intermediate)(?!alert_event)(?!k8s_event)(?!k8s_log)(?!reindex_source)(?!reindex_result)
).+$"
        #topics_partition => "${POD_NAME}"
        auto_offset_reset => "earliest"
        group_id => "kafka_topic_direct"
        codec => "json"
        isolation_level => "read_committed"
        max_partition_fetch_bytes => "20971520"
        max_poll_records => "500"
        session_timeout_ms => "400000"
        request_timeout_ms => "400000"
        max_poll_interval_ms => "300000"
        decorate_events => true
    }



4、通过修改pipeline_auto.conf配置文件,即可以实现pod相关配置的更新。通过同样的方式,其他Pod也可以通过和configMap进行关联,实现Pod配置文件相关更新。
 

请就本文对您的益处进行评级:

标签

产品技术

相关文章

热门标签

版本发布 在线教学
ai-assistant
chat
support
trial
需求助手 (内容由 AI 大模型生成,请仔细甄别)