前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Loki Operator简明教程

Loki Operator简明教程

作者头像
云原生小白
发布2021-06-22 18:43:03
1.4K0
发布2021-06-22 18:43:03
举报
文章被收录于专栏:Loki

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生小白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Loki Operator
  • Loki Operator
    • Supported System
      • Features
      • 安装部署
        • Installation
          • Deployment
          • 总结
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档