Kubernetes を使用したネットワークの可視性

このページでは、Kubernetes で実行されているアプリケーションをモニタするようにネットワークの可視性を設定する方法について説明します。

ネットワークの可視性では、アプリケーションのネットワーク上でのやり取りを監視し、主要なパフォーマンスメトリックを報告します。これらのメトリックでは、アプリケーションのネットワークの問題がアプリケーションの問題から分離されます。

ネットワークエージェントは、REST API を使用してアプリケーションコンテナの各ノードで TCP ポートを開き、ネットワーク DaemonSet コンテナと通信します。この通信により、ポッドとノード間のモニタリングが可能になります。エージェントを、ホストモードが有効になっている各ノードで DaemonSet として展開できます。

はじめる前に

DaemonSet の Docker イメージを作成し、エージェントを設定する前に、次の要件を確認します。

  • ネットワークエージェントと同じクラスターに展開されている Java エージェント 4.4 以降を使用するポッドが少なくとも 1 つあること。
  • TCP ポート 3892 がノードでまだ使用されていないこと。ポート 3892 は、DaemonSet と通信するためにアプリケーションポッドで使用されます。

ネットワークの可視性の DaemonSet 用 Docker イメージ

Kubernetes を使用してネットワークの可視性を設定するには、最初にネットワークの可視性の DaemonSet 用 Docker イメージを作成し、Docker の信頼できるレジストリにイメージをプッシュする必要があります。

  1. 次のサンプル Dockerfile をテキストファイルに貼り付けて、ファイルを保存します。
    FROM ubuntu:14.04
    ARG NETVIZ_ZIP_PKG
    RUN groupadd -r appd-netviz && useradd -r -g appd-netviz appd-netviz
    RUN apt-get update && apt-get install -y \
    net-tools \
    tcpdump \
    curl  \
    unzip   \
    ssh-client \
    binutils \
    build-essential
    WORKDIR /netviz-agent
    # copy NetViz agent contents
    COPY $NETVIZ_ZIP_PKG .
    # run the agent install script and disable netlib
    RUN unzip $NETVIZ_ZIP_PKG && ./install.sh \
    && sed -i -e "s|enable_netlib = 1|enable_netlib = 0|g" ./conf/agent_config.lua \
    && sed -i -e "s|WEBSERVICE_IP=.*|WEBSERVICE_IP=\"0.0.0.0\"|g" ./conf/agent_config.lua
    RUN chown -R appd-netviz:appd-netviz /netviz-agent
    RUN setcap cap_net_raw=eip /netviz-agent/bin/appd-netagent
    USER appd-netviz
    # default command to run for the agent
    CMD  ./bin/appd-netagent -c ./conf -l ./logs -r ./run
  2. Dockerfile を保存したディレクトリに移動し、次のコマンドを入力して Docker イメージを作成します。
    $ docker build --build-arg NETVIZ_ZIP_PKG=/path/to/netviz-agent-pkg.zip -t appd-netviz .
  3. Docker の信頼できるレジストリに Docker イメージをプッシュします。

Kubernetes を使用したネットワークの可視性の設定

  1. 次の設定で yaml ファイルを作成します。
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: DaemonSet
    metadata:
    name: appd-netviz-agent
    spec:
    selector:
    matchLabels:
    name: appd-netviz-agent
    template:
    metadata:
    name: appd-netviz-agent
    labels:
    name: appd-netviz-agent
    spec:
    hostIPC: true
    hostNetwork: true
    containers:
    - name: appd-netviz-agent
    image: path/to/your/Docker/image # docker registry image
    resources:
    requests:
    memory: "250Mi"
    cpu: "0.5"
    limits:
    memory: "2Gi"
    cpu: "1"
    securityContext:
    capabilities:
    add: ["NET_RAW"]
    ports:
    - containerPort: 3892
    hostPort: 3892
    imagePullSecrets:
    - name: your-registry-key # add the registry key, kubectl create secret ...
  2. 設定ファイルで、次のフィールドを更新します。
    • imagecontainers の下):Docker の信頼できるレジストリ内にある DaemonSet イメージへのファイルパス。
    • nameimagePullSecrets の下):Docker の信頼できるレジストリのキー。
  3. 次のコマンドを入力して、Kubernetes にネットワークエージェントを展開します。
    $ kubectl apply -f MyConfigFile.yaml

アプリケーションポッドをモニタするためのネットワークの可視性の設定

Kubernetes にネットワークの可視性を展開したら、Java エージェントバージョン 4.4 以降を使用するポッドをネットワークエージェントと同じクラスターに 1 つ以上展開する必要があります。これにより、ネットワークメトリックをアプリケーションフローにマッピングできます。

  1. テキストエディタで Kubernetes を使用してアプリケーションの展開設定 yaml ファイルを開き、APPDYNAMICS_NETVIZ_AGENT_HOSTAPPDYNAMICS_NETVIZ_AGENT_PORT の値を次のように設定します。
    - name: APPDYNAMICS_NETVIZ_AGENT_HOST
    valueFrom:
    fieldRef:
    fieldPath: status.hostIP
    - name: APPDYNAMICS_NETVIZ_AGENT_PORT
    value: 3892
    注: 4.5.2 以前の Java エージェントバージョンを使用している場合は、<app-agent-install-dir>/<version-number>/external-services/netviz/netviz-service.properties ファイルを開いてこれらの値を設定する必要があります。
  2. コントローラ UI では、ネットワークメトリックをアプリケーションフローにマッピングするために、ソケット インストゥルメンテーションを有効にします。「ネットワークエージェントとアプリケーション エージェントを設定する」を参照してください。