Kubernetes总结一:初识Kubernetes

Kubernetes总结一:初识Kubernetes

一. 简述

1. 由来

Kuberbetes简称 K8S,来源于古希腊语,意思是 舵手 。是由Google的几位工程师创立的,2014年6月首次对外公布。K8S的开发深受谷歌内部的一个叫做 Borg 系统的影响,Borg系统是谷歌内部稳定运行了十几年的大规模容器编排工具。谷歌沿用Borg系统的思路,用 GO 语言重新构建了这个容器编排工具,并命名为Kubernetes

2. 简介

Kubernetes一个用于容器集群的自动化部署、扩容以及运维的开源平台。通过Kubernetes,你可以快速有效地响应用户需求;快速而有预期地部署你的应用;极速地扩展你的应用;无缝对接新应用功能;节省资源,优化硬件资源的使用。为容器编排管理提供了完整的开源方案。
在这里插入图片描述

  1. 容器:一般指Docker容器,通过容器隔离的特性和宿主机进行解耦,与宿主机互不影响。而kubernetes则负责管理服务中所有的Docker容器,创建、运行、重启与删除容器。
  2. 快速响应
    1. 新增或者修改需求时,可以快速进行部署测试(CICD)
    2. kubernetes可以根据不同条件进行动态扩缩容
      1. 举个栗子,用户访问量突然由1000人上升到100000人时,现有的服务已经无法支撑,kubernetes会自动将用户服务模块增加更多实例以保证当前的系统访问量。
  3. 扩展:完善的注册发现机制,当某个服务的实例增加时,kubernetes会自动将其加入服务列表中,免除在传统运维中需要人工维护服务列表的问题。
  4. 对接新应用:kubernetes是一个通用的容器编排框架,支持不同类型的语言,或者是语言无关的,新增加的应用都会以一个新的对象进行接入。
  5. 硬件资源:这一点我觉得是kubernetess很基本但是非常重要的一个优点了,kubernetes在部署应用时会自动检查各个服务器的cpu与内存使用量,同时会根据服务申请的cpu与内存资源,将服务部署到最合适的服务器。(其实这就是容器调度的核心功能了)

3. 特性

  • 自动装箱:基于资源依赖,以及其它约束,能够自动完成容器的部署而且不影响可用性。
  • 自我修复:具有自愈能力,考虑到容器非常轻量级的特点,一旦某个应用容器崩溃了,可以很快启动一个新的应用容器替代。
  • 水平扩展:能够实现自动水平扩展,一个容器不够,就再启一个,可以不断的扩展,只要你的物理平台资源足够。
  • 服务发现/负载均衡:自动实现服务发现和负载均衡
  • 自动发布和回滚:kubernetes在部署服务时,会记录部署服务的版本,我们可以很容易的进行上次版本或跨版本回退。
  • 密钥和配置管理
  • 存储编排:对存储卷实现动态供给。如某一个容器需要用到存储卷时,会根据容器的需求自动创建符合要求的存储卷
  • 批量处理执行

二.kubernetes架构与组成

1. 架构

kubernetes 属于主从分布式架构,主要由 Master节点Node节点 组成,以及包括客户端命令行工具 kubectl 和其它附加项。
Master节点 包含
API ServerScheduler(调度器)ControllerManager(控制器管理器) 这三个核心的组件。
Node节点 包含
KubeletDocker(容器引擎)Kube-proxy 这三个核心的组件。

  1. k8s架构
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rB2QiNTe-1575944118733)(en-resource://database/7741:1)]

  2. k8s运行流程
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SATGUqlc-1575944118733)(en-resource://database/7743:1)]

2. 组成

Master节点

  1. 简介:集群 控制管理 节点,所有命令都经由master处理
  2. 组成:
    1. API Server提供rest接口 ,是k8s里所有资源 增删改查的唯一入口
    2. Scheduler:负责 pod调度 ,按照预定的调度策略将Pod调度到响应的机器上
    3. ControllerManager:k8s所有对象的自动化控制中心,资源对象大总管。维护集群状态,比如故障检测,自动扩展,滚动更新等

etcd

  1. 简介:一个高可用 键值存储系统,主要用于 共享配置服务发现
  2. 作用:
    1. 功能与zookeeper相似,但更加轻量
    2. 通过Raft算法保证一致性
  3. 特点:
    • 简单:支持curl方式的用户api(http+json)
    • 安全:可选的ssl客户端证书认证
    • 快速:单实例 1000次/秒 读写
    • 可靠:通过Raft算法保证强一致性

Node节点

  1. 简介:集群 工作负载节点 , 如果宕机,上面的docker会被master转移到其他节点上
  2. 组成:
    1. kubelet
      1. 负责pod对应容器的创建和启停 (维护Pod生命周期)
      2. 向 Master节点 汇报当前 Node节点 的资源使用情况(如果某个node超过指定时间不上报信息,会被master判定为“失联”,node状态被标记为不可用“Not Ready”,随后master会触发“工作负载大转移”自动流程)
    2. kube-proxy : 实现 与kubernetes Service通信负载均衡 的重要组件
    3. Docker : 负责 本机容器创建与管理 工作

3. 其他概念

Pod(容器组)

  1. 简介:
    1. Pod是 最小部署单元 ,一个Pod由一个或多个容器组成,Pod中容器 共享存储和网络,在同一台Docker主机上运行
    2. 同一个Pod 里容器,共享同一个网络命名空间,可以使用 localhost 互相通信
  2. 分类:
    1. 普通Pod:存放在etcd中
    2. 静态Pod:存放在Node具体文件中,且只能在此Node上启动运行
  3. 特点:
    1. 每个Pod都有一个“根容器”–Pause容器。和一个或多个业务容器
    2. 一个Pod里的容器与另外主机上的Pod容器能够直接通信
    3. 如果Pod所在Node宕机,这个Node的所有Pod会转移到其他Node上
    4. 一个Pod中的应用程序共享同一组资源
      • PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID;
      • 网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围;
      • IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信;
      • UTS命名空间:Pod中的多个容器共享一个主机名;
      • Volumes(共享存储卷):Pod中的各个容器可以访问在Pod级别定义的Volumes;
  4. 设置资源限额(CPU和Memory)
    1. Request : 资源最小申请量
    2. Limits : 资源最大允许使用量
  5. 图示
    1. pod组成:
      在这里插入图片描述
    2. pod,容器,node之间关系:
      在这里插入图片描述

Pod控制器

  1. 简介:用来管理Pod
  2. 分类:
    1. ReplicationController (副本控制器),确保Pod的数量始终保持设定的个数。也支持Pod的滚动更新。主要用来部署升级
    2. ReplicaSet (副本集),它不直接使用,有一个声明式更新的控制器叫Deployment来负责管理。但是Deployment只能负责管理那些无状态的应用。
    3. StatefulSet (有状态副本集),负责管理有状态的应用。
    4. DaemonSet ,如果需要在每一个Node上只运行一个副本,而不是随意运行,就需要DaemonSet。
    5. Job,运行作业,对于时间不固定的操作,比如:某个应用生成了一大堆数据集,现在需要临时启动一个Pod去清理这些数据集,清理完成后,这个Pod就可以结束了。 这些不需要一直处于运行状态的应用,就用Job这个类型的控制器去控制。如果Pod运行过程中意外中止了,Job负责重启Pod。如果Pod任务执行完了,就不需要再启动了。
    6. Cronjob,周期性作业

Endpoint , Event

  1. EndPoint(IP+Port):标识 服务进程的访问点
  2. Event:一个 事件记录 ,记录事件最早产生时间,最后重复时间,重复次数,发起者,类型,以及导致此时间原因。用来 排查故障
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v85yQhcD-1575944118735)(en-resource://database/7751:1)]

Service(服务)

  1. 简介:
    1. k8s中的Service是对象资源之一,一个k8s Service是一个应用服务的抽象,定义了Pod逻辑集合和访问这个Pod集合的策略
    2. Service代理Pod集合对外表现是一个 访问入口 ,分配集群IP地址,来自这个IP的请求,通过负载均衡转发后端Pod中的容器
    3. Service通过Lable Selector选择一组Pod提供服务
    4. Service被创建后,系统自动床架你一个同名的 endPoint
  2. kubernetes 中 ip 分类:
    1. ClusterIp:Service的Ip地址(Service不是共用一个负载均衡器的ip地址,而是每个service分配一个全局唯一的虚拟Ip地址 , 这个虚拟ip被称为ClusterIp)
    2. NodeIp:node节点的IP地址,k8s每个节点的物理网卡的Ip地址
    3. podIp:pod的ip地址,是docker分配的,是一个虚拟二层网络,不同Node上的Pod能彼此通信。
  3. Pod,RC 与 Service 的关系
    在这里插入图片描述

Label(标签)

  1. 简介:标签,用来分组管理
  2. 作用:
    1. Lable可以附加在各种资源对象上,一个资源对象可定义任意数量Label。
    2. 然后通过 Lable Selector 查询和筛选拥有某些label的资源对象。
    3. 通过给指定资源对象捆绑一个或多个Label来实现多维度资源分组管理
  3. 示例:select * from pod where pod's name = 'xxx' , env ='yyy'
  4. 支持操作符:=、!=、in、not in
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SSaIdQAs-1575944118735)(en-resource://database/7753:0)]

Deployment(部署)

  1. 简介:拥有更加灵活强大的升级,回滚功能。
  2. 作用:升级,部署,回滚Pod。官方推荐Replica Set + Deployment 代替 RC
  3. 优势:相对于RC,可以知道当前Pod部署进度
  4. 使用场景:
    • 创建一个Deployment对象来生成对应的Replica Set并完成Pod副本创建过程
    • 检查更新Deployment的状态来查看部署动作是否完成:Pod副本数量是否达到预期的值
    • 更新Deployment以创建新的Pod(比如镜像升级)
    • 如果当前Deployment不稳定,则回滚到一个早先的Deployment版本
    • 挂起或者恢复一个Deployment

HPA(横向自动缩扩容)

  1. 简介:Horizontal Pod Autoscaler简称HPA,意思是Pod横向自动扩容。
  2. 作用:自动化,智能化缩扩容
  3. 实现:CPUUtilizationPercentage
    1. 通常使用一分钟平均值,通过Heapster扩展组件获取这个值
    2. 利用率计算: Pod的CPU利用率 = Pod的CPU使用量/Pod Request (如果没有定义Pod Reques的值,则无法使用)

Volume(数据卷)

  1. 简介:数据卷是Pod中能被多个容器访问的共享目录。定义在Pod上,被一个 Pod 中的多个容器挂载到具体文件目录下。与Pod生命周期相同。

NameSpace(命名空间)

  1. 简介:命名空间将对象逻辑上分配到不同的NameSpace,可以是不同的项目,用户等区分管理,并设定控制策略,从而实现多租户。命名空间也称为虚拟集群

Kubectl(k8s命令行工具)

  1. 简介:通过命令行对 资源对象 (Node,Pod,Replication Controlle,Servcie 等) 进行 增删改查 操作,并保存在etcd 进行持久化

Ingress(路由)

  1. 简介:无论是容器组还是Service,外网都是无法直接访问的,Ingress就可以通过一个负载IP与Kubernetes集群内部进行通讯,一般会和Service对象进行配合使用

ConfigMap(配置项)

  1. 简介:简单理解为一个管理配置的对象,可以将项目的配置写入到ConfgiMap中,项目中的配置使用相应的变量名就可以读取相应的变量值。

概念理解起来比较困难,这里推荐一个形象的理解
用插画理解Kubernetes
插画版Kubernetes指南

发布了96 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq919694688/article/details/103470316