云计算百科
云计算领域专业知识百科平台

【链路追踪】Skywalking安装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

Skywalking安装

文章目录

  • Skywalking安装
    • 资源列表
    • 一、基础架构与以来准备
      • 1.1、BanyanDB数据库部署
      • 1.2、部署cert-manager
      • 1.3、镜像加速预热
    • 二、后端监控基础设施部署
      • 2.1、准备values.yaml
      • 2.2、暴露UI
    • 三、SWCK Operator动态注入引擎部署
      • 3.1、安装Operator
      • 3.2、定义JavaAgent策略(CRD)
    • 四、部署应用
      • 4.1、开启命名空间注入白名单
      • 4.2、在业务 Deployment 中显式指定参数
      • 4.3、制造流量
      • 4.4、查看Web 数据

资源列表

操作系统配置主机名IP
Ubuntu 24.04 2C4G master 192.168.93.101
Ubuntu 24.04 2C4G node1 192.168.93.102
Ubuntu 24.04 2C4G node2 192.168.93.103
Ubuntu 24.04 2C4G banyandb 192.168.93.104

一、基础架构与以来准备

  • SWCK主动注入的核心是Kubernetes Mutating Webhook,而Webhook的API通信要求HTTPS双向认证,因此必须首先部署cert-manager来管理证书。

1.1、BanyanDB数据库部署

  • OAP持久化数据库

root@banyandb:~# mkdir -p /opt/banyandb
root@banyandb:~# cd /opt/banyandb

  • docker-compose文件

cat <<'EOF' > docker-compose.yml
services:
banyandb:
image: apache/skywalking-banyandb:0.11.0
container_name: skywalking-banyandb
command: standalone
ports:
– "17912:17912" # gRPC 端口:提供给 SkyWalking OAP 后端连接使用
– "17913:17913" # HTTP 端口:用于监控面板或原生 HTTP 接口查询
volumes:
– banyandb-data:/tmp/banyandb # 默认数据持久化路径
restart: unless-stopped
environment:
# 开启 TLS 可以解开以下环境变量配置(如果内网安全,保留为空即可)
– TZ=Asia/Shanghai

volumes:
banyandb-data:
name: skywalking_banyandb_data
EOF

root@banyandb:/opt/banyandb# docker compose up -d

root@banyandb:/opt/banyandb# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
skywalking-banyandb apache/skywalking-banyandb:0.11.0 "/banyand standalone" banyandb 3 seconds ago Up 3 seconds 2121/tcp, 6060/tcp, 0.0.0.0:17912-17913->17912-17913/tcp, [::]:17912-17913->17912-17913/tcp

1.2、部署cert-manager

  • 在集群中一键安装cert-manager及其CRD资源:

# 下载并安装 cert-manager v1.16.2
root@master:~# kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml

# 验证状态(等待三个组件全部 Running)
root@master:~# kubectl get pod -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-767f578ff-w2m22 1/1 Running 0 111s
cert-manager-cainjector-c7fdb4dbf-dc24g 1/1 Running 0 111s
cert-manager-webhook-768bf9d966-ztc5r 1/1 Running 0 111s

1.3、镜像加速预热

  • 为了防止后续部署因Docker Hub阻断导致ImagePullBackOff,建议提前在工作节点拉取并重命名所需镜像:

# cert-manager 镜像转存 (若上一步无法拉取)
nerdctl -n k8s.io pull docker.m.daocloud.io/cert-manager/cert-manager-controller:v1.16.2
nerdctl -n k8s.io tag docker.m.daocloud.io/cert-manager/cert-manager-controller:v1.16.2 quay.io/jetstack/cert-manager-controller:v1.16.2

# SkyWalking 后端镜像
nerdctl -n k8s.io pull docker.m.daocloud.io/apache/skywalking-oap-server:11.0.0
nerdctl -n k8s.io tag docker.m.daocloud.io/apache/skywalking-oap-server:11.0.0 skywalking.docker.scarf.sh/apache/skywalking-oap-server:11.0.0

# SkyWalking UI 镜像
nerdctl -n k8s.io pull docker.m.daocloud.io/apache/skywalking-ui:horizon-1.0.0
nerdctl -n k8s.io tag docker.m.daocloud.io/apache/skywalking-ui:horizon-1.0.0 skywalking.docker.scarf.sh/apache/skywalking-ui:horizon-1.0.0

# Java Agent 探针镜像
nerdctl -n k8s.io pull docker.m.daocloud.io/apache/skywalking-java-agent:9.3.0-alpine
nerdctl -n k8s.io tag docker.m.daocloud.io/apache/skywalking-java-agent:9.3.0-alpine apache/skywalking-java-agent:9.3.0-alpine

二、后端监控基础设施部署

  • 使用Helm部署Skywalking OAP服务端与Horizon UI。

root@master:~# mkdir skywalking
root@master:~# cd skywalking/

2.1、准备values.yaml

  • 创建一个名为values.yaml的文件,内容如下。此配置启用了内置BanyanDB、配置了OAP端口,并为Horizon UI设置了本地管理端账号:

root@master:~/skywalking# vim values.yaml
# 显式关闭默认的 Elasticsearch
elasticsearch:
enabled: false

# 1. 存储配置:使用外部 BanyanDB(192.168.93.104)
banyandb:
enabled: false
config:
grpcAddress: "192.168.93.104:17912"
httpAddress: "192.168.93.104:17913"

# 2. OAP 核心服务
oap:
name: oap
image:
repository: docker.io/apache/skywalking-oap-server
tag: 11.0.0
pullPolicy: IfNotPresent
storageType: banyandb
replicas: 2
ports:
grpc: 11800
rest: 12800
admin: 17128 # 供 Horizon UI 读取 Dashboard 模板

# 3. Horizon UI 前端配置
ui:
enabled: true
name: ui
replicas: 1
image:
repository: docker.io/apache/skywalking-ui
tag: horizon-1.0.0
pullPolicy: IfNotPresent
# 直接使用 config 挂载,彻底删除了多余的 env 环境变量,避免冲突和语法报错
config:
auth:
local:
users:
– username: admin
passwordHash: '$argon2id$v=19$m=65536,t=3,p=4$y1S4AhMruPeuyJpab8ruxA$r3uI6gNnWcWJ1oZPhAfwIl2QyhTV4MhsDeQKu9SFdVo'
roles: ["admin"]

root@master:~/skywalking# helm pull oci://registry-1.docker.io/apache/skywalking-helm –version 5.0.0

root@master:~/skywalking# helm upgrade –install skywalking ./skywalking-helm-5.0.0.tgz \\
-n skywalking \\
–create-namespace \\
-f values.yaml \\
–skip-crds

root@master:~/skywalking# kubectl get pod -n skywalking
NAME READY STATUS RESTARTS AGE
oap-init-recovery-x47w8 0/1 Completed 0 119m
skywalking-skywalking-helm-oap-5fb4b7d5d5-r9vch 1/1 Running 0 26m
skywalking-skywalking-helm-oap-5fb4b7d5d5-xzczp 1/1 Running 0 30m
skywalking-skywalking-helm-oap-init-907b65d5-hqrgw 0/1 Completed 0 30m
skywalking-skywalking-helm-ui-6457f88589-wng47 1/1 Running 3 (159m ago) 3h15m

2.2、暴露UI

root@master:~/skywalking# cat ingress-ui.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: skywalking-ui-ingress
namespace: skywalking
spec:
ingressClassName: nginx
rules:
– http:
paths:
– path: /
pathType: Prefix
backend:
service:
name: skywalking-skywalking-helm-ui
port:
number: 80

root@master:~/skywalking# kubectl apply -f ingress-ui.yaml

root@master:~/skywalking# kubectl get ingress skywalking-ui-ingress -n skywalking
NAME CLASS HOSTS ADDRESS PORTS AGE
skywalking-ui-ingress nginx * 80 2m4s

  • 访问ingress部署的节点地址IP
    • 账号:admin
    • 密码:admin

在这里插入图片描述

在这里插入图片描述

三、SWCK Operator动态注入引擎部署

  • 部署Skywalking Operator以接管Kubernetes的Pod创建事件,从而实现Sidecar无侵入注入。

3.1、安装Operator

  • 通过Helm部署SWCK,并显示开启injector功能:

root@master:~# helm pull oci://registry-1.docker.io/apache/skywalking-swck –version 0.11.0-helm

root@master:~/skywalking# kubectl get pods -n skywalking-system
NAME READY STATUS RESTARTS AGE
skywalking-operator-skywalking-swck-operator-b575dddc7-rlc2q 2/2 Running 0 107s

3.2、定义JavaAgent策略(CRD)

  • SWCK需要一个名为JavaAgent的配置文件来知道“应该用什么版本的探测镜像”以及数据上报哪个OAP地址。
  • 创建javaagent-strategy.yaml:

root@master:~/skywalking# cat javaagent-strategy.yaml
apiVersion: operator.skywalking.apache.org/v1alpha1
kind: JavaAgent
metadata:
name: default-javaagent
namespace: default # 探针策略所在的命名空间,需与业务 Pod 同 Namespace
spec:
agentImage: apache/skywalking-java-agent:9.3.0-alpine
# 指向阶段二部署的 OAP 内部 Service 地址与 gRPC 端口
backendService: skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800

四、部署应用

  • 直接通过公共sping镜像测试

4.1、开启命名空间注入白名单

  • SWCK 的 Webhook 只会拦截带有特定标签的命名空间。如果你的业务部署在 default 命名空间,请先执行:

root@master:~/skywalking# kubectl label namespace default swck-injection=enabled

4.2、在业务 Deployment 中显式指定参数

  • 你可以直接在业务 Pod 的 annotations 中,精准指定要使用的探针镜像、OAP 地址和服务名称。

root@master:~/skywalking# cat demo-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: springboot-demo
template:
metadata:
labels:
# [基础标签]:Kubernetes 服务匹配标签,也是即将被动态读取的名字
app: springboot-demo
# 1. [核心开关]:通知 SWCK 拦截并注入当前 Pod
swck-java-agent-injected: "true"
annotations:
# 2. [探针镜像]:显式指定 Init 容器使用的 Agent 镜像
agent.skywalking.apache.org/agent.image: "docker.io/apache/skywalking-java-agent:9.3.0-alpine"
# 3. [上报地址]:显式指定 OAP 的 gRPC 后端地址
agent.skywalking.apache.org/collector.backend_service: "skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800"
# 4. [覆盖模式]:允许覆盖全局默认配置
strategy.skywalking.apache.org/agent.Overlay: "true"
spec:
containers:
– name: demo-app
image: springio/gs-spring-boot-docker:latest
imagePullPolicy: IfNotPresent
ports:
– containerPort: 8080
env:
# 5. [动态命名]:通过 Downward API 将 pod 的 app 标签映射为探针环境变量
– name: SW_AGENT_NAME
valueFrom:
fieldRef:
fieldPath: metadata.labels['app']

root@master:~/skywalking# kubectl apply -f demo-app.yaml

root@master:~/skywalking# kubectl get pod
NAME READY STATUS RESTARTS AGE
springboot-demo-5bf54d66cb-grstt 1/1 Running 0 15s

4.3、制造流量

root@master:~/skywalking# POD_IP=$(kubectl get pod -l app=springboot-demo -o jsonpath='{.items[0].status.podIP}')
root@master:~/skywalking# for i in {1..5}; do curl http://$POD_IP:8080; sleep 1; done

4.4、查看Web 数据

在这里插入图片描述

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【链路追踪】Skywalking安装
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!