学习《每天五分钟玩转Kubernetes》总结

第二章 重要概念

  • Cluster:是计算、存储和网络资源的集合,kebernetes利用这些资源运行各种基于容器的应用
  • Master:是cluster的大脑,主要的职责是调度,即决定将应用放在哪运行。Master运行Linux操作系统,可以运行多个Master
  • Node:职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器的状态,同时根据Master的要求管理容器的生命周期
  • Pod:是kubernetes中最小的调度单位,每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行 
  • K8s引入Pod主要基于下面两个目的 
  • 可管理性:Pod提供了比容器更高层次的抽象。作为最小单位进行调度、扩展、共享资源、管理生命周期
  • 通信和资源共享:Pod使用一个namespace,也可以共享存储。当K8s挂载volume到Pod,本质上是将volume挂载到Pod中的每一个容器
  • Controller: 
  • K8s不会直接创建Pod,而是通过Controller来管理Pod的
  • Controller中定义了Pod的部署特性,如:几副本、在什么样的Node上运行
  • K8s提供了多种Controller: 
  • Deployment:最常用的Controller,可以管理Pod的多个副本,并确保Pod按照期望的状态运行
  • ReplicaSet:实现了Pod的多副本管理,使用Deployment时会自动创建ReplicaSet,通常不直接使用
  • DaemonSet:用于每个Node最多只运行一个Pod副本的场景。DaemonSet通常用于运行daemon
  • StatefuleSet:能够保证Pod的每个副本在整个生命周期中名称是不变的。同时SatefuleSet会保证副本按照固定的顺序启动、更新或删除
  • Service 
  • Deployment可以部署多个副本,每个Pod都有自己的IP,Pod可能会被频繁地销毁和重启,外界如何访问这些副本? ——service
  • K8s Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡
  • K8s运行容器(Pod)和访问容器(Pod)分别由Controller和Service执行
  • Namespace 
  • 如果有多个用户使用一个K8s Cluster如何将他们创建的Controller、Pod分开?——Namespace
  • Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,每个Cluster就是一个Namespace,不同Namespace里的资源是完全隔离的

第三章 部署K8s Cluster

  • kubelet:运行在Cluster所有节点上,负责启动Pod和容器
  • kubeadm:用于初始化Cluster
  • kubectl:K8s的命令行工具,可以部署和管理应用,查看资源,创建、删除、更新各种组件

第四章 Kubernetes 架构Master 节点是K8s Cluster的大脑运行着:

  • API Server(kube-apiserver):提供K8s API,是K8s Cluster的前端接口,各种工具以及K8s其他组件可以通过它管理Cluster的各种资源
  • Scheduler(kube-scheduler):负责决定Pod放在哪个Node上运行。Scheduler在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
  • Controller Manager(kube-controller-manager):负责管理Cluster各种资源,保证资源处于预期状态。
  • ectd:负责保证K8s Cluster的配置信息和各种资源的状态信息。当数据发生变化时,etcd会快读地通知K8s相关组件
  • Pod网络

Node节点

Node上运行的组件:

  • kubelet:是Node的agent,当scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器
  • kube-proxy: 
  • service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。service接收到的请求就是通过kube-proxy转发到Pod的
  • 每个Node都会运行kube-proxy,负责将访问service的TCP/UDP数据流转发到后端的容器,以及实现负载均衡
  • Pod网络:部署Pod网络使Pod能够互相通信
    注:Master上也可以运行应用, 
    几乎所有的K8s组件本身也运行在Pod里

具体过程:

  • kubectl发送部署请求到API Server
  • API Server 通知Controller Manager 创建一个deployment资源
  • Scheduler执行调度任务,将两个副本Pod分发到node1和node2
  • node1和node2上的kubectl在各自的节点上创建并运行Pod