k8s(Kubernetes)

k8s 容器编排工具,可以高效、批量、智能的去管理容器

1. 特点

  • 可移植
  • 可拓展:模块化、插件化、可挂载、可组合
  • 自动化:自动部署,自动重启,自动复制,自动拓展
  • 无缝对接新应用
  • 节省资源,优化硬件资源的使用

2. 特性

  • 自动装箱:基于资源的依赖及其约束能自动完成容器的部署且不影响其可用性。
  • 自我修复:一旦容器崩了,可自动重启一个新的容器代替从而实现自我修复。
  • 自动实现水平拓展:一个容器不够,再启动一个,可以不断进行拓展,只要物理平台资源支持。
  • 储存编排:把储存卷实现动态供给,当容器需要储存卷时,根据容器自身的需求创建能够满足其需要的存储卷。
  • 自动进行服务发现和负载均衡
  • 密钥和配置管理
  • 自动发布和回滚
  • 任务批处理运行

3. 配置中心:服务拆分后,多个服务公共的配置服务。

  • 用户在配置中心更新配置信息,服务A、B及时得到配置更新通知,从配置中心获取配置。
  • 合格的配置中心需满足
    1. 配置项容易读取和修改
    2. 分布式下应用配置可管理,即提供远程管理配置的能力
    3. 支持对配置修改的监视以把控风险
    4. 可以查看配置修改的历史记录

4. 功能

  • Pod提供复合应用并保留一个应用一个容器模型
  • 挂载外部存储
  • Secret管理
  • 应用健康检查
  • 副本应用实例
  • 横向自动扩缩容
  • 服务发现
  • 负载均衡
  • 滚动更新
  • 资源监测
  • 日志采集和存储
  • 支持自检和调试
  • 认证和鉴权

5. 关键进程

  • master 节点运行的负责集群管理调度的一组进程

    • api server: k8s中所有资源增删改查等操作的唯一入口,是集群控制的入口进程
    • controller manager:k8s中所有资源对象的自动化控制中心
    • scheduler: 负责资源调度
  • node节点运行的负责资源创建、通信、负载均衡、Docker容器创建与管理的一组进程

    • kubelet: 与master节点密切协作实现集群管理,负责Pod对应的容器创建与启停等任务
    • kube-proxy: 实现服务间的通信与负载均衡
    • Docker Engine:负责本机Docker容器的创建与管理

6. 相关名词概念

  • Pod

    • pod可以理解为容器的外壳,它为容器做了一层抽象的封装,pod里面运行容器,
      pod的特点是可以将多个容器放在同一网络名称的空间中,同一个pod可以共享存储卷。
    • 一个pod中无论运行一个容器还是多个容器,一旦将此pod调度到某个node上运行时,
      这个pod中的所有容器只能在这个pod上运行。
  • 标签选择器

    • 标签选择器就是一种根据标签过滤符合条件的资源对象的机制。
    • 应用于批量管理大量pod,具体是,给一类pod分组,即在创建pod的时候为其附上app的key的一个键值对,
      在进行批量操作时检查pod中是否存在app的key的键值对,来实现对多个pod的控制与管理。
  • Master节点

    • k8s的控制平面,负责这个集群的管理和控制,k8s所有控制命令都是发给master,master执行命令,note负责实际工作
    • 一般独立运行在一台主机,因至关重要,一旦宕机会导致整个集群失效不可用,可对其做高可用(主备切换故障转移)
  • Node节点

    • node是k8s中的工作节点,是负责工作的。
    • node可以是任何形式的计算设备,能装k8s的集群代理程序,它都可以作为整个k8s集群的成员。

7. 相关组件

  • master上的组件:API服务器、调度器、控制器管理器、etcd

  • node上的组件:kubelet、kube-proxy、docker

  • etcd:存储集群状态及各种原数据,通过API服务器读写
  • API服务器:以RESTFUL API的形式提供CRUD接口其他组件或客户端调用,实现对象存储读取以及校验,kubectl为其客户端之一,也支持监听资源
  • 调度器:为没有节点集的Pod分配节点,即:API服务器更新pod的定义(已调度)并通知kubelet,目标节点上的kubelet发现pod已被调度到本节点就会创建并运行pod的容器
  • 控制器管理器:负责管理控制器,确保系统真实状态朝API服务器定义的期望的状态收敛
  • Kubelet:管理本个node上的容器的生命周期,监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等,也是容器存活探针运行的组件,探针报错它会重启容器
  • kube-proxy:确保对服务ip和端口的连接到达支持服务的某个pod处,如果有多个pod支撑一个服务,那么代理会发挥对pod的负载均衡作用。
  • DNS服务器
  • Ingress控制器:Ingress控制器运行一个反向代理服务器,根据集群中定义的Ingress,service以及Endpoint资源来配置该控制器.所以需要订阅这些资源,然后每次其中一个发生变化则更新代理服务器的配置

8. k8s流程

  • 准备好对应的yaml文件,通过kubectl发送到Api Server中
  • Api Server接收到客户端的请求将请求内容保存到etcd中
  • Scheduler会监测etcd,发现没有分配节点的pod对象通过过滤和打分筛选出最适合的节点运行pod
  • 节点会通过Container Runtime 运行对应pod的容器以及创建对应的副本数
  • 节点上的kubelet会对自己节点上的容器进行管理
  • controller会监测集群中的每个节点,发现期望状态和实际状态不符合的话,就会通知对应的节点
  • 节点收到通知,会通过container runtime来对pod内的容器进行收缩或者扩张

k8s参考

posted @ 2022-07-20 16:52  $wanggang  阅读(180)  评论(0编辑  收藏  举报