master节点主要由apiserver、controller-manager和scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成,而每个node节点则主要包含kubelet、kube-proxy及容器引擎等组件。此外,完整的集群服务还依赖于一些附加组件,如kubedns等。

一、master组件

1、apiserver

apiserver负责输出restful风格的kubernetes api,它是发往集群的所有rest操作命令的接入点,并负责接收、校验并响应所有的rest请求,结果状态被持久存储于etcd中,因此,apiserver是整个集群的网关。

2、cluster state store

kubernetes集群的所有状态信息都需要持久存储于存储系统etcd中,不过,etcd是由coreos基于raft协议开发的分布式键值存储,可用于服务发现、共享配置以及一致性保障(如数据库主节点选择、分布式锁等)。因此,etcd是独立的服务组件,并不隶属于kubernetes集群自身。生产环境中应该以etcd集群的方式运行以确保其服务可用性。

etcd不仅能够提供键值数据存储,而且还为其提供了监听(watch)机制,用于监听和推送变更。k8s集群系统中,etcd中的键值发生变化时会通知到apiserver,并由其通过watch api向客户端输出。基于watch机制,k8s集群的个组件实现了高效协同。

3、controller manager

k8s中,集群级别的大多数功能都是由几个被称为控制器的进程执行实现的,这几个进程被集成于kube-controller-manager守护进程中。由控制器完成的功能主要包括生命周期功能和api业务逻辑,具体如下:

生命周期功能:包括namespace创建和生命周期、event垃圾回收、pod终止相关的垃圾回收、级联垃圾回收及node垃圾回收等

api业务逻辑:例如,由replicaset执行的pod扩展等。

4、scheduler

k8s是用于部署和管理大规模容器应用的平台,根据集群规模的不同,其托管运行的容器很有可能会数以千计甚至更多。apiserver确认pod对象的创建请求之后,便需要由scheduler根据集群内各节点的可用资源状态,以及要运行的容器的资源需求做出调度决策。

二、node组件

1、kubelet

kubelet是运行于工作节点之上的守护进程,是node的核心代理程序,它从apiserver接收关于pod对象的配置信息并确保它们处于期望的状态(desired state,也是目标状态)。kubelet会在apiserver上注册当前工作节点,定期向master汇报节点资源使用情况,并通过cadvisor监控容器和节点的资源占用状况。

2、container runtime

每个node都要提供一个容器运行时环境,它负责下载镜像并运行容器。kubelet并未固定链接至某容器运行时环境,而是以插件的方式载入配置的容器环境,这种方式清晰地定义了各组件的边界。目前k8s支持的容器运行环境包括docker、rkt、cri-o、fraki等。

3、kube-proxy

每个工作节点都需要运行一个kube-proxy守护进程,它能够按需为service资源对象生成iptables或ipvs规则,从而捕获访问当前service的clusterip的流量并将其转发至正确的后端pod对象。

三、核心组件

k8s集群还依赖于一组成为“组件”(add-ons)的组件以提供完整的功能,它们通常是由第三方提供的特定应用程序,并且托管运行于k8s集群之上。

kubedns:在k8s集群中调度运行提供dns服务的pod,同一集群中的其他pod可使用此dns服务器解决主机名。k8s自1.11版本开始默认使用coredns项目为集群提供服务注册和服务发现的动态名称解析服务,之前的版本中用到的是kube-dns和skydns项目。

dashboard:kubernetes集群的全部功能都要基于web的UI来管理集群中的应用甚至是集群自身。

heapster:容器和节点的性能监控与分析系统,它手机并解析多种指标数据,如资源利用率、生命周期事件等。新版本的k8s中,其功能会逐渐由prometheus结合其他组件所取代。

ingress controller:service是一种工作于传统层的负载均衡器,而ingress是在应用层实现的http(s)负载均衡机制。不过,ingress资源自身并不能进行“流量穿透”,它仅是一组路由规则的集合,这些规则需要通过ingress控制器(ingress controller)发挥作用。目前,此类的可用项目有nginx、traefik、envoy及haproxy等。

K8S集群组件的更多相关文章

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  2. [转帖]当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?

    改天学习一下. https://www.cnblogs.com/alisystemsoftware/p/11570806.html   当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题 ...

  3. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  4. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  5. k8s重要概念及部署k8s集群(一)--技术流ken

    重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...

  6. K8S集群 NOT READY的解决办法 1.13 错误信息:cni config uninitialized

    今天给同事 一个k8s 集群 出现not ready了 花了 40min 才搞定 这里记录一下 避免下载 再遇到了 不清楚. 错误现象:untime network not ready: Networ ...

  7. Kubeadm安装的K8S集群1年证书过期问题的解决思路

    这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...

  8. 使用 --image-repository 解决kubeadm 安装k8s 集群 谷歌镜像墙的问题

    从网上我们看到的好多kubeadm 安装k8s 的时候都说需要下拉取镜像,然后修改,实际上 我们可以使用配置参数,快速的跳过墙的问题 说明: 基础镜像,我们仍然存在,拉取的问题,但是dockerhub ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

随机推荐

  1. 【HANA系列】SAP HANA中null变成问号的问题

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA中null变成问 ...

  2. iscsi脚本

    服务端 #!/bin/bash #测试主机是否可以联网 echo -e "\033[31m即将测试主机是否可以联网\033[0m" ping -c 4 www.baidu.com ...

  3. 【Linux开发】linux设备驱动归纳总结(六):2.分享中断号

    linux设备驱动归纳总结(六):2.分享中断号 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  4. pubwin2009 备份文件恢复

    local_db.DBBak 恢复注意: 1.先安装好全新server -> 用SQLManager连接数据库 连接时右键编辑 SQLSERVER注册属性  默认sql连接 帐号netcafe ...

  5. 关于content的理解

    Context字面意思上下文,位于framework packageandroid.content.Context中,其实该类为long型,类似Win32中的Handle句柄,很多方法需要通过 Con ...

  6. C语言|作业07

    一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://i-beta.cnblogs.com/posts/edit;postId=11811545 我在这个课程的 ...

  7. [转发]centos7搭建自己的yum源

    centos7搭建自己的yum源 https://www.cnblogs.com/juandx/p/6136621.html 还是需要学习呢 自己之前记得 查过 但是忘记了.     http://w ...

  8. sql server备份损坏

    sql server备份损坏 转自:https://www.cnblogs.com/zhijianliutang/p/4080916.html 1.备份文件和数据库放在同一个(或一组)的物理磁盘上.磁 ...

  9. 关于前端JS判断字符串是否包含另外一个字符串的方法总结

    RegExp 对象方法 test() var str = "abcd"; var reg = RegExp(/d/); console.log(reg.test(str)); // ...

  10. python-bioInfo-codes-2

    1. _tkinter.TclError: no display name and no $DISPLAY environment variable 解决方案: import matplotlibma ...