skywalking接入容器及k8s

AI 摘要 / TL;DR

skywalking接入容器及k8s 来源: https://www.ucloud.cn/yun/129611.html 作者: IT那活儿 发布日期: 发布于2023 01 11 13:20 skywalking接入容器及k8s 点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!! https

来源: https://www.ucloud.cn/yun/129611.html 作者: IT那活儿 发布日期: 发布于2023-01-11 13:20

skywalking接入容器及k8s

点击上方“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那活儿(上海新炬王翦团队)