无趣

享受自由


  • Home

  • About

  • Tags

  • Archives

非正常安装 KubeSphere 踩坑记录

Posted on 2020-06-20 |
Symbols count in article: 1.9k | Reading time ≈ 0:02

听说最近 kubesphere 3.0 要发布了,周末无聊,遂研究一下。

笔者已经存在一个基于 kubeadm 部署,5 节点的 k8s 集群,架构如下

  • Kubernetes 版本 1.18.3
  • 操作系统 Ubuntu 18.04.2 LTS 内核 5.4.0-37-generic
  • 网络: cilium
  • 存储: rook + ceph
  • 使用 metallb 作为 LoadBalancer,nginx-ingress 作为 IngressController
  • kube-prometheus + Thanos

看 Requirements 是不支持笔者的 k8s 版本的,但是按理来说区别不大,所以就有了以下踩坑记录。

Read more »

对于打杂类工作的一些思考

Posted on 2020-05-04 |
Symbols count in article: 1.7k | Reading time ≈ 0:02

笔者已经工作三年多了,由于一直待在乙方公司,平常工作的内容说的好听一点可能是比较琐碎,说难听一点可能就是在打杂,我也和很多朋友探讨过这个问题,怎么样才能摆脱打杂的工作,又或者如何才能在打杂的工作中提示自己呢?

本文纯属个人思考。

Read more »

Apple Watch 改变了我的生活方式

Posted on 2020-03-09 |
Symbols count in article: 1k | Reading time ≈ 0:01

从 18 年底购买 Apple Watch Series 4 算起,它已经陪伴我近两年了,毫不夸张的说 Apple Watch 改变了我的生活方式。

在买 Apple Watch 前我也非常的犹豫,我身边几乎所有买过 Apple Watch 的人都吃灰了,无一例外他们都无法忍受一天一冲电,实际上我认为并不是电池的问题,而是 Apple Watch 并没有成为他们生活中的一部分,就像手机,一天两三次充电但是还是每天都会携带。

那么 Apple Watch 是靠什么成为我生活中的一部分,改变我的生活方式的呢?

Read more »

基于图数据库构建基础设施网络通信拓扑图

Posted on 2019-12-27 |
Symbols count in article: 6.1k | Reading time ≈ 0:06

Introduction

笔者最近有个需求,需要在没有文档的前提下梳理清公有云上数百台虚拟机之间的依赖关系,遂花了点时间研究了一下。

The value of the idea ?

由于一些历史遗留问题,我们没有办法知道一些资源 (多台云主机) 之间的关系,它们是否是孤立的,还是会和哪些系统进行交互,是否还有必要存在。

对于微服务架构来说很容易做到这种链路状态监控,而对于传统的基础设施层面,这类信息一般都是以文档或者CMDB 以静态方式呈现,而静态的信息又不一定完全准确,维护这些关系的工作也非常的繁琐,如果能够在基础设施的层面建立起类似微服务的链路依赖关系对于运维人员是很有价值的。

Read more »

600 行代码构建混合云应用管理平台

Posted on 2019-12-08 |
Symbols count in article: 9.2k | Reading time ≈ 0:09

前言

混合云管理平台 (简称 CMP) 前几年比较火,笔者工作生涯中接触的第一个项目就是 CMP,后面几年也有关注过其他 CMP 产品,但是大体都是完成 IaaS 资源整合后,在其之上再提供服务目录 Service Catalog 实现云资源的编排。

但是由于 CMP 需要对接很多云服务商 (简称 Provider),所以大部分的 CMP 都非常的复杂,就算有类似 libcloud fog 之类的库,大部分的开发时间也都会浪费在与不同 Provider 对接与状态管理上。

笔者周末的时候发现 Terraform 基本已经支持所有常见的 Provider,并支持在其之上提供资源编排,功能及其强大,但是可惜 Terraform 并没有暴露出 API,社区也没有基于其开发的管理平台。

笔者遂即想基于 Terraform 构建一个混合云应用管理平台,实现以下功能

  • 多云资源的管理
  • 提供服务模板,可定义参数,根据定义好的服务模板可部署实例
  • 实例的生命周期管理 (创建/升级/销毁/同步)
Read more »

Zabbix 基于 Statsd 实现对 Kong APIGateway 的监控

Posted on 2019-11-26 |
Symbols count in article: 2.9k | Reading time ≈ 0:03

最近有个 Zabbix 监控 Kong 的需求,查了一下网上并没有很多资料,遂研究官方文档,发现 Kong 支持把监控数据传到 Statsd 中,而 Statsd 可以将 Zabbix 作为 backend,所以大体的架构如下

Kong ---> Statsd ---> Zabbix

配置过于简单,这里就不写了

Read more »

极米 H3 体验

Posted on 2019-08-20 |
Symbols count in article: 820 | Reading time ≈ 0:01

前段时间没时间玩游戏就把家里电脑卖了,但是最近感觉缺少一个大屏幕满足我看视频的需求,由于是租房考虑到便携性买电视又不方便,正好上周极米开了新品发布会,遂入手了极米 H3

Read more »

NiFi vs StreamSets(SDC)

Posted on 2019-01-07 |
Symbols count in article: 2.3k | Reading time ≈ 0:02

前面几篇文章分别介绍了 NiFi 和 StreamSets Data Collector (以下简称 SDC) 在一些场景下的使用配置,本文从几个维度简单对比这两个开源的DFM (Data Flow Management) 产品

Read more »

NiFi LDAP 集成

Posted on 2019-01-07 |
Symbols count in article: 11k | Reading time ≈ 0:11

NiFi 默认是不开启用户和权限认证的,但在企业中多租户隔离是不可或缺的,NiFi 提供了多租户权限认证,支持 LDAP、Kerberos、OpenID、knox 多种外部认证方式,本文主要介绍 NiFi 与 OpenLDAP 的集成

Read more »

StreamSets DataCollector Demo

Posted on 2019-01-07 |
Symbols count in article: 4k | Reading time ≈ 0:04

StreamSets 有三个组件

  • StreamSets Edge:主要安装在物联网设备上,采集数据
  • StreamSets Data Collector:ETL、dataflow 工具
  • StreamSets Control Hub:管理 Data Collector 定义的 pipeline

本文主要介绍通过 StreamSets Data Collector(以下简称 SDC) 定义数据流

Demo

我们需要定义以下数据流,从数据的生产到消费,主要有以下步骤

生产

  1. 通过 randomuser api 获取用户数据
  2. 处理返回的数据
  3. 将处理过后的数据发送给 kafka

消费

  1. 从 kafka 获取用户数据
  2. 展开 json 数据 {"login": {"username": "anyisalin"}} -> {"login.username": "anyisalin"}
  3. 将展开后的 json 数据转化为 SQL 语句
  4. 执行 SQL

image-20190103170847022

StreamSets DataCollector

安装

SDC 的安装包很大,全组件的二进制 6G 左右,安装好 JDK 之后,直接启动即可

$ streamsets-datacollector-3.6.1/bin/streamsets dc

默认端口是 18630,用户名密码为 admin/admin

创建 Producer Pipeline

我们创建一个名为 user data producer 的数据流,用来生产用户数据

image-20190107104133176

HTTP Client

进入 Pipeline 后我们选择一个 Origin (一个 Pipeline 中只能有一个 Origin)

我们需要发起 HTTP 请求来获取数据,所以这里选择 HTTP Client 即可

image-20190107104314832

然后配置 HTTP 请求的地址和参数即可

image-20190107104528494

Field Pivoter

由于获取的数据格式如下

{
'results': [
{
'username': 'haha',
'field1': 'value1'
},
{
'username': 'haha',
'field1': 'value1'
},
]
}

我们只需要里面的 results,所以需要对 JSON 数据进行切分

StreamSets Data Collector 中可以通过 Field Pivoter 这个 Processor 对字段进行切分

所以我们创建 Field Pivoter 并配置即可

image-20190107104945268

Kafka Producer

最后我们需要将切分后的数据 push 到 kafka 里面

选择 Destination 为 Kafka Producer

选择 Kafka 客户端对应的版本,我们这里使用的是 2.1.1 的 kafka,所以选择 Apache Kafka 2.0.0 这个库

image-20190107105518017

并配置 Kafka Broker 参数

image-20190107105706891

Producer 测试

最后我们的 Pipeline 如下

image-20190107105826413

启动并验证

运行 Pipeline 之后,可以看到自带的监控,对记录的统计和汇总

image-20190107105908433

创建 Consumer Pipeline

我们创建一个名为 user data consumer 的数据流,用来消费刚刚生产的数据

image-20190107110650845

Kafka Consumer

选择 Kafka Consumer 作为 Origin

配置 Kafka Broker 参数

image-20190107111836335

Filed Flattener

我们需要展开 Kafka 中获取到的用户数据

展开的格式如下

{'gender': 'male',
'name_title': 'mr',
'name_first': 'lucas',
'name_last': 'olsen',
'location_street': '7882 mariagervej',
'location_city': 'saltum',
'location_state': 'midtjylland',
'location_postcode': 52010,
'location_coordinates_latitude': '66.7960',
'location_coordinates_longitude': '169.3742',
'location_timezone_offset': '+8:00',
'location_timezone_description': 'Beijing, Perth, Singapore, Hong Kong',
'email': 'lucas.olsen@example.com',
'login_uuid': '7e1f3118-a6aa-4ee9-a2a1-0a51ff05e210',
'login_username': 'smalllion212',
'login_password': 'oscar',
'login_salt': 'X06x1uIC',
'login_md5': 'cede0ee5c6da51ab45f30d443c0bce87',
'login_sha1': '65ae36af8670df9f5aaba7aa6ada24466f01c6a0',
'login_sha256': '14a363b54ae02f62e1e1a6a1f38e81f771ac57c0e10cbe931af332d52deea9ac',
'dob_date': '1990-12-30T04:11:02Z',
'dob_age': 28,
'registered_date': '2009-07-24T19:30:29Z',
'registered_age': 9,
'phone': '84828860',
'cell': '74092531',
'id_name': 'CPR',
'id_value': '819452-4601',
'picture_large': 'https://randomuser.me/api/portraits/men/84.jpg',
'picture_medium': 'https://randomuser.me/api/portraits/med/men/84.jpg',
'picture_thumbnail': 'https://randomuser.me/api/portraits/thumb/men/84.jpg',
'nat': 'DK'}

配置 Field Flattener,分隔符为 _

image-20190107112156873

JDBC Producer

最后我们要将数据插入到 MySQL 里,SDC 通过类型为 JDBC Producer 的 Destination 来处理 SQL 的转换和执行

需要上传对应的库到 SDC 中

image-20190107112539452

在 Legacy Drivers 里面配置 class

image-20190107112632307

在 Credentials 中配置用户名密码,最后在 JDBC 选项栏中配置连接参数和操作选项

image-20190107112739224

Producer 测试

最后我们启动这个 Pipeline 进行测试

登录 mysql 服务器,查看是否有数据插入

mysql> select count(*) from users;
+----------+
| count(*) |
+----------+
| 25255950 |
+----------+
1 row in set (1 min 22.44 sec)

总结

SDC 定义数据流没有 NiFi 那么灵活,缺少限流,但是界面风格相对 NiFi 好一些,监控图表也很直观

12…5
AnyISalIn

AnyISalIn

Life is short

45 posts
39 tags
RSS
GitHub E-Mail
Links
  • Flowsnow
© 2021 AnyISalIn | Symbols count total: 167k | Reading time total: 2:47
Powered by Hexo
|
Theme — NexT.Mist v6.0.4