Kubernetes工作机制: 核心组件和架构

Kubernetes是一款开源的通用多容器管理软件,提供了基本的部署、弹性扩容,自愈能力、负载平衡和流量路由等能力,是微服务应用程序的协调管理利器。Kubernetes将整个数据中心视为一台超级计算机,可以管理符合OCI标准的任何类型的容器。(例如Docker、Core OS的rkt容器等等)。Kubernetes的主要功能包括自动调度、自我修复、自动部署、回滚、水平扩展和负载平衡。

Kubernetes 架构由两个关键组件组成: master节点和worker节点(Minions)。

Master节点 - Kubernetes集群的控制节点

Master节点的工作方式类似于一个团队的管理者,负责整个集群的管理和控制,分配工作负载,类似于对团队有绝对控制权的足球教练。Master节点负责并做出全局决定,安排某个节点处理用户请求。Kubernetes还可以使用多Master节点设置来避免单点故障(Multi-Master HA)。Master节点仅在Linux系统上运行,但不限于任何特定平台,可以是服务器裸机、VM、OpenStack的实例或者任何其他云实例,但是不要在Master节点上运行用户容器(user container)。

Master节点的组件

Master节有以下组件。

  • kube-apiserver Kube-apiserver遵循横向扩展架构设计,是Master控制节点的前端,提供了面向外部的接口,通过REST API与外部世界进行通信,它是资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据。

  • etcd - 群集存储 etcd是kubernetes默认使用的分布式键值存储库,提供了一种可靠的方式来存储kubernetes集群中的数据,主要被用来共享配置和服务发现。集群的所有状态都存储在etcd实例中,本身具有监控的能力,因此当etcd中的信息发生变化时,能够快速的通知集群中相关的组件。etcd扮演的角色如此重要,因此,必须有一个可靠的备份计划。

  • kube-controller-manager

Kube-Controller Manager是集群的管理控制中心,维护集群中的所有控制器(controller),对维持集群的稳定和自我修复,实现高可用,副本控制等起关键作用。它是一个嵌入式控制器并负责命名空间创建和垃圾收集的守护进程,主要管理以下控制器:

  • Node Controller - 管理节点(创建,更新和删除)。

  • Replication controller - 根据清单维护pod的数量。

  • Service Account & Token controller - 为新名称空间创建默认帐户和API令牌。

  • Endpoints Controller - 管理服务于端点对象(服务,pod)。

  • kube-scheduler

kube-scheduler通过apiserver实时监听来自新建pod的请求,并将工作负载分配到合适的工作节点。它监控所有工作节点的资源利用率,并根据新pod的资源需求和现有工作节点的负载做出逻辑决策。Kube-scheduler还需要考虑管理员定义的规则(亲和性和反亲和性,约束)。

Nodes Minions - Kubernetes工作节点

Nodes比Master节点简单得多,是集群最小的计算单元,简单地完成master节点分配下去的任务。如果节点出现故障或挂掉了,我们可以轻易的地将其与新节点交换,让业务恢复正常。换句话说,该节点提供了在其上运行pod的所有必要服务。node节点可以是裸机、虚拟机、OpenStack实例或云实例。

Node节点由以下组件组成:

  • Kubelet - Kuberbernets主要代理

Kubelet是Kubernetes中最主要的控制器,它在每个节点上运行,是Pod和Node API的主要实现者,并使从服务器可以与主服务器通信。它把Node节点注册到集群里,并监视Master kube- apiserver以接收指令进行工作分配。所在Node节点上的Pod的创建、修改、监控、删除等全生命周期管理都是它管理。同时Kubelet定时“上报”所在Node的状态信息到API Server里,如果pod存在问题,它会向Master报告。Kubelet对外暴露只读端口:10255,可以获取Kubelet监控状态信息,该端口是免认证非安全的。

    • / spec endpoint - 提供有关运行节点的信息。

    • / healthz endpoint - 其运行状况检查端点。

    • / pods endpoint - 提供运行pod信息。

  • 容器引擎 - 容器Run-time

Pods将容器打包到其中。要部署容器,你需要容器Run-time软件。在大多数情况下,它就是一个docker引擎,当然我们还可以使用其他容器运行时软件(例如:rkt)。容器引擎管理在pod上运行的容器,它将拉取镜像以进行部署并启动/停止容器上的容器。

  • Kube-proxy

kube-proxy是node节点的大脑,它确保每个pod可以获得唯一的IP。如果要在一个pod中打包多个容器,则pod中的所有容器共享一个IP。它还对服务中的所有pod进行负载均衡(通过iptables规则引导访问至服务IP,并将重定向至正确的后端应用,通过这种方式提供了一个高可用的负载均衡解决方案)。

pod创建流程

下图显示了pod在工作节点中创建的流程。Kubectl是命令行实用程序,你可以在其中将命令传递给Kubernetes集群以创建和管理各种Kubernetes组件。

完。

下一篇分析Kubernetes的另一个重要组成部分:Pod。

转载于:https://my.oschina.net/u/4104428/blog/3076821

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值