部署
官方文档:https://github.com/apache/skywalking-kubernetes
加入仓库
helm repo add skywalking https://apache.jfrog.io/artifactory/skywalking-helm
helm repo update
开始部署
helm install skywalking skywalking/skywalking -n component --set oap.image.tag=8.8.1 --set oap.storageType=elasticsearch --set ui.image.tag=8.8.1 --set elasticsearch.imageTag=7.5.1
也可以执行 values-es7.yaml
helm install skywalking skywalking/skywalking -n component -f values-my-es7.yaml
自定义 values.yaml
oap:
image:
tag: "8.8.1"
storageType: elasticsearch
ui:
image:
tag: "8.8.1"
ingress:
enabled: true
hosts:
- skywalking-ui.prodsaas.api.gd-xxx.com
annotations:
kubernetes.io/ingress.class: nginx
elasticsearch:
imageTag: "7.5.1"
镜像较大,第一次部署可能等到时间较长,不用慌,等待即可
微服务接入
调用 oap
微服务和sky walking不在同一集群内,为了联通,映射 11800 端口到 31800端口
也可配置 ingress 映射 oap 的 11800 端口
制作镜像
下载官方压缩包,官网地址:https://skywalking.apache.org/downloads/
wget https://dlcdn.apache.org/skywalking/java-agent/8.10.0/apache-skywalking-java-agent-8.10.0.tgz --no-check-certificate
解压
tar -zxvf apache-skywalking-java-agent-8.10.0.tgz
制作 Dockerfile
FROM busybox:latest
LABEL maintainer="fat"
COPY / /usr/skywalking/agent/
目录结构如下
打包镜像并上传到 Harbor
docker build -t skywalking-agent:latest .
docker login <harbor-host> -u admin -p Harbor12345
docker tag skywalking-agent:latest <harbor-host>/<project-name>/skywalking-agent:latest
docker images
docker push <harbor-host>/<project-name>/skywalking-agent:latest
制作微服务的 deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
labels:
app: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: demo
spec:
initContainers:
- image: <harbor-host>/<project-name>/skywalking-agent:latest
name: sw-agent-sidecar
imagePullPolicy: IfNotPresent
command: ["sh"]
args:
[
"-c",
"mkdir -p /skywalking/agent && cp -r /usr/skywalking/agent/* /skywalking/agent",
]
volumeMounts:
- mountPath: /skywalking/agent
name: sw-agent
containers:
- name: demo
image: "<harbor-host>/<project-name>/dev-converter:v5"
imagePullPolicy: IfNotPresent
ports:
- name: tcp-8082
containerPort: 8082
protocol: TCP
env:
- name: JAVA_OPTS
value: -Dspring.profiles.active=dev
- name: SW_AGENT_NAME
value: converter-service
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: 192.168.140.xx:31800
volumeMounts:
- mountPath: /usr/skywalking/agent
name: sw-agent
volumes:
- name: sw-agent
emptyDir: {}
initContainers :初始化容器,配置 skywalking agent
initContainers.image:就是上面构建好推送到 harbor 的那一个
args:在制作 Dockerflie 时把文件复制到了 /usr/skywalking/agent 目录下,这段命令的意思是 新建 /skywalking/agent 目录,把 /usr/skywalking/agent 目录下全部复制到 /skywalking/agent ,这样才能让微服务读取 /usr/skywalking/agent/skywalking-agent.jar
containers:微服务的容器配置
SW_AGENT_COLLECTOR_BACKEND_SERVICES:收集的数据传到某服务端
重点配置
制作微服务的 Dockerflie
FROM openjdk:11.0-jre
MAINTAINER fat
COPY target/app.jar app.jar
EXPOSE 8082
ENV TIME_ZONE Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -javaagent:/usr/skywalking/agent/skywalking-agent.jar -jar /app.jar
注意:这里的 ENTRYPOINT 加了一个属性 :-javaagent:/usr/skywalking/agent/skywalking-agent.jar
路径和 containers.volumeMounts.sw-agent 一致