• EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

問題を作成する

EKS Fargate にインストールする

プレビュー

この機能は現在プレビュー段階です。

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-prometheusnri-metadata-injectionnri-kube-eventsなどのKubernetes用のNew Relicソリューションの他のコンポーネントには特別なものはなく、Fargate以外の環境の場合と同様に、HelmChartによって通常どおりデプロイされます。

インストール

EKS FargateクラスターにNewRelicの完全な可観測性をインストールするには、次の2つの方法から選択できます。

どのアプローチを選択しても、インストール後のエクスペリエンスはまったく同じです。唯一の違いは、コンテナーの注入方法です。New Relic インフラストラクチャ監視オペレーターを使用して自動インジェクションを設定することをお勧めします。これにより、監視する各デプロイメントを手動で編集する必要がなくなるからです。

自動注入(推奨)

デフォルトでは、Fargateサポートが有効になっている場合、New Relicはオペレーターをクラスター( newrelic-infra-operator )にデプロイします。デプロイされると、このオペレーターは、監視サイドカーをFargateノードにスケジュールされているポッドに自動的に注入し、同時にSecretsClusterRoleBindings 、およびその他の関連リソースの作成と更新を管理します。

このオペレーターは、ポッドと名前空間の両方にラベルセレクターを使用することで、インジェクションの範囲を狭めたり広げたりするために使用できるさまざまな高度な構成オプションを受け入れます。

オペレーターが行うこと

舞台裏で、オペレーターはMutatingWebhookConfigurationを設定します。これにより、クラスターで作成されようとしているポッドオブジェクトを変更できます。このイベントで、作成中のポッドがユーザーの構成と一致すると、オペレーターは次のことを行います。

  1. NewRelicKubernetes統合を含むポッドにサイドカーコンテナを追加します。

  2. シークレットが存在しない場合は、New Relic を含むポッドと同じ名前空間にシークレットを作成します

    これは、サイドカーがデータをレポートするために必要です。

  3. ポッドのサービスアカウントを、以前にオペレーターチャートによって作成された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リポジトリを追加します。

bash
$
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コマンドを使用してソリューションをデプロイできます。

bash
$
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リリースを新しい構成でアップグレードします。オペレーターはすぐに更新され、ワークロードは次回の再起動時に新しいバージョンで計測されます。それらをすぐにアップグレードしたい場合は、以下を実行してワークロードを強制的に再起動できます。

bash
$
kubectl rollout restart deployment YOUR_APP

Fargate統合をアンインストールします

自動インジェクションを実行しているサイドカーをアンインストールし、残りのNew Relicソリューションを保持するには、Helmを使用して、 values.yamlファイルまたはコマンドラインでinfra-operator.enabledfalseに設定してインフラオペレーターを無効にします( --set )、上記のインストールコマンドを再実行します。

--set global.fargate=trueフラグを保持することを強くお勧めします。これは、自動インジェクションを有効にしませんが、インストールの他のコンポーネントをFargate対応にし、望ましくない動作を防ぐためです。

ソリューション全体をアンインストールするには:

  1. Helmリリースを完全にアンインストールします。

  2. サイドカーを取り外すには、ポッドをロールアウトします。

    bash
    $
    kubectl rollout restart deployment YOUR_APP
  3. ガベージコレクションの秘密:

    bash
    $
    kubectl delete secrets -n YOUR_NAMESPACE -l newrelic/infra-operator-created=true

既知の制限:自動注入

自動インジェクションを使用する際に注意すべきいくつかの問題があります。

  1. 現在、クラスター全体を監視して、不要になったシークレットがガベージコレクションされていることを確認するコントローラーはありません。ただし、すべてのオブジェクトは、必要に応じてすべてのリソースを削除するために使用できる同じラベルを共有します。ラベルnewrelic/infra-operator-created: trueを挿入します。これを使用して、1つのコマンドでリソースを削除できます。
  2. 現時点では、注入されたサイドカーを使用してポッドで実行されているサービスを監視することはできません。サイドカーはKubernetes自体のみを監視します。ただし、上級ユーザーは、これらのポッドを自動注入から除外し、それらを構成して適切な場所に構成をマウントすることにより、オンホスト統合が有効になっているカスタマイズされたバージョンのサイドカーを手動で注入したい場合があります。ヘルプについては、このチュートリアルを参照してください。

手動注射

自動注入について懸念がある場合は、Fargateノードでスケジュールされる予定のワークロードのマニフェストを変更することにより、サイドカーを手動で直接注入できます。EC2ノードにスケジュールされたデプロイにサイドカーを追加すると、特にそれらのノードがすでにDaemonSetで監視されている場合、データが正しくないか重複する可能性があることに注意してください。

サイドカーがデータを正常に報告するには、次のオブジェクトが必要です。

  • nri-kubernetes統合に必要な権限を提供するClusterRole
  • ClusterRoleとポッドのサービスアカウントをリンクするClusterRoleBinding
  • 各Fargate名前空間にNewRelic licenseKeyを保存するシークレット
  • 監視対象ワークロードのスペックテンプレートのサイドカーコンテナ

手動注入インストール

ヒント

これらの手動セットアップ手順は、一般的なインストール用です。これらを完了する前に、以下の「構成」セクションを見て、自動インジェクションのいずれかの側面を変更するかどうかを確認してください。

手動注入の場合は、次の手順を実行します。

  1. ClusterRoleが存在しない場合は、を作成し、メトリックエンドポイントに到達するために必要な権限を付与します。 同じクラスター内の複数のアプリケーションを監視する場合でも、これは1回だけ実行する必要があります。

  2. 監視するワークロードごとに、 newrelic/infrastructure-k8sイメージ用のサイドカーコンテナを追加します。注入されたサイドカーの例を次に示します。

  3. ClusterRoleBindingを作成するか、以前に作成したものに、監視対象のアプリケーションのServiceAccountを追加します。すべてのワークロードが同じClusterRoleBindingを共有する場合がありますが、各ワークロードのServiceAccountを追加する必要があります。

  1. New Relic を含むシークレットを作成する . 各名前空間には独自のシークレットが必要です。

構成

サイドカーエージェントのマニフェストを手動で追加する場合は、任意のエージェント構成オプションを使用して、エージェントの動作を構成できます。ヘルプについては、 インフラストラクチャエージェントの構成設定を参照してください。

最新バージョンに更新する

コンポーネントを更新するには、デプロイされたyamlを変更するだけです。

注入されたコンテナのフィールドのいずれかを更新すると、ポッドが再作成されます。

重要

エージェントが New Relic をホットロードできない . シークレットを更新したら、デプロイを再度ロールアウトする必要があります。

Fargate統合をアンインストールします

注入されたコンテナと関連リソースを削除するには、次のものを削除する必要があります。

  • もはや監視されるべきではないワークロードからのサイドカー。
  • newrelicライセンスを含むすべての秘密。
  • ClusterRole およびClusterRoleBindingオブジェクト。

サイドカーコンテナを削除すると、ポッドが再作成されることに注意してください。

ロギング

New Relic のログ記録は、AWS によって課されたセキュリティ制約のため、Fargate ノードでは利用できませんが、いくつかのログ記録オプションを次に示します。

トラブルシューティング

DaemonSet レプリカが Fargate ノードにデプロイされています

FargateノードでInfra DaemonSetレプリカがスケジュールされていることに気付いた場合は、 nodeAffinityルールが適切に構成されていないことが原因である可能性があります。

コマンドライン( --set global.fargate=true )またはvalues.yamlファイルのいずれかを使用して、ソリューションがtrueへのglobal.fargateオプションを指定してインストールされたことを再確認します。インストール方法がHelmでない場合は、Fargateノードを除外するためにnodeAffinityルールを手動で追加する必要があります。

許容できない汚染によるイベント FailedScheduling

ポッドの作成中に次のイベントが発生した場合は、 自動インジェクションのインストール で説明されている tolerationsvalues.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データを表示するには:

  1. one.newrelic.com > All capabilities > Infrastructure > Kubernetes に移動し、次のいずれかを実行します。

    • データを表示する統合名を選択します。
    • AWSデータを表示するには、[データの探索]アイコンを選択します。
  2. 2つのFargateタグを使用してデータをフィルタリングします。

    • computeType=serverless
    • fargateProfile=[name of the Fargate profile to which the workload belongs]
Copyright © 2024 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.