Init コンテナを使用する

注: Init コンテナのインストールには、Kubernetes 環境が必要です。

Kubernetes の init コンテナを使用して、.NET エージェントをインストゥルメントできます。この方法では、実行時に init コンテナがエージェントバイナリをアプリケーションコンテナにコピーします。アプリケーションで使用される導入仕様では、次の 2 つのコンテナを参照します。

  • .NET エージェントバイナリを含まないイメージに基づくアプリケーションコンテナ
  • .NET エージェントバイナリのみを含むイメージに基づく 2 番目の init コンテナ

導入仕様は、これらの 2 つのコンテナを参照し、展開時に init コンテナからアプリケーションコンテナにエージェントバイナリをコピーするように更新されます。コピーが実行されると、init コンテナは終了します。

init コンテナを使用して .NET Agent for Linux バイナリをコピーするには、次の手順を実行します。

  1. .NET Core アプリケーションイメージの構築
  2. .NET Agent for Linux の Init コンテナイメージの構築
  3. 導入仕様への Init コンテナの追加
  4. .NET Agent for Linux の環境変数の設定
  5. APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数の設定
  6. コンテナへの AppDynamicsConfig.json ファイルのコピー
  7. (オンプレミスコントローラのみ)コンテナへのコントローラ証明書のコピー
  8. Init コンテナを使用するための設定例

.NET Core アプリケーションイメージの構築

.NET Core アプリケーションイメージを構築します。.NET Agent for Linux のバイナリは含めないでください。

.NET Agent for Linux の Init コンテナイメージの構築

.NET Agent for Linux イメージをアプリケーションイメージとは別に構築します。このイメージは、複数の .NET Core アプリケーション展開環境で再利用できます。

または、init コンテナで Docker HubSplunk AppDynamics から事前に作成されたイメージを参照できます。

導入仕様への Init コンテナの追加

導入仕様を編集して必要なセクションを追加すると、エージェントバイナリを init コンテナからアプリケーションイメージにコピーできます。

導入仕様の次のスニペットは、必須の volumesvolumeMounts、および initContainer の定義を示しています。このコード例では、.NET Core アプリケーションイメージが dotnet-samples:aspnetapp に公開され、init コンテナイメージが事前に作成された docker.io/appdynamics/dotnet-core-agent:<version> のイメージを使用することを前提としています。ここで、<version> は .NET エージェントのバージョンです(例:21.5.0)。

JSON
kind: Deployment
spec:
containers:
- name: dotnet-app
image: microsoft/dotnet-samples:aspnetapp
volumeMounts:
- mountPath: /opt/appdynamics
name: appd-agent-repo
initContainers:
- name: appd-agent
image: docker.io/appdynamics/dotnet-core-agent:<version>
volumeMounts:
- mountPath: /appdynamics
name: appd-agent-repo
volumes:
- name: appd-agent-repo
emptyDir: {}

ConfigMap を使用したアプリケーション サーバ エージェントの設定

  1. ConfigMap を使用して、名前空間内のアプリケーション間で共有する .NET Agent for Linux 環境変数を設定します。
    JSON
    apiVersion: v1
    data:
    CORECLR_PROFILER: "{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
    CORECLR_ENABLE_PROFILING: "1"
    CORECLR_PROFILER_PATH: "/opt/appdynamics/libappdprofiler.so"
    APPDYNAMICS_AGENT_APPLICATION_NAME: "<value>"
    APPDYNAMICS_AGENT_ACCOUNT_NAME: "<value>"
    APPDYNAMICS_CONTROLLER_HOST_NAME: "<value>"
    APPDYNAMICS_CONTROLLER_PORT: "<value>"
    APPDYNAMICS_CONTROLLER_SSL_ENABLED: "<value>"
    APPDYNAMICS_AGENT_REUSE_NODE_NAME: "true"
    APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX: "<value>"
    # variables required to send transaction analytics data
    APPDYNAMICS_ANALYTICS_HOST_NAME: "<value>"
    APPDYNAMICS_ANALYTICS_PORT: "<value>"
    APPDYNAMICS_ANALYTICS_SSL_ENABLED: "<value>"
    kind: ConfigMap
    metadata:
    name: appd-dotnet-config
    分析ホスト、ポート、および ssl の設定は、分析エージェントの展開方法によって異なることに注意してください。オプションについては、「Kubernetes での分析の展開」を参照してください。
  2. (オプション)Alpine Linux コンテナで .NET Core アプリケーションを実行している場合は、ConfigMap で LD_LIBRARY_PATH を設定します。
    JSON
    apiVersion: v1
    data:
    CORECLR_PROFILER: "{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
    CORECLR_ENABLE_PROFILING: "1"
    CORECLR_PROFILER_PATH: "/opt/appdynamics/libappdprofiler.so"
    LD_LIBRARY_PATH: "/opt/appdynamics"
    ...
    kind: ConfigMap
    metadata:
    name: appd-dotnet-config
  3. 名前空間に ConfigMap を適用します。
    CODE
    kubectl -n dotnetapp apply -f appd-dotnet-config.yaml
  4. 導入仕様を更新して ConfigMap を参照します。
    CODE
    spec:
    containers:
    - name: dotnet-app
    envFrom:
    - configMapRef:
    name: appd-dotnet-config
    ...

コントローラのアクセスキーへの秘密の使用

  1. kubectl を使用して秘密を作成します。
    CODE
    kubectl -n dotnetapp create secret generic appd-agent-secret --from-literal=access-key=<access-key>
  2. 導入仕様を更新して、秘密を参照します。
    CODE
    spec:
    containers:
    - name: dotnet-app
    env:
    - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
    valueFrom:
    secretKeyRef:
    name: appd-agent-secret
    key: access-key
    ...

導入仕様でのアプリケーション固有の設定

導入仕様にアプリケーション固有の階層名環境変数 APPDYNAMICS_AGENT_TIER_NAME を設定します。
CODE
spec:
containers:
- name: dotnet-app
env:
- name: APPDYNAMICS_AGENT_TIER_NAME
value: dotnet-service

APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数の設定

注: APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数は、Linux 用 .NET Agent のバージョン 20.7.0 以降でサポートされています。以前のバージョンでは、ランタイム値に基づいて AppDynamicsConfig.json でプロパティを設定する必要があります。この導入仕様の例を参照してください。

APPDYNAMICS_AGENT_UNIQUE_HOST_ID 環境変数を設定して、クラスタエージェントとの APM 相関を有効にします。この値はランタイム値に依存するため、「クラスタエージェントと関連付けるアプリケーション エージェントの設定」に記載されている値を使用して、コンテナの起動コマンドでこの環境変数を設定します。たとえば、Docker ランタイムを使用する Kubernetes 環境では、次のように環境変数を設定します(export は必須です)。

JSON
kind: Deployment
spec:
containers:
image: microsoft/dotnet-samples:aspnetapp
command: ["/bin/sh"]
args: ["-c", "export APPDYNAMICS_AGENT_UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\\1/p' /proc/self/cgroup) && dotnet aspnetapp.dll"]
...

コンテナへの AppDynamicsConfig.json ファイルのコピー

一部の .NET Agent for Linux オプションは、AppDynamicsConfig.json ファイルで設定する必要があります。これには、outputtypeconsole に設定することが含まれます。これにより、エージェントログをログ集計ツールに送信しやすくなり、kubectl logs を使用してログを表示しやすくなります。

  1. AppDynamicsConfig.json の内容に基づいて ConfigMap を作成します。
    CODE
    $ kubectl -n dotnetapp create configmap appd-config --from-file=AppDynamicsConfig.json
  2. 導入仕様を更新して、コンテナファイルシステムに AppDynamicsConfig.json ファイルを追加します。ConfigMap の内容を参照する volumesvolumeMounts を使用します。
    JSON
    kind: Deployment
    spec:
    containers:
    image: microsoft/dotnet-samples:aspnetapp
    command: ["/bin/sh"]
    args: ["-c", "export APPDYNAMICS_AGENT_UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\\1/p' /proc/self/cgroup) && dotnet aspnetapp.dll"]
    volumeMounts:
    - name: appd-config
    subPath: AppDynamicsConfig.json
    mountPath: /opt/appdynamics/AppDynamicsConfig.json
    volumes:
    - name: appd-config
    configMap:
    name: appd-config

(オンプレミスコントローラのみ)コンテナへのコントローラ証明書のコピー

.NET Agent for Linux がオンプレミスコントローラと通信する場合は、コントローラ証明書をコンテナにコピーする必要があります。.NETエージェント用SSLの有効化 .NETエージェント用SSLの有効化

  1. 証明書ファイルを参照する ConfigMap を定義します。導入仕様でボリュームマウントを使用して、ConfigMap の内容をコンテナにマウントします。
    CODE
    $ kubectl create configmap appd-cert --from-file=cacerts
  2. 導入仕様のスニペットに示すように、volumesvolumeMounts を使用して、コンテナファイルシステムに証明書ファイルを追加します。
    CODE
    kind: Deployment
    spec:
    containers:
    image: microsoft/dotnet-samples:aspnetapp
    volumeMounts:
    - name: appd-cert
    subPath: cacerts
    mountPath: /opt/appdynamics/cacerts
    volumes:
    - name: appd-cert
    configMap:
    name: appd-cert
  3. ConfigMap で APPDYNAMICS_CONTROLLER_SSL_ENABLED および APPDYNAMICS_CONTROLLER_SSL_CERTFILE 環境変数を設定します。「.NET Agent for Linux の環境変数」を参照してください。
    JSON
    apiVersion: v1
    data:
    CORECLR_PROFILER: "{57e1aa68-2229-41aa-9931-a6e93bbc64d8}"
    CORECLR_ENABLE_PROFILING: "1"
    CORECLR_PROFILER_PATH: "/opt/appdynamics/libappdprofiler.so"
    APPDYNAMICS_CONTROLLER_SSL_ENABLED: true
    APPDYNAMICS_CONTROLLER_SSL_CERTFILE: /opt/appdynamics/cacerts
    ...
    kind: ConfigMap
    metadata:
    name: appd-dotnet-config

Init コンテナを使用するための設定例

この Dockerfile は、マルチステージビルドを使用して .NET Agent for Linux の init コンテナイメージを作成している例です。init コンテナを使用してエージェントバイナリをコピーする導入仕様の完全な例は、Github(dotnet-app.yaml)にあります。