[Splunk]SplunkをAWS EKSで稼働してみる

# [Splunk]SplunkをAWS EKSで稼働してみる

## 目的・背景
これまでSplunkの勉強を行ってきましたが、Kubernetes上でも動かせると聞きました。
手動でインストールしたり、Ansibleでインストールしてみたり、コンテナで起動してみたりと、
色々と試してみましたので、Kubernetesの勉強も兼ねてチャレンジしてみます。

## 参考サイト
[Amazon EKS ユーザーガイド](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started-console.html)
[【初心者】Amazon EKSを使ってみる　（環境構築～サンプルアプリ起動まで）](https://qiita.com/mksamba/items/666c0d666fbb2e052d19)
[Splunk を Kubernetes と Karbon Platform Service で動かしてみる](https://konchangakita.hatenablog.com/entry/2020/10/05/210000)

## AWS EKSの構築
Kubernetesの環境を位置から手作りしてみましたが、途中でAWS EKSを使う必要が出てきたので、
AWS EKSの環境を作ってみようと思います。  

色々と事前準備があったのですが、ここでは割愛させてもらいます。
(別途この手順は理解を深めるためにもう一度最初から試すべきだと考えています)
以下を事前に準備しておく必要があります。

* 管理用インスタンス 
* クラスターサービスロール
* VPC、サブネット
* セキュリティグループ

クラスターを作成するのに少々時間がかかります。
クラスターが作成できたら(ステータスがアクティブになったら)次はノードグループを作成します。

起動するのはsplunkなので、ノードのリソースはさほど必要ないはずです。
インスタンスタイプはデフォルトの「t3.medium」から「t3.micro」に変更します。
ディスクサイズも「20GB」も必要ないので「8GB」に変更します。
ノードグループのスケーリングは最小、最大、希望のいサイズ全て「2」とします。

これでAWS EKSのコンソールでの作業は終わり。
続きは管理用インスタンスでの操作になります。

## Podをデプロイ

ここからは管理用インスタンスでの作業になります。
予め、aws cliとkubectlが利用できるよう準備しておく必要があります。

ここでちょっと問題発生。
kubectlで情報を得てみようとしたのですが、エラーとなりました。
 
```
$ kubectl get all
Unable to connect to the server: dial tcp: lookup 67A212A4823B2E55FD65D58D03524894.yl4.us-west-1.eks.amazonaws.com on xxx.xxx.xxx.xxx:53: no such host
```

前回試したときのクラスタは削除してしまい、今回再度作り直したのですが、
クラスタ名も変えてしまったし、ひょっとしてもう一度aws eksコマンドで  
初期設定を行う必要があるのでは？

```
$ aws eks --region us-west-1 update-kubeconfig --name xxxxxxxx
Added new context arn:aws:eks:us-west-1:854542366722:cluster/xxxxxxxx to /home/ec2-user/.kube/config
```

見解はあってました。
無事にkubectlコマンドを実行できることが確認できました。

```
$ kubectl get node
NAME                                          STATUS   ROLES    AGE     VERSION
ip-192-168-0-230.us-west-1.compute.internal   Ready    <none>   9m19s   v1.17.11-eks-cfdc40
ip-192-168-1-193.us-west-1.compute.internal   Ready    <none>   9m20s   v1.17.11-eks-cfdc40
```

namespaceを作成します。

```
$ kubectl create namespace xxxxx-splunk
$ kubectl get namespaces
NAME              STATUS   AGE
xxxxx-splunk    Active   124m
default           Active   169m
kube-node-lease   Active   170m
kube-public       Active   170m
kube-system       Active   170m
```

続いて、用意しておいたマニフェストファイルをデプロイします。

```
$ kubectl apply -f splunk-ent.yml
```

登録されたかどうか確認してみます。

```
$ kubectl get all
NAME               READY   STATUS    RESTARTS   AGE
pod/splunk-app-0   1/1     Running   0          2m4s
pod/splunk-app-1   1/1     Running   0          98s
pod/splunk-app-2   0/1     Pending   0          73s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/kubernetes   ClusterIP   10.100.0.1       <none>        443/TCP             49m
service/splunk-app   ClusterIP   10.100.145.123   <none>        8000/TCP,8089/TCP   2m4s

NAME                          READY   AGE
statefulset.apps/splunk-app   2/3     2m4s
```

無事にデプロイされていようです。
では今度はコンテナの中に入ってサービスが起動しているか確認してみます。

```
$ kubectl exec -it splunk-app-0 /bin/bash
$ ls -al
total 2316
drwxr-xr-x  1 splunk splunk      41 Oct 30 02:35 .
drwxr-xr-x  1 root   root        46 Mar 26  2020 ..
-r--r--r--  1 splunk splunk     842 Mar 20  2020 README-splunk.txt
drwxr-xr-x  1 splunk splunk     148 Mar 26  2020 bin
-r--r--r--  1 splunk splunk      57 Mar 20  2020 copyright.txt
drwxr-xr-x 16 splunk splunk    4096 Oct 30 02:35 etc
drwxr-xr-x  3 splunk splunk      44 Mar 20  2020 include
drwxr-xr-x  1 splunk splunk      23 Mar 26  2020 lib
-r--r--r--  1 splunk splunk   85709 Mar 20  2020 license-eula.txt
drwxr-xr-x  3 splunk splunk      58 Mar 20  2020 openssl
drwxr-xr-x  1 splunk splunk      20 Mar 26  2020 share
-r--r--r--  1 splunk splunk 2270957 Mar 20  2020 splunk-7.3.5-86fd62efc3d7-linux-2.6-x86_64-manifest
drwxr-xr-x  6 splunk splunk      52 Oct 30 02:35 var
```

ちゃんとsplunkがインストールされているようですのでサービスの起動状態を確認してみます。

```
$ sudo ./splunk status
splunkd is running (PID: 791).
splunk helpers are running (PIDs: 792 806 925 1022).
```

サービスが無事に起動しているところまで確認できました。

## 課題

今回構築したSplunk Enterpriseですが、GUIにアクセスできません。
今回の検証では必須ではないので次回に持ち越します。

## おわりに

今回はとにかく早急にAWS EKS上にSplunkを起動させることを優先したため、いろいろ端折ってしまいました。
特にAWS EKSを使い始めるところや管理用サーバにAWS CLIやkubectlを使えるようにするところなどはちゃんと復習する必要があります。

理解を深めるためにはまだまだ学ばなければならないことが多いです。

後輩に調査をお願いしているConfigMapについても知りたいし、私の学んだことと後輩の学んでいることを合作しなければと思います。