暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

skywalking接入容器及k8s

IT那活儿 2022-03-23
2420

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

随着容器化和k8s的日益增多,skywalking监控容器化应用也成为趋势,skywalking也支持三种方式对容器化应用进行监控,如下详细描述三种方式:
  • 使用官方提供的基础镜像;

  • 将 agent 包构建到已经存在的基础镜像中;

  • sidecar模式挂在agent。

skywalking原生镜像

1

使用官方原生镜像:
FROM apache/skywalking-java-agent:8.5.0-jdk8

直接使用CMD或启动 Java 应用程序ENTRYPOINT,不需要关心启用 SkyWalking 代理的 Java 选项,它会被自动采用。

agent 包构建到基础镜像中

2

将 agent 包构建到已经存在的基础镜像中,提供这种方式的原因是:官方的镜像属于精简镜像,并且是 openjdk ,可能很多命令没有,需要自己二次安装。
  • 下载 skywalking 官方发行包,并解压:
wget https://dlcdn.apache.org/skywalking/java-agent/8.8.0/apache-skywalking-java-agent-8.8.0.tgz && tar -zxvf apache-skywalking-java-agent-8.8.0.tgz
  • 通过以下 dockerfile 构建基础镜像:
FROM alpine:3.8ENV LANG=C.UTF-8RUN set -eux && \apk update && apk upgrade && \wget -q -O etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&\wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk &&\apk --no-cache add unzip vim curl git bash ca-certificates glibc-2.30-r0.apk file && \rm -rf var/lib/apk/* &&\mkdir -p /usr/skywalking/agent/# A streamlined jreADD jdk1.8.0_221/ usr/java/jdk1.8.0_221/ADD apache-skywalking-apm-bin/agent/ usr/skywalking/agent/# set envENV JAVA_HOME usr/java/jdk1.8.0_221ENV PATH ${PATH}:${JAVA_HOME}/bin# run container with base path:/WORKDIR CMD bash




sidecar模式挂载agent

3


如果微服务是直接部署在Kubernetes集群,那么采用sidecar模式来使用SkyWalking Agent会更加方便。
因为这种方式不需要修改原来的基础镜像,也不需要重新构建新的服务镜像,而是会以sidecar模式,通过共享的volume将agent所需的相关文件直接挂载到已经存在的服务镜像中。
  • 下载 skywalking 官方发行包,并解压:
wget https://dlcdn.apache.org/skywalking/java-agent/8.8.0/apache-skywalking-java-agent-8.8.0.tgz && tar -zxvf apache-skywalking-java-agent-8.8.0.tgz
  • 通过以下 dockerfile 构建镜像:
FROM busybox:latestENV LANG=C.UTF-8RUN set -eux && mkdir -p /usr/skywalking/agent/ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/WORKDIR /
注意:这里没有在dockerfile中下载skywalking 发行包是因为保证构建出的 sidecar 镜像保持最小,bosybox 只有700 k左右,加上 agent 最后大小小于20M。
  • 使用 sidecar:

apiVersion: apps/v1kind: Deploymentmetadata:labels:name: demo-swname: demo-swspec:replicas: 1selector:matchLabels:name: demo-swtemplate:metadata:labels:name: demo-swspec:initContainers:- image: innerpeacez/sw-agent-sidecar:latestname: sw-agent-sidecarimagePullPolicy: IfNotPresentcommand: ['sh']args: ['-c','mkdir -p /skywalking/agent && cp -r /usr/skywalking/agent/* /skywalking/agent']volumeMounts:- mountPath: /skywalking/agentname: sw-agentcontainers:- image: nginx:1.7.9name: nginxvolumeMounts:- mountPath: /usr/skywalking/agentname: sw-agentports:- containerPort: 80volumes:- name: sw-agentemptyDir: {}
以上是挂载 sidecar 的 deployment.yaml 文件,以nginx 作为服务为例,主要是通过共享 volume 的方式挂载 agent。
首先 initContainers 通过 sw-agent 卷挂载了 sw-agent-sidecar 中的 /skywalking/agent ,并且将上面构建好的镜像中的 agent 目录 cp 到了 /skywalking/agent 目录,完成之后 nginx 启动时也挂载了 sw-agent 卷,并将其挂载到了容器的 /usr/skywalking/agent 目录,这样就完成了共享过程。


本文作者:邸仁杰

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论