プレビュー
この機能は現在プレビュー段階です。
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によって通常どおりデプロイされます。
インストール
EKS FargateクラスターにNewRelicの完全な可観測性をインストールするには、次の2つの方法から選択できます。
どのアプローチを選択しても、インストール後のエクスペリエンスはまったく同じです。唯一の違いは、コンテナーの注入方法です。New Relic インフラストラクチャ監視オペレーターを使用して自動インジェクションを設定することをお勧めします。これにより、監視する各デプロイメントを手動で編集する必要がなくなるからです。
自動注入(推奨)
デフォルトでは、Fargateサポートが有効になっている場合、New Relicはオペレーターをクラスター( newrelic-infra-operator
)にデプロイします。デプロイされると、このオペレーターは、監視サイドカーをFargateノードにスケジュールされているポッドに自動的に注入し、同時にSecrets
、 ClusterRoleBindings
、およびその他の関連リソースの作成と更新を管理します。
このオペレーターは、ポッドと名前空間の両方にラベルセレクターを使用することで、インジェクションの範囲を狭めたり広げたりするために使用できるさまざまな高度な構成オプションを受け入れます。
オペレーターが行うこと
舞台裏で、オペレーターはMutatingWebhookConfiguration
を設定します。これにより、クラスターで作成されようとしているポッドオブジェクトを変更できます。このイベントで、作成中のポッドがユーザーの構成と一致すると、オペレーターは次のことを行います。
NewRelicKubernetes統合を含むポッドにサイドカーコンテナを追加します。
シークレットが存在しない場合は、New Relic を含むポッドと同じ名前空間にシークレットを作成します
これは、サイドカーがデータをレポートするために必要です。
ポッドのサービスアカウントを、以前にオペレーターチャートによって作成された
ClusterRoleBinding
に追加します。これにより、このサイドカーに、Kubernetesメトリックエンドポイントにアクセスするために必要な権限が付与されます。
ClusterRoleBinding
は、注入されるポッドに次の権限を付与します。
- apiGroups: [""] resources: - "nodes" - "nodes/metrics" - "nodes/stats" - "nodes/proxy" - "pods" - "services" - "namespaces" verbs: ["get", "list"]- nonResourceURLs: ["/metrics"] verbs: ["get"]
ヒント
サイドカーが注入され、オペレーターがインストールされる前に展開されたポッドからメトリックを取得するには、影響を受ける展開のロールアウト(再起動)を手動で実行する必要があります。このようにして、ポッドが作成されると、オペレーターは監視サイドカーを注入できるようになります。New Relicは、予期しないサービスの中断やリソース使用量の急増を防ぐために、これを自動的に行わないことを選択しました。
重要
newrelic
名前空間 (またはインストール用に選択した名前空間) を宣言するセレクターを使用して Fargate プロファイルを作成してください。
インジェクションワークフローは次のとおりです。
自動注入インストール
ヒント
次の手順は、デフォルト設定用です。これらを完了する前に、以下の「構成」セクションを参照して、自動インジェクションのいずれかの側面を変更するかどうかを確認することをお勧めします。
最初に、これまでに追加したことがない場合は、NewRelicHelmリポジトリを追加します。
$helm repo add newrelic https://helm-charts.newrelic.com
次に、インフラストラクチャサイドカーの注入を担当するオペレーターをインストールするために、構成を定義するために使用されるvalues.yaml
という名前のファイルを作成してください。
## Global values
global: # -- The cluster name for the Kubernetes cluster. cluster: "_YOUR_K8S_CLUSTER_NAME_"
# -- The license key for your New Relic Account. This will be preferred configuration option if both `licenseKey` and `customSecret` are specified. licenseKey: "_YOUR_NEW_RELIC_LICENSE_KEY_"
# -- (bool) In each integration it has different behavior. Enables operating system metric collection on each EC2 K8s node. Not applicable to Fargate nodes. # @default -- false privileged: true
# -- (bool) Must be set to `true` when deploying in an EKS Fargate environment # @default -- false fargate: true
## Enable nri-bundle sub-charts
newrelic-infra-operator: # Deploys the infrastructure operator, which injects the monitoring sidecar into Fargate pods enabled: true tolerations: - key: "eks.amazonaws.com/compute-type" operator: "Equal" value: "fargate" effect: "NoSchedule" config: ignoreMutationErrors: true infraAgentInjection: # Injection policies can be defined here. See [values file](https://github.com/newrelic/newrelic-infra-operator/blob/main/charts/newrelic-infra-operator/values.yaml#L114-L125) for more detail. policies: - namespaceName: namespace-a - namespaceName: namespace-b
newrelic-infrastructure: # Deploys the Infrastructure Daemonset to EC2 nodes. Disable for Fargate-only clusters. enabled: true
nri-metadata-injection: # Deploy our mutating admission webhook to link APM and Kubernetes entities enabled: true
kube-state-metrics: # Deploys Kube State Metrics. Disable if you are already running KSM in your cluster. enabled: true
nri-kube-events: # Deploy the Kubernetes events integration. enabled: true
newrelic-logging: # Deploys the New Relic's Fluent Bit daemonset to EC2 nodes. Disable for Fargate-only clusters. enabled: true
newrelic-prometheus-agent: # Deploys the Prometheus agent for scraping Prometheus endpoints. enabled: true config: kubernetes: integrations_filter: enabled: true source_labels: ["app.kubernetes.io/name", "app.newrelic.io/name", "k8s-app"] app_values: ["redis", "traefik", "calico", "nginx", "coredns", "kube-dns", "etcd", "cockroachdb", "velero", "harbor", "argocd", "istio"]
最後に、ファイルを作成して微調整した後、次のHelmコマンドを使用してソリューションをデプロイできます。
$helm upgrade --install newrelic-bundle newrelic/nri-bundle -n newrelic --create-namespace -f values.yaml
重要
ソリューションをハイブリッドクラスター(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_APP
Fargate統合をアンインストールします
自動インジェクションを実行しているサイドカーをアンインストールし、残りのNew Relicソリューションを保持するには、Helmを使用して、 values.yaml
ファイルまたはコマンドラインでinfra-operator.enabled
をfalse
に設定してインフラオペレーターを無効にします( --set
)、上記のインストールコマンドを再実行します。
--set global.fargate=true
フラグを保持することを強くお勧めします。これは、自動インジェクションを有効にしませんが、インストールの他のコンポーネントをFargate対応にし、望ましくない動作を防ぐためです。
ソリューション全体をアンインストールするには:
Helmリリースを完全にアンインストールします。
サイドカーを取り外すには、ポッドをロールアウトします。
bash$kubectl rollout restart deployment YOUR_APPガベージコレクションの秘密:
bash$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
を追加する必要があります。
New Relic を含むシークレットを作成する . 各名前空間には独自のシークレットが必要です。
構成
サイドカーエージェントのマニフェストを手動で追加する場合は、任意のエージェント構成オプションを使用して、エージェントの動作を構成できます。ヘルプについては、 インフラストラクチャエージェントの構成設定を参照してください。
最新バージョンに更新する
コンポーネントを更新するには、デプロイされたyamlを変更するだけです。
注入されたコンテナのフィールドのいずれかを更新すると、ポッドが再作成されます。
重要
エージェントが New Relic をホットロードできない . シークレットを更新したら、デプロイを再度ロールアウトする必要があります。
Fargate統合をアンインストールします
注入されたコンテナと関連リソースを削除するには、次のものを削除する必要があります。
- もはや監視されるべきではないワークロードからのサイドカー。
- newrelicライセンスを含むすべての秘密。
ClusterRole
およびClusterRoleBinding
オブジェクト。
サイドカーコンテナを削除すると、ポッドが再作成されることに注意してください。
ロギング
New Relic のログ記録は、AWS によって課されたセキュリティ制約のため、Fargate ノードでは利用できませんが、いくつかのログ記録オプションを次に示します。
- ログ記録に Fluentbit を使用している場合は、 「ログ転送用の Kubernetes プラグイン」を参照してください。
- ログデータがすでに AWS FireLens によって監視されている場合は、 「ログ転送用の AWS FireLens プラグイン」を参照してください。
- ログデータがすでに Amazon CloudWatch Logs によって監視されている場合は、 「Kinesis Data Firehose を使用したログのストリーミング」を参照してください。
- CloudWatch ログの送信については、「AWS Lambda」を参照してください。
- 「Amazon ECS から New Relic にログを転送する 3 つの方法」を参照してください。
トラブルシューティング
DaemonSet レプリカが Fargate ノードにデプロイされています
FargateノードでInfra DaemonSet
レプリカがスケジュールされていることに気付いた場合は、 nodeAffinity
ルールが適切に構成されていないことが原因である可能性があります。
コマンドライン( --set global.fargate=true
)またはvalues.yaml
ファイルのいずれかを使用して、ソリューションがtrue
へのglobal.fargate
オプションを指定してインストールされたことを再確認します。インストール方法がHelmでない場合は、Fargateノードを除外するためにnodeAffinity
ルールを手動で追加する必要があります。
許容できない汚染によるイベント FailedScheduling
ポッドの作成中に次のイベントが発生した場合は、 自動インジェクションのインストール で説明されている tolerations
を values.yaml
ファイルに忘れずに追加してください。
LAST SEEN | TYPE | REASON | OBJECT | MESSAGE:--|:--|:--|:--|:--3m9s (x2 over 8m10s) | Warning | FailedScheduling | Pod/no-fargate-deploy-cbddd6ccf-8f9x4 | 0/2 nodes are available: 2 node(s) had untolerated taint {eks.amazonaws.com/compute-type: fargate}. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling..
ポッドが多すぎるためイベント FailedScheduling
ポッドの作成中に次のイベントが発生した場合は、インストールが行われる名前空間を指定するセレクターを含む Fargate プロファイルがあるかどうかを確認してください。
LAST SEEN | TYPE | REASON | OBJECT | MESSAGE:--|:--|:--|:--|:--61s | Warning | FailedScheduling | Pod/newrelic-bundle-newrelic-infra-operator-admission-create-d8ggt | 0/2 nodes are available: 2 Too many pods. preemption: 0/2 nodes are available: 2 No preemption victims found for incoming pod..
EKSデータを表示する
NewRelicUIでFargateノードがどのように表示されるかの例を次に示します。
AWSデータを表示するには:
one.newrelic.com > All capabilities > Infrastructure > Kubernetes に移動し、次のいずれかを実行します。
- データを表示する統合名を選択します。
- AWSデータを表示するには、[データの探索]アイコンを選択します。
2つのFargateタグを使用してデータをフィルタリングします。
computeType=serverless
fargateProfile=[name of the Fargate profile to which the workload belongs]