K8s架构及基本概念

架构图

11-K8s架构及基本概念 - 图1

Master(主节点)

K8s里的Master指是集群控制节点,一个K8s集群需要有一个Master节点来负责整个集群的管理和控制,一般来说,K8s的所有控制命令都是发送给Master,然后由Master来负责具体的执行过程。

Master通常会部署在一个独立的服务器或虚拟机上,它是整个集群的首脑,如果Master宕机或不可用,那么我们所有的控制命令都将会失效。

Master节点上运行着如下的关键进程:

  • API Server:K8s里所有资源增删改查等操作的对外入口,也是集群控制的入口进程,它提供了HTTP RESTful API接口给客户端以及其他组件调用。
  • Controller Manager:Controller Manager是K8s里所有对象的自动化控制中心。顾名思义,它负责管理“Controller”,主要有:
    • endpoint-controller:刷新服务和pod 的关联信息
    • replication-controller:维护某个 pod 的副本数为配置的数值
  • Scheduler:负责资源调度(Pod调度),将Pod分配到某个节点上。
  • [可能有]etcd:资源对象存储中心,K8s的所有资源对象数据都存储在此。

Node(工作节点)

在K8s集群中,除Master以外的其他机器被称为Node节点。与Master一样,Node节点也可以是一台物理机或虚拟机。

由于Node节点才是K8s集群中的工作

  • kubelet:负责Pod所对应的容器的生命周期管理,例如容器的创建、启停等。根据从etcd中获取的信息来管理容器、上报Pod运行状态等。
  • kube-proxy:实现K8s Service的通信与负载均衡机制。
  • docker:你懂的

Pod(容器组)

Pod是由若干容器组成的容器组,同一个Pod内的所有容器运行在同一主机上,这些容器使用相同的网络命令空间、IP地址和端口,相互之间能通过localhost来发现和通信。

不仅如此,同一个Pod内的所有容器还共享存储卷,这个存储卷也被称为Pod Volume。

在k8s中创建,调度和管理的最小单位就是Pod,而非容器,Pod通过提供更高层次的抽象,提供了更加灵活的部署和管理模式。

Replication Controller(RC)

RC是用来管理Pod的工具,每个RC由一个或多个Pod组成。

  • 在RC被创建之后,系统将会保持RC中可用的Pod个数与创建RC时定义的Pod个数一致。
    • 如果Pod个数小于定义的个数,RC会启动新的Pod
    • 反之则会杀死多余的Pod。

我们常会使用YAML定义一个RC,例如:

  1. apiVersion: v1 # API版本
  2. kind: ReplicationController # 定义一个RC
  3. metadata:
  4. name: mysql # RC名称,全局唯一
  5. spec:
  6. replicas: 1
  7. selector:
  8. app: mysql # RC的POD标签选择器,即:监控和管理拥有这些标签的POD实例,确保当前集群中有且只有replicas个POD实例在运行
  9. template:
  10. metadata:
  11. labels: # 指定该POD的标签
  12. app: mysql # POD副本拥有的标签,需要与RC的selector一致
  13. spec:
  14. containers:
  15. - name: mysql
  16. image: mysql
  17. ports:
  18. - containerPort: 3306
  19. env:
  20. - name: MYSQL_ROOT_PASSWORD
  21. value: "123456"

如上所示,一个RC的定义一般包含了如下三部分:

  • Pod所期待的副本数
  • 筛选Pod的标签选择器:RC通过Label来关联对应的Pod
  • Pod模板:当集群中Pod的副本数量小于(大于)期望值时,K8s就会使用该模板去创建(删除)新的Pod。

Service

Service可以简单理解成一组提供相同服务的Pod的对外访问入口。Service与Pod之间通过Selector来绑定。下图简单说明了Service与Pod之间的关系

11-K8s架构及基本概念 - 图2

提问:RC、Pod、Service三者之间的关系是怎样的?

参考文档

容器Docker与kubernetes:http://www.cnblogs.com/stonehat/p/5148455.html

Kubernetes扫盲:http://blog.csdn.net/frank_zhu_bj/article/details/51824697

Kubernetes微服务架构应用实践:http://www.chinacloud.cn/show.aspx?id=24091&cid=12