0
点赞
收藏
分享

微信扫一扫

Kubernetes简介

上古神龙 2022-09-05 阅读 125
kubernetes官网:https://kubernetes.io/

引言

kubernetes是什么

kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

Kubernetes能做什么

Kubernetes提供了一个可弹性运行分布式系统的框架,满足用户扩展要求、故障转移、部署模式等。
Kubernetes提供的服务:

  • 服务发现和负载均衡
    KUbernetes服务可以使用域名或者IP地址公开容器,如果进入容器的流量很大,Kubernetes可以负载均衡并分配网络流量,从而使环境更加稳定
  • 存储编排
    Kubernetes允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等
  • 自动部署和回滚
    你可以使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。例如,你可以通过自动化部署你的Kubernetes创建新容器,删除现有容器并将它们的所有资源用于新的容器。
  • 资源管理
    Kubernetes允许你指定每个容器所需CPU和内存(RAM)。当容器指定了资源请求时,Kubernetes可以做出更好的决策来管理容器的资源
  • 自我修复
    Kubernetes可以重新启动失败的容器、替换容器、杀死不响应用户定义的运行状态检查的容器,并且在准备好服务之前不将其通告给客户端
  • 密钥与配置管理
    Kubernetes允许你存储和管理敏感信息,例如密码、证书、服务配置文件。你可以在不重建容器镜像的情况下部署和更新应用配置。

    Kubernetes组件

    控制平面

    控制平面的组件对集群做出全局决策(比如高度),以及检测和响应集群事件(例如,当不满足部署的replicas字段时,启动新的Pod)

  • Kube-apiserver
    Kube-apiserver是集群的统一入口,各组件的协调者,以HTTP API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储
  • etcd
    etcd是兼具一致性和高可用性的键值数据库,用作保存Kubernetes所有集群数据的后台数据库,比如Pod、Service等对象信息。
  • Kube-scheduler
    负责监视新创建、未指定支行节点(Node)的Pods,选择节点让Pod在上面运行。
    调度决策考虑的因素包括单个Pod和Pod集合的资源要求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限
  • Kube-controller-manager
    处理集群中常规后台任务,一个资源对应一个控制器,ControllerManager负责管理这些控制器,控制器包括:
    • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
    • 任务控制器(Job controller):监测代表一次性任务的Job对象,然后创建Pods来支行这些任务直至完成
    • 端点控制器(Endpoints Controller):填充端点(Endpoints)对象(即加入Service与Pod)
    • 服务账户和令牌控制器(Service Account & Token Controllers):为新的命名空间创建默认账户和Api访问令牌

      Node组件

      节点组件在每个节点上运行,维护运行的Pod并提供Kubernetes运行环境

  • Kubelet
    一个在集群中每个节点(Node)上运行的代理,它保证容器(containers)都运行在Pod中。
    Kubelet接收一组通过各类机制提供给他的podSpecs,确保这些PodSpecs中描述的容器处于运行状态且健康。kubelet不会管理不是Kubernetes创建的容器
  • Kube-proxy
    kube-proxy是集群中每个节点上运行的网络代理,实现Kubernetes服务(Service)概念的一部分
    kube-proxy维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与Pod进行网络通信
    如果操作系统提供了数据包过滤层并可用的话,kube-proxy会通过它来实现网络规则,否则,kube-proxy仅转发流量本身。
  • Container Runtime
    容器运行环境是负责运行容器的软件。
    Kubenetes支持container runtimes,例如:docker、containerd、CRI-O

    插件

  • 网络和网络策略
    • Flannel 提供Kubernetes集群的网络通信
  • 服务发现
    • CoreDNS 是一个灵活的,可扩展的DNS服务器,为集群内的Pod提供DNS服务
  • 可视化管理
    • Dashboard 是一个Kubernetes的Web控制台界面
  • 资源监控
    • kube-Promethues
      • prometheus: 收集指标和存储时间序列数据,并提供查询接口
    • export:采集已有的第三方服务监控指标并暴露Metrics,相于当采集的一个agent
    • Altermanager:根据rules告诉监控告警通知(邮件、微信、钉钉)
    • grafana:通过grafana进行监控数据展示
  • 集群日志
    • Loki
    • Loki:主服务器,负责存储日志和处理查询
    • Pormtail:是代理,负责收集日志,并将期发送给Loki
    • Grafana:用于UI展示日志数据

      通信原理

      K8S各组件通过api-server进行通信

  • kubelet & APIserver
    • node点的kubelet每个时间周期,会调用api-server的REST接口报告自身状态。
    • kubelet通过watch接口,监听Pod信息。监听Pod的创建、删除、修改事件
  • Controller-manager & Apiserver
    • controller-manager中包含多个controller,举例:Node Controller模块通过API server提供的Watch接口,实现监控node信息,并做相应处理。
  • scheduler & Apiserver
    • scheduler通过Apisever的watch接口监听,监听到新建POD副本后,检索所有符合该pod要求的node列表,开始执行Pod调度,调度成功后将Pod绑定到具体节点

      典型的Pod创建/删除流程

  • Pod的创建过程
    
    1. 用户通过kubectl或其他的api客户端提交需要创建的Pod信息给API Server。
  1. API Server开始生成Pod对象的信息,并将信息存入etcd,然后返回确认信息至客户端。

  2. API Server开始反映etcd中的Pod对象的变化,其它组件使用watch机制来跟踪检查API Server上的变动。

  3. Scheduler发现有新的Pod对象要创建,开始为Pod分配主机并将结果信息更新至API Server。

  4. Node节点上的kubelet发现有Pod调度过来,尝试调度Docker启动容器,并将结果回送至API Server。

  5. API Server将接收到的Pod状态信息存入到etcd中。
* Pod的删除过程
```yaml
1. 用户向API Server发送删除Pod对象的命令

2. 将Pod标记为terminating状态

3. kubelet在监控到Pod对象转为terminating状态的同时启动Pod关闭过程

4. 端点控制器监控到Pod对象的关闭行为时,将其从所有匹配到此端点的service资源的端点列表中移除

5. 如果当前Pod对象定义了preStop钩子处理器,则在其标记为terminating后会以同步的方式启动执行

6. Pod对象中的容器进程收到停止信号

7. 宽限期结束后(默认30s),如果Pod中还存在运行的进程,那么Pod对象会收到立即删除的信号

8. kubectl请求API Server将此Pod资源的宽限期设置为0从而完成删除操作,此时Pod对于用户已经不可用
举报

相关推荐

0 条评论