K8S集群组件
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集群组件的更多相关文章
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- [转帖]当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?
改天学习一下. https://www.cnblogs.com/alisystemsoftware/p/11570806.html 当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题 ...
- China Azure中部署Kubernetes(K8S)集群
目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...
- kubernetes系列03—kubeadm安装部署K8S集群
本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...
- k8s重要概念及部署k8s集群(一)--技术流ken
重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...
- K8S集群 NOT READY的解决办法 1.13 错误信息:cni config uninitialized
今天给同事 一个k8s 集群 出现not ready了 花了 40min 才搞定 这里记录一下 避免下载 再遇到了 不清楚. 错误现象:untime network not ready: Networ ...
- Kubeadm安装的K8S集群1年证书过期问题的解决思路
这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...
- 使用 --image-repository 解决kubeadm 安装k8s 集群 谷歌镜像墙的问题
从网上我们看到的好多kubeadm 安装k8s 的时候都说需要下拉取镜像,然后修改,实际上 我们可以使用配置参数,快速的跳过墙的问题 说明: 基础镜像,我们仍然存在,拉取的问题,但是dockerhub ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
随机推荐
- Django Model 基础数据库操作应用
https://blog.csdn.net/Mrzhangjwei/article/details/53001841 一.数据库操作1.创建model表 基本结构: from django.db im ...
- Mac下的Pycharm教程
除非你是用记事本写代码,或者用vim写代码的大牛,那么推荐使用PyCharm编写Python代码. PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效 ...
- POJ3734 Block母函数入门
一段长度为n的序列,你有红黄蓝绿四种颜色的砖块,一块砖长度为1,问你铺砖的方案数,其中红黄颜色之和必须为偶数. #include <queue> #include <stack> ...
- NOIp2015D1T3 斗地主【暴搜】
题目传送门 刚开始读到题目的时候,非常懵逼,非常崩溃,写着写着呢,也有点崩溃,细节有点多. 这个做法呢,只能过掉官方数据,洛谷上好像有加强版,只能得$86$分,就没有管了. 大概说一下思路: 暴力搜索 ...
- 4 基于优化的攻击——CW
CW攻击原论文地址——https://arxiv.org/pdf/1608.04644.pdf 1.CW攻击的原理 CW攻击是一种基于优化的攻击,攻击的名称是两个作者的首字母.首先还是贴出攻击算法的公 ...
- Shell脚本编程(一)
shell 脚本编程(一) 1 . shell 的作用 Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一 ...
- Eclipse 新建.jsp页面后,页面头部标签报错的解决方法
Eclipse 新建.jsp页面后,页面头部标签报错的解决方法 1.报错地方: 2.解决方法: .jsp页面右键==>BUild Path ==>Configure Build Path. ...
- redis在php中实际应用-hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. 目录: 1.批量赋值:hmset,hmget,hgetall 可用于存储一条条数据,即一个 ...
- Python模拟进度条
import time for i in range(0,101,2) time.sleep(0.2) num = i // 2 per = '\r %s %% : %s'%(i,'*'*num) p ...
- CVE-2018-19985漏洞学习
简介 4.19.8之前,在Linux内核中,hso_probe()函数中发现了一个缺陷,该函数从USB设备(作为u8)读取if_num值,并且不需要对数组进行长度检查就使用它来索引数组,从而导致在hs ...