EPEL 简介
EPEL 全名是 Extra Packages for Enterprise Linux。它允许我们在企业级操作系统上安装一些附加的包。例如在 CentOS 6 上想要安装 python2.7,出于系统稳定的原因,直接 yum install python
只能升级到 2.6。而有了 epel 后,我们可以安装上 2.7 但又不破坏系统原来的包。具体使用很简单,只要运行 yum install epel-release
即可。原理: epel-release.rpm 对于 centos 就是一个 yum repo 的配置。安装包就是添加一个 yum 仓库。不同版本的操作系统会有相对应的 EPEL …
Pymotw - enum
Python 库 enum
引入于 3.4,出自 PEP435, 使用它可以让我们简化很多按组归类的常量。
- 继承
enum.Enum
逐个定义名字 + 值。 - 可通过循环获得所有值。
- 当值有重复,可认为后续定义的名字是第一个定义的名字的 alias
- 可用 @enum.unique 确保定义中不会有重复值(有重复则报异常)
- 值比较默认支持 is, == 比较。大小比较的话可通过继承
enum.IntEnum
类。 - 可通过
enum.Enum(value='MyValinnaEnum', names='a b c')
这种方法自动生成值从 1 开始的常量。 names
也支持其它值,例如 tuple。
Core API - 一种定义 Schema&Response 的格式
Core API 是一种展示 Web API 的文档对象模型 (Document Object Model)。 Core API 提供了客户端可以让你更简单地发起请求和解析相应。简单来说,它给 RESTful API 套上了一层更接近 function call 风格的接口。
- 可以通过
pip install coreapi
获得命令行工具 - 示例:
coreapi action notes 0 delete
删除 id=0 的笔记coreapi action add_note --params description="Email venue about conference dates"
添加一个笔记coreapi action notes …
Tesla Attack 警钟 - 安全访问 Kubernetes dashboard
Tesla 被爆出巨大的安全隐患:其 Kubernetes Dashboard 暴露在公网上,AWS Key & Token 都可以被人看到。这篇文章讲述了如何给 Kubernetes Dashboard 配置密码,配置域名,配置 HTTPS。
- 裸跑 dashboard 是很危险的。整个集群的机器都可以被操控,信息可以被窃取。
- 你必须在生产环境上打开 RBAC,这样集群节点间的通信才能被加密。一些工具启动集群后默认是没有打开它的,需要注意确认。
- 最简单访问 dashboard 的方式是运行:
kubectl proxy
, 它启动一个类似 dev webserver 一样的东西。 - 错误的做法:直接给 Dashboard root 权限(虽然基于 ServiceAccount 的授权不会抱错 PermissionError,但是敲级危险的!
- 推荐的做法:per-user credentials …
小团队的 Runbook 实践
这篇文章讲述了这个小团队如何让两三个人做 OnCall,但其实讲述的是 Runbook 的一些实践。
- Runbook 是用来给 24x7 团队在非工作时间不用召唤开发的情况下可以自己根据文档运行一些基本故障的对应解决方案。
- 原则:如果命令未来可能会被再次执行,那就花点时间写点文档,写清楚执行的步骤。
- Runbook 尽可能按照一个模板来写,有一些基本的信息,比如有哪些环境,怎么找日志,怎么做 troubleshooting。
- 代码库里面嵌入一些 scripts, 方便执行。
- 如果 Runbook 来不及更新,好歹留一条评论在那里。
- Runbook 有个 owner,出问题好抓人。
如何做到数据库迁移 zero downtime
这篇文章是 Discourse 的工程师讲他们如何做自动化部署,同时保证数据库表结构的迁移不会引起故障。他们的部署是全自动的。测试通过,自动部署到 meta.discourse.com。这套流程需要考虑的大问题就是数据库结构怎么做兼容。如果代码变更前后有不兼容的数据库表结构变更,势必引起重启应用后大型崩溃。
- 首先,他们最终 migration 的各种信息,不只是 ActiveRecord 提供的那些功能,还得要有诸如以下之类的信息:
- migration 什么时候跑的
- migration 在哪台机器上跑的
- migration 跑了多长时间
- git / rails version
- 其次,drop table 延迟执行;改字段 => 新建字段复制老字段的值,稍晚一些时候将老字段变为 readonly
- 不信任自己:代码层面阻拦诸如
DROP TABLE
之类的代码 - 建议:改造部署流程,提供 pre-deploy & post-deploy 的 …
Python 库 - black
Black 是新建推出的一款关注度比较高的 Python 代码格式化工具。它的特点如下:
- 原地修改
- 不用配置
- 不考虑你原先是怎么格式化代码的
- 在
# fmt: off
和# fmt: on
之间的代码不格式化 - 函数参数太多会尝试一行一个参数,这样增减参数产生的 diff 比较小
- 在 return, raise, break, continue, yield 之后会增加空行,可读性比较高。
- 行宽 88 字符,比常见的 80 多 10%,因为文件会能更短一些。
简而言之,它会自动作出让 pycodestyle 满意的代码风格。用法很简单,就是只能用 Python 3,不过它可以用于格式化 Python 2 & 3 的代码。
$ black …
文档阅读 - Kubernetes Secret
Kubernetes Secret 是用来存放一些敏感配置,诸如密码, token等信息。如果不用 secret,而只是写到明文的文本中毕竟不太安全。
- 使用的方法可以是写
Kind: Secret
的 yaml 文件,其中定义了 metadata.name 指定该 secret 叫什么, data 部分定义了 key, value。其中 value 使用 base64 编码存储。直接使用kubectl create -f ./your-secret.yml
新建 secret. - 也可以直接使用
kubectl create secret generic your-secret --from-file=xxx.txt
存储文件。 - 使用
kubectl …