# skywalking接入容器及k8s

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 其他
> 标签: AI, Kubernetes, CDN
> 原文链接: http://117.50.162.249:3000/yun/articles/1315

---

# skywalking接入容器及k8s

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

skywalking接入容器及k8s

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129611/images/129611_000.png)

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129611/images/129611_001.png)

随着容器化和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 目录，这样就完成了共享过程。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129611/images/129611_002.png)

## 本文作者：邸仁杰

## 本文来源：IT那活儿（上海新炬王翦团队）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129611/images/129611_003.png)