加载中......
输入验证码,即可复制
微信扫码下载好向圈APP, 登陆后即可进入消息页面查看验证码
只需要3秒时间
前言


Skywalking Java Agent: https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/README.md
Skywalking Java Agent可以通过在项目代码中引入以及使用Java Agent机制挂载。针对于在Kubernetes中挂载Skywalking Java Agent,所采用的方式为使用Java Agent机制,对原系统侵入性较小,挂载方便。
相关镜像:

InitContainer


在Kubernetes中可用的Skywalking的InitContainer,用于启动应用时从外部挂载Skywalking的Agent。 目前仅支持Java Agent,且默认启用了全部的optional-plugins。

容器启动时会将/usr/local/skywalking目录下的Java Agent文件拷贝至/opt/skywalking目录之中。
DockerHub地址:https://hub.docker.com/r/lipangeng/skywalking-initcontainer
目前可用镜像如下,对应相应的Skywalking版本:
    lipangeng/skywalking-initcontainer:7.0.0lipangeng/skywalking-initcontainer:8.0.1lipangeng/skywalking-initcontainer:8.1.0
挂载方式

Local Storage Mount


本地磁盘挂载方式,每个机器上面都存在该路径。

该路径可以为NFS/SMB等网络映射,亦可以使用Ansible/Kubernetes Job/DeamonSet等方式管理。
基本方式为创建hostPath的Volume,并进行挂载。
示例如下:
apiVersion: apps/v1kind: Deploymentmetadata:  name: consumer-nfs  labels:    app: consumer-nfsspec:  selector:    matchLabels:      app: consumer-nfs  template:    metadata:      name: consumer-nfs      labels:        app: consumer-nfs    spec:      containers:        - name: consumer-nfs          image: dhubr.msorg.cn/temp/consumer          imagePullPolicy: Always          env:            - name: SPRING_APPLICATION_NAME              value: consumer-nfs            - name: JAVA_TOOL_OPTIONS              value: -javaagent:/opt/apm/skywalking-agent.jar            - name: SW_AGENT_NAME              value: consumer-nfs            - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES              value: apm-aop.paas:11800            - name: SW_LOGGING_DIR              value: /tmp          volumeMounts:            - name: apm              mountPath: /opt/apm              readOnly: true      volumes:        - name: apm          hostPath:              path: /data/nfsdata/apmDocker Base Image & Docker Build System


此方式基本核心思想为将Java Agent引入镜像中。即在Java的基础镜像或在应用程序的应用镜像中。
使用Docker Build System,将Java Agent加载至应用镜像中。可以使用多阶段构建显著减少体积。
示例如下:
FROM dockerhub.azk8s.cn/library/busyboxMAINTAINER 李盼庚 <lipg@outlook.com> ENV SKYWALKING_VERSION 7.0.0ENV APM_HOME=/opt/apm \    APM_TARGET_HOME=/apm RUN set -ex; \    \    mkdir -pv ${APM_HOME} ;\    mkdir -pv /tmp/skywalking ;\    \    wget -O skywalking.tar.gz http://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-${SKYWALKING_VERSION}.tar.gz; \    tar -zxvf skywalking.tar.gz -C /tmp/skywalking --strip-components 1;\    rm -rf skywalking.tar.gz ;\    \    cp -rv /tmp/skywalking/agent/* ${APM_HOME} ;\    rm -rf /tmp/skywalking ;\    \    cp -rv /opt/apm/optional-plugins/* /opt/apm/plugins/ # 多阶段构建FROM dhubr.msorg.cn/library/openjdk:11MAINTAINER 李盼庚 <lipg@outlook.com> # 添加APM文件COPY --from=0 /opt/apm /opt/apm # 添加执行文件ADD target/*.jar /app/ # 工作目录WORKDIR /app/ # 执行程序CMD java -jar *.jarKubernetes PV/PVC


Kubernetes 的PV/PVC机制可以支持多种网络存储,乃至于之前所提到的本地存储

如:NFS\CEPH\Local等

https://kubernetes.io/zh/docs/concepts/storage/volumes
通过Kubernetes的PV/PVC机制进行挂载,灵活性更高,但配置相对复杂
示例如下:
apiVersion: v1kind: PersistentVolumemetadata:  name: consumer-pv  labels:    name: consumer-pv    kind: hostspec:  hostPath:    path: /opt/volumes/consumer  capacity:    storage: 100Gi  volumeMode: Filesystem  accessModes:    - ReadWriteOnce    - ReadWriteMany---apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: consumer-pvc  labels:    name: consumer-pvc    kind: hostspec:  selector:    matchLabels:      name: consumer-pv      kind: host  resources:    requests:      storage: 100Gi  accessModes:    - ReadWriteMany---apiVersion: apps/v1kind: Deploymentmetadata:  name: consumer-pvc  labels:    app: consumer-pvcspec:  selector:    matchLabels:      app: consumer-pvc  template:    metadata:      name: consumer-pvc      labels:        app: consumer-pvc    spec:      imagePullSecrets:        - name: ilemon      containers:        - name: consumer-pvc          image: dhubr.msorg.cn/temp/consumer          imagePullPolicy: Always          env:            - name: SPRING_APPLICATION_NAME              value: consumer-pvc            - name: JAVA_TOOL_OPTIONS              value: -javaagent:/opt/apm/skywalking-agent.jar            - name: SW_AGENT_NAME              value: consumer-pvc            - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES              value: apm-aop.paas:11800            - name: SW_LOGGING_DIR              value: /tmp          volumeMounts:            - name: apm              mountPath: /opt/apm              readOnly: true      volumes:        - name: apm          persistentVolumeClaim:              claimName: consumer-pvcKubernetes InitContainer

使用Kubernetes InitContainer功能,在真正的业务容器启动时加载Skywalking Java Agent。通常使用临时目录共享Skywalking Java Agent给应用运行容器。
InitContainer加载Java Agent时,可以使用多种方式,如:从网络下载、从Docker Image中复制、从Git中获取等手段。
示例:
Agent Image:
FROM dhub.msorg.cn/library/busyboxMAINTAINER 李盼庚 <lipg@outlook.com>ENV SKYWALKING_VERSION 7.0.0ENV SKYWALKING_HOME=/usr/local/skywalking \    AGENT_HOME=/opt/skywalkingRUN set -ex; \    \    mkdir -pv ${SKYWALKING_HOME} \    \    ; wget -O skywalking.tar.gz http://mirror.bit.edu.cn/apache/skywalking/${SKYWALKING_VERSION}/apache-skywalking-apm-${SKYWALKING_VERSION}.tar.gz \    ; tar -tf skywalking.tar.gz \    ; tar -zxvf skywalking.tar.gz --strip-components 2 -C ${SKYWALKING_HOME} apache-skywalking-apm-bin/agent/ \    \    ; cp -av ${SKYWALKING_HOME}/optional-plugins/* ${SKYWALKING_HOME}/plugins/ \    \    ; rm -rf skywalking.tar.gz \    \    ; ls -la ${SKYWALKING_HOME} CMD cp -av ${SKYWALKING_HOME}/* ${AGENT_HOME}/Agent Mount:
apiVersion: apps/v1kind: Deploymentmetadata:  name: demospec:  selector:    matchLabels:      name: demo  template:    metadata:      name: demo      labels:        name: demo    spec:      initContainers:        - name: skywalking-init          image: lipangeng/skywalking-initcontainer:7.0.0          imagePullPolicy: Always          volumeMounts:            - mountPath: /opt/skywalking              name: skywalking      containers:        - name: demo          image: tomcat          imagePullPolicy: Always          resources:            limits:              memory: 1Gi          ports:            - containerPort: 8080              name: http              protocol: TCP          env:            - name: TZ              value: Asia/Shanghai            - name: JAVA_TOOL_OPTIONS              value: -javaagent:/opt/skywalking/skywalking-agent.jar            - name: SW_AGENT_NAME              value: demo            - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES              value: skywalking-aop.skywalking:11800          volumeMounts:            - mountPath: /opt/skywalking              name: skywalking      volumes:        - name: skywalking          emptyDir: {}Kubernets Admission Controller

Kubernetes的准入控制器模式,可通过Label、namespace、env等属性启动自动注入,无需显式配置,易于管理。
由于内容较多,且配置多样化,详情参考Skywalking Injection进行了解。
加载方式

Command

通过修改启动命令的方式,显式的增加-javaagent:/opt/skywalking/skywalking-agent.jar参数。
JAVA_TOOL_OPTIONS


JAVA_TOOL_OPTIONS是被被JNI_CreateJavaVM调用的,因此可以通过环境变量注入一些参数,但有些参数是不能被设置的如选择虚拟机运行模式-client或-server
通过增加JAVA_TOOL_OPTIONS环境变量,来启用Skywalking的Java Agent。
例子:JAVA_TOOL_OPTIONS="-javaagent:/opt/skywalking/skywalking-agent.jar"
其它环境变量

除了通用的JAVA_TOOL_OPTIONS环境变量之外,不同的启动脚本,不同的容器镜像可能存在不同的配置参数。如:tomcat的镜像还将支持CATALINA_OPTS、JAVA_OPTS等。
Kubernets Admission Controller

Kubernetes的准入控制器模式,可通过Label、namespace、env等属性启动自动注入,无需显式配置,易于管理。其启动方式也是
由于内容较多,且配置多样化,详情参考Skywalking Injection进行了解。
程序员圈
8711 查看 0 0 反对

说说我的看法高级模式

您需要登录后才可以回帖 登录|立即注册

还没人评论此主题哦

相关阅读