KubernetesAPM以前はKubernetes エージェントKubernetes APMKubernetesオペレーターとして知られていた 自動アタッチは、 エージェント デプロイメントとともに インストゥルメンテーションを自動化することで、 環境のフルスタック オブザーバビリティを合理化します。自動インストゥルメンテーションを有効にすると、開発者はAPMエージェントを手動で管理する必要がなくなります。 Kubernetes APM自動アタッチは、 APMエージェントを自動的にインストール、アップグレード、削除します。
現在、Java、.NET、Node.jsをサポートしています。 Python、Ruby に加え、追加言語 (PHP および Go) も開発中です。
使い方
MutatingWebHook
は、インストール時に、ノードへのデプロイ ポッドのAPIリクエストのインターセプトに関与します。設定の指定を反映して、Podの仕様を変更してNR initコンテナと環境変数を追加します。
ポッドの確立後、New Relic APM エージェントはその中に格納されているアプリケーションにシームレスに統合されます。
あなたが始める前に
オペレーターをインストールする前に、次の点を確認してください。
Helm : チャートを使用するにはこれをインストールする必要があります。 開始する際にサポートが必要な場合は、 Helm のドキュメントを参照してください。
Kubectl : クラスターと通信するように設定する必要があります。
インストール
必要に応じて、 Kubernetes APM自動アタッチを個別にインストールするか、 Kubernetesインテグレーションと一緒にインストールするかを選択できます。
フルスタックのサバビリティエクスペリエンス 全体を活用するには、Kubernetes インテグレーションと一緒にインストールすることを強くお勧めします。
Kubernetesインテグレーションに加えてインストレーションをバンドルする(推奨)
KubernetesAPMnri-bundle
自動接続チャートは、完全なKubernetes オブザーバビリティを可能にするために必要なすべてのコンポーネントのインストールを管理する チャートの一部です。
k8s-agents-operator.enabled=true
問題を helm コマンドに追加するか、 values.yaml
ファイルに含めます。 Helm の使用方法の詳細については、「 Kubernetesインテグレーションのインストール」ページを参照するか、 nri-bundle
チャートを確認してください。
問題を使用した Helm コマンドのサンプルを参照してください。
$helm repo add newrelic https://helm-charts.newrelic.com$
$helm upgrade --install newrelic-bundle newrelic/nri-bundle \> --set global.licenseKey=YOUR_NEW_RELIC_INGEST_LICENSE_KEY \> --set global.cluster=CLUSTER_NAME \> --namespace=newrelic \> --set newrelic-infrastructure.privileged=true \> --set global.lowDataMode=true \> --set kube-state-metrics.enabled=true \> --set kubeEvents.enabled=true \> --set k8s-agents-operator.enabled=true \> --create-namespace
スタンドアロン インストール
Kubernetes APM自動アタッチをデフォルト設定でインストールするには、次のコマンドを実行します。
$helm repo add k8s-agents-operator https://newrelic.github.io/k8s-agents-operator$helm upgrade --install k8s-agents-operator k8s-agents-operator/k8s-agents-operator \> --namespace newrelic \> --create-namespace \> --set licenseKey=YOUR_NEW_RELIC_INGEST_LICENSE_KEY
設定オプションの完全なリストについては、 READMEチャートを参照してください。
自動計装を構成する
クラスター内で APM 自動アタッチがすべて設定されたら、次のステップは、それを動作させるために必要な構成を展開することです。 これには、クラスタ内で少なくとも 1 つのインストゥルメンテーション カスタム リソース (CR) をアクティブにすることが含まれます。
インストゥルメンテーション CR で計画できる内容は次のとおりです。
- インストゥルメンテーション CR の名前
- インストゥルメンテーション CR が適用される場所 (
podLabelSelector
とnamespaceLabelSelector
に感謝) - APMエージェント (CR ごとに 1 つ)
- APMエージェントバージョン
- APM構成の問題 (環境変数)
- ライセンスキー(オプション)
マニフェスト ファイルは、 APM自動アタッチをインストールしたのと同じネームスペース (デフォルトでは newrelic
) に挿入する必要があります。
$kubectl apply -f ./values.yaml -n newrelic
セレクタの使い方
インストゥルメンテーション CR がいつAPMエージェントを挿入するかを知るには、セレクターを使用する必要があります。 2 つのラベル セレクターが用意されており、必要に応じて一緒に使用したり (論理 AND (&&) 演算子として機能)、個別に使用したりできます。
PodLabelSelector
どのポッドをインストゥルメントする必要があるかをAPM自動アタッチに通知します。matchLabel
を使用した例 (特定のタグと値を含むポッドを選択):...podLabelSelector:r43matchLabels:app.kubernetes.io/name: flask-hello-world...NameSpaceLabelSelector
ネームスペースレベルで自動インストゥルメントされたポッドを定義します。matchExpressions
を使用した例 (特定のタグと値を含むネームスペースを選択):...namespaceLabelSelector:matchExpressions:- key: "kubernetes.io/metadata.name"operator: "In"values: ["backend"]...ヒント
kubernetes.io/metadata.name
ラベルを適用することは、ネームスペースの名前に基づいて選択することと同じであることに注意してください。
両方のセレクターはmatchLabel
とmatchExpressions
をサポートします。
APMエージェント
インストゥルメンテーション CR 内でAPMエージェントとそのバージョンを指定する必要があります。 最新の機能を活用するには、最新バージョンを使用することをお勧めします。
画像 | 言語 | 利用可能なバージョン |
---|---|---|
ドットネット |
| |
ジャワ |
| |
ノードJS |
| |
パイソン |
| |
ルビー |
|
次の例をご覧ください:
... spec: agent: language: dotnet image: newrelic/newrelic-dotnet-init:latest ...
APM設定
インストゥルメンテーション CR は、 APMエージェントの設定を合理化するために、ポッドに環境変数を挿入する機能を提供します。 次の例をご覧ください:
... spec: env: # Example overriding the appName configuration by using a label of the pod - name: NEW_RELIC_APP_NAME valueFrom: fieldRef: fieldPath: metadata.labels['app.kubernetes.io/name'] ...
上記の例では、環境変数を使用してエージェント設定をグローバルに構成する方法を示しています。 利用可能な設定オプションについては、各エージェントの設定ドキュメントを参照してください。
重要
これらの環境変数をアプリ デプロイメント マニフェストに挿入できます。
ライセンスキー(オプション)
インストールすると、 が作成され、それがデフォルトのライセンスになります。 APMテレメトリーを別のアカウントに送信する必要がある場合は、次の手順に従ってください。
新しいライセンスキーを含むシークレットを作成するには、次のコマンドを実行します。
bash$kubectl create secret generic newrelic-key-secret \>--namespace my-monitored-namespace \>--from-literal=new_relic_license_key=<NEW RELIC INGEST LICENSE KEY>インストゥルメンテーション CR からシークレットを参照するには、次のコマンドを実行します。
...spec:licenseKeySecret: the-name-of-the-custom-secret...
インストゥルメンテーション CR の例
アプリケーションのAPMインストゥルメンテーションを更新する
デフォルトでは、 Kubernetes APM自動アタッチは、対応するAPMエージェントの利用可能な最新バージョンを自動的にインストールします。
アプリケーションの監視が開始されると、更新を選択しない限り、新しいバージョンに自動的に更新されることはありません。 ポッドを再デプロイするか、デプロイメントを再起動することで、アプリケーションを更新できます。
アプリケーション内のAPMインストゥルメンテーションを削除します
アプリケーションからAPMインストゥルメンテーションを削除するには、使用される podLabelSelector
または namespaceLabelSelector
内の一致するラベル セレクターを変更するか、インストゥルメンテーション CR を削除する必要があります。 次に、デプロイメントを再起動します。 削除プロセスには数秒しかかかりません。
Kubernetes APM自動アタッチを更新する
バンドル インストレーション
次のコマンドを使用して、 nri-bundle
チャートの更新を実行します。
$k8s-agents-operator.enabled=true
スタンドアロン インストール
helm upgrade
コマンドを実行して、Kubernetes APM 自動アタッチの新しいバージョンに更新します。
$helm upgrade k8s-agents-operator newrelic/k8s-agents-operator -n newrelic
Kubernetes APM自動アタッチのアンインストール
バンドル インストレーション
nri-bundle
チャートをアンインストールするか、 Kubernetes APM自動アタッチのみを削除する場合は、次の引数で helm upgrade を実行します。
$k8s-agents-operator.enabled=false
スタンドアロン インストール
Kubernetes APM 自動アタッチをアンインストールして削除するには、次のコマンドを実行します。
$helm uninstall k8s-agents-operator -n newrelic
データを見つけて使用する
アプリケーションのサイトを取得し、 APMサマリーページを使用して問題を解決します。
Kubernetes の概要ページを確認してください。 モニターアプリケーションのコンテキストでKubernetesインサイト を提供します。
証明書
Kubernetes APM 自動アタッチは、必要に応じてcert-manager
サポートできます。
このコマンドを実行して、
cert-manager
Helm チャートをインストールします。bash$helm install cert-manager jetstack/cert-manager \>--namespace cert-manager \>--create-namespace \>--set crds.enabled=truevalues.yaml
ファイルで、admissionWebhooks.autoGenerateCert.enabled: false
とadmissionWebhooks.certManager.enabled: true
を設定します。 その後、通常どおりチャートをインストールします。
利用可能なチャートリリース
利用可能なチャートを表示するには、次のコマンドを実行します。
$helm search repo k8s-agents-operator
よくあるご質問
トラブルシューティング
アプリケーションがインストゥルメントされていない場合は、次の点を確認してください。
Kubernetes APM 自動アタッチをインストールした後は、必ず再デプロイするか、新しいアプリケーションをデプロイしてください。 自動インストゥルメントされた新しいアプリケーションのみがクラスタ内でデプロイされることに注意してください。
次のコマンドを実行して、アプリのネームスペースにシークレットがインストールされていることを確認します。
bash$kubectl get secrets -n NAMESPACEpodLabelSelector
の使用時に CR による自動インストゥルメンテーションを有効にする必要なラベルがポッドにあることを確認してください。 同様に、CR 内でnamespaceLabelSelector
使用する場合は、ネームスペースに必要なラベルがあることを確認してください。bash$kubectl get pod POD_NAME -n NAMESPACE -o jsonpath='{.metadata.annotations}'APM 自動アタッチ ポッドからログを取得するには、次のコマンドを実行します。
bash$kubectl logs AGENT_OPERATOR_POD -n newrelicこのコマンドを実行して、
init
コンテナがアプリケーションのポッド内に挿入され、正常に実行されたことを確認します。bash$kubectl describe pod POD_NAME -n NAMESPACE
注釈を必要とした以前のバージョンから移行する方法
バージョン 0.14 以降、アプリケーションが自動インストゥルメントされるために、アプリケーション デプロイメント マニフェスト内の注釈は必要なくなりました。
0.14 より前のバージョンをアンインストールし、最新リリースのインストールを続行することをお勧めします。 インストゥルメンテーション CR 内のラベル セレクターを利用すると、 APMエージェントの正確なデプロイメントが可能になり、それによって注釈の要件が不要になります。
サポート
Kubernetes APM自動アタッチは現在、Java、.NET、Node.jsなどのAPMエージェントの最新バージョンをサポートしています。 Python と Ruby。
一般提供開始後は、各APMエージェントの最新 3 バージョンがサポートされます。
問題がある場合は:
同様の問題がないかGitHub の問題セクションを確認するか、新しい問題を開くことを検討してください。
New Relic サポートチームに問い合わせてサポートを受けることができます。