helmでELK Stackをインストールする方法

# はじめに
Kuberntes環境でELK Stack（Elasticsearc，Logstash，Kibana，Filebeat）をhelmでインストールする方法について説明します．

まず，環境についてです．環境は以下のにようになっており，ノードは1台です．

# ノードの詳細情報
- CPU： 4core
- メモリー： 16GB
- ストレージ： 25GB
- OS： Ubuntu 24.04

次に，インストールの手順についてです．以下の手順でインストールと説明をします．

# インストール手順
- k3sのインストール
- helmのインストール
- namespaceの作成
- Elasticsearchのインストール
- Logstashのインストール
- Kibanaのインストール
- usernameとpasswordを確認
- Filebeatのインストール


### k3sのインストール
```
# k3sを公式スクリプトを使用してインストール
sudo curl -sfL https://get.k3s.io | sh -

# Kubernetesクライアント設定ファイル（k3s.yaml）を /tmp/config にコピー
sudo cp -p /etc/rancher/k3s/k3s.yaml /tmp/config

# コピーした設定ファイルのアクセス権を変更し、全ユーザーが読み取れるようにする
sudo chmod 644 /tmp/config

# 環境変数 KUBECONFIG に設定ファイルのパスを登録し、シェル起動時に適用する設定を .bashrc に追加
echo "export KUBECONFIG=/tmp/config" >> ~/.bashrc

# .bashrc に追加した環境変数や設定を現在のシェルに反映
source ~/.bashrc
```

### helmのインストール
```
# helm v3のインストールスクリプトをget_helm.shという名前でダウンロード
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

# ダウンロードしたスクリプトに実行権限を付与
chmod 700 get_helm.sh

# helm v3のインストールスクリプトを実行
./get_helm.sh

# Elastic社のhelmチャートリポジトリをhelmに登録
helm repo add elastic https://helm.elastic.co

# 登録したhelmリポジトリの情報を最新状態に更新
helm repo update
```

### namespaceの作成（任意）
今回は，elasticをnamespaceとして作成したので，その時のものを例としてコマンドを載せています．
```
kubectl create namespace elastic
```

### Elasticsearchのインストール
```
helm install elasticsearch elastic/elasticsearch -n elastic --set replicas=1
```

### Logstashのインストール
```
helm install logstash elastic/logstash -n elastic --set replicas=1
```

### Kibanaのインストール
```
helm install kibana elastic/kibana -n elastic \
  --set replicas=1 \
  --set service.type=NodePort \
  --set service.nodePort=30100 \
  --set service.port=5601 \
  --set elasticsearchHosts="https://elasticsearch-master:9200" \
  --timeout 30m \
  --wait=false
```

### usernameとpasswordを確認
Filestreamをインストールする際にそれぞれのVM環境のpasswordが必要になるので，そのための確認コマンドです．
```
# username
kubectl get secret elasticsearch-master-credentials -n 作成したnamespace -o jsonpath='{.data.username}' | base64 --decode

# password
kubectl get secret elasticsearch-master-credentials -n 作成したnamespace -o jsonpath='{.data.username}' | base64 --decode
```

### Filebeatのインストール
```
helm install filebeat elastic/filebeat -n elastic \
  --set daemonset.enabled=true \
  --set-string filebeatConfig."filebeat\.yml"="
filebeat.inputs:
  - type: container
    paths:
      - /var/log/containers/*.log
output.elasticsearch:
  hosts: [\"elasticsearch-master:9200\"]
  protocol: https
  username: \"確認したusernameを入れる\"
  password: \"確認したpasswordを入れる\"
  ssl.verification_mode: none"
```
ここまでがインストールの手順です．これらによりELK Stackがインストールされ使用できるようになります．

### 確認
ELK StackとFilebeatが正常にインストールされ，起動されているかを確認するには，以下のコマンドを使用すると確認できます．
```
kubectl get pod -A
```


# 実行結果
このようにREADYが1/1になっており，STATUSがRunningになっていればOKです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3888574/b61670ba-4a0e-a2ea-c061-6575c4056d3e.png)

サイトにて，IPアドレス：ポート番号で検索をかけるとKibanaも閲覧可能です．ポート番号は30100です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3888574/45e53700-6847-b42a-ecc5-409bfb5e079d.png)


# 最後に
注意点として，passwordを適切なものに設定していなかったり，CPUの数が足りていなかったりすると，インストールの手順の中でエラーが起こるかもしれないので気を付けてください．