/* 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 数据
资源列表
| 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 数据

网硕互联帮助中心
评论前必须登录!
注册