microk8s で Splunk

microk8s

今回はmicrok8s上にログ解析システム、Splunkを導入します。

microk8s自体のログ(kubectl logsで取れるもの)をSplunkへ送る、Splunk Connectorの導入方法は検索すると良く見かけます。

しかし、ここではSplunk自体をmicrok8sで動作させることを目的としています。まず、第一にhelmを探してみましたが、現時点(2020年9月21日)に公式から出ているものはございませんでした。次に、マニフェストファイルを書く覚悟を決めてDockerイメージを探すと、”splunk/splunk“というイメージがありましたのでこれを導入します。

ここで注意点が一つ、このDockerのシステム要件を確認すると、Docker Enterprise Engine 17.06.2以上、またはDocker Community Engine 17.06.2以上のものであり、”podman, CRI-O, containerd”や他のコンテナランタイムは動作するかもしれないが、正式にはサポートされておりません。

1.まずは、作業ディレクトリを作成します

※本例ではユーザ名がuserです

mkdir /home/user/splunk

2.Splunkの設定ファイルを用意し、ansibleで書き換えが失敗する、”etc/system/local/web.conf”の設定を修正して正常に起動できるようにします。

①Splunkの設定ファイルを生成します

kubectl run --rm -it --restart=Never config-make --image=splunk/splunk:8.0.6-debian --env=SPLUNK_START_ARGS=--accept-license --command createdefaults.py > default.yml

②設定ファイル内の”splunk:”行の下に以下を追記します

vi default.yml
-- snip --
splunk:
  conf:
    - key: web
      value:
        directory: /opt/splunk/etc/system/local
        content:
          settings:
            mgmtHostPort : 127.0.0.1:8089
-- snip --

2.Splunk系のリソースをまとめて管理するためマニフェストファイルを以下のように作成します。

①マニフェストファイルを作成します

vi /home/user/splunk/splunk.yml
apiVersion: v1
kind: Namespace
metadata:
 name: splunk
---
apiVersion: v1
kind: Pod
metadata:
 name: splunk-pod
 namespace: splunk
 labels:
  app: splunk-pl
spec:
 containers:
  - name: splunk-c
    image: splunk/splunk:8.0.6-debian
    imagePullPolicy: IfNotPresent
    env:
     - name: SPLUNK_START_ARGS
       value: "--accept-license"
     - name: SPLUNK_LICENSE_URI
       value: "Free"
     - name: SPLUNK_PASSWORD
       value: "Manager348!"
     - name: SPLUNK_S2S_PORT
       value: "9997"
     - name: SPLUNK_SVC_PORT
       value: "8089"
     - name: SPLUNK_HTTP_PORT
       value: "8000"
    volumeMounts:
     - mountPath: /opt/splunk/var
       name: splunk-var
     - mountPath: /opt/splunk/etc
       name: splunk-etc
     - mountPath: /opt/b-wordpress
       name: b-wordpress-web
     - mountPath: /tmp/defaults/default.yml
       name: default
 volumes:
  - name: splunk-var
    hostPath:
     path: /home/user/splunk/var
     type: DirectoryOrCreate
  - name: splunk-etc
    hostPath:
     path: /home/user/splunk/etc
     type: DirectoryOrCreate
  - name: b-wordpress-web
    hostPath:
     path: /var/log/b-wordpress
  - name: default
    hostPath:
     path: /home/user/splunk/default.yml
---
apiVersion: v1
kind: Service
metadata:
 name: splunk-svc
 namespace: splunk
spec:
 type: LoadBalancer
 selector:
  app: splunk-pl
 ports:
  - name: http
    port: 80
    targetPort: 8000
  - name: splunk-fwd
    port: 9997
    targetPort: 9997
  - name: splunk-mgmt
    port: 8089
    targetPort: 8089

③”kubectl get pod -n splunk”でポットが起動していることを確認する。

④”kubectl logs splunk-pod -n splunk”でログを確認し、Ansible playbookが完了し、問題なく起動していると最終行に以下が出力される。

Ansible playbook complete, will begin streaming splunkd_stderr.log

②”kubectl get services -n splunk”でサービスが起動し、以下のような出力となっているはずだ。

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                      AGE
splunk-svc   LoadBalancer   10.152.183.227   192.168.2.101   80:31621/TCP,9997:31395/TCP,8089:32210/TCP   9s

3.上記のEXTERNAL-IPにブラウザでアクセスすると、SplunkのWebUIが見えるはずだ。

あとがき:今回はmicrok8sがサポートされていないイメージを使っていることもあり、Splunkイメージ内のAnsibleがsplunkのweb.confを上手く書き換えずに起動できないようです。”kubectl logs splunk -n splunk”の出力結果では、以下のようなエラーが示される。

fatal: [localhost]: FAILED! => {
    "changed": false,
    "cmd": [
        "/opt/splunk/bin/splunk",
        "start",
        "--accept-license",
        "--answer-yes",
        "--no-prompt"
    ],
    "delta": "0:00:00.972395",
    "end": "2020-09-21 16:49:41.451273",
    "rc": 1,
    "start": "2020-09-21 16:49:40.478878"
}

STDOUT:


Splunk> 4TW

Checking prerequisites...
        Checking http port [8000]: open
        Checking mgmt port [80]:


STDERR:

not available
ERROR: mgmt port [80] - no permission to use address/port combination.  Splunk needs to use this port.

このことに気づくのに、物凄く時間かかり、その対処法としてroot権限で起動、proxyサービスもroot権限が必要か。。など、microk8sの理念にそぐわない方法(Splunkはroot起動推奨だが、microk8sではコンテナをroot権限で起動しないという開発理念を持つ)等も模索してしまい、またさらに時間がかかってしまいました。

コメント

タイトルとURLをコピーしました