代码之家  ›  专栏  ›  技术社区  ›  Rotem jackoby

K8S上的Splunk-错误:无法读取“/opt/Splunk/etc/Splunk-launch.conf”

  •  1
  • Rotem jackoby  · 技术社区  · 6 年前

    我在用 this Kubernetes上的Splunk图像(使用minikube进行本地测试)。

    错误:无法读取“/opt/splunk/etc/splunk launch.conf”--可能 $SPLUNK_HOME或$SPLUNK_ETC设置错误?

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: splunk
      labels:
        app: splunk-app
        tier: splunk
    spec:
      selector:
        matchLabels:
          app: splunk-app
          track: stable
      replicas: 1
      template:
        metadata:
          labels:
            app: splunk-app
            tier: splunk
            track: stable
        spec:
          volumes:
          - name: configmap-inputs
            configMap:
               name: splunk-config
          containers:
          - name: splunk-client
            image: splunk/splunk:latest
            imagePullPolicy: Always
            env:
            - name: SPLUNK_START_ARGS
              value: --accept-license --answer-yes
            - name: SPLUNK_USER
              value: root
            - name: SPLUNK_PASSWORD
              value: changeme
            - name: SPLUNK_FORWARD_SERVER
              value: splunk-receiver:9997
            ports:
            - name: incoming-logs
              containerPort: 514
            volumeMounts:
              - name: configmap-inputs
                mountPath: /opt/splunk/etc/system/local/inputs.conf
                subPath: "inputs.conf"
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: splunk-config
    data:
      inputs.conf: |
        [monitor:///opt/splunk/var/log/syslog-logs]
        disabled = 0
        index=my-index
    

        - name: SPLUNK_HOME
          value: /opt/splunk
        - name: SPLUNK_ETC
          value: /opt/splunk/etc
    

    我已经用以下方法测试了图像 配置- 它成功地运行了

    version: '3.2'
    services:
        splunk-forwarder:
          hostname: splunk-client
          image: splunk/splunk:latest
          environment:
            SPLUNK_START_ARGS: --accept-license --answer-yes
            SPLUNK_USER: root
            SPLUNK_PASSWORD: changeme
          ports:
          - "8089:8089"
          - "9997:9997"
    

    this 在Splunk论坛上,但答案对我没有帮助。

    有什么想法吗?


    编辑1:

    Minikube版本:升级自 v0.33.1 v1.2.0 .

    $kubectl logs -l tier=splunk
    
    splunk_common : Set first run fact -------------------------------------- 0.04s
    splunk_common : Set privilege escalation user --------------------------- 0.04s
    splunk_common : Set current version fact -------------------------------- 0.04s
    splunk_common : Set splunk install fact --------------------------------- 0.04s
    splunk_common : Set docker fact ----------------------------------------- 0.04s
    Execute pre-setup playbooks --------------------------------------------- 0.04s
    splunk_common : Setting upgrade fact ------------------------------------ 0.04s
    splunk_common : Set target version fact --------------------------------- 0.04s
    Determine captaincy ----------------------------------------------------- 0.04s
    ERROR: Couldn't read "/opt/splunk/etc/splunk-launch.conf" -- maybe $SPLUNK_HOME or $SPLUNK_ETC is set wrong?
    

    编辑#2:向代码添加配置映射(为了简洁起见,从原始问题中删除)。 这就是失败的原因

    0 回复  |  直到 6 年前
        1
  •  2
  •   Rotem jackoby    6 年前

    根据@Amit Kumar Gupta指出的方向,我也将尝试给出一个完整的解决方案。

    this PR 更改使容器无法写入 secret , configMap , downwardAPI 以及自运行时以来的预计卷 以只读方式安装它们 .
    这个变化是因为 v1.9.4 并可能导致各种应用程序出现问题,从而改变或以其他方式操作其配置。

    ${SPLUNK_HOME} /opt/splunk .
    “我的问题”中指定的错误反映了splunk未能操作 /opt/splunk/etc 由于安装机制的更改而导致的目录。


    而不是直接在 /opt/splunk/等 目录我们将使用以下设置:

    我们用一个 default.yml /tmp/defaults/default.yml .

    为此,我们将创建 文件:
    docker run splunk/splunk:latest create-defaults > ./default.yml

    splunk: 阻止并添加 config: 下面的子块:

    splunk:
      conf:
        inputs:
          directory: /opt/splunk/etc/system/local
          content:
              monitor:///opt/splunk/var/log/syslog-logs:
                disabled : 0
                index : syslog-index
        outputs:
          directory: /opt/splunk/etc/system/local
          content:
              tcpout:splunk-indexer:
                server: splunk-indexer:9997
    

    此安装程序将生成两个带有 .conf conf: )由正确的Splunk用户和组拥有。

    这个 inputs: 部门将产生a inputs.conf

    [monitor:///opt/splunk/var/log/syslog-logs]
    disabled = 0
    index=syslog-index
    

    以类似的方式 outputs: 块将类似于以下内容:

    [tcpout:splunk-receiver]
    server=splunk-receiver:9997
    

    这不是像我在源代码中那样直接传递环境变量:

    SPLUNK_FORWARD_SERVER: splunk-receiver:9997
    

    现在一切都准备就绪了(:


    完全设置 forwarder.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: splunk-forwarder
      labels:
        app: splunk-forwarder-app
        tier: splunk
    spec:
      selector:
        matchLabels:
          app: splunk-forwarder-app
          track: stable
      replicas: 1
      template:
        metadata:
          labels:
            app: splunk-forwarder-app
            tier: splunk
            track: stable
        spec:
          volumes:
          - name: configmap-forwarder
            configMap:
              name: splunk-forwarder-config
    
          containers:
          - name: splunk-forwarder
            image: splunk/splunk:latest
            imagePullPolicy : Always
            env:
            - name: SPLUNK_START_ARGS
              value: --accept-license --answer-yes
    
            - name: SPLUNK_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: splunk-secret
                  key: password
    
            volumeMounts:
            - name: configmap-forwarder
              mountPath: /tmp/defaults/default.yml
              subPath: "default.yml"
    

    https://splunk.github.io/docker-splunk/ADVANCED.html

    https://github.com/splunk/docker-splunk/blob/develop/docs/ADVANCED.md

    https://www.splunk.com/blog/2018/12/17/deploy-splunk-enterprise-on-kubernetes-splunk-connect-for-kubernetes-and-splunk-insights-for-containers-beta-part-1.html

    https://splunk.github.io/splunk-ansible/ADVANCED.html#inventory-script

    https://static.rainfocus.com/splunk/splunkconf18/sess/1521146368312001VwQc/finalPDF/FN1089_DockerizingSplunkatScale_Final_1538666172485001Loc0.pdf

        2
  •  1
  •   Amit Kumar Gupta    6 年前

    这里有两个问题:(1)为什么你看到错误信息,以及(2)如何实现你希望实现的行为,你试图通过 Deployment ConfigMap . 不幸的是,我不相信有一个“云端原生”的方法来实现你想要的,但我可以解释(1),为什么很难做到(2),并指出一些可能给你一个解决方法。

    错误消息:

    错误:无法读取“/opt/splunk/etc/splunk launch.conf”--可能$splunk\u HOME或$splunk\u etc设置错误?

    并不意味着您设置了错误的环境变量(必须),它意味着Splunk正在那个位置寻找一个文件,不能在那里读取文件,它提供了一个提示,可能您已经将文件放在另一个位置,但忘记给Splunk提示(通过 $SPLUNK_HOME $SPLUNK_ETC 环境变量)去别处看。

    /opt/splunk/etc/splunk-launch.conf 因为,默认情况下 /opt/splunk 目录中会填充大量具有各种配置的子目录和文件,但因为要在 /opt/splunk/etc/system/local/inputs.conf ,无法写入 /选择/展开

    /foo/inputs.conf )部署将很好地开始。当然问题是它对你的 inputs.conf ,它将使用默认值 /opt/splunk/etc/system/local/inputs.conf

    我想你想做的是允许Splunk生成它喜欢的所有目录和文件,你 subPath 一天下来,我认为没有一个干净的方法来做你想做的事。

    https://www.splunk.com/blog/2019/02/11/deploy-splunk-enterprise-on-kubernetes-splunk-connect-for-kubernetes-and-splunk-insights-for-containers-beta-part-2.html . 这是来自官方网站splunk.com的,它建议像 kubectl cp kubectl exec 致:

    “执行”进入主舱,然后运行。。。命令,将(配置)复制到(目标)目录,并将chown复制到splunk user。

    ¤·

    推荐文章