Lm3sy


What is “Node”?

在Kubernetes里,Node可分为两层。


一层是Control panel,用来提供对USER这些功能的组件。


下一层则是与容器打交道,统称为Node。围绕Kubernetes这个组件为核心的所有功能、特性,都在这层实现。在社区里我们称之为sig - node。


所有容器都跑在Node上,它也是部署Kubernetes的核心。所有Kubernetes和container相关的特性都是在这里实现。它还是Kubernetes对接runtime的唯一节点。容器的网络和存储都是在Node这层实现的。


Why  “Node”  Matters?

Kubernetes独特的地方在于,在它发展的同时,还有一个侧向来自Google的加成。


Borg

Kubernetes这个项目可以理解为Borg系统和container理念的结合。


Kubelet Overview

K8S项目官方Project Manager谈Node的发展现状及未来_java

K8S项目官方Project Manager谈Node的发展现状及未来_java_02

K8S项目官方Project Manager谈Node的发展现状及未来_java_03

K8S项目官方Project Manager谈Node的发展现状及未来_java_04


Pod


Pod是Kubernetes一个独有的概念,它源自于Borg的”Alloc”,是Kubernetes里面的原子调度单位,并且可以类比为数据中心、操作系统上的进程组。所有关于Pod的概念都是在Node上实现的。


Multiple Apps in One Container

要在一个容器里跑多个应用。既然是多个应用,就应该分别部署成多个container,然后把这些container打包进一个Pod。


Kubernetes本身的Master节点就是由kube-apiserver、kube-scheduler和controller-manager三个进程组成的,它们三个相互协作。


Ensure Container Order

Pod里有一个特性叫InitContainer。可以把apiserver定义成InitContainer。InitContainer在Kubernetes先于所有的用户容器启动,并保证running才会进行下一步动作。同样也可以定义多个,它的执行顺序会严格按照定义顺序去执行。

Health Check for Containers

在Kubernetes里,只要把Health Check加在每一个容器上,Kubelet会负责生成Pod的健康状态。

Copy Files from One to Another

假如controller要连apiserver,可以选择加密的方式去连。这时需要一个由apiserver生成的KEY的文件。在Pod里设立一个volume,这个volume可以同时mount给apiserver容器和controller容器,它们就共享一个volume。


在Pod里,volume是shared的。


Connect to Peer Container

现在controller和scheduler会频繁地连apiserver,我们把它们的协作关系定义为Pod。由于Pod里的Container是共享一个network和namespace,所以说这三个容器在一个namespace里的。

Schedule Super Affinity Containers

在Kubernetes里,controller和apiserver这样的容器是属于一个Pod,而Pod是Kubernetes里面的原子调度单位,所以它们是一起调度的。

So,this is Pod

Pod可以解释为Container世界里的Design pattern,来解耦容器和应用之间的关系,使得容器可以重用,更容易地实现重构。更重要的是它给你可以描述一些关系比较复杂的应用的能力。


Kubblet

K8S项目官方Project Manager谈Node的发展现状及未来_java_05


Prepare Volume

Kubernetes把Volume完全独立出来,以提高启动容器的性能。


Eviction

Eviction是Kubernetes里资源模型的清理。

CRI


K8S项目官方Project Manager谈Node的发展现状及未来_java_06


CRI使得Kubernetes有能力接入任何Container runtime。

CRI Runtime Shim

Kubernetes官方支持的Shim有dockershim、frakti、cri-o、rktlet和cri-containerd等等。


Shim的工作主要是管理container的生命周期和做Streaming这种操作。


Mix Runtimes:laaS-less Kubernetes

Kubernetes可以在一个节点上统一起基于hypervisor和docker容器。有了hypervisor之后,容器就有独立内核。