Kubernetes学习之架构解析

如有错误请批评指正,当对知识点有了新的理解会修正博客内容



k8s 是什么?

k8s 是谷歌开源的容器集群管理工具,灵感来自谷歌内部的borg 系统,那么使用容器来运行有什么优势呢?以及使用k8s的出现解决了什么问题?带给我们怎么样的便利?
我们先回顾下历史

[外链图片转存失败(img-v1ciaQeW-1563331225776)(evernotecid://CE906516-F5B6-4742-B690-4AA65CEDA751/appyinxiangcom/21932148/ENResource/p461)]

(来自官方文档)

传统部署: 一台机器上可能部署很多个应用,各个应用之间互相影响,没有隔离,如果一个应用出现问题,比如占用资源过多,那么其他的进程就有可能会被杀死。

虚拟机部署: 虚拟机可以在宿主机上运行多个操作系统,然后把每个应用放到对应的虚拟操作系统中,这样就解决了,进程之间相互影响的问题,但是又有新的问题,就是资源的利用率不高,因为虚拟机是很占内存的,而且内部运行了多个操作系统,那么宿主机的资源基本上都浪费在了虚拟机上,而且存在二级调度的问题,性能上也会有所下降。

容器部署: 可以把容器先看做一个小型的虚拟机,各个容器内的进程之前相互隔离,有自己独立的文件系统,内存,cpu ,进程空间,同时也可以共享某些资源,每个容器内置运行一个进程,不会存在虚拟机那样巨大的系统开销,因此资源的利用率非常的高,最主要的是有很好的移植性,做好镜像就可以到处运行了。

好的知道容器是个好东西了,那么k8s 能做什么呢,和容器又有啥关系???
先思考一个问题?

容器虽然把各个进程隔离开了,我们写好Dockerfile, build 成镜像后就可以 docker run 顺利的跑起来了

那么这时需要将容器部署在集群中咋办?

办法肯定是有的,比如 jenkins->ansible ok 这是一个办法,但是可能只适合第一次部署,如果运行过程中其中一个服务挂掉了,那么又要全部重新部署,或者单独找到挂掉的服务,手动重启一下!,又或者要加一个节点怎么办???

k8s的出现就是解决上面的问题的,当然不仅仅如此

  • Self-healing:自我修复
  • Automatic bin packing: 自动装箱
  • Service discovery and load balancing: 服务发现
  • Secret and configuration management: 秘钥和配置管理
  • Automated rollouts and rollbacks: 自动化部署和回滚
  • Storage orchestration: 存储编排

k8s 对象的概念

(个人理解)
k8s 是一个高度抽象的系统,将我们的系统资源和运行实体看做一个个对象,所以是不是关于对k8s 的管理就可以理解为对对象的增删改查[Smirk],架构中的所有组件,就是管理这些对象的。

Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态。具体来说,他们可以描述:

  • 容器化应用正在运行(以及在哪些节点上)
  • 这些应用可用的资源
  • 关于这些应用如何运行的策略,如重新策略,升级和容错、

Kubernetes对象是“record of intent”,一旦创建了对象,Kubernetes系统会确保对象存在。通过创建对象,可以有效地告诉Kubernetes系统你希望集群的工作负载是什么样的。

要使用Kubernetes对象(无论是创建,修改还是删除),都需要使用Kubernetes API。例如,当使用kubectl命令管理工具时,CLI会为提供Kubernetes API调用。你也可以直接在自己的程序中使用Kubernetes API,Kubernetes提供一个golang客户端库 (其他语言库正在开发中-如Python)。

(翻译至官方文档)

在k8s 中的对象有

以及基于以上四个基础对象,构建了更加抽象的对象controller也就是管理一组pod,称为副本控制器

注意:这里真正管理的是controller manager 而controller只是描述期望的一个场景,如lable = nginx的pod 要三个

1、ReplicationController(RC):
     负责pod的数量的维护,比如一定需要三个pod 那么 RC,一定会给你保持在三个

2、ReplicaSet (RS):
    和RC 类似,但是是RC的升级版本,和它唯一的区别是ReplicaSet支持labels user guide中描述的set-based选择器要求, 而RC仅支持equality-based的选择器要求。

3、Deployment:
     Deployment 又是ReplicaSet的升级,可以用来维护RS的状态,因此建议通过Deployment来操作RS

4、StatefulSet:
     依然是负责副本控制的,但是和RS不同的是StatefulSet 适合有序的稳定的副本管理,比如启动三个pod 那么就会按照0-2的顺序去启动,顺序启动的条件是前一个pod的状态是Running and Ready后一个才会启动,如果前一个启动失败了,那么后面的就不会执行。关闭则是按照2-0的顺序。更新pod 时也会根据当前其他pod 的状态,进行可靠的调整。

所以RC 和RS 适合无序的pod

5、DaemonSet:
     保证每个Node 上都会有一个Pod的副本,一般用在日志收集,监控等服务类型的Pod

6、Job:
     之前所讲的副本控制器,适合长期运行的服务,而Job用于短暂任务

7、Cron Job:
     用于定时任务

也就说k8s 就是通过这些对象来描述我们集群状态的,那么我们通过api server增删改查的就是这些对象,个人觉得这是入门k8s的关键

k8s中如何定义对象

k8s 架构

在这里插入图片描述

(来自中文官方文档)

虽然看着这么多组件,但是不要担心,这些组件无非不是用来管理k8s 的对象的,只不过各司其职,这些组件和之前说的对象不同,这些组件都是进程实体。

k8s整体的架构为主从模式

  • master(当官的): 一般会做master冗余(3个),用来维护和管理集群
  • node (干活的):真正运行应用程序的机器,每个pod 都是跑在node

当官的是这些:
负责资源调度,保证系统高可用,和一些常规的任务处理
1、 kube-apiserver:
概念:暴露k8s的 api ,是k8s的前端控制台(一些控制面板就是基于这些接口开发),扩展方式主要是水平方式扩展

参看文章:
构建高可用的集群

2、etcd(在架构图上没有体现出来)
概念:一致性的高可用键值对数据库,用来保存集群的所有数据信息,作为数据库那么备份就很重要了

参考文章:
etcd 的备份

3、kube-scheduler
概念:负责调度pod 应该运行在哪一个node上,比如提交了一个运行pod的请求那么这时调度器就会根据这个pod 所需要的资源,选择合适的node ,选择好合适的以后会进行二次调度选择最优的。调度器考虑的是资源的划分与分配(硬件资源,软件资源,优先级),管理程序的关联,数据位置,截止时间等

4、kube-controller-manager
概念:负责后台的一些常规处理,为了降低复杂度,可以把多个控制管理器编译为一个进程

  • Node Controller: 响应node 节点的宕机
  • Replication Controller: 管理副本控制器提交的需求,也就说一共六个pod 如果挂掉一个 那么就必须要在启动一个
  • EndPoint Controller: 填充Endpoints对象(即连接Services&Pods)没太懂 ?
  • Service Account & Token Controllers: 创建默认账户以及token 管理

5、cloud-controller-manager
未来版本的特性,主要是可以直接和云厂商进行一些交互

干活的是这些

主要的工作就是维护正在运行的pod,可以运行在每一台机器上

1、kubelet
概念:负责监控pod 是否正常运行的,但不是不会管理非k8s创建的容器

2、kube-proxy
概念:是一个网络代理,负责请求的转发支持tcp和udp,由于service有可能被替换,所以他的IP就会更改,通过kube-proxy可以更新转发规则,

3、Container Runtime
概念:指的就是容器引擎,一般是docker 但是也可以是containerd, cri-o, rktlet 等,只要实现了相关接口就可以





**如有错误请批评指正,当对知识点有了新的理解会修正博客内容**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值