前段时间小白在《Loki多租户模式下的方案》文中说到日志分区存储的方案时,引入了一个Loki控制器来帮助平台租户创建自己独占资源的Loki实例。一个月过去了,之前埋下的这个坑,今天总算可以填上了?
今天跟大家介绍的工具就是Loki Operator,一个由Ansible Operator构建的简单的Loki 控制器。
GitHub地址:https://github.com/CloudmindsRobot/loki-operator
得益于OperatorSDK,我们可以通过Ansible构建出和Go体验一致的Kubernetes控制器,而开发的门槛却可以降低到一个普通的运维都能处理。Ansible通过community.kubernetes 库实现跟k8s交互,里面做到了对kubernetes内的服务和资源的大部分覆盖。不得不说,OperatorSDK借由Ansible拉低了开发门槛,而Ansible也借此能够在云原生环境下长存,这大概就是大佬们常说的双赢吧。
关于OperatorSDK更详细的文档可以参考:https://sdk.operatorframework.io/docs/overview/r
目前Operator支持的部署模式包含单实例模式和集群Ha模式,同时也支持启用缓存,后续更多的功能小白讲持续更新。此外Loki Operator还未经过大规模测试,目前还不建议大家直接用于生产环境。
Kubernetes: 1.18+
1. 执行以下命令安装loki operator
kubtctl apply -f https://raw.githubusercontent.com/CloudmindsRobot/loki-operator/main/deploy/loki-operator.yaml
2. 执行以下命令验证部署结果
kubectl get pod -n loki-operator-system
NAME READY STATUS RESTARTS AGE
loki-operator-controller-manager-56c5547b9-d8v5j 2/2 Running 0 4h2m
该场景适合平台租户快速部署一个Loki单实例来做Demo验证。这时候Loki将只创建一块PVC来做boltdb-shipper的数据持久化。
apiVersion: plugins.cloudminds.com/v1
kind: Loki
metadata:
name: loki
annotations:
ansible.operator-sdk/reconcile-period: "30s"
spec:
version: 2.2.1
multitenancy: false
servicemonitor: false
service:
mode: single
single:
loki:
image: grafana/loki
schemaconfig:
index: boltdb-shipper
chunk: filesystem
storageconfig:
boltdb_shipper:
shared_store: filesystem
filesystem:
directory: /loki/chunks
该场景适合平台租户快速部署一个Loki单实例来做小范围的模块日志接入。这时候Loki会通过boltdb-shipper将index和chunk保存到S3对象存储当中,同时启用redis/memcached服务作为Loki的缓存,对于日志查询的体验比场景一更为优秀。如果你的kubernetes集群支持ServiceMonitor资源类型的话,Operator也会提交部署资源的监控服务发现对象。
apiVersion: plugins.cloudminds.com/v1
kind: Loki
metadata:
name: loki
annotations:
ansible.operator-sdk/reconcile-period: "30s"
spec:
version: 2.2.1
multitenancy: false
servicemonitor: true
service:
mode: single
single:
loki:
image: grafana/loki
cacheconfig:
enabled: true
expiration: 1h
type: redis
redis:
image: redis
tag: 5.0.6 schemaconfig:
index: boltdb-shipper
chunk: s3
storageconfig:
boltdb_shipper:
shared_store: s3
s3:
address: x.x.x.x
secret_key: xPfIfXBj1Mnt625ZA9c2wXXgmLVPaMUOmMBt3M6H
access_key: g373dR9D1ZAsUD6FWEO
bucket: loki-operator
该场景适合平台租户快速部署一个官方提供的Loki HA集群,适合平台租户部署自己一个独立的Loki服务用于日志存储和查询。此模式下Loki架构它分别包含Loki-system(ingeser、distributor、qureier)、Frontend和Gateway三个主要服务。Loki之间通过Memberlist来同步哈希环,同时存储部分通过boltdb-shipper将index和chunk保存到S3对象存储当中,同时启用redis/memcached服务作为Loki的缓存。启用了Ruler服务,并将rulers保存在S3对象存储中,用户可以通过API直接提交自己的rules。如果你的kubernetes集群支持ServiceMonitor资源类型的话,Operator也会提交部署资源的监控服务发现对象。
apiVersion: plugins.cloudminds.com/v1
kind: Loki
metadata:
name: loki
annotations:
ansible.operator-sdk/reconcile-period: "30s"
spec:
version: 2.2.1
multitenancy: false
servicemonitor: true
service:
mode: cluster
single:
loki:
image: grafana/loki
cluster:
type: ha
replication_factor: 2
ring:
type: memberlist
gateway:
image: nginx
tag: 1.15.1-alpine
replicas: 2
frontend:
image: grafana/loki
replicas: 2
loki:
image: grafana/loki
replicas: 3
cacheconfig:
enabled: true
expiration: 1h
type: memcached
redis:
image: redis
tag: 5.0.6
ruler:
enabled: true
ring: memberlist
alertmanager: http://xxxxxxx
storage: s3
s3:
bucket: loki-ruler-operator
schemaconfig:
index: boltdb-shipper
chunk: s3
storageconfig:
boltdb_shipper:
shared_store: s3
s3:
address: x.x.x.x
secret_key: xPfIfXBj1Mnt625ZA9c2wXXgmLVPaMUOmMBt3M6H
access_key: g373dR9D1ZAsUD6FWEO
bucket: loki-operator
关于更多的CRD描述,请参考: https://github.com/CloudmindsRobot/loki-operator/blob/main/deploy/crd_loki_spec.md
本文描述了Loki Operator的基本介绍以及安装部署方式,并列举了三个场景来描述对应的Loki资源定义(当然还有更多的场景没有列出来)。不过该项目也是小白闲暇之余用于学习Ansible时发起的,后续更多的特性还需持之以恒,也感谢大家的支持?
你可能还喜欢
点击下方图片即可阅读