ベータ機能
この機能はまだ開発中ですが、ぜひお試しください。
New Relicは、インフラストラクチャエージェントと監視が必要な各ポッドのnri-kubernetes
統合を含むサイドカーを自動的に挿入することで、EKSFargateでのKubernetesワークロードの監視をサポートします。
同じKubernetesクラスターにEC2ノードも含まれている場合、ソリューションはそれらすべてにDaemonSet
としてデプロイされます。EC2ノードでスケジュールされたポッドにサイドカーが注入されることはなく、FargateノードにDaemonSet
がデプロイされることもありません。FargateノードとEC2ノードの両方を備えたハイブリッドインスタンスの例を次に示します。
混合環境では、統合はFargateノードにサイドカーのみを使用します。
New Relicは、FargateノードかEC2ノードかに関係なく、スケジュールされている場所に関係なく、すべてのKubernetesオブジェクトでサポートされているすべてのメトリックを収集します。Fargateによって課せられた制限により、NewRelic統合はFargateノードで非特権モードで実行するように制限されていることに注意してください。つまり、実行中のプロセスのように、通常はホストから直接フェッチされるメトリックは、Fargateノードでは使用できません。
両方のシナリオのエージェントは、Kube State Metrics(KSM)、Kubelet、およびcAdvisorからデータを取得し、同じ形式でデータを送信します。
重要
他のKubernetesクラスタと同様に、このソリューションでは、Kube State Metrics(KSM)インスタンスをデプロイして監視する必要があります。ヘルムチャートやインストーラーはデフォルトで自動的にこれを行いますが、クラスターにすでにKSMのインスタンスが動作している場合は、この動作を無効にすることができます。このKSMインスタンスは、他のワークロードと同様に監視されます。ファーゲートノードでスケジュールされている場合はサイドカーを注入し、EC2ノードでスケジュールされている場合はDaemonSet
のローカルインスタンスを注入します。
nri-prometheus
、 nri-metadata-injection
、 nri-kube-events
などのKubernetes用のNew Relicソリューションの他のコンポーネントには特別なものはなく、Fargate以外の環境の場合と同様に、HelmChartによって通常どおりデプロイされます。
重要
FargateノードではNewRelicLoggingはまだサポートされていません。
インストール
EKS FargateクラスターにNewRelicの完全な可観測性をインストールするには、次の2つの方法から選択できます。
選択したアプローチに関係なく、インストール後のエクスペリエンスはまったく同じです。唯一の違いは、コンテナの注入方法です。監視する各デプロイメントを手動で編集する必要がなくなるため、New RelicInfrastructureOperatorを使用して自動インジェクションを設定することをお勧めします。
自動注入(推奨)
デフォルトでは、Fargateサポートが有効になっている場合、New Relicはオペレーターをクラスター( newrelic-infra-operator
)にデプロイします。デプロイされると、このオペレーターは、監視サイドカーをFargateノードにスケジュールされているポッドに自動的に注入し、同時にSecrets
、 ClusterRoleBindings
、およびその他の関連リソースの作成と更新を管理します。
このオペレーターは、ポッドと名前空間の両方にラベルセレクターを使用することで、インジェクションの範囲を狭めたり広げたりするために使用できるさまざまな高度な構成オプションを受け入れます。
オペレーターが行うこと
舞台裏で、オペレーターはMutatingWebhookConfiguration
を設定します。これにより、クラスターで作成されようとしているポッドオブジェクトを変更できます。このイベントで、作成中のポッドがユーザーの構成と一致すると、オペレーターは次のことを行います。
- NewRelicKubernetes統合を含むポッドにサイドカーコンテナを追加します。
- シークレットが存在しない場合は、サイドカーがデータを報告するために必要なNewRelicライセンスキーを含むポッドと同じ名前空間にシークレットを作成します。
- ポッドのサービスアカウントを、以前にオペレーターチャートによって作成された
ClusterRoleBinding
に追加します。これにより、このサイドカーに、Kubernetesメトリックエンドポイントにアクセスするために必要な権限が付与されます。
ClusterRoleBinding
は、注入されるポッドに次の権限を付与します。
- apiGroups: [""] resources: - "nodes" - "nodes/metrics" - "nodes/stats" - "nodes/proxy" - "pods" - "services" verbs: ["get", "list"]- nonResourceURLs: ["/metrics"] verbs: ["get"]
ヒント
サイドカーが注入され、オペレーターがインストールされる前に展開されたポッドからメトリックを取得するには、影響を受ける展開のロールアウト(再起動)を手動で実行する必要があります。このようにして、ポッドが作成されると、オペレーターは監視サイドカーを注入できるようになります。New Relicは、予期しないサービスの中断やリソース使用量の急増を防ぐために、これを自動的に行わないことを選択しました。
インジェクションワークフローは次のとおりです。
自動注入インストール
ヒント
次の手順は、デフォルト設定用です。これらを完了する前に、以下の「構成」セクションを参照して、自動インジェクションのいずれかの側面を変更するかどうかを確認することをお勧めします。
最初に、これまでに追加したことがない場合は、NewRelicHelmリポジトリを追加します。
$helm repo add newrelic https://helm-charts.newrelic.com
次に、インフラストラクチャサイドカーの注入を担当するオペレーターをインストールするために、構成を定義するために使用されるvalues-newrelic.yaml
という名前のファイルを作成してください。
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_ fargate: true # Enable fargate support
prometheus: # Automatically scrape prometheus metrics for annotated services in the cluster # Collecting prometheus metrics for large clusters might impact data usage significantly enabled: true lowDataMode: true # Skip ingesting cluster-level metricswebhook: # Deploy our webhook to link APM and Kubernetes entities enabled: truekubeEvents: # Report Kubernetes events enabled: truelogging: # Report logs for containers running in the cluster enabled: trueksm: # Deploy kube-state-metrics in the cluster. # Set this to true unless it is already deployed. enabled: truenewrelic-infra-operator: # Deploy the infrastructure operator, which will inject the monitoring sidecar on fargate pods enabled: true
最後に、ファイルを作成して微調整した後、次のHelmコマンドを使用してソリューションをデプロイできます。
$helm upgrade --install newrelic newrelic/nri-bundle \>--namespace newrelic --create-namespace \>-f values-newrelic.yaml \>--devel
重要
ソリューションをハイブリッドクラスター(EC2ノードとFargateノードの両方)にデプロイする場合は、ソリューションがFargateプロファイルによって選択されていないことを確認してください。そうしないと、 DaemonSet
インスタンスは保留状態のままになります。ファーゲートのみの環境では、 DaemonSet
インスタンスが作成されないため、これは問題になりません。
構成
自動インジェクションのさまざまな側面を構成できます。デフォルトでは、オペレーターは、 Job
またはBatchJob
の一部ではないFargateノードにデプロイされたすべてのポッドに監視サイドカーを注入します。
この動作は、構成オプションを使用して変更できます。たとえば、セレクターを定義して、注入されるポッドの選択を狭めたり広げたり、オペレーターにリソースを割り当てたり、サイドカーを調整したりできます。また、他の属性、ラベル、および環境変数を追加することもできます。チャートREADME.mdおよびvalues.yamlを参照してください。
重要
独自のカスタムインジェクションルールを指定すると、Fargateでスケジュールされていないポッドへのサイドカーインジェクションを防ぐデフォルトのルールセットが破棄されます。カスタムルールが同じ効果を持つことを確認してください。そうしないと、 DaemonSet
もデプロイされているハイブリッドクラスターでは、EC2でスケジュールされたポッドが2回監視され、データが正しくないか重複することになります。
最新バージョンまたは新しい構成に更新します
EKS Fargate統合の最新バージョンに更新するには、 helm repo update newrelic
を使用してHelmリポジトリーをアップグレードし、上記のコマンドを再度実行してバンドルを再インストールします。
注入されたインフラストラクチャエージェントまたはオペレーター自体の構成を更新するには、 values-newrelic.yaml
を変更し、Helmリリースを新しい構成でアップグレードします。オペレーターはすぐに更新され、ワークロードは次回の再起動時に新しいバージョンで計測されます。それらをすぐにアップグレードしたい場合は、以下を実行してワークロードを強制的に再起動できます。
$kubectl rollout restart deployment _your_application_
Fargate統合をアンインストールします
自動インジェクションを実行しているサイドカーをアンインストールし、残りのNew Relicソリューションを保持するには、Helmを使用して、 values.yaml
ファイルまたはコマンドラインでinfra-operator.enabled
をfalse
に設定してインフラオペレーターを無効にします( --set
)、上記のインストールコマンドを再実行します。
--set global.fargate=true
フラグを保持することを強くお勧めします。これは、自動インジェクションを有効にしませんが、インストールの他のコンポーネントをFargate対応にし、望ましくない動作を防ぐためです。
ソリューション全体をアンインストールするには:
Helmリリースを完全にアンインストールします。
サイドカーを取り外すには、ポッドをロールアウトします。
$ kubectl rollout restart deployment YOUR_APP
ガベージコレクションの秘密:
$ kubectl delete secrets -n YOUR_NAMESPACE -l newrelic/infra-operator-created=true
既知の制限:自動注入
自動インジェクションを使用する際に注意すべきいくつかの問題があります。
- 現在、クラスター全体を監視して、不要になったシークレットがガベージコレクションされていることを確認するコントローラーはありません。ただし、すべてのオブジェクトは、必要に応じてすべてのリソースを削除するために使用できる同じラベルを共有します。ラベル
newrelic/infra-operator-created: true
を挿入します。これを使用して、1つのコマンドでリソースを削除できます。 - 現時点では、注入されたサイドカーを使用してポッドで実行されているサービスを監視することはできません。サイドカーはKubernetes自体のみを監視します。ただし、上級ユーザーは、これらのポッドを自動注入から除外し、それらを構成して適切な場所に構成をマウントすることにより、オンホスト統合が有効になっているカスタマイズされたバージョンのサイドカーを手動で注入したい場合があります。ヘルプについては、このチュートリアルを参照してください。
手動注射
自動注入について懸念がある場合は、Fargateノードでスケジュールされる予定のワークロードのマニフェストを変更することにより、サイドカーを手動で直接注入できます。EC2ノードにスケジュールされたデプロイにサイドカーを追加すると、特にそれらのノードがすでにDaemonSet
で監視されている場合、データが正しくないか重複する可能性があることに注意してください。
サイドカーがデータを正常に報告するには、次のオブジェクトが必要です。
nri-kubernetes
統合に必要な権限を提供するClusterRole
ClusterRole
とポッドのサービスアカウントをリンクするClusterRoleBinding
- 各Fargate名前空間にNewRelic
licenseKey
を保存するシークレット - 監視対象ワークロードのスペックテンプレートのサイドカーコンテナ
手動注入インストール
ヒント
これらの手動セットアップ手順は、一般的なインストール用です。これらを完了する前に、以下の「構成」セクションを見て、自動インジェクションのいずれかの側面を変更するかどうかを確認してください。
手動注入の場合は、次の手順を実行します。
ClusterRole
が存在しない場合は、を作成し、メトリックエンドポイントに到達するために必要な権限を付与します。 同じクラスター内の複数のアプリケーションを監視する場合でも、これは1回だけ実行する必要があります。監視するワークロードごとに、
newrelic/infrastructure-k8s
イメージ用のサイドカーコンテナを追加します。注入されたサイドカーの例を次に示します。ClusterRoleBinding
を作成するか、以前に作成したものに、監視対象のアプリケーションのServiceAccount
を追加します。すべてのワークロードが同じClusterRoleBinding
を共有する場合がありますが、各ワークロードのServiceAccount
を追加する必要があります。
NewRelicライセンスキーを含むシークレットを作成します。各名前空間には独自のシークレットが必要です。
構成
サイドカーエージェントのマニフェストを手動で追加する場合は、任意のエージェント構成オプションを使用して、エージェントの動作を構成できます。ヘルプについては、 インフラストラクチャエージェントの構成設定を参照してください。
最新バージョンに更新する
コンポーネントを更新するには、デプロイされたyamlを変更するだけです。
注入されたコンテナのフィールドのいずれかを更新すると、ポッドが再作成されます。
重要
エージェントはNewRelicライセンスキーをホットロードできません。シークレットを更新した後、デプロイメントを再度ロールアウトする必要があります。
Fargate統合をアンインストールします
注入されたコンテナと関連リソースを削除するには、次のものを削除する必要があります。
- もはや監視されるべきではないワークロードからのサイドカー。
- newrelicライセンスを含むすべての秘密。
ClusterRole
およびClusterRoleBinding
オブジェクト。
サイドカーコンテナを削除すると、ポッドが再作成されることに注意してください。
トラブルシューティング:DaemonSetレプリカがFargateノードにデプロイされています
FargateノードでInfra DaemonSet
レプリカがスケジュールされていることに気付いた場合は、 nodeAffinity
ルールが適切に構成されていないことが原因である可能性があります。
コマンドライン( --set global.fargate=true
)またはvalues.yaml
ファイルのいずれかを使用して、ソリューションがtrue
へのglobal.fargate
オプションを指定してインストールされたことを再確認します。インストール方法がHelmでない場合は、Fargateノードを除外するためにnodeAffinity
ルールを手動で追加する必要があります。
EKSデータを表示する
NewRelicUIでFargateノードがどのように表示されるかの例を次に示します。
AWSデータを表示するには:
one.newrelic.com >インフラストラクチャ>Kubernetesに移動し、次のいずれかを実行します。
- データを表示する統合名を選択します。
- AWSデータを表示するには、[データの探索]アイコンを選択します。
2つのFargateタグを使用してデータをフィルタリングします。
computeType=serverless
fargateProfile=[name of the Fargate profile to which the workload belongs]