该项目可以迅速将skywalking 6.1.0部署进kubernetes(k8s)
包含ui oap es模块和完整的springcloud测试用例
此外将agent整合到sidecar中,也就是说每个pod中有两个应用 app+agent sidecar,更加适合于生产环境
我弄这个主要是为了学习整合skywalking作为kubernetes线下环境的APM
但是skywalking官方apache/skywalking-kubernetes的一些配置在apache孵化后过期
没有最新的6.1.0版本 而6.1.0的性能提升比较大,此外也支持6.3.2 非常值得学习。
此外一些配置面向云环境,不适合本地开发测试
git地址
evanxuhe/skywalking-kubernetes
cd 6.1.0
kubectl apply -f namespace.yml
kubectl apply -f elasticsearch
kubectl apply -f oap
kubectl apply -f ui
kubectl apply -f apm-springcloud-demo
注意修改elasticsearch/01-pv.yml中的路径为本地路径;节点名为本机hostname
浏览器打开http://127.0.0.1:31234/查看服务详情
如果部署了测试用例 访问http://127.0.0.1:30082/item 会发现UI拓扑图多了两个服务 如下
NAME READY STATUS RESTARTS AGE
apm-eureka-799b8d5449-72npx 1/1 Running 0 99m
apm-item-bdf545d9c-kjqxd 1/1 Running 0 94m
elasticsearch-0 1/1 Running 0 119m
oap-6b56f8bbf5-7fjvb 1/1 Running 0 118m
oap-6b56f8bbf5-7tldw 1/1 Running 0 118m
oap-6b56f8bbf5-qzdx2 1/1 Running 0 118m
ui-deployment-f4799496c-m5xw6 1/1 Running 0 117m
component | descripiton |
---|---|
namespace | 创建skywalking命名空间 |
elasticsearch | 映射本地磁盘卷的es集群 |
oap | collector 收集agent上传的数据并整合 |
ui | RocketUI展示前端数据 |
apm-springcloud-demo | springcloud应用demo,eureka+item service 产生数据供展示(可选) |
busybox.yml | 装了很多调试工具,比如net-tools等,方便定位k8s内问题 |
component | version |
---|---|
kubernetes | 1.14.2 |
skywalking | 6.1.0 |
elasticsearch | 6.4.0 |
image | version | descripiton |
---|---|---|
evanxuhe/skywalking-oap-server | 6.1.0 | 修正时区为东八区 |
evanxuhe/skywalking-agent-sidecar | 6.1.0 | sidecar 里面装载了agent文件夹 |
apache/skywalking-ui | 6.1.0 | 官方ui镜像 |
elasticsearch-oss | 6.3.2 | 官方es镜像 |
应用全部挂在在skywalking namepace下,所以大家使用时不要忘记切换namespace 比如加-n skywalking
此外之前遇到过很奇怪的问题 oap可以正常收集数据,ui没显示,并且请求oap报错IDs can’t be null其实就是pod时间不对,导致查询范围不匹配
查看kubectl get pods -n skywalking
es使用statefulset方式部署,oap,ui使用deployment部署
因而想要修改副本数,内存,磁盘等请修改对应目录下的03-statefulset.yml或者03-deployment.yml
由于k8s deployment会在pod停止后一直重启
因而修改停止的正确做法是
kubectl edit statefulset elasticsearch -n skywalking
kubectl edit deployment oap -n skywalking
kubectl edit deployment ui-deployment -n skywalking
修改对应的replicates为0,拓展应用将replicates修改为对应副本数即可,想刷新配置也可以用这种办法
基于skywalking官方apache/skywalking-kubernetes
修改为:
显示pod不存在
kubectl config set-context $(kubectl config current-context) --namespace=skywalking
或者在所有命令后指定namespace 如 kubectl get pods -n skywalking
服务出现Error
查看event是否有错误信息
kubectl describe pod [pod名]
如果没有,说明进程已经挂掉,查看日志是否有错误信息
kubectl log [pod名]
dns域名解析错误
遇到一个问题,es一直正常运行,但是oap报错找不到es,这是由于域名解析问题
k8s登录elasticsearch,查看hostname ip地址
登录另一个可用pod,如ui 看是否能ping 通ip(网络问题),能否ping通elasticsearch主机名(dns问题)
最后发现是coredns服务没能正常启动,导致所有dns不用这个错误很常见。。。
kubectl get pods -n kube-system
解决方案详见coredns服务一直处于 CrashLoopBackOff状态
由于本人是k8s新人,难免存在很多问题,欢迎大家反馈
我的邮箱 [email protected]