Thanos是一个开源工具和平台,用于扩展Prometheus的功能,提供长期存储、全局查询和高可用性。它通过存储网关、查询组件和其他模块实现数据的聚合、压缩和查询,从而为用户提供更灵活、可扩展的监控解决方案。
Thanos高可用架构分为两种模式 ,Sideca r 模式( 如图 1-1) 和Receiver模式 ( 如图 1-2)。
图1-1 Sidecar模式
图1-2 Receiver模式
Thanos提供 了 Sidecar、Query、Store、Receive、Rule、Compact、Query Frontend、Tools 8 个组件,这些组件的功能分别是:
Sidecar来进行监控数据上传的边车模式和使用 Receive来接受数据的收取模式,两种模式只有数据从 Prometheus 到对象存储的方式有区别,其他结构是一样的。
Thanos支持与多种对象存储集成,包括但不限于Amazon S3、Google Cloud Storage、Azure Blob Storage、阿里云对象存储(OSS)、Ceph、MinIO 等。通过 Thanos 的组件(如 Sidecar、Receive 等),可以配置和优化与这些对象存储的集成,实现监控数据的持久化存储、查询和分析。
Thanos需要存储大量的监控指标数据 , 并提供可靠数据存储和备份 , 同时提供优秀的查询能力 。 因此对象存储选择和配置尤为重要 。 本文选择MinIO作为Thanos的对象存储 。
如图 2-1 所示 , MinIO分布式架构 。
图2-1 MinIO分布式架构
MinIO 是一个开源的分布式对象存储服务,其架构设计旨在实现高性能、高可用和可扩展性。MinIO 分布式集群存储架构通常由多个MinIO服务组成,这些服务可以运行在物理服务器、虚拟机或容器中 , 对外提供标准 S3 接口以进行统一访问。
在MinIO的架构中,有两种类型的节点:存储节点和网关节点。
#创建存储类资源
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: node-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
#创建日志存储类资源
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minio-log-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
#创建pv资源
apiVersion: v1
kind: PersistentVolume
metadata:
name: node1-volume-01 #根据需求指定pv名称
spec:
capacity:
storage: 80Gi #根据需求修改存储大小
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: node-local-storage
local:
path: /minio/data1 #拥有volume的文件路径
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1 #选择拥有当前资源需求的节点
#创建pv资源并根据实际需求修改log_pv.yaml文件name、path、values字段的值
apiVersion: v1
kind: PersistentVolume
metadata:
name: minio-log-pv #根据租户名称修改该值
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: minio-log-storage
local:
path: /minio/data1 #拥有volume的文件路径
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1 #选择拥有当前资源需求的节点
#创建名称空间
kubectl create ns <namespace>
#初始化租户
# server:MinIO实例数量
# volumes:挂载盘的总数
# capacity:挂载盘的总容量
kubectl minio tenant create <tenant-name> \\
--servers 4 --volumes 4 \\
--capacity 320Gi \\
--storage-class node-local-storage \\
--audit-logs-storage-class minio-log-storage \\
--namespace <namespace> \\
--image reg.chebai.org/icospaas/minio/minio:RELEASE.2022-06-20T23-13-45Z \\
--audit-logs-image reg.chebai.org/icospaas/minio/operator:v4.4.25 \\
--audit-logs-pg-init-image reg.chebai.org/icospaas/minio/busybox:1.33.1 \\
--audit-logs-pg-image reg.chebai.org/icospaas/minio/postgres:13
###控制台ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: console
namespace: <namespace>
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: <100m>
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
ingressClassName: "nginx"
rules:
- host: <domain>
http:
paths:
- backend:
service:
name: minio-console
port:
number: 9443
path: /
pathType: Prefix
###租户minio ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio
namespace: <namespace>
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: <100m>
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
ingressClassName: "nginx"
rules:
- host: minio.default.svc.cluster.local
http:
paths:
- backend:
service:
name: minio
port:
number: 9000
path: /
pathType: Prefix
# thanos-storage-minio.yaml
type: s3
config:
# bucket 名称
bucket: thanos
# minio 访问地址
endpoint: minio.default.svc.cluster.local
access_key: minio
secret_key: minio123
insecure: true
signature_version2: false
# 创建Minio访问信息secret
kubectl create secret generic thanos-objectstorage \\
--from-file=thanos.yaml=thanos-storage-minio.yaml \\
-n monitoring
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: thanos-store-gateway
namespace: kube-mon
labels:
app: thanos-store-gateway
spec:
replicas: 1
selector:
matchLabels:
app: thanos-store-gateway
serviceName: thanos-store-gateway
template:
metadata:
labels:
app: thanos-store-gateway
thanos-store-api: "true"
spec:
containers:
- name: thanos
image: thanosio/thanos:v0.18.0
args:
- "store"
- "--log.level=debug"
- "--data-dir=/data"
- "--objstore.config-file=/etc/secret/thanos.yaml"
- "--index-cache-size=500MB"
- "--chunk-pool-size=500MB"
ports:
- name: http
containerPort: 10902
- name: grpc
containerPort: 10901
livenessProbe:
httpGet:
port: 10902
path: /-/healthy
readinessProbe:
httpGet:
port: 10902
path: /-/ready
volumeMounts:
- name: object-storage-config
mountPath: /etc/secret
readOnly: false
volumes:
- name: object-storage-config
secret:
secretName: thanos-objectstorage
volumes:
- name: object-storage-config
# 挂载MinIO secret
secret:
secretName: thanos-objectstorage
args:
- sidecar
- --log.level=debug
- --tsdb.path=/prometheus
- --prometheus.url=http://localhost:9090
- --reloader.config-file=/etc/prometheus/prometheus.yaml.tmpl
- --reloader.config-envsubst-file=/etc/prometheus-shared/prometheus.yaml
- --reloader.rule-dir=/etc/prometheus/rules/
# 指定MinIO存储配置
- --objstore.config-file=/etc/secret/thanos.yaml
volumeMounts:
- name: object-storage-config
mountPath: /etc/secret
readOnly: false
spec:
containers:
- name: thanos
image: thanosio/thanos:v0.18.0
args:
- "compact"
- "--log.level=debug"
- "--data-dir=/data"
# 指定MinIO存储配置文件
- "--objstore.config-file=/etc/secret/thanos.yaml"
- "--wait"
volumeMounts:
- name: object-storage-config
mountPath: /etc/secret
readOnly: false
volumes:
- name: object-storage-config
secret:
secretName: thanos-objectstorage
Thanos 是一个用于 Prometheus 监控系统的开源工具,它提供了一种可扩展的方式来进行监控数据的冗余和备份。Thanos主要通过以下几种方式来实现数据的冗余和备份:
Thanos提供了数据保留策略的功能,以便根据需求来管理监控数据的保留和清理。数据保留策略的主要目的是控制监控数据的存储时间,并在达到指定时间后自动清理过期的数据,以节省存储空间并提高系统性能。
Thanos的数据保留策略通常由以下几个方面组成:
Thanos监控存储后端的健康状况和性能的方式包括以下几个方面:
通过以上方式,Thanos能够全面监控存储后端的健康状况和性能,帮助管理员及时发现问题并采取措施,以保证存储后端的稳定运行。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论