首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能在Kubernetes上挂载Splunk配置-错误:无法读取"/opt/splunk/etc/splunk-launch.conf“

未能在Kubernetes上挂载Splunk配置-错误:无法读取"/opt/splunk/etc/splunk-launch.conf“
EN

Stack Overflow用户
提问于 2019-08-13 21:58:18
回答 3查看 1.8K关注 0票数 4

我在Kubernetes上使用 Splunk映像(用迷你库进行本地测试)。

应用下面的代码后,我将面临以下错误:

错误:不能读“/opt/splunk/etc/splunk-unch.conf”--也许$SPLUNK_HOME或$SPLUNK_ETC设置错了?

我的扣篮部署:

代码语言:javascript
复制
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

我还试图添加这个env变量--但没有成功:

代码语言:javascript
复制
    - name: SPLUNK_HOME
      value: /opt/splunk
    - name: SPLUNK_ETC
      value: /opt/splunk/etc

我已经用下面的配置-测试了映像,它成功地运行了

代码语言:javascript
复制
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"

在Splunk论坛上看到了,但这个答案对我的情况没有帮助。

有什么想法吗?

编辑#1:

迷你版:从v0.33.1升级到v1.2.0

全错误日志:

代码语言:javascript
复制
$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:将配置映射添加到代码中(为了简洁起见,从原始问题中删除了配置映射)。--这是失败的原因。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-21 10:55:52

基于@指出的方向,我也将尝试给出一个完整的解决方案。

因此,这个公关更改使得容器不能写入secretconfigMapdownwardAPI和预测卷,因为运行时现在将它们挂载为只读。

这种更改是因为v1.9.4,并可能导致各种应用程序的问题,而chown或以其他方式操纵它们的信任。

当Splunk启动时,它会在${SPLUNK_HOME} (在我们的例子中是/opt/splunk )下的文件系统上的不同位置注册所有配置文件。

“我的问题”中指定的错误反映出,由于安装机制的更改,splunk未能操作/opt/splunk/etc目录中的所有相关文件。

现在是解决方案。

我们将使用以下设置,而不是将配置文件直接挂载到/opt/splunk/etc目录中:

我们将使用一个default.yml文件启动码头容器,该文件将在/tmp/defaults/default.yml中挂载。

为此,我们将使用以下内容创建default.yml文件:

docker run splunk/splunk:latest create-defaults > ./default.yml

然后,我们将转到splunk:块,并在它下面添加一个config:子块:

代码语言:javascript
复制
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

代码语言:javascript
复制
[monitor:///opt/splunk/var/log/syslog-logs]
disabled = 0
index=syslog-index

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

代码语言:javascript
复制
[tcpout:splunk-receiver]
server=splunk-receiver:9997

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

代码语言:javascript
复制
SPLUNK_FORWARD_SERVER: splunk-receiver:9997

现在一切都启动并运行(: )

forwarder.yaml的完全设置

代码语言:javascript
复制
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

1538666172485001Loc0.pdf

票数 2
EN

Stack Overflow用户

发布于 2019-08-15 06:55:51

这里有两个问题:(1)为什么看到错误信息,(2)如何实现您希望通过DeploymentConfigMap来表达的期望行为。不幸的是,我不相信有一种“云本机”的方式来实现你想要的,但是我可以解释(1),为什么很难做(2),并指出一些可能给你带来解决办法的东西。

错误信息:

错误:不能读“/opt/splunk/etc/splunk-unch.conf”--也许$SPLUNK_HOME或$SPLUNK_ETC设置错了?

这并不意味着您设置这些环境变量是错误的(必然),它意味着Splunk正在该位置寻找一个文件,无法在那里读取一个文件,并且它提供了一个提示,即您可能已经将该文件放置在另一个位置,但忘记了给Splunk提示(通过$SPLUNK_HOME$SPLUNK_ETC环境变量)到其他地方查找。

它不能读取/opt/splunk/etc/splunk-launch.conf的原因是,默认情况下,/opt/splunk目录中将填充大量具有各种配置的子目录和文件,但是由于您正在/opt/splunk/etc/system/local/inputs.conf上安装卷,所以无法将任何内容写入/opt/splunk

如果您只是不挂载该卷,或者将其挂载到其他地方(例如/foo/inputs.conf),那么部署将很好地启动。当然,问题是它不知道任何关于您的inputs.conf的信息,而且它将使用它在那里编写的默认/opt/splunk/etc/system/local/inputs.conf

我假设您想要做的是允许Splunk生成它喜欢的所有目录和文件,您只需要设置该文件的内容。虽然关于Kubernetes如何处理卷装载有很多细微差别,特别是来自ConfigMaps的,特别是在使用subPath时,但在一天结束时,我不认为有一个干净的方法可以实现您想做的事情。

我在网上搜索了"splunk inputs.conf“,这是我的第一个结果: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 cpkubectl exec这样的东西:

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

‍♂️

票数 1
EN

Stack Overflow用户

发布于 2021-02-16 12:05:58

在K8s部署中对我有用的一个解决方案是:

  1. 修改下面的图像Dockerfile #运行chmod -R 755 /opt/ansible #RUN“ignore_errors: yes”>> >>
  2. 然后用belo env变量在您的私人回购部署中使用相同的映像:#必须作为root运行,否则将不允许您写入$SPLUNK_HOME/S 名称: SPLUNK_START_ARGS值:-接受-许可-回答-是-不提示-名称: SPLUNK_USER值: root
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57485801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档