このページでは、クラスタエージェントの Helm チャートを使用してクラスタエージェントを展開する方法について説明します。

Helm は Kubernetes のパッケージマネージャです。Helm チャートは、一連の Kubernetes リソースについて説明するファイルのコレクションです。クラスタエージェントの Helm チャートは、Splunk AppDynamics オペレータとクラスタエージェントを展開するのに便利な方法です。クラスタエージェントの Helm チャートを使用して、1 つのクラスタに複数のクラスタエージェントを展開することもできます。これは、単一のクラスタエージェントのポッドモニタリング制限を超える大規模なクラスタで必要になることがあります。「クラスタエージェントの要件およびサポート対象環境」を参照してください。

要件

  • クラスタ エージェント バージョン 20.6 以降
  • コントローラバージョン 20.6 以降
  • クラスタエージェントの Helm チャートが Helm 3.0 と互換性を持っている
  • バージョン v1.1.0 以降のクラスタエージェントの Helm チャートを使用することを推奨します。 

  • クラスタエージェント 23.2.0 以降および Splunk AppDynamics オペレータバージョン 23.2.0 以降をインストールするために、クラスタエージェントの Helm チャートバージョン v1.10.0 以降を使用します。 

  • クラスタエージェント 21.12.0 以降および Splunk AppDynamics オペレータバージョン 21.12.0 以降をインストールするために、クラスタエージェントの Helm チャートバージョン v1.1.0 以降を使用します。  

  • 古いメジャーバージョンのクラスタエージェントの Helm チャート(0.1.19 以前)を使用して、バージョン 21.10.0 以前のSplunk AppDynamicsクラスタエージェントおよびバージョン 0.6.11 以前のオペレータをインストールできます

クラスタへの単一のクラスタエージェントのインストール

  1. 次のコマンドを使用して、Splunk AppDynamics エージェントに関連する、以前にインストールされたすべての CustomResourceDefinition(CRD)を削除します。

    $ kubectl get crds $ kubectl delete crds <crd-names>
    CODE
  2. チャートリポジトリを Helm に追加します。

    helm repo add appdynamics-cloud-helmcharts https://appdynamics.jfrog.io/artifactory/appdynamics-cloud-helmcharts/
    BASH

     

  3. クラスタで appdynamics の名前空間を作成します。

    kubectl create namespace appdynamics
    BASH

     

  4. values-ca1.yaml の例では、Helm 値ファイルを作成します。コントローラのログイン情報を使用して controllerInfo プロパティを更新します。
    clusterAgent プロパティを更新して、モニターする名前空間とポッドを設定します。使用可能なプロパティ nsToMonitornsToMonitorRegexnsToExcludeRegex、および podFilter の詳細については、「クラスタエージェントの設定」を参照してください。

    values-ca1.yaml

    # To install Cluster Agent installClusterAgent: true # Controller info controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> # Cluster agent config clusterAgent: nsToMonitorRegex: dev-.*
    YML

    [Server Monitoring Administrator] ロールがあるコントローラから、ローカルユーザーにユーザー名とパスワードを設定します。クラスタエージェントで、これらのログイン情報が使用されて、ポッドの削除時にコントローラ内の関連付けられたノードが履歴としてマークされます。使用可能なオプションの詳細については、「values.yaml の設定オプション」を参照してください。また、次のコマンドを使用して、Helm チャートリポジトリから values.yaml のコピーをダウンロードできます。

    helm show values appdynamics-charts/cluster-agent
    BASH
  5. クラスタ(通常は kube-system 名前空間に配置)に Kubernetes metrics-server をインストールしていない場合は、値ファイルで install.metrics-servertrue に設定し、サブチャートを呼び出してインストールします。

    install: metrics-server: true
    BASH

    install.metrics-server を設定すると、--namespace フラグが付いた名前空間に metrics-server がインストールされます。この名前空間は、クラスタエージェントと同じです。

  6. クラスタエージェントを appdynamics 名前空間に展開します。

    helm install -f ./values-ca1.yaml "<my-cluster-agent-helm-release>" appdynamics-charts/cluster-agent --namespace=appdynamics
    BASH

自動インストゥルメンテーションの有効化

クラスタエージェントが正常にインストールされたことを確認したら、値 YAML ファイルの instrumentationConfig セクションに設定を追加して、自動インストゥルメンテーションを有効にできます。この例では、instrumentationConfig.enabledtrue に設定され、複数の instrumentationRules が定義されています。「クラスタエージェントを使用したアプリケーションの自動インストゥルメンテーション」を参照してください。

自動インストゥルメンテーションが有効になっている values-ca1.yaml

# To install Cluster Agent installClusterAgent: true # Controller info controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> # Cluster agent config clusterAgent: nsToMonitorRegex: ecom|books|groceries instrumentationConfig: enabled: true instrumentationMethod: Env nsToInstrumentRegex: ecom|books|groceries defaultAppName: Ecommerce tierNameStrategy: manual imageInfo: java: image: "docker.io/appdynamics/java-agent:latest" agentMountPath: /opt/appdynamics imagePullPolicy: Always instrumentationRules: - namespaceRegex: groceries language: dotnetcore 	 tierName: tier imageInfo: image: "docker.io/appdynamics/dotnet-core-agent:latest" agentMountPath: /opt/appdynamics imagePullPolicy: Always - namespaceRegex: books matchString: openmct language: nodejs imageInfo: image: "docker.io/appdynamics/nodejs-agent:20.5.0-alpinev10" agentMountPath: /opt/appdynamics imagePullPolicy: Always analyticsHost: <hostname of the Analytics Agent> analyticsPort: 443 analyticsSslEnabled: true
YML

自動インストゥルメンテーションの設定が追加された values-ca1.yaml ファイルを保存したら、Helm チャートをアップグレードする必要があります。

helm upgrade -f ./ca1-values.yaml "<my-cluster-agent-helm-release>" appdynamics-charts/cluster-agent --namespace appdynamics
BASH


設定オプション

設定オプション 説明必須
installClusterAgentクラスタエージェントのインストールに使用されます。これは true に設定する必要があります。オプション(デフォルトは true)
イメージ設定オプション(values.yaml 内の imageInfo キーの下にある設定オプション)
imageInfo.agentImage<registryUrl>/<registryAccount>/<project> 形式のクラスタエージェントのイメージアドレスオプション(デフォルトは Docker ハブイメージ)
imageInfo.agentTagクラスタエージェントのイメージタグ/バージョンオプション(デフォルトは最新)
imageInfo.operatorImage<registryUrl>/<registryAccount>/<project> 形式のオペレータのイメージアドレスオプション(デフォルトは Docker ハブイメージ)
imageInfo.operatorTagオペレータのイメージタグ/バージョンオプション(デフォルトは最新)
imageInfo.imagePullPolicyオペレータポッドのイメージプルポリシー オプション
コントローラ設定オプション(values.yaml controllerInfo キーの下にある設定オプション)
controllerInfo.accessKey

コントローラのアクセスキー

必須
controllerInfo.accountコントローラアカウント必須
controllerInfo.authenticateProxyプロキシが認証を必要とする場合は true または falseオプション
controllerInfo.customSSLCertPEM 形式の SSL 証明書の Base64 エンコーディングオプション
controllerInfo.passwordコントローラのパスワード

ポッドの削除時にコントローラ内の関連付けられたノードを履歴としてマークするための、コントローラからのローカルユーザーのパスワード。

自動インストゥルメンテーションが有効になっている場合にのみ必須です。

controllerInfo.proxyPasswordプロキシ認証のパスワードオプション
controllerInfo.proxyUrlコントローラが一部のプロキシの背後にある場合のプロキシ URLオプション
controllerInfo.proxyUserプロキシ認証のユーザ名オプション
controllerInfo.urlコントローラ URL必須
controllerInfo.usernameコントローラのユーザー名

ポッドの削除時にコントローラ内の関連付けられたノードを履歴としてマークするための、コントローラからのローカルユーザーのユーザー名

自動インストゥルメンテーションが有効になっている場合にのみ必須です。

クラスタエージェント設定(values.yaml clusterAgent キーの下にある設定オプション)

OpenShift バージョンが 4.14 より新しい場合は、securityContext 内のすべての子パラメータが、セキュリティコンテキスト制約(SCC)で概説されている許容値に基づいて指定されていることを確認します。Red Hat OpenShift ドキュメントの「セキュリティコンテキスト上の制約」を参照してください。

たとえば、RunAsUser プロパティを使用する場合、ユーザー ID(UID)は許容範囲である必要があります。UID の SCC の許容範囲は 1000 ~ 9001 です。したがって、RunAsUser 値はこの範囲内でのみ追加できます。他のセキュリティ コンテキスト パラメータについても同様です。


clusterAgent.appNameクラスタの名前。クラスタ名としてコントローラ UI に表示されます。必須
clusterAgent.eventUploadInterval

Kubernetes の警告および状態変更イベントがコントローラにアップロードされる頻度(秒単位)。Kubernetes イベントのモニタを参照してください。

オプション
clusterAgent.httpClientTimeout

コントローラから応答を受信しなかった場合にサーバコールが終了するまでの秒数。

オプション
clusterAgent.imagePullSecret

プライベート Docker レジストリまたはリポジトリからイメージをプルする場合の認証に使用されるクレデンシャルファイル。Docker レジストリ構成に基づいて、クラスタエージェントのイメージをプルする場合に Splunk AppDynamics オペレータが使用するシークレットファイルの作成が必要になる場合があります。Create a Secret by providing credentials on the command line」を参照してください。

オプション
clusterAgent.instrumentationMaxPollingAttempts

クラスタエージェントがインストゥルメンテーションのロールアウトが成功したかどうかをチェックしてから失敗とマークするまでの最大回数。

オプション
clusterAgent.logProperties.logFileSizeMb

ログの最大ファイルサイズ(MB 単位)。

オプション
clusterAgent.logProperties.logFileBackups

ログに保存するバックアップの最大数。最大バックアップ数に達すると、最初のログファイルの次に最も古いログファイルが削除されます。

オプション
clusterAgent.logProperties.logLevel

ログの詳細の数。INFOWARNINGDEBUG、または TRACE

オプション
clusterAgent.logProperties.maxPodLogsTailLinesCount

ログの収集中に tail される行数。

このパラメータを使用するには、ログキャプチャ機能を有効にします。失敗したポッドのログ収集の有効化を参照してください。

オプション
clusterAgent.logProperties.stdoutLogging

デフォルトでは、クラスタエージェントは logs ディレクトリ内のログファイルに書き込みます。さらに、コンテナ stdout にログを送信するため、stdoutLogging パラメータが用意されています。

オプション
clusterAgent.nsToMonitorRegex

クラスタでモニタする必要のある名前空間を選択するための正規表現。

複数の名前空間をモニターする必要がある場合は、スペースを使用せずに | を使用して名前空間を区切ります。

名前空間の編集」を参照してください。

オプション
clusterAgent.nsToExcludeRegex

nsToMonitorRegex に指定された正規表現に一致する、選択した名前空間から除外する必要がある名前空間の正規表現。

このパラメータは、20.9 以上のクラスタエージェント、および 20.10 以上のコントローラでサポートされます。

このパラメータは、nsToMonitorRegex パラメータの値を指定した場合にのみ使用できます。

オプション
clusterAgent.priorityClassName

ポッドの仕様で優先順位を設定するために使用される、ポッド優先順位クラスの名前。

オプション

clusterAgent.securityContext.runAsGroup

アプリケーションコンテナを非ルートユーザーとして構成した場合は、対応するグループの groupId(GID)を指定します。

これにより、エージェント アーティファクトに適切なファイル権限が設定されます。

この値は、インストゥルメント化されたすべてのリソースに適用されます。

デフォルトのインストゥルメンテーション用に設定されている runAsGroup のデフォルト値を上書きする必要がある場合、またはこのルールを満たすリソースに特定の値が必要な場合は、このパラメータを追加します。

クラスタ エージェント イメージには、GID 9001 のグループが含まれています。

オプション

clusterAgent.securityContext.runAsUser

アプリケーションコンテナを非ルートユーザーとして構成した場合は、対応するユーザーの userId(UID)を指定します。

これにより、エージェント アーティファクトに適切なファイル権限が設定されます。

この値は、インストゥルメント化されたすべてのリソースに適用されます。

デフォルトのインストゥルメンテーション用に設定されている runAsUser のデフォルト値を上書きする必要がある場合、またはこのルールを満たすリソースに特定の値が必要な場合は、このパラメータを追加します。

クラスタ エージェント イメージに、UID 9001 のユーザーが含まれています。

オプション

clusterAgent.securityContext.allowPrivilegeEscalation

プロセスが親プロセスよりも多くの権限を取得できるかどうかを制御します。次のコンテナとして実行されている場合、この値は true です。

  • 特権コンテナ
  • CAP_SYS_ADMIN
  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
clusterAgent.securityContext.capabilities

実行中のコンテナの POSIX 機能を追加または削除します。これは、コンテナランタイムにデフォルトの機能セットを使用します。 

  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
clusterAgent.securityContext.privileged

ホストでのルートに相当する特権モードでコンテナを実行します。 

  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
clusterAgent.securityContext.procMount

コンテナに使用する proc マウントのタイプ。 

このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。

オプション
clusterAgent.securityContext.readOnlyRootFilesystem

このコンテナに読み取り専用のルートファイルシステムがあるかどうかを指定します。 

  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
clusterAgent.securityContext.runAsNonRoot

コンテナを非ルートユーザーとして実行する必要があるかどうかを指定します。

この値が true の場合、Kubelet は実行時にイメージを検証して、ルートとして実行したときにコンテナの開始が失敗することを確認します。このパラメータが指定されていない場合、または値が false の場合、検証は行われません。 

このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。

オプション
clusterAgent.securityContext.seLinuxOptions

SELinux コンテキストをコンテナに適用します。このパラメータが指定されていない場合、コンテナランタイムは各コンテナにランダムな SELinux コンテキストを割り当てます。

  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
clusterAgent.securityContext.seccompProfile

コンテナで使用される seccomp オプションを指定します。ポッドレベルとコンテナレベルの両方で seccomp オプションが指定されている場合、コンテナオプションはポッドオプションをオーバーライドします。 

  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
clusterAgent.securityContext.windowsOptions

すべてのコンテナに Windows 固有のオプションを指定します。  

  • このパラメータは、spec.os.name が Windows の場合は使用できません。
  • このパラメータは、現在、Deployment および DeploymentConfig モードで使用できます。
オプション
agentPod.labels必要なポッドラベルをクラスタエージェントポッドに追加します。オプション
オペレータのポッド設定
operatorPod.nodeSelector

Splunk AppDynamics オペレータのポッド仕様の Kubernetes ノードセレクタフィールド

オプション
operatorPod.tolerations

Splunk AppDynamics オペレータのポッド仕様の Kubernetes 許容フィールド

オプション
operatorPod.resources

Splunk AppDynamics オペレータポッド仕様の Kubernetes CPU およびメモリのリソース

オプション
スイッチのインストール
install.metrics-serverメトリックがインストールされる予定の場合は true。エージェントと同じ名前空間に metrics-server がインストールされます。オプション

クラスタへの複数のクラスタエージェントのインストール

クラスタエージェントの Helm チャートでは、クラスタ内の複数のクラスタエージェントのインストールをサポートしています。これは、単一のクラスタエージェントのポッドモニタリング制限を超える大規模なクラスタで必要になることがあります。「クラスタエージェントの要件およびサポート対象環境」を参照してください。

展開される各クラスタエージェントは、異なる設定にする必要があります。これは、nsToMonitornsToMonitorRegex, nsToMonitorExcludeRegex、および podFilter プロパティを使用して、モニタリングを名前空間とポッドの異なるセットに制限することで実現されます。「クラスタエージェントの設定」を参照してください。

クラスタエージェントをインストールするには、次の手順を実行します。

  1. 最初のクラスタエージェントと同じ controllerInfo プロパティを使用する、values-ca2.yaml と呼ばれる新しい値ファイルを例として作成します。
    このクラスタエージェントのモニタリング範囲を設定するには、nsToMonitorRegexpodFilter などのプロパティを追加します。

    values-ca2.yaml

    # To install Cluster Agent installClusterAgent: true # Controller info controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> # Cluster agent config clusterAgent: nsToMonitorRegex: stage.* podFilter: allowlistedLabels: - label1: value1 - label2: value2 blocklistedLabels: [] allowlistedNames: [] blocklistedNames: []
    YML
  2. 最初のインストールで使用した以前の名前空間とは異なる名前空間を作成します。

    kubectl create ns appdynamics-ca2
    BASH
  3. 追加のクラスタエージェントをインストールします。

    helm install -f ./values-ca2.yaml "<my-2nd-cluster-agent-helm-release>" appdynamics-charts/cluster-agent --namespace=appdynamics-ca2
    BASH

クラスタエージェントの Helm チャートの設定例

次の例は、クラスタエージェントの Helm チャートのさまざまな設定を示しています。

クラスタエージェントの Helm チャートを使用したカスタム SSL の有効化

user-values.yaml

controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> #===== customSSLCert: "<base64 of PEM formatted cert>" #===== agentServiceAccount: appdynamics-cluster-agent-ssl # Can be any valid name operatorServiceAccount: appdynamics-operator-ssl # Can be any valid name 
YML

クラスタエージェントの Helm チャートを使用したプロキシコントローラの有効化

認証なしの場合:

user-values.yaml

# To install Cluster Agent installClusterAgent: true controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> #===== proxyUrl: http://proxy-url.appd-controller.com #===== agentServiceAccount: appdynamics-cluster-agent-ssl # Can be any valid name operatorServiceAccount: appdynamics-operator-ssl # Can be any valid name 
YML


認証ありの場合:

user-values.yaml

# To install Cluster Agent installClusterAgent: true controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> #===== authenticateProxy: true proxyUrl: http://proxy-url.appd-controller.com proxyUser: hello proxyPassword: world #===== agentServiceAccount: appdynamics-cluster-agent-ssl # Can be any valid name operatorServiceAccount: appdynamics-operator-ssl # Can be any valid name 
YML

クラスタエージェントの Helm チャートを使用した nodeSelectortolerations の追加

user-values.yaml

agentPod: nodeSelector: nodeLabelKey: nodeLabelValue tolerations: - effect: NoExecute operator: Equal key: key1 value: val1 tolerationSeconds: 11 operatorPod: nodeSelector: nodeLabelKey: nodeLabelValue anotherNodeLabel: anotherNodeLabel tolerations: - operator: Exists key: key1 
YML

機密データのベストプラクティス

複数の values.yaml ファイルを使用して、機密データを個別の values.yaml ファイルに分けることを推奨します。これらの値の例を次に示します。

  • controllerInfo.password
  • controllerInfo.accessKey
  • controllerInfo.customSSLCert
  • controllerInfo.proxyPassword

values のファイルはデフォルトの構造(values.yaml)に従い、機密性の低い設定プロパティのファイルを簡単に共有し、機密性の高い値を安全に保ちます。

デフォルトの user-values.yaml ファイルの例

user-values.yaml

# To install Cluster Agent installClusterAgent: true imageInfo: agentImage: dtr.corp.appdynamics.com/sim/cluster-agent agentTag: latest operatorImage: docker.io/appdynamics/cluster-agent-operator operatorTag: latest imagePullPolicy: Always controllerInfo: url: https://<controller-url>:443 account: <appdynamics-controller-account> username: <appdynamics-controller-username> password: <appdynamics-controller-password> accessKey: <appdynamics-controller-access-key> agentServiceAccount: appdynamics-cluster-agent-ssl # Can be any valid name operatorServiceAccount: appdynamics-operator-ssl # Can be any valid name
YML

user-values-sensitive.yaml

controllerInfo: password: welcome accessKey: abc-def-ghi-1516
YML

Helm チャートをインストールする場合は、複数の -f パラメータを使用してファイルを参照します。

helm install -f ./user-values.yaml -f ./user-values-sensitive.yaml "<my-cluster-agent-helm-release>" appdynamics-charts/cluster-agent --namespace ca-appdynamics
BASH