Kubernetesメタデータを表示し、それをAPM にリンクして、パフォーマンスの問題を調査し、トランザクション エラーをトラブルシューティングできます。 詳細については、 Kubernetes 経由でアプリのパフォーマンスを監視する方法に関するブログ投稿を参照してください。
メタデータインジェクション製品は、 MutatingAdmissionWebhook
を使用して次の環境変数をポッドに追加します。
NEW_RELIC_METADATA_KUBERNETES_CLUSTER_NAMENEW_RELIC_METADATA_KUBERNETES_NODE_NAMENEW_RELIC_METADATA_KUBERNETES_NAMESPACE_NAMENEW_RELIC_METADATA_KUBERNETES_DEPLOYMENT_NAMENEW_RELIC_METADATA_KUBERNETES_POD_NAMENEW_RELIC_METADATA_KUBERNETES_CONTAINER_NAMENEW_RELIC_METADATA_KUBERNETES_CONTAINER_IMAGE_NAME
ヒント
私たちの Kubernetes メタデータ インジェクション プロジェクトはオープン ソースです。 APM とインフラストラクチャ データをリンクするコードは次のとおりです。
互換性と要件
アプリケーションをKubernetesに接続するには、 Kubernetesクラスタに `MutatingWebhookConfiguration' をデプロイできる必要があります。
必要な権限があることを確認するには、次のコマンドを実行します。
$kubectl auth can-i create mutatingwebhookconfigurations.admissionregistration.k8s.io -A
上記のコマンドの出力は、次のようになります。
$yes
別の結果が表示される場合は、Kubernetesのドキュメントに従って、 クラスタでアドミッションコントロールを有効にしてください。
ネットワーク要件
Kubernetes がMutatingAdmissionWebhook
と通信するには、コントロール プレーン ノード (またはクラスターの設定方法に応じて API サーバー コンテナー) が、クラスター内の他のすべてのノードのポッドへのポート 443 での HTTPS トラフィックの出力を許可する必要があります。
インフラストラクチャの設定方法 (オンプレミス、AWS、Google Cloud など) に応じて、特定の構成が必要になる場合があります。
APMエージェントの互換性
次のNewRelicエージェントは、Kubernetesメタデータを収集します。
メタデータの注入を設定する
Helm を使用してインテグレーションをインストールすると、メタデータ インジェクションが含まれます。 nri-bundle
チャートを構成するときは、次のようにメタデータ インジェクション Webhook を有効にしてください。
nri-metadata-injection: enabled: true
Webhook をデプロイした後、アプリケーション ポッドを再起動します。 必要な環境変数を取得する必要があります。
デフォルトでは、 APMエージェントを含む、作成したすべてのポッドに正しい環境変数が設定され、メタデータ インジェクションがクラスタ全体に適用されます。 環境変数が設定されていることを確認するには、実行中のコンテナを停止し、新しいインスタンスを起動する必要があります。 詳細については、「メタデータのインジェクションの検証」を参照してください。
このデフォルト設定では、 Kubernetes証明書APIを使用して、インジェクションに必要な証明書を自動的に管理します。必要に応じて、メタデータの挿入をクラスター内の特定の名前空間に制限したり、証明書を自己管理したりできます。
カスタム構成
インジェクションの対象となる名前空間を制限する
ラベルを使用して、メタデータの挿入を特定の名前空間にのみ制限できます。
この機能を有効にするには、 values-newrelic.yaml
ファイルに以下を追加します。
nri-metadata-injection: injectOnlyLabeledNamespaces: true
このオプションを使用すると、インジェクションはnewrelic-metadata-injection
ラベルがenabled
に設定されている名前空間にのみ適用されます。
$kubectl label namespace YOUR_NAMESPACE newrelic-metadata-injection=enabled
cert-managerを使用して証明書を生成します
デフォルトでは、チャートはkube-webhook-certgen
を使用して、Webhook の実行に必要な証明書を自動的に生成します。
ただし、 cert-manager がインストールされている場合は、代わりにそれを使用するようにチャートを設定することができ、これによりデプロイがはるかに簡単になります。
nri-metadata-injection: certManager: enabled: true
カスタム証明書を管理する
ヒント
Webhook証明書を手動で管理することは、上級ユーザーにのみお勧めします。New Relicサポートチームは、この構成のトラブルシューティングを支援できない場合があります。
カスタム証明書を使用するには、Helmを使用してインストールするときに証明書の自動インストールを無効にする必要があります。
証明書のインストールを無効にするには、次のようにnri-bundleHelm values.yaml
を変更します。
nri-metadata-injection: customTLSCertificate: true
これで、カスタム証明書管理オプションに進むことができます。 PEM 形式でエンコードされた証明書、サーバー キー、および証明機関 (CA) バンドルが必要です。
標準の証明書形式 (X.509) の場合は、
openssl
をインストールして、以下を実行します。bash$openssl x509 -in YOUR_CERTIFICATE_FILENAME -outform PEM -out YOUR_CERTIFICATE_FILENAME.pem$openssl x509 -in YOUR_SERVER_KEY_FILENAME -outform PEM -out YOUR_SERVER_KEY_FILENAME.pem$openssl x509 -in YOUR_CA_BUNDLE_FILENAME -outform PEM -out YOUR_BUNDLE_FILENAME.pem証明書とキー ペアが別の形式である場合は、 Digicert ナレッジベースで詳細なヘルプを参照してください。
署名された証明書とキーのペアを使用してTLSシークレットを作成し、次のコマンドを使用して、変更するWebhook構成にCAでパッチを適用します。
$kubectl create secret tls YOUR_NEWRELIC_METADATA_INJECTION_ADMISSION \> --key=YOUR_PEM_ENCODED_SERVER_KEY \> --cert=YOUR_PEM_ENCODED_CERTIFICATE \> --dry-run -o yaml |$kubectl -n newrelic apply -f -$
$caBundle=$(cat YOUR_PEM_ENCODED_CA_BUNDLE | base64 | td -d $'\n')$kubectl patch mutatingwebhookconfiguration newrelic-metadata-injection-cfg --type='json' -p "[{'op': 'replace', 'path': '/webhooks/0/clientConfig/caBundle', 'value':'${caBundle}'}]"
重要
Kubernetesによって署名された証明書の有効期限は1年です。詳細については、GitHubのKubernetesソースコードを参照してください。
メタデータの挿入を検証します
新しいポッドをデプロイし、 New Relic環境変数をチェックして、メタデータの挿入を担当する Webhook の正しい配置を確認します。
次のコマンドを実行して、ダミーのnginxポッドを作成します。
bash$kubectl run test-nginx --image nginx -n newrelicNewRelic環境変数が挿入されたかどうかを確認します。
bash$kubectl exec -n newrelic test-nginx -- env | grep NEW_RELIC_METADATA_KUBERNETES
期待される出力は次のようになります。
NEW_RELIC_METADATA_KUBERNETES_CLUSTER_NAME=THE_CLUSTER_NAMENEW_RELIC_METADATA_KUBERNETES_NODE_NAME=nodeaNEW_RELIC_METADATA_KUBERNETES_NAMESPACE_NAME=newrelicNEW_RELIC_METADATA_KUBERNETES_POD_NAME=test-nginxNEW_RELIC_METADATA_KUBERNETES_CONTAINER_NAME=nginx
メタデータの挿入を無効にする
メタデータのインジェクションをアンインストールするには、 values-newrelic.yaml
ファイルを次のように変更します。
webhook: enabled: false
その後、インストールコマンドを再実行します。
トラブルシューティング
必要に応じて、これらのトラブルシューティングのヒントに従ってください。