0%

Background

The Secrets Store CSI Driver secrets-store.csi.k8s.io allows Kubernetes to mount multiple secrets, keys, and certs stored in enterprise-grade external secrets stores into their pods as a volume. Once the Volume is attached, the data in it is mounted into the container’s file system.

In Kubernetes, you can use a shared Kubernetes Volume as a simple and efficient way to share data between containers in a Pod.

1
k create cm cm-test --from-file=./files/config.json --from-file=./files/db_password --from-file=./files/mysql

进入pod:

1
2
3
4
5
root@webserver:/etc/config# ls -l
total 0
lrwxrwxrwx 1 root root 18 Mar 30 05:24 config.json -> ..data/config.json
lrwxrwxrwx 1 root root 18 Mar 30 05:24 db_password -> ..data/db_password
lrwxrwxrwx 1 root root 12 Mar 30 05:24 mysql -> ..data/mysql

每个key entry都有一个file, file内容为value.

20220318120901

Preface

Python并不承诺backward compatibility: 我们可能需要在不同版本切换; 而且global package management的问题在于不区分特定库版本: 无法满足version A和B同时存在.

我们需要隔离的Python环境: virtual env: 每个Python project之间隔离: 选定自己的Python版本和dependency.

阅读全文 »

20210618084911

Preface

写server程序,datetime是绕不开的话题,且经常需要处理多时区转换,时间的术语和格式让人眼花缭乱, 如

  • UNIX time, epoch
  • datetime string: 1990-12-31T23:59:60Z, 1990-12-31T15:59:60-08:00
  • UTC, GMT, Zulu time
  • DST: daylight saving time
  • Timezone name 如AEST, AEDT
  • Timezone name又如 “Australia/Sydney”
  • 时区与longitude的关系
  • ISO 8601, RFC 3339

需要系统梳理时间标准,术语; 这就需要对背后的地理知识稍作了解.

另外给出如何用Python的Arrow package实现常用的时间/时区操作.

阅读全文 »

20210527140611

WHY

Kubernetes可以看作”Object Store”, Object格式: yaml or json, 两者等价.

Kubectl的get命令读取一系列Objects, 并以JSON格式返回. 这些JSON格式往往很大,有复杂的嵌套,常见的需求:

  • 获取Output的subset, 往往deep nested: 某些fields, 而不是全部JSON
  • Filter out irrelevant objects by fields: e.g.我们只想返回失败的job
  • Sort: sort by creation date, status, etc

相比每次将JSON当做文本,grep; 我们需要更贴合JSON的方式.

本质上JSON output是我们的数据源, 我们需要query language, 就像query relational database一样.

本文介绍用JQ, Jid处理kubectl输出, 应对常见的情景.

阅读全文 »

20210525113423

WHY

我们通过一系列的yaml来Config application deployed on Kubernetes.

我们的每个application往往需要一组K8s resource, 即一组yaml files.

问题, 对于Kubernetes:

  • 我们如何高效管理不同application的manifest: “分治法”, 不同application不同的folder, 之下是其group of manifest.
  • 不同环境的manifest, 大体相似,细微config差异,如何reuse manifest, 但区别不同的环境?
阅读全文 »

背景

Logging系列文章, Structure logging是当下best practice. 如何在Golang实现呢?

本文给出solution, 取自当前我们组使用的logging library, 实现以下需求:

  • Structure logging in JSON, 1 log per line
  • 输出logging到stderr
  • 不同level: Debug, Info, Warn, Error
  • 结合context, 传递带额外信息的logger: e.g 同一HTTP request, 附带同一request_id
阅读全文 »

Background

系列文章第2篇. 本文讲述如何在K8s下搭建Graylog, 作为demo环境; 并配置Istio ingress使其internet accessible.

主要内容:

  • Graylog基础
  • GKE创建K8s+Istion
  • Deploy Graylog, 及dependency: mongo和elasticsearch
  • 运行demo app, 确认日志到达Graylog
阅读全文 »

20210504171645

Why

搭建于k8s的微服务系统,log aggregation更是一项基本需求: pod随时可能在Node见迁移,找不到原始log文件.

K8s官方并没有给出具体logging solution, 只给出了logging architecture

这里介绍一套我们组在用的solution: Fluentd+Graylog, 配置简单(相比EFK), 且提供对应的golang logging library实现.

即本文解决问题: 收集golang backend产生的日志,并aggregate到graylog.

阅读全文 »