Slide 1

Slide 1 text

サクッと試す Kubernetes APM auto-attach @kohbis New Relic User Group Vol.12 3周年&アドカレLT祭り 2024/12/20

Slide 2

Slide 2 text

About Me Kohei SUGIMOTO  ● toC向けサービスのSRE ● mixi2/X: @kohbis (sushimoto) 2025年1月26日(日)に『 SRE Kaigi 2025』(オフラインカンファレンス)を開催! 参加チケット絶賛発売中!!!!!

Slide 3

Slide 3 text

Topic New Relic Advent Calendar 2024 シリーズ1の3日目を担当しました ✍ https://fushagoya.com/posts/2024/12/03/newrelic-kubernetes-apm-auto-attach/

Slide 4

Slide 4 text

New Relic Kubernetes APM auto-attachとは 🤔

Slide 5

Slide 5 text

New Relic Kubernetes APM auto-attachとは KubeCon North America (2024) で発表されたKubernetes向けのワンステップオブザーバビリティ ● Introducing one-step observability for Kubernetes to deliver automatic instrumentation and insights - The New Relic Blog ● Kubernetesクラスター上にデプロイされたアプリケーションに対して New Relic APMの計装 (Instrumentation)を自動で行う ○ 通常はエージェントライブラリのインストールなどコンテナやアプリケーションの実装が必要 ○ 2024年12月現在のサポート対象 ■ dotnet / java / nodejs / python / ruby / php

Slide 6

Slide 6 text

サクッと試してみる 🧪

Slide 7

Slide 7 text

事前準備 ● New Relicアカウント の作成 ● New Relicライセンスキー の発行 ● Ruby on Railsアプリケーション の準備 ○ rails new train-rails --api --minimal ○ コンテナイメージをビルドして任意のレジストリにpush ○ Deploymentを作成(namespace: station, label: app=train)

Slide 8

Slide 8 text

環境とか ● たまたまおうちにあったKubernetesクラスター ○ ミニPC*1台 + Raspberry Pi 3*2台, 4*1台, 5*1台 ○ Kubernetes 1.31 with Kubeadm ● Ruby 3.3 & Rails 8.0 ● New Relic 無料枠

Slide 9

Slide 9 text

ドキュメント Kubernetes APM auto-attach - New Relic Docsにしたがって進める ● https://docs.newrelic.com/docs/kubernetes-pixie/kubernetes-integration/installation /k8s-agent-operator/

Slide 10

Slide 10 text

インストール ● nri-bundleの(一部として)インストール ● スタンドアロンでインストール 👈 今回はこっち のいずれか

Slide 11

Slide 11 text

自動計装 カスタムリソースを作成      & Pod(Deployment)再起動 kubectl rollout restart deployment train -n station するだけ

Slide 12

Slide 12 text

動作確認

Slide 13

Slide 13 text

簡単👏

Slide 14

Slide 14 text

もうちょっと見てみる 👀

Slide 15

Slide 15 text

前提:Kubernetes Operator ● Kubernetes自体のコードを変更を必要とせずに機能拡張する仕組み ○ https://kubernetes.io/ja/docs/concepts/extend-kubernetes/operator/ ● カスタムリソース( CRD)とカスタムコントローラー によって、任意の運用を自動化できる k8s-agent-operatorによって (条件に一致する) Podが起動したら、 Instrumentaion(CRD)にしたがって New Relic Agent(APM)を計装する という作業が自動化されている(雑な説明)

Slide 16

Slide 16 text

計装の流れ(1/2) (Operatorインストール済み&Instrumentationカスタムリソース作成済み) 👇 KubernetesのMutating Admission Webhookを使用してPodの作成を検知 https://github.com/newrelic/k8s-agents-operator/blob/main/src/internal/webhookhandler/webhookhandler.go 👇 Instrumentationの定義に一致しているか確認 https://github.com/newrelic/k8s-agents-operator/blob/main/src/instrumentation/podmutator.go 👇 各言語に対応したInject(注入) https://github.com/newrelic/k8s-agents-operator/tree/main/src/apm

Slide 17

Slide 17 text

計装の流れ(2/2) 👇 Rubyの場合 Rubyエージェントイメージ(newrelic_rpm gemがインストールされている)を PodのinitContainerとして起動 https://github.com/newrelic/newrelic-ruby-agent 👇 initContainerからメインのアプリケーションコンテナ( Rails)にエージェントファイル群をコピー &環境変数などの設定を 注入 https://github.com/newrelic/k8s-agents-operator/blob/main/src/apm/ruby.go 👇 環境変数RUBYOPTS=-r /newrelic-instrumentation/lib/boot/strapによってRailsアプリケーションが起動するときに New Relic Agentが自動的にロードされる 🚀アプリケーションにまったく手を加えずに New Relic APMが導入される🚀

Slide 18

Slide 18 text

所感 📝

Slide 19

Slide 19 text

所感 New Relic Kubernetes APM auto-attachを導入するメリットとして考えられるもの ● アプリケーションのコードを変更する必要がない ● アプリケーションごとにエージェントをインストールする手間が省ける ● アプリケーションごとにエージェントのバージョンや設定を管理する必要がない ● クラスター全体で一括管理できるため、 網羅的にAPMを導入できる Kubernetesクラスター上にたくさんのアプリケーションがある、プラットフォームとして提供してい ると活躍しそう(?)

Slide 20

Slide 20 text

ありがとうございました 🙇