このページでは、クラスタエージェントの 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 以前のクラスタエージェントおよびバージョン 0.6.11 以前の Splunk AppDynamics オペレータインストールできます。

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

  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 プロパティを更新して、モニターする名前空間とポッドを設定します。使用可能なプロパティ nsToMonitorRegexnsToExcludeRegex、および 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-cloud-helmcharts/cluster-agent
    BASH
  5. (オプション)コントローラアクセスキーに基づいてシークレットを作成します。
    kubectl -n appdynamics create secret generic cluster-agent-secret --from-literal=controller-key='<access-key>' --from-literal=api-user=‘<username@account:password>’
    CODE

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

    install:
      metrics-server: true
    BASH

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

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

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

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

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

values-ca1.yaml with Auto-Instrumentation Enabled

# To install Cluster Agent 
installClusterAgent: true


# AppDynamics 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
  enableInstallationReport: false
  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-cloud-helmcharts/cluster-agent --namespace appdynamics
BASH


設定オプション

設定オプション 説明必須
installClusterAgentクラスタエージェントのインストールに使用されます。これは true に設定する必要があります。オプション(デフォルトは true)
イメージ設定オプション(values.yamlimageInfo キーの下の設定オプション)
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

必要なポッドラベルをクラスタエージェントポッドに追加します。これらのラベルは、クラスタエージェントの展開にも追加されます。

オプション
agentPod.nodeSelector

クラスタエージェントポッドは、その labels プロパティ内に指定された key-value ペアを含むノードで実行されます。「nodeSelector」を参照してください。

オプション
agentPod.resources

クラスタエージェントに対する CPU リソースとメモリリソースの要求と制限。

オプション
agentPod.tolerations

ポッドに必要な許容値の配列。「Taint and Tolerations」を参照してください。

オプション
ポッドフィルタの設定
podFilter次に基づいたブロックリストまたは許可リストポッド:
  • ポッド名の正規表現
  • ポッドラベル

名前によるブロックリストまたは許可リストの登録は、ラベルによるブロックリストまたは許可リストの登録よりも優先されます。たとえば、次のような podFilter があるとします。

 podFilter:
 blocklistedLabels:
- release: v1
 allowlistedNames:
- ^podname

これにより、名前が 'podname' で始まるものを除いて、ラベル 'release=v1' を持つすべてのポッドがブロックされます。

  • ポッドが名前別に許可リストおよびブロックリストに登録されている場合は、許可リストに登録されます。
  • ポッドがラベル別に許可リストおよびブロックリストに登録されている場合は、許可リストに登録されます。
オプション

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

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

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

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

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

    values-ca2.yaml

    # To install Cluster Agent 
    installClusterAgent: true
    # AppDynamics 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-cloud-helmcharts/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)に従い、機密性の低い設定プロパティのファイルを簡単に共有し、機密性の高い値を安全に保ちます。

Default user-values.yaml File Example

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-cloud-helmcharts/cluster-agent --namespace ca-appdynamics
BASH