Init コンテナを使用する
このオプションでは、アプリケーションの起動時に、Kubernetes init コンテナを使用して Node.js エージェントバイナリをアプリケーションコンテナにコピーします。これは、Node.js エージェントバイナリのないアプリケーションイメージが構築され、Node.js エージェントバイナリを含む 2 番目の init コンテナイメージが構築されることを前提としています。アプリケーションの導入仕様が構成され、実行中のアプリケーションコンテナにエージェントバイナリをコピーして送信します。
init コンテナを使用してエージェントバイナリをコピーするには、次の手順を実行します。
- Node.js アプリケーションイメージの構築
- Node.js エージェント Init コンテナイメージの構築
- 導入仕様への Init コンテナの追加
- Node.js エージェント環境変数の設定
-
UNIQUE_HOST_ID環境変数の設定 - (オンプレミスコントローラのみ)コンテナへのコントローラ証明書のコピー
NODE_OPTIONS 環境変数をサポートする Node.js バージョン 8 以降を使用してアプリケーションイメージが構築されることを前提としています。この環境変数は ConfigMap で設定されます。Node.js バージョン 7 以前の場合は、起動スクリプトを使用して appdynamics パッケージを含めるこの例を参照してください。Node.js アプリケーションイメージの構築
アプリケーションのバイナリと依存関係に基づいて、Node.js アプリケーションイメージを構築します。Node.js エージェントのバイナリまたは設定をアプリケーションイメージに含めないでください。
Node.js エージェント Init コンテナイメージの構築
エージェント init コンテナイメージは、アプリケーションイメージとは別に構築され、複数の Node.js アプリケーションの展開時に再利用できます。
init コンテナイメージの Node.js およびオペレーティングシステムのバージョンが、アプリケーションイメージの Node.js およびオペレーティングシステムのバージョンと一致する必要があります。これにより、npm install を実行するときに、互換性のある Node.js エージェントバイナリが選択されます。詳細については、「Java 対応環境」を参照してください。
Node.jsとオペレーティングシステムのバージョンは、Dockerfileのステートメントによって決定されます。FROM node:14.4-alpine
FROM node:14.4-alpine
…
次の手順に従って、init コンテナイメージを構築します。
-
appdynamicsのrequireステートメントを含むshim.jsファイルを作成します。「reuseNode」プロパティを「true」に設定します。reuseNodePrefixを、後の手順で ConfigMap で提供される環境変数の値に設定します。require("appdynamics").profile({ reuseNode: true, reuseNodePrefix: process.env.APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX }); -
Node.js エージェントがトランザクション分析データを報告する必要がある場合は、require ステートメントに分析プロパティを追加し、後の手順で ConfigMap で提供される環境変数に値を設定します。Node.js設定参考資料Node.js設定参考資料
require("appdynamics").profile({ reuseNode: true, reuseNodePrefix: process.env.APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX, analytics: { host: process.env.APPDYNAMICS_ANALYTICS_HOST_NAME, port: process.env.APPDYNAMICS_ANALYTICS_PORT, ssl: process.env.APPDYNAMICS_ANALYTICS_SSL_ENABLED } }); -
Node.js エージェントがオンプレミスコントローラと通信する場合は、
certificateFileプロパティを追加し、後の手順でcertファイルをコピーする場所に設定します。require("appdynamics").profile({ reuseNode: true, reuseNodePrefix: process.env.APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX, certificateFile: /opt/appdynamics/cacerts }); -
Dockerfile で、
shim.jsをイメージにコピーします。COPY ./shim.js /opt/appdynamics/shim.js -
npm installコマンドを実行して、appdynamicsパッケージを解決します。$ cd appdynamics $ npm install appdynamics@next -
Dockerfile で、
appdynamicsパッケージを含むフォルダの格納ファイルをイメージにコピーします。COPY appdynamics/ /opt/appdynamics/
マルチステージビルドを使用して Node.js エージェントの init コンテナイメージを構築する完全な例については、この Dockerfile を参照してください。
導入仕様への Init コンテナの追加
導入仕様を編集して、エージェントバイナリを init コンテナからアプリケーションイメージにコピーするために必要なセクションを追加します。
導入仕様の次のスニペットは、必須の volumes、volumeMounts、および initContainer の定義を示しています。これは、Node.js アプリケーションイメージが myrepo/nodejs-app:v1 にパブリッシュされ、init コンテナイメージが myrepo/appd-nodejs:latest にパブリッシュされることを前提としています。init コンテナイメージの shim.js ファイルがアプリケーションコンテナの /opt/appdynamics/shim.js にコピーされます。
kind: Deployment
spec:
containers:
- name: nodejs-app
image: myrepo/nodejs-app:v1
volumeMounts:
- mountPath: /opt/appdynamics
name: appd-agent-repo
initContainers:
- command:
- cp
- -r
- /opt/appdynamics/.
- /opt/temp
name: appd-agent
image: myrepo/appd-nodejs:latest
volumeMounts:
- mountPath: /opt/temp
name: appd-agent-repo
volumes:
- name: appd-agent-repo
emptyDir: {}
Node.js エージェント環境変数の設定
必要なすべての Node.js エージェント環境変数を設定するには、ユースケースに応じて次のオプションを試してください。
Kubernetes でエージェントを設定するためのベストプラクティスKubernetes でエージェントを設定するためのベストプラクティス
ConfigMap を使用したアプリケーション サーバ エージェントの設定
-
ConfigMap を使用して、名前空間内の Node.js アプリケーション間で共有するエージェント環境変数を設定します。たとえば、次の
appd-nodejs-config.yamlスニペットを参照してください。apiVersion: v1 data: APPDYNAMICS_AGENT_APPLICATION_NAME: eCommerce APPDYNAMICS_AGENT_ACCOUNT_NAME: <value> APPDYNAMICS_CONTROLLER_HOST_NAME: <value> APPDYNAMICS_CONTROLLER_PORT: <value> APPDYNAMICS_CONTROLLER_SSL_ENABLED: <value> APPDYNAMICS_AGENT_REUSE_NODE_NAME_PREFIX: <value> APPDYNAMICS_AGENT_NODE_NAME: <value> # not used in node name but required by Node.js agent APPDYNAMICS_LOGGER_OUTPUT_TYPE: console NODE_OPTIONS: '--require /opt/appdynamics/shim.js' # 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-nodejs-configNode.js 8 以降でサポートされている
NODE_OPTIONS環境変数は、init コンテナイメージからコピーされたshim.jsファイルの場所に--requireオプションを設定します。分析ホスト、ポート、および ssl の設定は、分析エージェントの展開方法によって異なります。オプションについては、「Kubernetes での分析の展開」を参照してください。 -
名前空間に ConfigMap を適用します。
$ kubectl -n ecommerce apply -f appd-nodejs-config.yaml -
導入仕様を更新して ConfigMap を参照します。
spec: containers: - name: nodejs-app envFrom: - configMapRef: name: appd-nodejs-config ...
コントローラのアクセスキーへの秘密の使用
-
kubectlを使用して秘密を作成します。$ kubectl -n ecommerce create secret generic appd-agent-secret --from-literal=access-key=<access-key> -
導入仕様を更新して、秘密を参照します。
spec: containers: - name: nodejs-app env: - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY valueFrom: secretKeyRef: name: appd-agent-secret key: access-key ...
導入仕様でのアプリケーション固有の設定
導入仕様でアプリケーション固有の階層名環境変数 APPDYNAMICS_AGENT_TIER_NAME を設定します。
spec:
containers:
- name: nodejs-app
env:
- name: APPDYNAMICS_AGENT_TIER_NAME
value: nodejs-service
UNIQUE_HOST_ID 環境変数の設定
UNIQUE_HOST_ID 環境変数を設定して、クラスタエージェントとの APM 相関を有効にします。この値はランタイム値に依存するため、「クラスタエージェントと関連付けるアプリケーション エージェントの設定」に記載されている値を使用して、コンテナの起動コマンドでこの環境変数を設定します。
Docker ランタイムを使用する Kubernetes 環境では、次の例のように環境変数を設定します。
spec:
containers:
command: ["/bin/sh"]
args: ["-c", "export UNIQUE_HOST_ID=$(sed -rn '1s#.*/##; 1s/(.{12}).*/\\1/p' /proc/self/cgroup) && node /nodejsapp/myapp.js"]
(オンプレミスコントローラのみ)コンテナへのコントローラ証明書のコピー
オンプレミスのコントローラ証明書が必要な場合は、ConfigMap を定義して cert ファイルを参照し、導入仕様でボリュームマウントを使用して ConfigMap の内容をコンテナにマウントします。
$ kubectl create configmap appd-cert --from-file=cacerts
導入仕様のスニペットに示すように、volumes と volumeMounts を使用して、コンテナファイルシステムに証明書ファイルを追加します。
kind: Deployment
spec:
containers:
image: myrepo/nodejs-app:v1
volumeMounts:
- name: appd-cert
subPath: cacerts
mountPath: /opt/appdynamics/cacerts
volumes:
- name: appd-cert
configMap:
name: appd-cert
mountPath 値は、init コンテナイメージの構築時に使用される shim.js ファイルの certificateFile プロパティと一致する必要があります。
Init コンテナを使用するための設定例
init コンテナを使用してエージェントバイナリをコピーする完全な例については、この導入仕様を参照してください。