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

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

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

AWS 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 プロファイルを作成してください。

インジェクションワークフローは次のとおりです。

ヒント

次の手順は、デフォルト設定用です。これらを完了する前に、以下の「構成」セクションを参照して、自動インジェクションのいずれかの側面を変更するかどうかを確認することをお勧めします。

New Relic Helmリポジトリを追加する

これまでに実行していない場合は、次のコマンドを実行して New Relic Helm リポジトリを追加します。

bash
$
helm repo add newrelic https://helm-charts.newrelic.com

という名前のファイルを作成します values.yaml

インフラストラクチャ サイドカーの挿入を担当するオペレーターをインストールするには、 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インスタンスが作成されないため、これは問題になりません。

自動インジェクション: 既知の制限

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

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

自動インジェクション: 設定

自動インジェクションのさまざまな側面を構成できます。デフォルトでは、オペレーターは、 JobまたはBatchJobの一部ではないFargateノードにデプロイされたすべてのポッドに監視サイドカーを注入します。

この動作は設定オプションを通じて変更できます。 たとえば、セレクターを定義して、挿入されるポッドの選択範囲を狭めたり広げたり、オペレーターにリソースを割り当てたり、サイドカーを調整したりできます。 また、他の属性、ラベル、環境変数を追加することもできます。 表README.mdvalues.yamlを参照してください。

重要

独自のカスタムインジェクションルールを指定すると、Fargateでスケジュールされていないポッドへのサイドカーインジェクションを防ぐデフォルトのルールセットが破棄されます。カスタムルールが同じ効果を持つことを確認してください。そうしないと、 DaemonSetもデプロイされているハイブリッドクラスターでは、EC2でスケジュールされたポッドが2回監視され、データが正しくないか重複することになります。

最新バージョンまたは新しい構成に更新します

EKS Fargate統合の最新バージョンに更新するには、 helm repo update newrelicを使用してHelmリポジトリーをアップグレードし、上記のコマンドを再度実行してバンドルを再インストールします。

注入されたインフラストラクチャエージェントまたはオペレーター自体の構成を更新するには、 values-newrelic.yamlを変更し、Helmリリースを新しい構成でアップグレードします。オペレーターはすぐに更新され、ワークロードは次回の再起動時に新しいバージョンで計測されます。それらをすぐにアップグレードしたい場合は、以下を実行してワークロードを強制的に再起動できます。

bash
$
kubectl rollout restart deployment YOUR_APP

自動インジェクション: アンインストール

自動インジェクションを実行しているサイドカーをアンインストールし、残りの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

手動注射

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

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

  • ClusterRoleは、 nri-kubernetesインテグレーションに必要な権限を提供します。
  • ClusterRoleとポッドのサービス アカウントをリンクするClusterRoleBinding
  • 各 Fargate ネームスペースにNew Relic licenseKey を保存するシークレット。
  • モニター ワークロードの特定のテンプレート内のサイドカー コンテナ。

ヒント

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

手動インジェクションを実行するには、次の手順を実行します。

ClusterRole

ClusterRoleが存在しない場合は作成し、メトリックス エージェントにアクセスするために必要な権限を付与します。 同じクラスター内の複数のアプリケーションを監視する場合でも、これを 1 回だけ実行する必要があります。 このスニペットは、変更せずに以下のように使用できます。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app: newrelic-infrastructure
name: newrelic-newrelic-infrastructure-infra-agent
rules:
- apiGroups:
- ""
resources:
- nodes
- nodes/metrics
- nodes/stats
- nodes/proxy
- pods
- services
verbs:
- get
- list
- nonResourceURLs:
- /metrics
verbs:
- get

インジェクションサイドカー

モニターする各トランザクションに対して、 newrelic/infrastructure-k8sイメージ用のサイドカー コンテナーを追加します。 次のスニペットの コンテナを取得し、モニターするワークロードに挿入します。その際、 customAttributes変数にFargateProfileの名前を指定します。 ボリュームはemptyDir: {}として定義できることに注意してください。

ヒント

KSMデプロイメントの特殊なケースでは、 DISABLE_KUBE_STATE_METRICS環境変数を削除し、リソース要求と制限を増やす必要もあります。

apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: newrelic-infrastructure
env:
- name: NRIA_LICENSE_KEY
valueFrom:
secretKeyRef:
key: license
name: newrelic-newrelic-infrastructure-config
- name: NRIA_VERBOSE
value: "1"
- name: DISABLE_KUBE_STATE_METRICS
value: "true"
- name: CLUSTER_NAME
value: testing-injection
- name: COMPUTE_TYPE
value: serverless
- name: NRK8S_NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: NRIA_DISPLAY_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: NRIA_CUSTOM_ATTRIBUTES
value: '{"clusterName":"$(CLUSTER_NAME)", "computeType":"$(COMPUTE_TYPE)", "fargateProfile":"[YOUR FARGATE PROFILE]"}'
- name: NRIA_PASSTHROUGH_ENVIRONMENT
value: KUBERNETES_SERVICE_HOST,KUBERNETES_SERVICE_PORT,CLUSTER_NAME,CADVISOR_PORT,NRK8S_NODE_NAME,KUBE_STATE_METRICS_URL,KUBE_STATE_METRICS_POD_LABEL,TIMEOUT,ETCD_TLS_SECRET_NAME,ETCD_TLS_SECRET_NAMESPACE,API_SERVER_SECURE_PORT,KUBE_STATE_METRICS_SCHEME,KUBE_STATE_METRICS_PORT,SCHEDULER_ENDPOINT_URL,ETCD_ENDPOINT_URL,CONTROLLER_MANAGER_ENDPOINT_URL,API_SERVER_ENDPOINT_URL,DISABLE_KUBE_STATE_METRICS,DISCOVERY_CACHE_TTL
image: newrelic/infrastructure-k8s:2.4.0-unprivileged
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 100M
cpu: 200m
requests:
cpu: 100m
memory: 50M
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsUser: 1000
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/db/newrelic-infra/data
name: tmpfs-data
- mountPath: /var/db/newrelic-infra/user_data
name: tmpfs-user-data
- mountPath: /tmp
name: tmpfs-tmp
- mountPath: /var/cache/nr-kubernetes
name: tmpfs-cache
[...]

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

ClusterRoleBinding

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

監視するポッドのサービスアカウントをサブジェクトとして持つ次のClusterRoleBindingを作成します。

ヒント

同じサービスアカウントを2回繰り返す必要はありません。まだ含まれていないサービスアカウントでポッドを監視するたびに、それをリストに追加するだけです。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: newrelic-newrelic-infrastructure-infra-agent
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: newrelic-newrelic-infrastructure-infra-agent
subjects:
- kind: ServiceAccount
name: [INSERT_SERVICE_ACCOUNT_NAME_OF_WORKLOAD]
namespace: [INSERT_SERVICE_ACCOUNT_NAMESPACE_OF_WORKLOAD]

秘密を含む

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

のBase64エンコード値を含むライセンスを持つ次のSecretを作成します。監視するポッドが実行されている名前空間ごとに1つのシークレットが必要です。

apiVersion: v1
data:
license: INSERT_YOUR_NEW_RELIC_LICENSE_ENCODED_IN_BASE64
kind: Secret
metadata:
name: newrelic-newrelic-infrastructure-config
namespace: [INSERT_NAMESPACE_OF_WORKLOAD]
type: Opaque

マニュアルインジェクション: 最新バージョンにアップデート

いずれかのコンポーネントを更新するには、デプロイされたyamlを変更するだけです。 注入されたコンテナのいずれかのフィールドを更新すると、ポッドが再作成されます。

重要

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

手動インジェクション: Fargateインテグレーションのアンインストール

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

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

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

ロギング

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

トラブルシューティング

EKSデータを表示する

NewRelicUIでFargateノードがどのように表示されるかの例を次に示します。

AWSデータを表示するには:

  1. one.newrelic.com > All capabilities > Infrastructure > Kubernetesに移動し、次のうち1つを行います。

    • データを表示する統合名を選択します。
    • 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.