k8s的架构设计和节点组成

leo-chen-2014 leo-chen-2014     2023-04-07     754

关键词:

技术图片

 

 

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实现)

k8s架构分析

K8S集群简介K8S的集群由master和node组成,节点上运行着若干K8S服务。如下图  Master节点master节点上运行着的后台服务有kube-apiserver, kube-scheduler,kube-controller-manager,etcd和pod网络.(flannel)。如下图所示 1.APIServer(kube-apiserve 查看详情

[k8s]elk架构设计-k8s集群里搭建

elk设计架构参考Elasticsearch最佳实践建议将这些节点分成三个角色:Master节点-仅用于集群管理,没有数据,没有HTTPAPIClient节点-用于客户端使用,无数据,使用HTTPAPIData节点-旨在存储和索引数据,没有HTTPAPI分为管理区存储区读写... 查看详情

kubernetes学习记录:k8s的架构和基本概念

1.k8s架构组件kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统 1.1k8s的基本架构 和一些分布式存储和分布式数据库集群类似,在k8s集群中,也存在着master节点和node节点其中master节点主要负责pod调度、... 查看详情

kubernetes系列02—kubernetes设计架构和设计理念

1、Kubernetes设计架构Kubernetes集群包含有节点代理kubelet和Master组件(APIs,scheduler,etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图。 2、Kubernetes节点2.1介绍①在这张系统架构图中,我们把服务分为运行在工作节... 查看详情

k8s架构基本概念

kubectl:k8s是命令行端,用来发送客户的操作指令。APIserver:是k8s集群的前端接口,各种客户端工具以及k8s的其他组件可以通过它管理k8s集群的各种资源。它提供了HTTP/HTTPSRESTfulAPI,即K8SAPI.Scheduler:负责决定将Pod放在哪个Node上运行。在... 查看详情

k8s架构,(基本概念)

Kubectl:k8s是命令行端,用来发送客户的操作指令APIserver:是k8s集群的前端接口,各种客户端工具以及k8s的其他组件可以通过它管理k8s集群的各种资源,他提供了http/httpsRESTfulAPI即k8sAPIScheduler:负责决定将pod放在那个node节点上运... 查看详情

k8s学习之体系架构介绍

K8S学习之体系架构介绍Kubernetes整体架构master构成worker构成Controller控制器其他Label参考链接Kubernetes整体架构内容介绍每个Kubernetes集群都有两种类型的节点:master和worker。master负责控制和监控worker工作集群整体组成master构成整... 查看详情

k8s五分钟快速入门

...讲Kubernetes是一种综合的基于容器构建分布式系统的基础架构环境,它不仅能够实现基本的拉取用户镜像、运行容器,还可以提供路由网关、水平扩展、监控、备份、灾难恢复等一系列运维能力,而更重要的是Kubernetes可以按照用... 查看详情

k8s集群架构的kubeadm部署dashboard和harbor仓库部署(代码片段)

K8S集群架构的kubeadm部署、dashboard和Harbor仓库部署一、kubeadm部署K8S集群架构实验准备工作:1.1环境准备1.2所有节点安装docker1.3master和node节点安装kubeadm,kubelet和kubectl1.4部署K8S集群二、dashboard部署2.1所有节点安装dashboard2.2... 查看详情

k8s集群架构的kubeadm部署dashboard和harbor仓库部署(代码片段)

K8S集群架构的kubeadm部署、dashboard和Harbor仓库部署一、kubeadm部署K8S集群架构实验准备工作:1.1环境准备1.2所有节点安装docker1.3master和node节点安装kubeadm,kubelet和kubectl1.4部署K8S集群二、dashboard部署2.1所有节点安装dashboard2.2... 查看详情

如何入门k8s?

...ode):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。工作节点(WorkerNode):主要负责运行容器。命名空间 (Namespace)k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3... 查看详情

ansible部署kbuernetes

K8S集群架构:一个K8S集群是由两大部分组成:Master节点和Node节点一.Master节点主要包括APIServer、Scheduler、Controllermanager、etcd几大组件1.APIServer(提供其他模块之间的数据交互和通信的枢纽(其他模块通过APIServer查询或修改数据,... 查看详情

kubernetes架构

一、k8s的架构(有哪些组件、每个组件负责什么。组件的交互)·有哪些组件、每个组件负责什么:一个 Kubernetes 集群由很多节点组成。节点上运行 Kubernetes 所管理的容器化应用。集群具有至少一个工作节点。工作... 查看详情

k8s多maser集群架构和dashboardui的二进制部署(代码片段)

多Maser集群架构一、多Maser集群架构的了解二、多Maser集群架构的部署2.1加入master02节点2.2lb01和lb02搭建nginx和Keepalived2.3修改node节点上的相关配置文件3.4.在master01或master02节点上操作三、部署DashboardUI一、多Maser集群架构的了解____Kub... 查看详情

k8s核心架构原理

K8S是属于主从设备模型(Master-Slave架构),即有Master节点负责核心的调度、管理和运维,Slave节点则执行用户的程序。文章目录一、MasterNode组件二、WorkerNode组件三、K8S工作流程总结一、MasterNode组件APIServer:K8S... 查看详情

k8s核心架构原理

K8S是属于主从设备模型(Master-Slave架构),即有Master节点负责核心的调度、管理和运维,Slave节点则执行用户的程序。文章目录一、MasterNode组件二、WorkerNode组件三、K8S工作流程总结一、MasterNode组件APIServer:K8S... 查看详情

云原生训练营模块四kubernetes架构原则和对象设计(代码片段)

Kubernetes架构原则和对象设计K8s安装K8s概念K8s架构控制器的工作流程了解KubectlKubernetes生态系统常用Kubernetes对象及其分组核心技术概念和API对象TypeMeta核心对象概览课后练习K8s安装CentOS7利用Kubeadm快速部署Kubernetes集群K8s概念Kubernete... 查看详情

k8s架构原理及其工作流程

K8S架构原理及其工作流程前言一、容器编排系统二、K8S整体架构图1、K8SMaster节点2、K8SNode节点三、POD创建过程四、K8S各组件工作流程总结k8s的组件k8s的工作流程前言一、容器编排系统容器编排系统需要满足的条件:服务注册&... 查看详情