k8s的架构设计和节点组成

ETCd nodes:
-1 etcd用于存储Kubernetes cluster中所有的pods / nodes状态的key/value信息,同时提供高可用cluster的特性,生产环境一般提供3到5个etcd nodes以保证一致性协调服务;

etcd集群内部通过Raft一致性算法,类似于ZooKeeper,状态的更改需要超过半数的节点回复确认,因此即使出现脑裂网络分割,节点数较少的分组也无法自行修改状态,从而保证cluster nodes上的信息要么是最新的,要么是过去已经确认过的;

通过etcdctl ls /registry命令可以访问etcd中存储的资源json内容;

-2 k8s对cluster的维护是基于声明式的模式(Declarative Programming,相对于Imperative Programming),也就是维护一个期望的状态的列表(也就是每个deployment的yaml设置),以及一个当前实际状态的列表(也就是当前cluster的实际运行状态),这些状态列表会保存于etcd,其他节点通过watch / event机制获取etcd上状态的更新,并作为相关的调整;

Master nodes:
-1 kube-api-server:外部client访问k8scluster,内部pods间的相互访问都是基于该 Restful接口,另外也提供authentication,load-balance,service discover等功能;

-2 kube-scheduler:负责资源调度(待调度的pod,可用的node),如pod在cluster node上的分配, 主要分为两个阶段,predicate和priority,前者用于硬性条件的筛选,后者为适配度排序;scheduler通过调度策略决定好pod与node的mapping之后,会持久化写入etcd,然后各个node上的kubelet watcher会自动感知并更新自己node上的pod的状态;

通过PodAffinity / AntiAffinity: {TopologyKey: ‘host-name’; LabelSelector: type:redis;}设置有共同满足某些属性的pod才会被放置于同一个node上,或者某些pod不能放置于同一个node上;当部署需要支持HA特性的app instance时,这些app instance会自动被划分到不同的node上;

通过ResourceQuota / LimitRange给不同的任务组动态或者静态分配有限资源,两种控制策略的作用范围都是对于某一namespace,ResourceQuota 用来限制 namespace 中所有的 Pod 占用的总的资源 request 和 limit,而 LimitRange 是用来设置 namespace 中 Pod 的默认的资源 request 和 limit 值;

-3 kube-controller-manager:维护Kubernetes cluster的状态,保证cluster实际的状态和etcd中期望的状态一致,监听cluster中各个node上的kubelet的回传状态,并更新etcd中的状态,如扩容和缩容,版本更新,故障检测等;一共包含八个controller:replication, node, resource quota, name space, service account, token, service, endpoint;

Worker nodes:
运行pod的host, 一个pod只能运行于一个node上,但在一个node上可以由多个pod;每个pod可由多个containers组成,这些container共享同一个node上的network和disk,方便k8s进行进行统一调度和管理,Persistent Volume和Persistent Volume Claim可以pod为单位提供statefulSet的存储功能,并可以忽略具体的存储技术设备(AWS / GFS);

-1 kubelet:负责当前node上的pods、network和volume的管理和监控,处理来自master的指令,同时读取etcd中关于service的spec,并将service实际的运行状态更新到etcd中status;如监控当前node上的pod运行状态,并上报给rc;

当前node上pod的创建和销毁都是由kubelet控制的,而其他的比如ReplicaSet,Deployment,StatefulSet等都是通过修改etcd中pod template的状态,通过kubelet watcher触发各个node上的pod的状态变更;

-2 kube-proxy:充当service抽象层,为当前node上所有pods提供统一的逻辑访问接口,同时提供鉴权,routing和Load Balance功能;

-3 container-runtime:提供container运行环境,如docker,rkt或者其他容器实现标准;

Add ons:
-1 kube-dns:为cluster提供DNS服务,允许pod之间通过domain name进行相互访问,允许service之间通过service name进行相互访问;

Kube-dns以独立pod的形式运行在kube-system namespace,通过watch etcd中service,pod endpoint的变化,更新domain -> ip的映射,其他的pod的容器内/etc/reslv.conf中会缺省配置kube-dns的domain -ip映射,从而为当前node上的service提供domain -> endpoint的转换服务;

-2 ingress-controller:为service提供外网访问入口
通常情况下service和pod暴露的IP仅能在k8s cluster内部进行访问,如果client需要访问k8s cluster通常需要通过Ingress进行转发,Ingress是授权client request进入k8s cluster的一系列的规则集合;

-3 dashboard:提供cluster的GUI访问界面;

-4 fluentd-elasticsearch:提供cluster logs的采集、存储和访问接口;

-5 federation: 跨集群和跨机房网络部署(配合HAproxy实现)

原文地址:https://www.cnblogs.com/leo-chen-2014/p/12603383.html

时间: 2024-10-12 04:01:20

k8s的架构设计和节点组成的相关文章

架构设计:负载均衡层设计方案(5)——LVS单节点安装

1.概述 上篇文章<架构设计:负载均衡层设计方案(4)——LVS原理>(http://blog.csdn.net/yinwenjie/article/details/46845997),我们介绍了LVS的工作模式,和每一种模式的具体工作过程.这篇文章中,我们将介绍单一LVS节点的安装方式.比起上一篇文章,这一片要提到的安装和配置就是非常简单的了,只要您了解原理,实践就是从容的事情. 您可以在您的电脑上使用VMware虚拟机,按照下面介绍的过程一步一步实践.我们将采用两台虚拟机,一台作为LVS节

K8S介绍及架构设计

                                              K8S架构设计 跟新服务时,会创建新RS副本机,并创建实例POD,更新完成一个POD实例,旧RS会停掉一个旧实例                   全部更新完成之后架构如下所示 原文地址:https://www.cnblogs.com/CMX_Shmily/p/12095787.html

Kubernetes 系列第二篇: Kubernetes 架构设计和部署

1. 架构设计和环境设计 1.1. 架构设计 部署 Haproxy 为 Kubernetes 提供 Endpoint 访问入口 使用 Keepalived 将 Endpoint 入口地址设置为 Virtual IP 并通过部署多台节点的方式实现冗余 使用 kubeadm 部署高可用 Kubernetes 集群, 指定 Endpoint IP 为 Keepalived 生成的 Virtual IP 使用 prometheus 作为 Kubernetes 的集群监控系统, 使用 grafana 作为

【JAVA进阶架构师指南】之一:如何进行架构设计

前言 ??本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优秀的架构师,所谓java基础扎实,比如: ??1.java语言三大特性. ??2.java语言八大基本类型及其表示范围. ??3.为什么float和double存在精度丢失? ??4.publish/private/default/protected表示的范围? ??5.static/final的用

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

架构设计:系统间通信(32)——其他消息中间件及场景应用(下2)

(接上文<架构设计:系统间通信(31)--其他消息中间件及场景应用(下1)>) 5-3.解决方案二:改进半侵入式方案 5-3-1.解决方法一的问题所在 方案一并不是最好的半侵入式方案,却容易理解架构师的设计意图:至少做到业务级隔离.方案一最大的优点在于日志采集逻辑和业务处理逻辑彼此隔离,当业务逻辑发生变化的时候,并不会影响日志采集逻辑. 但是我们能为方案一列举的问题却可以远远多于方案一的优点: 需要为不同开发语言分别提供客户端API包.上文中我们介绍的示例使用JAVA语言,于是 事件/日志采集

ZooKeeper架构设计及其应用要点

ZooKeeper是一个开源的分布式服务框架,它是Apache Hadoop项目的一个子项目,主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置管理等,它支持Standalone模式和分布式模式,在分布式模式下,能够为分布式应用提供高性能和可靠地协调服务,而且使用ZooKeeper可以大大简化分布式协调服务的实现,为开发分布式应用极大地降低了成本. 总体架构 ZooKeeper分布式协调服务框架的总体架构,如图所示: ZooKeeper集群由一组

当前一种先进实用的架构设计

目录 1系统架构图...1 2架构设计...3 2.1项目开发环境...3 2.2运行环境要求:...3 2.3 服务器架构平台:...4 2.4.架构逻辑设计...5 2.4.1 LVS+KEEPLIVED+SQUID+HAPROXY+JBOSS集群...5 2.4.2mysql集群...6 2.4.3fastdfs图片服务器集群...8 2.4.4acveMQ服务器集群...8 3 架构剖析...10 3.1负载均衡器解析...10 3.2 lvs解析...11 3.3keeplived解析

IM系统架构设计之浅见

背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺.网易泡泡.YY语音.......恰巧公司产品也要开发一款基于我们自己行业的类IM系统,很有幸我担当了这个产品的架构师,核心代码编写.实现者.下面我近年来从技术上我对IM系统(即时消息的传输,不包括语音,视频,文件的传输)的理解和设计分享出来,浅薄之见,望大家别见笑,欢迎给出批评意见. 一.网络传输协议的选择 目前我知晓的所有IM系统传输即时消息无外乎使用UDP.TCP.基于TCP的http这几种协议中的一种或几种