Kubernetes クラスタ アプリケーションが SkyWalking でリンクトレーシングデータを収集¶
概要¶
Kubernetes クラスタでは、アプリケーションはすべてイメージとしてデプロイされます。SkyWalking でアプリケーションのリンクトレーシングデータを収集する際に、従来の方法で SkyWalking Agent を各アプリケーションイメージに組み込んでデプロイすると、イメージが肥大化し、後の SkyWalking バージョンアップも不便になります。本記事では、公式の SkyWalking イメージを使用し、initContainers 方式でアプリケーションに SkyWalking Agent を提供してリンクトレーシングデータを収集する方法を紹介します。
前提条件¶
DataKit のインストール¶
- DataKit のインストール
- DataKit のバージョンが 1.4.15 以上であること
Input の有効化¶
SkyWalking コレクターを有効にするには、DataKit が動作するサーバーに /usr/local/datakit/conf.d/skywalking/skywalking.conf ファイルを作成します。DaemonSet でデプロイする場合は、ConfigMap を定義してから、ファイルを DataKit コンテナにマウントする必要があります。ここでは、DataKit のデプロイ時に使用した datakit.yaml を使用します。
skywalking.conf の定義¶
datakit.yaml ファイルの ConfigMap リソースに、skywalking.conf の定義を追加します。
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
## 以下は新規追加内容
skywalking.conf: |-
[[inputs.skywalking]]
## skywalking grpc server listening on address
address = "0.0.0.0:11800"
skywalking.conf のマウント¶
datakit.yaml ファイルの volumeMounts に以下の内容を追加します。
- mountPath: /usr/local/datakit/conf.d/skywalking/skywalking.conf
name: datakit-conf
subPath: skywalking.conf
DataKit の再起動¶
Java リンクトレーシングデータの取り込み¶
テストアプリケーションの作成¶
サンプルでは datakit-springboot-demo を使用します。ダウンロード後、jar ファイル(service-demo-1.0-SNAPSHOT.jar)を作成します。
イメージの作成¶
Dockerfile を作成します。
FROM openjdk:8u292
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENV jar service-demo-1.0-SNAPSHOT.jar
ENV workdir /data/app/
RUN mkdir -p ${workdir}
COPY ${jar} ${workdir}
WORKDIR ${workdir}
ENTRYPOINT ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${jar} ${PARAMS} "]
イメージを作成し、イメージレジストリにプッシュします。
docker build -t 172.16.0.246/df-demo/service-demo:v1 .
docker push 172.16.0.246/df-demo/service-demo:v1
アプリケーションのデプロイ¶
アプリケーションのデプロイファイル skywalking-demo.yaml で、initContainers を使用して apache/skywalking-java-agent:8.7.0-alpine イメージを初期化します。これにより、同じ Pod 内のアプリケーションが skywalking-agent.jar にアクセスできるようになります。そして JAVA_OPTS で jar の起動コマンドを定義します。-Dskywalking.agent.service_name=skywalking-demo-master でアプリケーションのエイリアスを skywalking-demo-master と指定しています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: skywalking-demo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: skywalking-demo-pod
template:
metadata:
labels:
app: skywalking-demo-pod
annotations:
spec:
containers:
- name: skywalking-demo-demo-container
image: 172.16.0.246/df-demo/service-demo:v1
env:
- name: HOST_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
- name: HOST_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: JAVA_OPTS
value: |-
-javaagent:/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-demo-master -Dskywalking.collector.backend_service=$(HOST_IP):11800
ports:
- containerPort: 8090
protocol: TCP
volumeMounts:
- mountPath: /skywalking
name: skywalking-agent
initContainers:
- name: agent-container
image: apache/skywalking-java-agent:8.7.0-alpine
volumeMounts:
- name: skywalking-agent
mountPath: /agent
command: [ "/bin/sh" ]
args: [ "-c", "cp -R /skywalking/agent /agent/" ]
restartPolicy: Always
volumes:
- name: skywalking-agent
emptyDir: {}
アプリケーションへのアクセス¶
Pod のポートを確認します。
アプリケーションを呼び出して、リンクトレーシングデータを生成します。
APM¶
『Guance』にログインし、『APM』モジュールに移動して、skywalking-demo-master アプリケーションを確認します。

