恭喜 Fluentd 从 CNCF 毕业

今年新闻不断,多数早期进入 CNCF 的项目都相继宣布毕业。 CNCF(云原生计算基金会)在美国时间 2019 年 4 月 11 日宣布 fluentd 今天正式毕业了。 这是 CNCF 中毕业的第 6 个项目,之前已经毕业的项目为 Kubernetes、Prometheus、Envoy 、CoreDNS 和 containerd 。 fluentd 自 2011 年由 Treasure Data 公司的联合创始人 Sadayuki “Sada” Furuhashi 创建,作为构建统一记录层的开源数据收集器,统一记录层统一收集采集和消费,以便更好的使用和理解数据。在 2016 年 11 月,fluentd 也是第 6 个成为 CNCF 托管项目的。 fluentd 可以从多种数据源采集事件,并将它写入文件, RDBMS, NoSQL, IaaS, SaaS, Hadoop等等各类的目标地址。截至目前,fluentd 在 GitHub 上有 7629 个 star ,895 个 fork,以及 166 位贡献者,超过 4k+ commit 。 做日志相关的小伙伴基本都玩过 ELK ,我们都知道在大规模使用 Logstash 时的痛苦(还记得被 Logstash 配置文件支配的恐惧吗? 2333) 而 fluentd 的事件路由是通过 tag 来做,相比 Logstash 使用管道将所有数据路由到单个流里再通过配置将它发送到对应的目标而言这将大大简化配置的复杂度。(是的,这里是吐槽)

K8S 生态周报| 2019.04.01~2019.04.07

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Kubernetes client-go v11.0.0 正式发布 这是最后一个使用 dep 作为依赖管理的版本,后续版本将转向使用 go modules. Kubernetes 生态中的相关项目大多都已转向或正在转向使用 go modules 了,这也是一个技术风向,理性选择。 Release containerd 1.2.6 正式发布 这是 containerd 1.2 的第 6 个 patch 版本,主要更新: 在默认的 seccomp profile 白名单增加了 io_pgetevents 和 statx 这两个系统调用; 修复了在 1.2.5 中自定义 cgroup path 无法工作的 bug; 更新 CNI 插件到 v0.7.5 以修复 CVE-2019-9946; 更新 runc 版本,修复在无 SELinux 系统下的失败情况; 当然还有一些其他的改进和修复,比如修复了 pod 的 UTS namespace 等,建议阅读 ReleaseNote。 Docker CE 19.

K8S 生态周报| 2019.03.25~2019.03.31

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。 Kubernetes 1.14 正式发布 1.14 的主要更新: 对 Windows Node 和 container 的支持达到生产级别,支持 Windows Server 2019; 本地持久化数据卷正式可用,这可以方便使用本地 SSD 之类的存储,但注意这个特性容错性较差; Pod 优先级和抢占机制正式可用,(建议慎重使用); Pod Ready++ (Pod Readiness Gates) 达到稳定,可以更好的判断 Pod 及其需要的资源是否均已就绪; 当然还有很多的改进和很多被废弃的功能特性等,建议阅读 ReleaseNote。 Minikube 1.0.0 正式发布 Minikube 是一个用于本地搭建 Kubernetes 环境的工具,使用方法可参考 使用 Minikube 搭建本地 Kubernetes 环境。 1.0.0 的主要更新: 默认 Kubernetes 版本更新至 1.14.0; 新增 --image-repository 参数,方便国内用户使用镜像解决网络问题; 其他特性请阅读 ReleaseNote runc 1.0-rc7 发布 注意,低版本内核(尤其是 3.x)的系统,请不要升级至此版本 这个版本主要为解决之前的漏洞及修正一些规范等,版本说明请参考 runc 1.

runc 1.0-rc7 发布之际

在 18 年 11 月底时,我写了一篇文章 《runc 1.0-rc6 发布之际》 。如果你还不了解 runc 是什么,以及如何使用它,请参考我那篇文章。本文中,不再对其概念和用法等进行说明。 在 runc 1.0-rc6 发布之时,给版本的别名为 “For Real This Time”,当时我们原定计划是发布 1.0 的,但是作为基础依赖软件,我们认为当时的版本还有几个问题: 不够规范; 发布周期不明确; 为了给相关的 runtime 足够的时间进行修正/升级,以及规范版本生命周期等,最终决定了发布 runc 1.0-rc6。 为何有 runc 1.0-rc7 存在 前面已经基本介绍了相关背景,并且也基本明确了 rc6 就是在 1.0 正式发布之前的最后一个版本,那 rc7 为什么会出现呢? CVE-2019-5736 我们首先要介绍今年 runc 的一个提权漏洞 CVE-2019-5736 。 2019 年 2 月 11 日在oss-security 邮件组正式批露该漏洞,攻击者可以利用恶意容器覆盖主机上的 runc 文件,从而达到攻击的目的;(具体的攻击方式此处略过),注意不要轻易使用来源不可信的镜像创建容器便可有效避免被攻击的可能。 简单补充下可能被攻击的方式: 运行恶意的 Docker 镜像 在主机上执行 docker exec 进入容器内 关于容器安全或者容器的运行机制,其实涉及的点很多,我在去年的一次线上分享 《基于 GitLab 的 CI 实践》 有提到过 Linux Security Modules(LSM)等相关的内容,对容器安全感兴趣的朋友可以对 LSM 多了解下。

使用 Kind 搭建你的本地 Kubernetes 集群

Kind 是我很喜欢也一直在参与的项目,我计划将 Kind 相关的文章写成一个系列。(flag++) 这是第一篇。 Kind 介绍 Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。 安装 二进制安装 Kind 使用 Golang 进行开发,在仓库的 Release 页面,已经上传了构建好的二进制,支持多种操作系统,可直接按需下载进行使用。 e.g. # 下载最新的 0.2.0 版本 wget -O /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/0.2.0/kind-linux-amd64 && chmod +x /usr/local/bin/kind 通过源码安装 如果你本地已经配置好了 Golang 的开发环境,那你可以直接通过源码进行安装。 e.g. go get -u sigs.k8s.io/kind 运行完上述命令后,会将 kind 的可执行文件放到 $(go env GOPATH)/bin 文件夹内,你可能需要将此目录加入到 $PATH 中。 或者也可以先 clone 源代码再通过 go build 进行构建。

K8S 生态周报| 2019.03.18~2019.03.24

我将从本篇开始维护「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。 Docker 6 岁啦 Docker 从 2013 年首次亮相,至今已 6 年之久,而 Docker 也已一度成为容器技术的代名词,很庆幸能投身 Docker 相关的领域。官方博客 Kind (Kubernetes In Docker) 发布 0.2.0 版本 Kind 是一个利用容器技术快速部署本地 Kubernetes 的工具,主要是用于对 Kubernetes 1.11+ 版本的测试。现在发布的 0.2.0 版本支持最新 Kubernetes v1.13.4 及 Docker 18.06.3 且通过了 CNCF 的一致性认证。 Rancher 发布 K8S 最佳安全实践文章 Rancher 在 CNCF 最近发布的 9 个 Kubernetes 最佳安全实践的基础上发布了一篇更安全的最佳实践,这两篇文章都值得一看。 可以通过下面二维码订阅我的文章公众号【MoeLove】

恭喜 containerd 毕业

今年的第一篇文章更新,带来一个重大的消息。 CNCF(云原生计算基金会)在美国时间 2019 年 2 月 28 日宣布 containerd 今天正式毕业了。 这是 CNCF 中毕业的第 5 个项目,之前已经毕业的项目为 Kubernetes、Prometheus、Envoy 和 CoreDNS 。 containerd 2014 年从 Docker 孵化出来,最初是作为 Docker 引擎的底层管理器;在 2017 年 3 月被 CNCF 接受后,containerd 几乎成为了行业容器运行引擎的标准,它专注于简单,健壮和可移植性,任何人都可以使用它来构建自己的容器引擎/平台。 “When Docker contributed containerd to the community, our goal was to share a robust and extensible runtime that millions of users and tens of thousands of organizations have already standardized on as part of Docker Engine,” said Michael Crosby, containerd maintainer and Docker engineer.

2018 小回顾

年底了,惯例做个小回顾,对这一年做个总结,也对下一年大致做个规划。 不过今儿与往年不同的是昨晚突然发高烧,今儿都没能去上班,感谢我的小可爱在照顾我。这篇文章也是躺在床上用手机编辑的。 还是按照惯例从工作,生活两方面来说。先聊聊工作。 工作 现在在网易有道负责 DevOPS 实践落地及 k8s 容器化平台和自动化平台的规划建设等。 总体来说,现在的工作很开心,更能发挥我的所长,也遇到了不错的团队。 说到现在负责的工作,如果大致有些了解的就会知道这个过程比较漫长,推进起来也会有各种阻力。毕竟要改变很多人的思想和习惯,我也在尽量让这一过程变的更加平滑。 同时也在 push 一些理念到行业内,到社区中,不断的进行交流碰撞总结。 社区贡献 今年下半年的贡献和分享相比去年更多一些。主要的分享有: GITC - 《云原生时代下的 CI/CD 实践》 PyCon China - 《基于 Docker 的 CI/CD 实践》 DockerOne 社区 - 《基于 GitLab 的 CI 实践》 Tech Talk Time - 《Docker 实战和基础架构》 分享的主题基本都围绕在容器化和 CI/CD 方面,但每次分享内容却都不一样。 感谢我的小可爱,也感谢所有支持的朋友们。 社区中主要活跃在 Docker 和 Kubernetes 生态方向。维护一些官方镜像,做测试,解决问题,提交代码之类的,明年希望做的更多。 开了一个知乎专栏 『k8s生态』 明年会花更多时间进行建设。 写了一本掘金小册《Kubernetes 从上手到实践》。 其实这个名字并不能很好的概括小册里面的内容,其中也有源码分析之类的。要再次感谢小可爱,感谢编辑 Linmi ,感谢马达老板和何世友老板写的推荐语。也感谢所有人的支持,希望这本小册能对大家有所帮助。 写小册的过程其实也蛮辛苦的,一般要么晚上写,写到凌晨 2~3 点,要么早上 5~6 点钟左右起床,写到去上班。尤其要感谢小可爱,给了我很多支持。

《Kubernetes从上手到实践》正式上线

时间飞逝,转眼已经到了圣诞节,今年又要结束了。感谢还在关注的小伙伴,今年确实更新很少,能不取关的都是真爱… 今年发生了很多事情,留着过几天年终总结的时候再说。有很大一部分的休息时间都用来完成了我的第一本掘金小册 《Kubernetes 从上手到实践》 小册已经正式上线,特意送上各位小伙伴一份礼物,小册 8 折优惠。直接扫码 或者点击此链接即可。 以下是关于小册的一些介绍: 随着容器化及微服务等概念的普及,各个公司都在围绕着如何打造生产环境可用的,高效的容器调度平台,应用快速部署,扩容等平台进行探索。Kubernetes 是 Google 在 2014 年基于其多年在 Borg 系统实践总结出的经验而开源出的一套标准化,可扩展的系统。 而发展至现在(2018年)Kubernetes 已经基本成为了容器编排领域事实上的标准,并且大量的公司都已在生产中使用,无论是国外的 Google, Amazon, GitHub 等,还是国内的阿里,腾讯,京东,滴滴及其他中小公司都在进行着大量的探索及实践。 之前在容器化尚未大量推进的时候,开发工程师只需要关注自己业务代码的实现,而运维工程师在反复的为部署,扩容所需的环境而费时费力。 为了解决环境一致性的问题,也为了能够提高资源的利用率,容器化开始逐步推进,开发工程师的交付由原先的交付代码变成了交付镜像,运维工程师可以将精力集中于保障服务的可高用上。 但为了能够快速的发版验证功能,不再受单体化架构的拖累,微服务的概念也在实践中逐步推进,从原先的单体集中式的服务,拆分为多个松耦合的微服务。到了这时,微服务 + 容器化已经大势所趋,生产中要大量使用,则容器编排变的愈发重要。Kubernetes 在容器编排领域目前已成为事实上的标准,大量公司均已在生产中推进,此时,无论是开发工程师还是运维工程师,皆需要了解并掌握 Kubernetes 的基础技能,才不至于丢失自己的竞争力。 Kubernetes 所涉及的知识点很多, 并且版本迭代也很快,本小册将集中于 Kubernetes 的基础技能,以最常见 Case 入手,帮助大家更快的掌握相关知识并将其用于生产实践中。同时在此过程中,也会深入至 Kubernetes 必要的原理中,同时也会提供相关涉及到的 Docker 及 Linux 内核知识的补充,以便让大家不仅知其然,而且知其所以然。 你会学到什么? Kubernetes 基础架构 Kubernetes 的基础技能, 覆盖常见 Case 从零搭建 Kubernetes 集群 与 Kubernetes 相关的 Docker 和 Linux 内核知识补充 深入 Kubernetes 组件的原理和源码解析 了解 Kubernetes 进阶相关知识体系 适宜人群 了解 Docker,希望能进入 K8S 领域的各领域工程师; 正在或即将在生产环境使用 K8S 的后端工程师; 需要维护或在公司落地 K8S 的运维工程师; 想要走在技术前沿的前端/后端/运维工程师; 准备查缺补漏的容器相关开发工程师;

runc 1.0-rc6 发布之际

如果你在用 Docker 或者 Kubernetes 想必你对 容器运行时 这个概念应该不会太陌生。 在 Docker 中,当你使用 docker info 即可查看当前所使用的 runtime。 ➜ ~ docker info ... Server Version: 18.06.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs ... Swarm: inactive Runtimes: nvidia runc Default Runtime: runc Init Binary: docker-init containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e runc version: 69663f0bd4b60df09991c08812a60108003fa340 init version: fec3683 Security Options: seccomp Profile: default ... 同时,你还可以自己在 /etc/docker/daemon.