Kubernetes学习笔记01: 一点历史

1

2013年,作为云计算PaaS热潮中的一份子,dotCloud相比于OpenStack、 Cloud Foundry、Heroku、Pivotal、RedHat似乎有些微不足道。

Cloud Foundry的开源PaaS项目,代表了当时PaaS技术的事实标准,被广泛接纳。它提供了一种”应用托管”能力,通过提供简单的命令,使开发者可以方便的将应用”上云”, 例如:cf push "my_app"其核心是应用的打包和分发。Cloud Foundry为每种主流语言都定义了一种打包格式, cf push的作用,就是将应用包、启动脚本上传到云端,通过调度器选择一批应用的虚拟机,
将脚本和应用包分发到机器上并启动执行。一个虚拟机上,往往启动多个来自不同用户的应用,PaaS平台会调用操作系统的Cgroups和Namespace机制,为每个应用单独创建隔离环境。
实现多个租户之间互不干涉的在虚拟机中部署和执行应用。整个过程就是PaaS项目最核心的能力。所谓的隔离环境,就是现在的容器技术。

在dotCloud公司开源自己的Docker项目之前,容器技术作为PaaS底层机制,并没有太多人关注。可就在开源后的短短几个月时间,Docker项目就迅速崛起,席卷了整个PaaS社区,改变了整个云计算领域的发展历程。

Docker项目区别于传统PaaS项目的秘密武器就是Docker镜像。如前面所述,当时PaaS项目的痛点就是用用的打包分发,用户需要为每一种语言、每一个应用维护一个打好的包,很难保持本地环境和云端环境的一致性。

Docker镜像的出现,从根本上解决了应用打包分发的问题:相比PaaS应用的压缩包只包含启动脚本加应用执行文件,Docker镜像则直接包含一个完整的操作系统所有文件和目录和应用启动的所有文件和脚本。轻松的保持了本地和云端环境的高度一致。
使用docker builddocker pushdocker run 即可将应用本地环境完整一致的打包推送到云端运行。

另外,Docker项目还对开发者有者天然的亲和力,开发者无需精通Linux内核原理和太多其他知识,就可以打包定制自己的镜像。简单的几个命令,就可以构建一个网站镜像,一个Nginx集群。深受开发者的欢迎。

Docker项目,重新定义了PaaS,使其演变为以Docker容器为核心,以Docker镜像为打包标准的”容器化”的PaaS。

2

随着Docker项目的崛起,dotCloud公司也将自己的公司名字改为Docker,并且不甘于仅仅提供创建和启停容器的小工具,希望提供更多平台层的能力,向PaaS进化。

2014年底,Docker公司发布Swarm,展示了Docker公司PaaS方向的野心。Swarm项目的最大亮点,就是它基本保持了单机部署和集群部署API的一致性,操作方式简单明了,受到众多开发者的热捧。(当时在公司的容器控制项目依赖Swarm也是基于这个原因)。

随后,Docker公司收购了率先提出”容器编排”(Container Orchestration)概念的Fig项目(后来改名为Compose)。一时间,容器生态相关的项目层出不穷:容器网络处理SocketPlane项目(后被Docker公司收购),容器存储Flocker项目(后被EMC公司收购), 集群图形化管理Tutum项目(被Docker公司收购)等。

2014年6月,Google开源名为Kubernetes的项目,再一次改变了容器市场的格局。

3

为了限制Docker公司在Docker开源项目中的绝对话语权和强势态度,以及Docker项目在告诉迭代中表现出的不稳定和频繁变更问题,2015年6月,Docker公司、CoreOS、Google、RedHat共同宣布将Libcontainer(Containerd)项目捐出,改名为RunC,交由完全中立的基金会管理,并以其为依据,共同制定标准和规范,即OCI(Open Container Initiative).

然而OCI的成立,并没有改变Docker公司一家独大的现状。随后,Google、RedHat牵头发起名为CNCF(Cloud Native Computing Foundation)的基金会。希望以Kubernetes项目为基础,建立开源基础设施领域厂商主导的、按照独立基金会方式运营的平台级社区。

在容器编排方面,RedHat与Google结盟,打造出了一个与众不同的容器编排和管理生态。并在整个社区推进民主化架构。与Docker社区和Mesos社区形成三足鼎立局面。

2017年10月,DOcker公司在企业版Docker中内置Kubernetes,标志编排之争落下帷幕。

次年3月,Docker公司CTO Solomon Hykes宣布辞职,5年容器纷争尘埃落定。

关于回溯算法的几点心得

摘要:关于回溯算法的几点心得
Abstract: Some inspirations about backtracking algorithms.

回溯(Backtracking)算法思路:

在当前局面下,你有若干种选择。逐一尝试每一种选择。
如果发现某种选择行不通(违反了某些限定条件)就返回;
如果某种选择试到最后发现是正确解,就将其加入解集。

这里需要注意的是,为了能够回溯,多个选择都是从相同起点出发的,注意在同一层次下的多个选择结果之间不要相互影响。

使用递归解决问题需要明确以下三点:选择 (Options)限制 (Restraints)结束条件 (Termination)。即“ORT原则”。

Read more »

kotlin01 基本语法

摘要:kotlin基本语法
Abstract: kotlin basic syntax

定义package

包定义需要在文件开头,不需要和文件系统路径一致。

1
2
3
package my.demo

import java.util.*

定义function

1
2
3
fun sum(a: Int, b: Int): Int {
return a + b
}

函数可以是一个表达式,返回类型由编译器推断:

1
fun sum(a: Int, b: Int) = a + b

无返回值的函数返回Unit对象。

1
2
3
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}

Unit可以被省略。

1
2
3
fun printSum(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
Read more »

matplotlib unicode

摘要:解决matplotlib中文乱码的问题
Abstract:How to plot unicode using matplotlib

Read more »

2016——和时间赛跑的我

新年临近,转眼间已经是2016年的最后一天了。抓紧这最后的几个小时,跟风写个总结。

如果说要我2016年的关键词,那我想就想题目那样,和时间赛跑。从2011年来到北京,到现在已经有五年时间了。想起来北京上学之前,和长辈们、朋友们聊天,总会说到,北京的生活节奏很快blabla,我一直没有什么深刻的体会。如今我挤在早班地铁里,或者9点多下班打车回家的路上,有时想起那些话,心里琢磨难道这就是所谓的”生活节奏快吗”?只是我不知不觉地习惯了这样的”节奏”,很少有时间静下心来回顾和反思。李笑来在其公众号文章中曾说”慢即是快,快即是无”。我认为不光是读书是这样,一味的”快”,缺乏精益和反思,和懒惰一样可怕,整个人很容易被这样的节奏淹没。
2016年,我的最大敌人就是时间。繁忙的工作让我更加珍惜时间,深感时间流逝太快。人的年龄越大,越感到时间变快,可能是因为对于一个3岁小孩,他的一天占到他人生的一千分之一,一年占到他人生的三分之一,而对于一个70岁的老人,他的一天占到人生的两万分之一[1]。和时间赛跑,就是在和这样的节奏抗争,让我能继续保持进取心、继续保持好奇心、继续我的业余爱好,从看似重复的工作和生活中获取新鲜的东西。

Read more »