k8s架构原理

k8s节点介绍

分为master节点和node节点,master节点负责整个集群的调度,node节点负责应用容器的运行。

k8s组件介绍

kubectl

  kubectl 是一个客户端的管理工具,它会监听apiserver,比如有创建pod的事件时,会执行pod创建的相关操作,也会执行探针检测。

kube scheduler

  负责资源调度,会根据用户的调度规则分配一个最佳节点来创建pod。

kube-proxy

  负责集群外访问集群内pod,管理Cluster IP和endpoint的映射关系,其工作模式有iptables、ipvs、userspace三种方式。

kube-apiserver

  所有组件之间通信都需要通过这个组件来实现。

core-dns

  用于将svc解析为Cluster IP。

CNI

  容器网络接口,通常的实现方式有flannel、calico。

ETCD

  k8s所有的数据都保存在etcd中,由apiserver提供统一的访问入口。

Pod创建流程

  1. 客户端调用apiserver将创建配置清单写入etcd。

  2. kube-schedule监听到创建事件时,进行预选和优选选择一个最佳的node节点,同时将调度结果通过apiserver写回到etcd。

  3. kubectl监听到写入事件后,如果发现是自己的节点要创建pod时,

    3.1 调用/etc/cni/net.d目录下的网络插件配置,由网络插件实现地址分配、接口创建、网络创建等功能 。

    3.2 调用容器引擎(通常是docker)创建pod。

Pod关闭流程

  1. 调用apiserver将Pod 状态置为Terminating。同时将metadata.annotations.deletionTimestamp置为当前时间。
  2. 与此同时,kube-proxy 会将 Pod 从对应的 service 上摘除。
  3. 与此同时,针对有 PreStop Hook 的容器,kubelet 会调用每个容器的 PreStop Hook,假如 PreStop Hook 的运行时间超出了 grace period,kubelet 会发送 SIGTERM 并再等 2 秒,如果2s后还未关闭,则发送SIGKILL信号。
  4. 与此同时,针对没有 PreStop Hook 的容器,kubelet 发送 SIGTERM。如果 达到grace period之后,容器还未终止,则kubelet 发送 SIGKILL 干掉尚未退出的容器。
posted @ 2021-09-17 20:52  独揽风月  阅读(203)  评论(0编辑  收藏  举报