最近需要搭建一个基于k8s的测试环境,在看相关k8s的相关博客的同时,个人整理总结下k8s的核心概念。


Kubernetes(k8s)是自动化容器操作的开源平台,也是时下最为流行的容器编排技术。k8s具有以下强大的特性:

1. 自动化容器的部署和复制

2. 随时扩展或收缩容器规模

3. 将容器组织成组,并且提供容器间的负载均衡

4. 很容易地升级应用程序容器的新版本

5. 提供容器弹性,如果容器失效就替换它,等等...


Kubernetes 总体组织结构图:


Master

Master节点上面主要由四个模块组成:APIServer、scheduler、controllermanager、etcd

APIServer:作为整个系统的控制入口,负责对外提供RESTful的Kubernetes API服务。

schedule:负责节点资源管理,接受来自apiserver创建Pods任务,并将其分配到某个节点。

controllermanager:用来执行整个系统中的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。

etcd:一个高可用的键值存储系统,负责节点间的服务发现和配置共享。


Node

每个Node节点主要由三个模块组成:kubelet、kube-proxy、runtime

kubelet:Kubelet是Master在每个Node节点上面的agent,接受分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给apiserver。

kube-proxy:该模块实现了Kubernetes中的服务发现和反向代理功能(Pod网络代理)。

Docker/Rocket:Kubernetes使用的容器技术来创建容器。


Lable

某些Pod有Label(标签),一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签,通过Label(tier=frontend, app=myapp)来标记前端Pod容器,使用Label(tier=backend,app=myapp)标记后台Pod。然后可以使用Selectors选择带有特定Label的Pod,并且将Service或者Replication Controller应用到上面。


Pod

安排在节点(node)上,包含一组容器和卷。同一个Pod里的Container(容器)共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。

从创建 pod 的对象出发,其Kubernetes各个组件之间的交互及其工作流的时序图:



Replication Controller

它也称复制控制器,Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动升级时很有用。

当创建Replication Controller时,需要指定两个东西:

1.      Pod模板:用来创建Pod副本的模板

2.      Label:ReplicationController需要监控的Pod的标签。

从创建 rc 的对象出发,其Kubernetes各个组件之间的交互及其工作流的时序图:



Service

定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。因为Service是抽象的,所以在图表里通常看不到它们的存在,这也就让这一概念更难以理解。

假设有2个后台Pod,并且定义后台Service的名称为‘backend-service’,lable选择器为(tier=backend, app=myapp)。backend-service 的Service会完成如下两件重要的事情:

1.      会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为‘backend-service’,就能够解析出前端应用程序可用的IP地址。

2.      现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个,此举是通过每个Node上运行的代理(kube-proxy)完成的。

从创建 service 的对象出发,其Kubernetes各个组件之间的交互及其工作流的时序图:



参考:

Kubernetes初探:http://blog.csdn.net/zhangjun2915/article/details/40598151

十分钟带你理解Kubernetes核心概念:http://dockone.io/article/932


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐