监控单个 K8s 集群
创建时间:2023-10-04 最近修改时间:2024-08-26
#1. 简介
假如你在一个 K8s 集群中部署了应用,本章介绍如何使用 DeepFlow 进行监控。
DeepFlow 能够零侵扰采集所有 Pod 的观测信号(AutoMetrics、AutoTracing、AutoProfiling),
并基于调用 apiserver 获取的信息自动为所有观测数据注入K8s 资源
和K8s 自定义 Label
标签(AutoTagging)。
#2. 准备工作
#2.1 部署拓扑
#2.2 Storage Class
我们建议使用 Persistent Volumes 来保存 MySQL 和 ClickHouse 的数据,以避免不必要的维护成本。
你可以提供默认 Storage Class 或添加 --set global.storageClass=<your storageClass>
参数来选择 Storage Class 以创建 PVC。
可选择 OpenEBS (opens new window) 用于创建 PVC:
kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
## config default storage class
kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
1
2
3
2
3
#3. 部署 DeepFlow
使用 Helm 安装 DeepFlow:
helm repo add deepflow https://deepflowio.github.io/deepflow
helm repo update deepflow # use `helm repo update` when helm < 3.7.0
helm install deepflow -n deepflow deepflow/deepflow --version 6.5.012 --create-namespace
1
2
3
2
3
helm repo add deepflow https://deepflow-ce.oss-cn-beijing.aliyuncs.com/chart/stable
helm repo update deepflow # use `helm repo update` when helm < 3.7.0
cat << EOF > values-custom.yaml
global:
image:
repository: registry.cn-beijing.aliyuncs.com/deepflow-ce
EOF
helm install deepflow -n deepflow deepflow/deepflow --version 6.5.012 --create-namespace -f values-custom.yaml
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
注意:
- 使用 helm --set global.storageClass 可指定 storageClass
- 使用 helm --set global.replicas 可指定 deepflow-server 和 clickhouse 的副本数量
- 我们建议将 helm 的
--set
参数内容保存一个独立的 yaml 文件中,参考高级配置章节。
#4. 下载 deepflow-ctl
deepflow-ctl 是管理 DeepFlow 的一个命令行工具,建议下载至 deepflow-server 所在的 K8s Node 上,用于后续使用:
curl -o /usr/bin/deepflow-ctl https://deepflow-ce.oss-cn-beijing.aliyuncs.com/bin/ctl/stable/linux/$(arch | sed 's|x86_64|amd64|' | sed 's|aarch64|arm64|')/deepflow-ctl
chmod a+x /usr/bin/deepflow-ctl
1
2
2
#5. 访问 Grafana 页面
执行 helm 部署 DeepFlow 时输出的内容提示了获取访问 Grafana 的 URL 和密码的命令,输出示例:
NODE_PORT=$(kubectl get --namespace deepflow -o jsonpath="{.spec.ports[0].nodePort}" services deepflow-grafana)
NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}")
echo -e "Grafana URL: http://$NODE_IP:$NODE_PORT \nGrafana auth: admin:deepflow"
1
2
3
2
3
执行上述命令后的输出示例:
Grafana URL: http://10.1.2.3:31999
Grafana auth: admin:deepflow
1
2
2