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. Centos7永久关闭防火墙

    Centos7永久关闭防火墙 查看防火墙状态: systemctl status firewalld.service 绿的running表示防火墙开启 执行关闭命令: systemctl stop f ...

  2. 【AMAD】coconut -- 简单,优雅,pythonic的函数式编程语言

    动机 简介 个人评分 动机 作者的话: 我喜欢函数式编程,我认为函数式编程提供了一个更自然的方式来思考问题,并且代码也更加优雅,易读.不过如果你看过前20个最受欢迎的编程语言,你会发现没有一个式函数式 ...

  3. base64图片数据类型转numpy的ndarray矩阵类型数据

    1.两种方法如下链接 https://www.cnblogs.com/mtcnn/p/9411683.html 2.第一种方法: # coding: utf-8 # python base64 编解码 ...

  4. C#连接oracle数据库报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用

    原因大概是OracleOraDb11g_home1TNSListener服务没启动的原因 步骤一.停止并重新启动OracleOraDb11g_home1TNSListener服务,试一下是否可行. 如 ...

  5. Hive怎么使用远程连接

    HIVE的连接模式== 本地连接模式 直接启动hive命令 HIVE的远程连接 这里要启动HIVE的服务 thirft进行编写 hiveserver2 —- > 前台启动 后台启动 前台启动 h ...

  6. MHA搭建

    https://metacpan.org 下载perl依赖包的网站 ##################上传安装依赖包#################### mkdir /opt/soft_file ...

  7. node.js中的url.parse方法使用说明

    node.js中的url.parse方法使用说明:https://blog.csdn.net/swimming_in_it_/article/details/77439975 版权声明:本文为博主原创 ...

  8. Django基础之模型层(下)

    聚合查询 关键字:aggregate from django.db.models import Max,Min,Sum,Count,Avg 统计所有书的平均价格 models.Book.objects ...

  9. python面向对象反射-框架原理-动态导入-元类-自定义类-单例模式-项目的生命周期-05

    反射 reflect 反射(reflect)其实是反省,自省的意思 反省:指的是一个对象应该具备可以检测.修改.增加自身属性的能力 反射:通过字符串获取对象或者类的属性,进行操作 设计框架时需要通过反 ...

  10. python-queue队列-生产者消费者

    import threading,time import queue q = queue.Queue(maxsize=10) def Producer(name):#生产者 count=1 while ...