Kubernetes ---- 理论、架构

Kubernetes的特性:


  1. 实现自动装箱(自动完成资源的部署).
  2. 自我修复(kill掉,重新启一个).
  3. 自动实现水平扩展(物力资源要足够支撑).
  4. 服务发现和负载均衡.
  5. 自动发布和回滚.
  6. 秘钥和配置管理.
  7. 存储编排.
  8. 任务批量处理执行...

集群:

  master/nodes模型
  一个或一组节点(高可用): master 集群入口
  多组节点: nodes

Master:

  接收创建启动容器的请求 ->  调度器分析各node节点的可用资源状态,找到最佳适配运行用户所请求的容器的node,容器引擎启动容器

  1. API Server: 负责接收请求、解析请求、处理请求.
  2. Scheduler(预选后优选): 观测每个node上总共可用的物理资源,根据请求创建的容器的资源来评估在哪一个node上合适运行.
  3. Controller manager(做冗余): 监控每个控制器是健康的.

Node:

  所有node组成为一个kube_cluster,将各node上的物理资源整合到一个"资源池"对外提供.

  1. Kubelet: 接收Scheduler调度结果,负责保证容器的状态始终正常.
  2. Docker:作为容器引擎运行Pod中的容器.
  3. kube-proxy: 随时与API Server进行通信,当每一个Pod发生变化的时候,会生成一个事件,事件可被任何关联的组件接收到,结果将保存在API Server中.

  例如Pod中的容器IP地址发生了改变,那么kube-proxy会将结果反映到Service也就是IPtables或ipvs中.

Pod: 存放容器.

  1.自主式Pod: 提交给API Server,接收后借助于调度器调度至指定的node节点,由node启动此Pod,如果Pod中的容器出现故障,需要重启则由kubelet完成
  如果节点故障,则容器消失,无法全局调度.

  2. 控制器管理的Pod: 由调度器将其调度至集群中的某节点运行后.

控制器分类:
  ReplicationController(副本控制器): 控制同一类Pod对象的各种副本,如果副本缺少了,则会自动添加至定义的副本数量.
  ReplicaSet: 副本集控制器,声明式控制器(Deployment).
  Deployment: 管理无状态应用副本集.
  HPA: 灵活增加Pod,当访问量过高,目前Pod不够用可自动增加,如果Pod够用,则会降低至够用的副本数量.
  StatefulSet: 管理有状态应用副本集.
  DaemonSet: 每一个Pod上运行一个副本.
  Job,Cronjob: 作业、周期性作业.

 

Service(主机名和地址在不被删除的情况下不会改变):

  1. IPtables DNAT规则或IPvS(v1.11版以后使用了IPvS).
  2. 访问入口,将客户端请求代理至后端Pod地址.
  3. 负载均衡.
  4. Pod会将提供的服务注册至Service.
  5. 靠标签选择器关联Pod(Pod中拥有标签(label)),关联后Service会动态探测Pod的IP地址及端口,作为后端可用服务器.
  6. 通过kube-proxy管理,在每个节点上创建规则,变动也需使用kube-proxy反映到规则上.

Label: 用来分类、识别、管理Pod.

Label Selector: 根据标签过滤符合条件的资源对象的机制.
Controller (支持众多类型): 通过loop持续性探测所管理的容器是否健康,如果不健康则重新像Scheduler发送创建请求,保证服务可用.

  同一Pod内的多个容器间通信:通过lo  
  各Pod之间的通信: Overlay 叠加网络 转发通信
  Pod与Service间通信: Pod将请求发往网关(docker0桥),检查IPtables转发

ETCD(重要):

  1. 键值存储的数据库系统,可选举,类似Zookeeper.
  2. 存储集群中所有的重要信息.
  3. 要做冗余,且使用https通信.
  4. 2380集群内部通信,2379对外进行通信.

网络配置:

  flannel: 网络配置.
  calico: 网络配置,网络策略.
  canel: 网络配置,网络策略.

在不考虑有状态应用的情况下,下面有一个LNMP的架构图,个人理解,有错误望指出,谢谢。

原文地址:https://www.cnblogs.com/k-free-bolg/p/13036345.html