Apache SkyWalking 是一款功能强大的开源APM工具,可以帮助你监控和诊断微服务架构的性能问题。它的核心优势在于对代码无侵入,通过一个Java Agent就能自动收集数据。我这里直接部署在k8s上。
一、通过yaml部署skywalking-oap
1、创建命名空间和skywalking-oap的configmap
[root@k8s-master ~]# cat skywalking-namespace.yaml
# 01-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: skywalking
—
# 02-configmap.yaml – 存储ES连接信息
apiVersion: v1
kind: ConfigMap
metadata:
name: skywalking-config
namespace: skywalking
data:
SW_STORAGE: "elasticsearch"
SW_STORAGE_ES_CLUSTER_NODES: "192.168.158.171:9200" # 改成你真实的ES地址
# 如果ES需要认证,取消注释并填写
# SW_ES_USER: "elastic"
# SW_ES_PASSWORD: "your-password"
# 如果ES使用HTTPS,需要额外配置
# SW_STORAGE_ES_HTTPS: "true"
2、为OAP Server配置RBAC权限
创建服务账号、集群角色还有绑定集群角色,OAP需要读取K8s集群的Pod、Service等信息来做服务拓扑发现,所以需要授权。
[root@k8s-master ~]# cat skywalking-rbac.yaml
# 03-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: skywalking-oap
namespace: skywalking
—
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: skywalking-oap-role
rules:
– apiGroups: [""]
resources: ["pods", "endpoints", "services", "nodes"]
verbs: ["get", "watch", "list"]
– apiGroups: ["extensions", "networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get", "watch", "list"]
—
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: skywalking-oap-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: skywalking-oap-role
subjects:
– kind: ServiceAccount
name: skywalking-oap
namespace: skywalking
3. 部署OAP Server
[root@k8s-master ~]# cat skywalking-oap-deployment.yaml
# 04-oap-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: skywalking-oap
namespace: skywalking
labels:
app: skywalking-oap
spec:
replicas: 1 # 如果ES支持高并发,可以改为2或3实现OAP集群
selector:
matchLabels:
app: skywalking-oap
template:
metadata:
labels:
app: skywalking-oap
spec:
serviceAccountName: skywalking-oap
containers:
– name: oap
image: apache/skywalking-oap-server:10.4.0
ports:
– containerPort: 11800 # gRPC端口,Agent上报数据用
name: grpc
– containerPort: 12800 # HTTP端口,UI查询数据用
name: http
envFrom:
– configMapRef:
name: skywalking-config # 引用上面创建的ConfigMap
# 如果OAP需要多实例集群,添加以下环境变量(启用K8s协调)
# env:
# – name: SW_CLUSTER
# value: kubernetes
# – name: SW_CLUSTER_K8S_NAMESPACE
# value: "skywalking"
livenessProbe:
httpGet:
path: /health
port: 12800
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 12800
initialDelaySeconds: 10
periodSeconds: 5
resources:
limits:
memory: "4Gi"
cpu: "2"
requests:
memory: "1Gi"
cpu: "500m"
—
apiVersion: v1
kind: Service
metadata:
name: skywalking-oap
namespace: skywalking
spec:
ports:
– port: 11800
targetPort: 11800
name: grpc
– port: 12800
targetPort: 12800
name: http
selector:
app: skywalking-oap
4.配置UI登录用户名密码
SkyWalking的新版UI(Horizon UI)不再提供默认的admin/admin账户。如果安装后无法登录,需要预先在values.yaml中配置一个初始用户。我从从官方文档找到一个带有加密密码哈希值的示例配置
[root@k8s-master ~]# cat skywalking-ui-horizon.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: skywalking-ui-horizon
namespace: skywalking
data:
horizon.yaml: |
oap:
queryUrl: http://192.168.158.134:31119
auth:
local:
users:
– username: admin
passwordHash: "$argon2id$v=19$m=65536,t=3,p=4$eemqy1r72oSXR58y8VpRqw$Bn/dULrmJTHEi3263KfgWDEwQmUsqNLi3xwyv/DekHM"
roles: [admin]
5. 部署SkyWalking UI
[root@k8s-master ~]# cat skywalking-ui-deployment.yaml
# 05-ui-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: skywalking-ui
namespace: skywalking
labels:
app: skywalking-ui
spec:
replicas: 1
selector:
matchLabels:
app: skywalking-ui
template:
metadata:
labels:
app: skywalking-ui
spec:
containers:
– name: ui
image: apache/skywalking-ui:horizon-0.6.0
ports:
– containerPort: 8080
env:
– name: SW_OAP_ADDRESS
value: "http://skywalking-oap:12800" # 指向OAP的Service
# 新版UI需要配置登录账户(可选,不配置则无密码登录)
# – name: SW_UI_AUTH
# value: "true"
# – name: SW_UI_ADMIN_PASSWORD
# value: "admin" # 生产环境请更换
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
—
apiVersion: v1
kind: Service
metadata:
name: skywalking-ui
namespace: skywalking
spec:
type: NodePort # 也可以改成 LoadBalancer 或 Ingress
ports:
– port: 80
targetPort: 8081
nodePort: 30080 # 可指定端口范围 30000-32767
selector:
app: skywalking-ui
然后直接kubectl apply -f通过来部署
查看pod状态已经全部启动。

浏览器访问skywalking-ui
http://192.168.158.134:30080/
skywalking-ui-horizon配置的账号密码是admin


现在已经能登录
注意:如果默认情况拉不下镜像,可以用我这个
# 拉取 OAP 镜像到 k8s.io 命名空间
ctr -n k8s.io images pull \\
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/skywalking.docker.scarf.sh/apache/skywalking-oap-server:10.4.0
# 拉取 UI 镜像到 k8s.io 命名空间
ctr -n k8s.io images pull \\
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/skywalking-ui:horizon-0.6.0
# 在 k8s.io 命名空间打标签
ctr -n k8s.io image tag \\
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/skywalking.docker.scarf.sh/apache/skywalking-oap-server:10.4.0 \\
docker.io/apache/skywalking-oap-server:10.4.0
ctr -n k8s.io image tag \\
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/skywalking-ui:horizon-0.6.0 \\
docker.io/apache/skywalking-ui:horizon-0.6.0
后续继续配置Java应用实现链路追踪。




