• 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上;

     

  • 相关阅读:
    如何上传整个项目或者是文件夹到github
    阅读笔记16-架构师推荐:提高90%开发效率的工具推荐
    阅读笔记15-这些普通的程序猿,如今都已进阶成为技术大佬
    python爬虫——爬取淘票票正在热映电影
    阅读笔记12-Java 面试题 —— 老田的蚂蚁金服面试经历
    SOA架构设计案例分析
    阅读笔记11-孤独后厂村:30万互联网人跳不出的中国硅谷
    阅读笔记09-Java程序员必备的Intellij插件
    阅读笔记08-程序员依然是这个时代,贫寒学子翻身的不二选择
    os.path.join()
  • 原文地址:https://www.cnblogs.com/houjunjun437416/p/11862693.html
Copyright © 2020-2023  润新知