kubernetes架构理念

 

一、k8s集群组成

 1、k8s集群主要分为master、node、etcd集群

master  //负责集群管理,高可用集群副本数量最好>=3 奇数个

node  //负责计算,跑任务

etcd  //k8s的元数据库

2、k8smaster组件

scheduler  //调度器,接受任务,将任务分配到后方的node节点上的kubelet组件去完成工作,监听的端口为10250

apiserver  //架构核心,接受客户请求,是用户kubectl指令的执行者,监听的端口为8080

controller-manager  //控制器,维持pod副本期望数量,当node节点上的pod或者容器出现问题over了,负责再其他node节点创建一个一摸一样的容器继续提供服务

etcd  //键值对存储数据库,存储k8s数据支持持久化

3、node组件

kubelet  //负责完成apiserver下发的指令,完成用户的请求

kube-proxy  //负责node容器网络,外界是无法访问docker容器,实现容器里的应用与外界交互

4、falnnel/weavenet网络插件

监听的端口2379

注册到etcd元数据库中的key为"/atomic.io/netwoerk"

5、插件

CoreDNS  //为k8s集群中的svc创建一个域名和ip的对应关系解析

Dashboard  //为k8s集群提供一个B/S结构的访问体系

Ingress controller  //为k8s集群实现七层代理,可以通过主机名称和域名实现负载均衡

Federation  //提供多个k8s集群统一管理功能

Prometheus  //监控k8s

ELK  //提供k8s日志统一分析接入平台

二、kubernetes 安装类型

1、源码编译安装,基于go语言;

2、二进制:安装步骤繁琐复杂,部署kubernetes组件清晰可见;

3、官方推荐kubeadm:安装步骤简单,依赖网络,部署kubernetes组件模糊;

4、minkube 依赖网络,适合开发;

5、yum安装最简单;

三、kebernetes 的权限认证

RBAC 认证体系

ssl证书,https协议

证书格式为pem

 四、kubernetes版本升级

例如:小版本升级,1.10.3版本出现漏洞,1.10.4修复。1.10.3 升 1.10.4 只对apiserver组件升级,node节点kubelet不动,这样的好处是,修复后外界无法利用apiserver这个漏洞,业务跑在弄的节点kubelet上,升级过程不影响业务,还修复了k8s漏洞;

五、kubernetes监控

1、prometheus(普罗米修斯),依赖于官网插件进行监控;k8s原生支持prometheus监控,浏览器访问master节点可看到metic下有很多指标,node节点ip+端口号看到contaier下有容器指标,prometheus就是利用这些指标数据监控;

架构:

监控端:jobs服务可以按照监控端的软件安装对应的插件,比如mysql,redis,k8s等等,jobs服务监听本地地址+端口(9001)采集数据,通过metic(指标)生成url发送到prometheus server端;prometheus server端的配置文件可以设置jobs服务监控的地址和url;

核心:prometheus server从jobs服务采集到监听数据可以存到数据库/存储集群;

web界面:prometheus server端提供一个http server UI界面功能,也可以通过Grafana应用帮助prometheus出监控数据图像,提高UI界面的数据化;

报警端:Alertmanager插件,支持Email;

网络设备监控端:Pushgetway插件监听一个固定端口,主动到到网络设备端去取值,等待prometheus server端要;

2、Heapster

六、备份

1、卷:后段存储集群

2、etcd:高可用模式

七、日志

EFK  //fluentd elasticsearch,附加插件

八、集群的高可用

kubernetes联邦集群,多个地区的k8s集群联动一体,通过联邦服务管理多个地区的k8s集群;

九、kubernetes dns

coredns,通过yaml文件创建安装;

十、kubernetes 包管理工具

helm:支持k8s应用模版,只要通过命令一键将应用部署到k8s集群中,再做配置,调试即可投入使用;

十一:kubernetes七层负载均衡  //k8s默认提供四层负载均衡

ingress controller

 十二、kubernetes特性

service discovery and load balancing 服务的自动发现与负载均衡  //传统的负载均衡,需要手动配置一台物理机,启动web服务,再手动添加到前端的负载均衡器上重新reload下配置文件,过程繁琐麻烦。在k8s通过ployment控制调整pod副本数量就,可以实现调整后端web网站比如WordPress节点数量,负载业务需求;

self-healing 自愈  //传统模式,当一个应用启动在容器中,这个容器出现种种问题,导致容器死掉了,需要重新pull镜像,run起来后再做配置,过程比较复杂,服务持久化是问题。k8s通过master节点controller-manager随时监听各个node节点的容器健康状态,遇到容器问题不能提供服务,会自动起一个一摸一样的容器接替工作,在新的node节点上提供服务;

Automated rollouts and rollbacks 滚动升级和一键回滚  //滚动升级的宗旨是确保应用提供服务不间断,在客户无感知的基础上体验最新的应用版本。例如:当后段web节点有上千台背景,如果同时升级可能会出现代码问题影响业务服务,导致用户体验差的情况。通过滚动升级,就可以实现先升级一部分web节点上的应用版本,如果用户体验好,就继续分批次的升级;

Horizcintal scaling 弹性伸缩  //通过dloyment控制来控制node节点上的pod资源数量。阿里云平台ESS产品借鉴了k8s理念开发出来的;

十三、kubernetes应用场景

微服务  // 

 十四、kubernetes资源类型

1、Replication Controller //简称:rc,

负责node节点上的pod资源的副本数量,保证pod高可用;

负责node节点上的pod资源容器镜像版本滚动升级;

2、Service Controller  //简称:svc

负责负载均衡和端口自动发现;

工作原理:

node ip/cluster ip也叫vip/pod ip

假设:当用户需要访问容器服务时,请求时经过node ip+30000端口 转发到cluster ip/vip+80端口,通过service资源负载或者是反向代理到后段pod ip+80端口,实现用户访问pod上的nginx容器;因为pod ip是随时可能应为删除,升级随时可能变化的,所以service会随时监视发现pod ip+端口状态;

 3、Persistent Volume简称:pv /Persistent Volume Controller简称:pvc

负责node节点上pod的存储持久化,需要和共享存储nfs/ceph即RDB/阿里云oss/GlusterFS/

pv  //为全局类型资源,不属于任何一个namespace空间命名,独立的资源类型,一个pv只能绑定一个pvc;

pvc  //属于一个namespace空间下的一个资源单位,只属于一个pv管理;

工作原理:

k8s实现数据持久化,是通过pv挂在namespace下的pvc资源上;

4、Horizontal Pod Autoscaler 简称:hpa

负责k8s集群node节点上的pod自动弹性伸缩;

工作原理:hpa资源通过对node节点上的物理cpu和内存资源等进行监控(可以通过kubectl aotoscale $控制器名称 --max=$最大pod数量 --min=$最小pod数量 --namespace=$名称空间 --cpu-percent=$cpu最大负载百分比,后触发 );

这里资源层级,hpa > deployment > rc > pod ,根据资源层级逻辑来实现hpa自动发现弹性伸缩;

 5、coredns 简称:dns

6、StatefulSet 控制器

1)pod会安装顺序部署和终结;

创建pod

statefulset会给创建的pod增加一个ID,按照循序创建,只有上一个创建成功并进入就绪的状态后,下一个pod才会开始创建;

 删除pod

删除pod时会按照反序进行,只有上一个pod被完全释放后,再删除下一个;

2)pod 具有唯一的网络名称;

通过Headless服务,基于主机名称,每个pod都有对的网络地址,这个网络域时有Headless服务控制;使得网络域下面的pod都是稳定唯一的域名,集群就不会重新创建处新的pod为新成员了;

3)pod 能有稳定的持久存储;

statefulset中的每个pod可以有自己的独立的PersistentVolumeCiaim对象,即使pod被重新调度到其他节点上,原有的持久磁盘也会挂在到该pod上;

4)pod 能通过Headless服务访问到;

客户端可以通过服务的域名链接到任意pod上;

 

原文地址:https://www.cnblogs.com/houjunjun437416/p/11862693.html