Loki Operator
前段时间小白在《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
Loki Operator
目前Operator支持的部署模式包含单实例模式和集群Ha模式,同时也支持启用缓存,后续更多的功能小白讲持续更新。此外Loki Operator还未经过大规模测试,目前还不建议大家直接用于生产环境。
Supported System
Kubernetes: 1.18
Features
- [x] Loki Architecture
- [x] Loki
- [x] Loki Frontent
- [x] Loki Gateway
- [x] Single Node
- [x] Cluster / HA
- [ ] Cluster / MicroService
- [x] Ring
- [x] Memberlist
- [ ] Consul
- [ ] Etcd
- [x] Cached(single)
- [x] Redis
- [x] Memcached
- [x] StorageSchema
- [x] S3
- [x] boltdb-shipper
- [ ] Cansandra
- [ ] GCS
- [x] metrics
- [x] Redis
- [x] Memcache
- [x] Loki
- [x] LokiStack
- [ ] Grafana
- [ ] Promtail
安装部署
Installation
1. 执行以下命令安装loki operator
代码语言:javascript复制kubtctl apply -f https://raw.githubusercontent.com/CloudmindsRobot/loki-operator/main/deploy/loki-operator.yaml
2. 执行以下命令验证部署结果
代码语言:javascript复制kubectl get pod -n loki-operator-system
NAME READY STATUS RESTARTS AGE
loki-operator-controller-manager-56c5547b9-d8v5j 2/2 Running 0 4h2m
Deployment
- 场景一 (单实例、无缓存)
该场景适合平台租户快速部署一个Loki单实例来做Demo验证。这时候Loki将只创建一块PVC来做boltdb-shipper的数据持久化。
代码语言:javascript复制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
- 场景二 (单实例、S3、有缓存、带metrics)
该场景适合平台租户快速部署一个Loki单实例来做小范围的模块日志接入。这时候Loki会通过boltdb-shipper将index和chunk保存到S3对象存储当中,同时启用redis/memcached服务作为Loki的缓存,对于日志查询的体验比场景一更为优秀。如果你的kubernetes集群支持ServiceMonitor资源类型的话,Operator也会提交部署资源的监控服务发现对象。
代码语言:javascript复制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
- 场景三 (官方HA集群 网关、S3、启用ruler、有缓存、带metrics)
该场景适合平台租户快速部署一个官方提供的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也会提交部署资源的监控服务发现对象。
代码语言:javascript复制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时发起的,后续更多的特性还需持之以恒,也感谢大家的支持?
你可能还喜欢
点击下方图片即可阅读
Loki生产环境集群方案