首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
kubernetes与velero的第一次尝试
2
在Kubernetes中如何针对Namespace进行资源限制?
3
kubernetes之metrics-server安装与配置
4
kubernetes部署metrics-server
5
Kubernetes1.20.9摘掉一个master节点再重新加入(ETCD需要注意的)
6
Kubernetes 1.17.17升级到1.18.20
7
Kubernetes 1.18.20升级到1.19.12
8
Kubernetes 1.19.12升级到1.20.9(强调一下selfLink)
9
Kubernetes 1.16.15升级到1.17.17
10
使用 kainstall 工具一键部署 kubernetes 高可用集群
11
附034.Kubernetes_v1.21.0高可用部署架构二
12
附016.Kubernetes_v1.17.4高可用部署
13
附022.Kubernetes_v1.18.3高可用部署架构一
14
附024.Kubernetes_v1.18.3高可用部署架构二
15
使用 StatefulSet 部署 etcd 集群
16
Kubernetes 稳定性保障手册 -- 极简版
17
Linux(centos7)离现安装kubernetes1.19.2和docker——组件部分
18
docker register 私有仓库部署 - http模式
19
KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具
20
K8S 中的 CPUThrottlingHigh 到底是个什么鬼?
21
全链路分布式跟踪系统 Apache SkyWalking 入门教程
22
pod Evicted的状态究竟是何人所为
23
使用 ezctl 工具部署和管理 Kubernetes 集群
24
Kubernetes部署策略详解
25
kubernetes容器探针检测
26
使用Spring Boot实现动态健康检查HealthChecks
27
真一文搞定 ingress-nginx 的使用
28
K8S备份、恢复、迁移神器 Velero
29
一次关于k8s kubectl top 和 contained ps 不一致的问题探究
30
kubernetes备份恢复之velero
31
使用 Velero 进行集群备份与迁移
32
TKE集群中nginx-ingress使用实践
33
使用velero进行kubernetes灾备
34
Kubernetes 映射外部服务
35
运维体系建设套路
36
k8s解决pod调度不均衡的问题
37
ingress中虚拟路径解决方案
38
容器下的两地三中心建设
39
k8s集群外的主机访问pod的解决方案
40
k8s基础-健康检查机制
41
k8s基础-标签使用
42
ingress-nginx请求改写
43
nginx ingress server alias 多域名多证书问题
44
JAVA | Java 解决跨域问题 花式解决跨域问题
45
如何通过ingress-nginx实现应用灰度发布?
46
在Kubernetes(k8s)中使用GPU
47
使用 Prometheus-Operator 监控 Calico
48
使用Kubespray部署Kubernetes集群
49
云原生下的CI/CD:Argo CD 详解,手把手教你入门
50
Pod的健康检查机制
清单首页k8s文章详情

全链路分布式跟踪系统 Apache SkyWalking 入门教程

先决条件

确保有一套运行正常的 Kubernetes 集群,本文默认为使用 Elasticsearch7 作为后端存储;如果想把 ES 放到 Kubernetes 集群里那么还得确保集群配置了正确的存储,譬如默认的 StorageClass 可用等。本文为了方便起见(其实就是穷)采用外部 ES 存储且使用 docker-compose 单节点部署,所以不需要集群的分布式存储;最后确保你本地的 kubectl 能够正常运行。

基本架构

Skywalking 在大体上(不准确)分为四大部分:

  • oap-server: 无状态服务后端,主要负责处理核心逻辑,可以简单理解为一个标准 java web 项目。
  • skywalking-ui: UI 前端,通过 graphql 连接 oap-server 提供用户查询等 UI 展示。
  • agent: 各种语言实现的 agent 负责抓取应用运行数据并上报给 oap-server,核心的指标上报来源。
  • DB: 各种数据库,负责存 Skywalking 的指标数据,生产环境推荐 ES、TiDB、MySQL。

部署 Skywalking

3.1、部署 Elasticsearch

Elasticsearch 当前使用 7.9.2 版本,由于只是初次尝试还处于测试阶段所以直接 docker-compose 启动一个单点:

代码语言:javascript
复制
# 如果有需要可以进入 es 容器使用以下命令设置密码
# elasticsearch-setup-passwords interactive
version: '3.8'
services:
  elasticsearch:
    container_name: elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    restart: always
    network_mode: "host"
    volumes:
      - data:/data/elasticsearch
    environment:
      - http.host=172.16.11.43
      - http.port=9200
      - transport.tcp.port=172.16.11.43
      - transport.tcp.port=9300
      - cluster.name=skyes
      - node.name=skyes
      - discovery.type=single-node
      - xpack.security.enabled=true
      - xpack.monitoring.enabled=true
      - "ES_JAVA_OPTS=-Xms4096m -Xmx7168m"
volumes:
  data:

3.2、安装 Helm

由于 Skywalking 官方给出的 Kubernetes 安装方式为 Helm 安装,所以需要本地先安装 Helm;Helm 安装方式非常简单,根据官方文档在网络没问题的情况下直接执行以下命令即可:

代码语言:javascript
复制
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

如果网络不是那么 OK 的情况下请参考官方文档的包管理器方式安装或直接下载二进制文件安装。

3.3、克隆仓库初始化 Helm

Helm 部署之前按照官方文档提示需要先初始化 Helm 仓库:

代码语言:javascript
复制
# clone helm 仓库
git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes/chart

# 即使使用外部 ES 也要添加这个 repo,否则会导致依赖错误
helm repo add elastic https://helm.elastic.co
helm dep up skywalking

# change the release name according to your scenario
export SKYWALKING_RELEASE_NAME=skywalking
# 如果修改了 NAMESPACE,后续部署则需要先通过 kuebctl 创建该 NAMESPACE
# change the namespace according to your scenario
export SKYWALKING_RELEASE_NAMESPACE=default

3.4、安装 Skywalking

Helm 初始化完成后需要自行调整配置文件,配置 oap-server 使用外部 ES

values-my-es.yaml

代码语言:javascript
复制
oap:
  image:
    tag: 8.1.0-es7      # Set the right tag according to the existing Elasticsearch version
  storageType: elasticsearch7

ui:
  image:
    tag: 8.1.0

elasticsearch:
  enabled: false
  config:               # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is false
    host: 172.16.11.43
    port:
      http: 9200
    user: "elastic"
    password: "elastic"

调整好配置后只需要使用 Helm 安装即可:

代码语言:javascript
复制
helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" \
  -f ./skywalking/values-my-es.yaml --set oap.image.tag=8.2.0-es7 --set ui.image.tag=8.2.0

如果安装出错或者其他问题可以使用以下命令进行卸载:

代码语言:javascript
复制
helm uninstall "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}"

安装成功后应该在 ${SKYWALKING_RELEASE_NAMESPACE} 下看到相关 Pod:

代码语言:javascript
复制
k8s21 ➜  ~ kubectl get pod -o wide -n skywalking
NAME                              READY   STATUS      RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
skywalking-es-init-xw6tx          0/1     Completed   0          32h   10.30.0.62     k8s21   <none>           <none>
skywalking-oap-64c65cc6bb-lnq82   1/1     Running     0          32h   10.30.0.61     k8s21   <none>           <none>
skywalking-oap-64c65cc6bb-q7zj8   1/1     Running     0          32h   10.30.32.103   k8s22   <none>           <none>
skywalking-ui-695ff9d69d-wqcm8    1/1     Running     0          32h   10.30.161.42   k8s25   <none>           <none>

在确认 Pod 都运行正常后可以通过 kubectl port-forward 命令来查看 UI 界面:

代码语言:javascript
复制
# 执行以下命令,访问 127.0.0.1:8080 即可访问到 skywalking-ui
kubectl port-forward -n ${SKYWALKING_RELEASE_NAMESPACE} service/skywalking-ui 8080:80

在生产环境可能需要配置正确的 Ingress 或者 NodePort 等方式暴露 skywalking-ui 服务,具体取决于生产集群服务暴露方式,请自行调整。

Agent 配置

由于目前仅在 Java 项目上测试,所以以下 Agent 配置仅仅对 Java 项目有效。

Skywalking 在简单使用时不需要侵入代码,对于 jar 包启动的项目只需要在启动时增加 -javaagent 选项即可。

4.1、Agent 获取

javaagent 可以通过下载对应的 skywalking release 安装包获取,将此 agent 目录解压到任意位置,稍后将添加到 java 启动参数。

4.2、Agent 配置

Agent 主配置文件存放在 config/agent.config 配置文件中,配置文件内支持环境变量读取,可以自行添加其他配置和引用其他变量;通常这个配置文件在容器化时有两种选择,一种是创建 ConfigMap,然后通过 ConfigMap 挂载到容器里进行覆盖;另一种是在默认配置里引用各种变量,在容器启动时通过环境变量注入。这里暂时使用环境变量注入的方式:

agent.config

deployment.yml

调整完成后,应用运行一段时间后应该能在 UI 中看到数据

注意事项

  • 默认情况下 Helm 相关命令执行缓慢,可能需要设置 http(s)_proxy ...( _ _)ノ|壁(自行体会这个表情)
  • Skywalking 镜像一般比较大,下载缓慢,推荐预先拉取好然后 load 到每个节点
  • ES 如果设置了密码,不要忘记在 Helm 安装时调整好密码配置
  • jar 包启动时 -javaagent 不能放在 -jar 选项之后,否则可能不生效
  • 集群内连接 oap-server 推荐通过 skywalking-oap.skywalking.svc.cluster.local 域名服务发现方式寻址

本文转载自:「 Bleem 」,原文:https://tinyurl.com/y4uwbmmb ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

下一篇
举报
领券