今回は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権限で起動しないという開発理念を持つ)等も模索してしまい、またさらに時間がかかってしまいました。
コメント