Kubernetes を New Relic で監視する方法

# はじめに
kubernetes を監視するために、New Relic Infrastructure の Kubernetes cluster explorer を利用してみました。
公式ドキュメントに従って設定したので、設定方法も含めて紹介します。
https://docs.newrelic.com/docs/integrations/kubernetes-integration/installation/kubernetes-installation-configuration

# 背景
kubernetes はコンテナオーケストレーションツールです。ある程度 kubernetes 自身が自動修復しますが監視は必要です。
また kubernetes に限った話ではありませんが、監視するのであればメトリクスの見易さや、管理の容易性などが求められます。

そこで気になったのが New Relic https://newrelic.com/ です。
Kubernetes の複雑な中身を視覚的に分かりやすく表示してくれます。
便利そうなので使ってみました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/324247/3e2d4eea-6b72-7eb6-904b-8c129856e57d.png)


# 設定手順
下記のことを行います。

- Kubernetes に kube-state-metrics を設定する
- Kubernetes に New Relic のデーモンセットを設定する
- New Relic にて監視する

kube-state-metrics は Kuberntes のアドオンとして提供されている監視ツールになります。
kube-state-metrics にて取得したメトリクスを New Relic に送信し、New Relic で Kuberntes を一元管理しよう！という感じです。

## kube-state-metrics 設定
次のコマンドで kube-state-metrics を設定します。
内容は kube-state-metrics をダウンロードし、zipファイルを解凍、Kubectl にて環境へ Apply です。

```
curl -o kube-state-metrics-1.4.zip https://codeload.github.com/kubernetes/kube-state-metrics/zip/release-1.4 && unzip kube-state-metrics-1.4.zip && kubectl apply -f kube-state-metrics-release-1.4/kubernetes
```

実行した結果 created と表示されれば成功です。

```
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
deployment.apps/kube-state-metrics created
rolebinding.rbac.authorization.k8s.io/kube-state-metrics created
role.rbac.authorization.k8s.io/kube-state-metrics-resizer created
serviceaccount/kube-state-metrics created
service/kube-state-metrics created
```

上記は Version1.4 の例であるため、最新版は git から取得してください。
https://github.com/kubernetes/kube-state-metrics/

実際に行っていることは、下記ディレクトリに用意されているyamlファイルを使って、Kubernetes に Apply しています。
https://github.com/kubernetes/kube-state-metrics/tree/master/kubernetes

次に Kubernetes に適応されたかを確認します。

```
$ kubectl get pods --all-namespaces | grep kube-state-metrics
kube-system kube-state-metrics-7d799b9c7d-kd8bd 2/2 Running 0 31m
```

kube-state-metrics が Running になっていることが分かります。
これで kube-state-metrics の設定は完了です。

## New Relic のデーモンセットを設定
Kubernets の場合、ノードを複数作成し Pod（コンテナ） を分散配置させるため、各ノードで情報収集し New Relic へデータを送信できる仕組みが必要になります。
そこでデーモンセットを作成することで各ノードに必ず一つの Pod（コンテナ：集めたデータを New Relic へ送信する処理） を配置することができます。
これにより全ノードのデータを New Relic へ送信できるようになります。

yamlファイルが用意されているのでダウンロードします。

```
curl -O https://download.newrelic.com/infrastructure_agent/integrations/kubernetes/newrelic-infrastructure-k8s-latest.yaml
```

yamlファイルの[YOUR_LICENSE_KEY]、[YOUR_CLUSTER_NAME]を書き換えます。

```
env:
  - name: NRIA_LICENSE_KEY
    value: YOUR_LICENSE_KEY
  - name: CLUSTER_NAME
    value: YOUR_CLUSTER_NAME
```

書き換えたら Kubernetes にデーモンセットを作成します。

```
kubectl create -f newrelic-infrastructure-k8s-latest.yaml
```

作成したデーモンセットが動作していることを確認します。

```
$ kubectl get pods --all-namespaces
default                newrelic-infra-65444                            1/1     Running   0          1m
default                newrelic-infra-9pgbl                            1/1     Running   0          1m
default                newrelic-infra-kj54p                            1/1     Running   0          1m
default                newrelic-infra-l5xpr                            1/1     Running   0          1m
default                newrelic-infra-lzpwk                            1/1     Running   0          1m
default                newrelic-infra-qmx2j                            1/1     Running   0          1m
default                newrelic-infra-s976f                            1/1     Running   0          1m
default                newrelic-infra-tkg85                            1/1     Running   0          1m
```

Running になっていることが確認できました。
yamlファイルの[YOUR_LICENSE_KEY]、[YOUR_CLUSTER_NAME]が間違っていると立ち上がらないため、もし Running にならない場合は疑ってください。（または kubectl logs にて状況を確認してください）

設定はこちらで完了となります。

## New Relic にて確認
https://infrastructure.newrelic.com/ にログインし、監視できているか確認します。

INFRASTRUCTURE タブの Kubernetes にて確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/324247/22fa02cf-5abd-07c2-4f64-7cdda70878ec.png)

次のような図が表示されていれば監視できています。
色々な視点から状態を確認できるので触ってみると面白いと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/324247/3e2d4eea-6b72-7eb6-904b-8c129856e57d.png)

もし表示されなければ、INFRASTRUCTURE タブの Integrations にて Active Integrations に Kubernetes があるかを確認してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/324247/35d7655d-8285-1e6c-299a-a95c47b5d82b.png)


以上、設定方法でした。

# まとめ
公式のドキュメントの手順に沿って進めまたしたが、問題なく設定することができました。
Kubernetes クラスタを複数作成しても一元管理できるので結構使いやすいと思っています。
今回は設定まででしたが次回以降で、監視のポイントなどを載せたいと思います！

# 参考資料
https://docs.newrelic.com/docs/integrations/kubernetes-integration/installation/kubernetes-installation-configuration