Download PDF
Download page Red Hat OpenShift での Docker の可視性の使用.
Red Hat OpenShift での Docker の可視性の使用
このページでは、Docker の可視性を有効にしてマシンエージェントを設定し、OpenShift クラスタで DaemonSet
として実行する方法について説明します。
Docker の可視性は OpenShift バージョン 3 をサポートしています。マシンエージェントにより、OpenShift クラスタからパフォーマンスデータを収集できます。OpenShift クラスタ内の各ホストに DaemonSet
としてエージェントをインストールすることで、DaemonSet
は、OpenShift クラスタ上の各ホストと、Splunk AppDynamics アプリケーション エージェントが実行されている対応コンテナをモニターします。このプロセスは、Kubernetes クラスタのモニタリングに似ています。
OpenShift コンテナをモニターするための Docker の可視性の使用は、推奨オプションではなくなり、廃止されます。「クラスタエージェントを使用した Kubernetes のモニタリング」の説明に従って、代わりにクラスタエージェントを使用します。クラスタエージェントは、クラスタの正常性とキャパシティに対する可視性だけでなく、OpenShift コンテナの可視性もサポートします。
はじめる前に

system
:admin
などのcluster-admin
ロールを持つ OpenShift ユーザーアカウントが必要です。- OpenShift コマンドラインツール(
oc
)をインストールします。 Docker CE/EE v17.03 または Docker Engine v1.13 以降はこの製品とともに使用することをお勧めします。以前のバージョンの Docker を使用している場合は、一部のデータが使用できない可能性があります。
Java オプションの設定
デフォルトでは、MaxMetaspaceSize
が OpenShift で 100 MB に設定されています。ご使用のアプリケーションが既存のメモリリソース割り当てのわずかなマージン内で稼働している場合、アプリケーションの割り当てを増やします。マシンエージェントに対応するために追加のメタスペースサイズの空間を割り当てることをお勧めします。環境変数 GC_MAX_METASPACE_SIZE
を直接構成し、構成マップを使用して展開の MaxMetaspaceSize
パラメータを設定します。
ホスト ID としてコンテナ ID を登録する
アプリケーションメトリックを収集するには、Kubernetes ポッド内の各コンテナにアプリケーション サーバ エージェントをインストールします。たとえば、RedHat OpenShift プラットフォームで複数のアプリケーション サーバ エージェントが同じポッドで実行されている場合、ポッドからコンテナ固有のメトリックを収集するために、アプリケーション サーバ エージェントとマシンエージェントの両方で、コンテナ ID を一意のホスト ID として登録する必要があります。Kubernetes ポッドには複数のコンテナを含めることができ、同じホスト ID を共有することができます。マシンエージェントは、各コンテナ ID がホスト ID として登録されていない限り、ポッドで実行されているさまざまなコンテナを識別できません。
コンテナ ID をホスト ID として登録するには、次のようにします。
cgroup
からコンテナ ID を取得します。cat /proc/self/cgroup | awk -F '/' '{print $NF}' | head -n 1
CODEアプリケーション サーバ エージェントを登録します。
-Dappdynamics.agent.uniqueHostId=$(sed -rn '1s#.*/##; 1s/docker-(.{12}).*/\1/p' /proc/self/cgroup)
CODEマシンエージェントを登録します。
-Dappdynamics.docker.container.containerIdAsHostId.enabled=true
CODE
プロジェクトおよびサービスアカウントの作成
OpenShift の用語では、プロジェクトはユーザとそのリソースのグループを分離するメカニズムです。管理者は、プロジェクトの作成や特定のプロジェクトの管理に関する権限を持つ個々のユーザまたはグループを指定できます。
マシンエージェントを他のプロジェクトから分離するために、マシン エージェント プロジェクトを作成します。
oc new-project machine-agent
マシンエージェントがメトリックを取得するために必要な権限を持つサービスアカウント ma
を作成するには、次の手順を実行します。
現在のプロジェクトが
machine-agent
であることを確認します。oc status
CODEサービス アカウントを作成します。
oc create serviceaccount ma
CODEサービスアカウントは、通常のユーザのクレデンシャルを共有することなく、OpenShift API アクセスを制御する安全な方法を提供します。
サービスアカウントに特権セキュリティコンテキスト制約(SCC)を割り当てます。SCC は、ポッドの権限と能力を決定します。
oc adm policy add-scc-to-user privileged -z ma
CODEサービスアカウントの権限の詳細なリストについては、「サービスアカウントのセキュリティ権限」を参照してください。
cluster-reader
ロールをサービスアカウントに追加します。oc adm policy add-cluster-role-to-user cluster-reader -z ma
CODE
マシンエージェントの保護
セキュリティを強化してマシンエージェントを展開できます。プロジェクトのセキュリティレベルを決定し、セキュリティ権限を活用してマシンエージェントを保護します。
cluster-reader ロールを持たないマシンエージェントの実行
cluster-reader
ロールを持たない場合、マシンエージェントは OpenShift クラスタからポッドや ReplicaSet などの情報を読み取ることができません。ただし、エージェントはアプリケーション サーバ エージェント コンテナのタグを除き、他のメトリックを収集することもできます。
特権コンテナモードを使用しないマシンエージェントの実行
この権限を無効にするには、次のセクションを DaemonSet
YAML ファイルから削除します。
securityContext:
privileged: true
特権コンテナモードでないと、マシンエージェントは /hostroot/etc/passwd
や /hostroot/proc/<pid>/etc
などのファイルを読み取ることができません。そのため、プロセスやネットワークなどのメトリックを収集できません。
この権限を無効にしても、アプリケーション サーバ エージェントのコンテナメトリックの収集には影響しません。
サービスアカウントのセキュリティ権限
サービスアカウントには、マシンエージェントが実行されているプロジェクトで最大の分離を提供するために、次のセキュリティ権限が必要です。
権限 | 説明 |
---|---|
cluster-reader ロール | この cluster-reader ロールを使用すると、マシンエージェントは OpenShift クラスタからタグを読み取ることができます。 次に例を示します。
CODE
|
特権 SCC | 特権 SCC を使用すると、マシンエージェントをルートユーザとして実行できます。 例:
CODE
|
特権コンテナとして実行 | 特権コンテナとして実行すると、マシンエージェントは この権限は、次のように DaemonSet YAML ファイルで設定されます。
CODE
|
マシンエージェントの Docker イメージの作成
Docker イメージを作成できるマシン上のディレクトリに次のファイルをコピーします。
マシンエージェントバンドル - 64 ビット Linux(zip)
このバンドルをダウンロードして、machine-agent.zip
に名前を変更します。Dockerfile
次のサンプル Docker ファイルを参照してください。start-appdynamics
スクリプト
次のサンプルスクリプトを参照してください。
目的の方法を使用してイメージを作成し、イメージレジストリで使用できるようにします。
DaemonSet
としてのマシンエージェントの展開
- コントローラを指すようにサンプル
DaemonSet
を変更します。ワーカーノードを選択します。
nodeSelector: node-role.kubernetes.io/compute: "true"
CODEサンプル
DaemonSet
で次のコントローラ情報を変更します。containers: - env: - name: APPDYNAMICS_CONTROLLER_HOST_NAME value: "<controller-host-name>" - name: APPDYNAMICS_CONTROLLER_PORT value: "<controller-port>" - name: APPDYNAMICS_CONTROLLER_SSL_ENABLED value: "true" - name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY value: "<account-access-key>" - name: APPDYNAMICS_AGENT_ACCOUNT_NAME value: "<your-account>" - name: APPDYNAMICS_SIM_ENABLED value: "true" - name: APPDYNAMICS_DOCKER_ENABLED value: "true"
CODEDocker イメージを指定します。
image: "<your image>"
CODEマシンエージェントを特権ユーザとして実行できるようにします。
securityContext: privileged: true
CODE別のサービスアカウント名がある場合は、それを既存のものに置き換えます。
serviceAccount: ma serviceAccountName: ma
CODE
- 次のように
DaemonSet
を作成します。現在のプロジェクトがマシンエージェントであることを確認します。
oc status
CODEmachine-agent
DaemonSet
を作成します。oc create -f machine-agent-daemonset.yaml
CODEマシンエージェントが UI に表示されます。
マシンエージェントのステータスの確認
マシンエージェントが UI に表示されない場合は、次のようにステータスを確認します。
マシンエージェント
DaemonSet
を確認します。oc get ds
CODEマシンエージェントポッドを確認します。
oc get pod
CODEポッド名は
machine-agent-daemonset-<XXXX>
です。最後の行に
Started AppDynamics Machine Agent Successfully
と表示されているかどうかログを確認します。oc get logs -f <machine-agent-daemonset-<XXXX>>
CODE
サンプルマシンエージェント展開ファイル
マシンエージェントを展開するためのリファレンスとして使用できる、DaemonSet
、Dockerfile、および起動スクリプトのサンプルを以下に示します。
サンプルDaemonSet
展開シナリオに合わせてサンプル DaemonSet
を変更します。
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: machine-agent-daemonset
namespace: machine-agent
spec:
selector:
matchLabels:
name: appdynamics-machine-agent
template:
metadata:
labels:
name: appdynamics-machine-agent
spec:
nodeSelector:
node-role.kubernetes.io/compute: "true"
containers:
- env:
- name: APPDYNAMICS_CONTROLLER_HOST_NAME
value: "<your-hostname>"
- name: APPDYNAMICS_CONTROLLER_PORT
value: "<your-port>"
- name: APPDYNAMICS_CONTROLLER_SSL_ENABLED
value: "true"
- name: APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
value: "<your-access-key>"
- name: APPDYNAMICS_AGENT_ACCOUNT_NAME
value: "<your-account>"
- name: APPDYNAMICS_SIM_ENABLED
value: "true"
- name: APPDYNAMICS_DOCKER_ENABLED
value: "true"
image: <your-image>
name: machine-agent
securityContext:
privileged: true
volumeMounts:
- mountPath: /hostroot
name: hostroot
readOnly: true
- mountPath: /var/run/docker.sock
name: docker-sock
restartPolicy: Always
imagePullPolicy: Always
serviceAccount: ma
serviceAccountName: ma
volumes:
- name: hostroot
hostPath:
path: /
- name: docker-sock
hostPath:
path: /var/run/docker.sock
Dockerfile の例
この Dockerfile のサンプルを使用するか、OpenShift の可視性マニフェストの Dockerfile を使用することができます。
# Sample Dockerfile for the Machine Agent
# This is provided for illustration purposes only
FROM ubuntu:16.04
# Install required packages
RUN apt-get update && \
apt-get install -y unzip && \
apt-get clean
# Install Machine Agent
ENV MACHINE_AGENT_HOME /opt/appdynamics/machine-agent/
ADD machine-agent.zip /tmp/machine-agent.zip
RUN mkdir -p ${MACHINE_AGENT_HOME}
# Include start script to configure and start MA at runtime
ADD start-appdynamics ${MACHINE_AGENT_HOME}
RUN chmod 774 ${MACHINE_AGENT_HOME}/start-appdynamics
# change files and directories to be owned by root so MA container user in root
group can access
RUN chgrp -R 0 /opt && \
chmod -R g=u /opt
RUN chgrp -R 0 /tmp/machine-agent.zip && \
chmod g=u /tmp/machine-agent.zip
# Changing directory to MACHINE AGENT HOME
WORKDIR ${MACHINE_AGENT_HOME}
# Configure and Run Machine Agent
CMD "./start-appdynamics"
サンプル開始スクリプト
#!/bin/bash
unzip -oq /tmp/machine-agent.zip -d ${MACHINE_AGENT_HOME} && \
rm /tmp/machine-agent.zip
# Start Machine Agent
./bin/machine-agent -j jre/