Skywalking是一個分布式系統的應用程序性能監視工具,專為微服務、雲原生架構和基於容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是觀察性分析平台和應用性能管理系統。提供分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。支持Java, .Net Core, PHP, NodeJS, Golang, LUA語言探針,支持Envoy + Istio構建的Service Mesh。
skywalking四個模塊
- skywalking agent和業務系統綁定在一起,負責收集各種監控數據
- skywalking oapservice是負責處理監控數據的,比如接受skywalking agent的監控數據,並存儲在數據庫中(本案例使用elasticsearch);接受skywalking webapp的前端請求,從數據庫查詢數據,並返回數據給前端。Skywalking oapservice通常以集群的形式存在。
- skywalking webapp,前端界面,用於展示數據。
- 用於存儲監控數據的數據庫,比如mysql、elasticsearch等。
模塊之間的關系
skywalking部署到k8s
es7
cat > elasticsearch-single.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch-single
namespace: efk
labels:
k8s-app: elasticsearch-single
spec:
replicas: 1
selector:
matchLabels:
k8s-app: elasticsearch-single
template:
metadata:
labels:
k8s-app: elasticsearch-single
spec:
containers:
- image: elasticsearch:7.12.0
name: elasticsearch-single
resources:
limits:
cpu: 2
memory: 3Gi
requests:
cpu: 0.5
memory: 500Mi
env:
- name: "discovery.type"
value: "single-node"
- name: ES_JAVA_OPTS
value: "-Xms512m -Xmx2g"
ports:
- containerPort: 9200
name: db
protocol: TCP
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
volumes:
- name: elasticsearch-data
persistentVolumeClaim:
claimName: es-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-pvc
namespace: efk
spec:
#指定動態PV 名稱
storageClassName: "elastic-nfs-client"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-single
namespace: efk
spec:
ports:
- port: 9200
protocol: TCP
targetPort: 9200
selector:
k8s-app: elasticsearch-single
EOF
kubectl apply -f elasticsearch-single.yaml
安裝 helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
初始化 skywalking 的 charts 配置
# 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
# 創建 skywalking 的 namespace
kubectl create namespace skywalking
配置 skywalking 的 vaules 配置參數
初始化完成后需要自行調整配置文件,配置 oap-server 使用外部 ES,當然你也可以使用 values 自帶的 es 的配置示例,這里不做過多介紹
cat > skywalking/values-my-es-01.yaml <<EOF
oap:
image:
tag: 8.4.0-es7
storageType: elasticsearch7
ui:
image:
tag: 8.4.0
service:
type: NodePort
externalPort: 80
internalPort: 8080
nodePort: 30008
elasticsearch:
enabled: false
config:
host: elasticsearch-single.efk
port:
http: 9200
#user: "" # [optional]
#password: "xxx" # [optional]
EOF
5.4 helm 安裝 skywalking 8.4.0
helm install skywalking skywalking -n skywalking -f ./skywalking/values-my-es-01.yaml
# 卸載
helm uninstall skywalking -n skywalking
# 查看進度
kubectl get pod -n skywalking -w