Loki Operator简明教程

2021-06-22 18:43:03 浏览数 (1)

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生产环境集群方案

0 人点赞