文章目录

  • 一、什么是k8s
  • 二、k8s有什么能力
  • 调度
  • 自动修复
  • 水平伸缩
  • 三、k8s的架构
  • 1.master
  • 2.node
  • 组件间如何协作
  • 四、k8s的核心概念
  • pod
  • volume
  • deployment
  • service
  • namespace


一、什么是k8s

kubernetes:
自动化的容器编排平台,负责应用的部署、应用的弹性及管理,都基于容器。

container:容器;集装箱
kubernetes:运送集装箱的一个轮船

二、k8s有什么能力

  • 服务的发现与负载均衡
  • 容器的自动装箱:scheduling。把容器放到一个集群的某个机器上
  • 容器的自动化恢复
  • 应用的自动发布与应用的回滚,配置密文的管理
  • 批量执行job
  • 支持集群水平的伸缩

调度

  • 相关组件:调度器,scheduler
  • 能力:把容器放到k8s管理的集群的某一台节点上去。

scheduler会观察正在被调度的容器的大小(比如cpu、memory),然后在集群中找一台相对空闲的机器来进行一次放置(placement)

  • eg:如下图,可能会把正在被调度的红色的容器,放到第二个空闲的机器上,来完成一次调度工作

自动修复

  • 相关组件:Controller
  • 能力:监测集群中的所有宿主机,当宿主机本身或软件出故障时,节点的健康检查会自动对它进行发现。会把运行在失败节点上的容器进行自动迁移,迁移到健康的宿主机上

水平伸缩

  • 相关组件:Controller
  • 能力:业务负载检查的能力。如果这个业务本身的CPU利用率过高,或响应时间过长,会对这个业务进行一次扩容
  • eg:如下,黄色容器过度忙碌,k8s把它扩容了3份,通过负载均衡,把原来打到第一个黄颜色的负载,平均分到三个黄色容器上,以此来提高响应时间

三、k8s的架构

典型的二层架构与sever-client架构

所有的UI的、clients等user侧的组件,只会与master进行连接,再由master下发给相应节点

1.master

master包含4个主要的组件:
API Server、Controller、Scheduler、etcd

  • API Server:处理API操作的,是一个可水平扩展的部署组件。组件之间一般不进行独立的连接,都依赖于API Server传递消息
  • Controller:控制器,是一个可进行热备的部署组件。完成对集群状态的管理。

eg:对容器的自动修复、自动水平扩张

  • Scheduler:调度器,可热备。完成调度操作,帮助用户提交的container(容器)找合适的节点进行放置
  • etcd:分布式的存储系统。API Server所需的原信息被放置在etcd中,etcd本身是一个高可用系统。通过etcd保证整个k8s的master组件的高可用。

2.node

组件包括:Kubelet、Container Runtime、Storage Plugin、Network Plugin、Kube-proxy

postgres k8s容器 启动 k8s pause容器作用_Server

  • kubelet:node上最关键的组件。通过API Server接收所需要pod运行的状态,提交到Container Runtime中
  • Container Runtime:容器启动
  • Storage Plugin:对pod的存储进行管理
  • Network Plugin:对pod的网络进行管理
  • kube-proxy:完成service的组网。利用iptable的能力来组建k8s的network,就是cluster network

组件间如何协作

  • 场景:用户要提交一个pod给k8s部署
  • 过程
  • 1.这个pod请求 通过CLI或UI提交给API Server
  • 2.API Server把这个信息写入etcd
  • 3.Scheduler通过API Server的watch或notification机制得到这个信息:有一个pod需要被调度。Scheduler根据内存状态进行一次调度决策,完成调度后,会跟API Server反馈说“ok,这个pod需要被调度到某一个节点上”
  • 4.API Server接收到后,将本次结果再次写到etcd中,并通知相应的节点(node)进行这次pod真正的执行启动
  • 5.相应节点的kubelet得到通知后,就调用Container runtime来真正启动配置这个容器和这个容器运行的环境,调度Storage Plugin配置存储,Network Plugin配置网络

四、k8s的核心概念

pod

  • k8s的一个最小调度单元,最小资源单元
  • 是对一组容器的抽象,包含一个或多个容器
  • 定义容器运行的方式(command、环境变量、资源大小等)
  • 提供给容器共享的运行环境(网络、进程空间、存储卷等)
  • pod之间有isolation隔离
  • eg:以下这个pod,包含了2个容器,每个容器可以指定所需资源的大小。也包含了100G的卷1和20G的卷2
  • postgres k8s容器 启动 k8s pause容器作用_kubernetes_02

volume

卷,用来管理k8s存储的。

  • 声明在pod中的容器可访问的文件目录
  • 可以被挂载在Pod中一个或多个容器的指定路径下
  • 支持多种后端存储的抽象:本地存储、分布式存储、云存储

deployment

在pod更上一层的抽象,一般用deployment来做应用真正的管理
pod是组成deployment的最小单元

  • 可以定义一组pod的副本数目、pod版本
  • 通过controller维持pod的数目:自动恢复失败的pod

定义一个deployment有2个pod,当controller监测到一个pod失败时,会再新生成一个pod来把pod恢复到2个

  • 通过controller以指定的策略控制版本:滚动升级、重新生成、回滚等

service

把所有pod的访问能力抽象成一个第三方的ip地址

  • 提供一个或多个pod实例的稳定访问地址
  • 支持多种访问方式实现:Cluster IP、NodePort、LoadBalancer

对于外部用户来说,访问哪个pod都一样,希望只访问某一个固定的VIP,而不需要知道每个具体pod的ip。这样当某个pod失败了,也不需要更换pod的地址。

namespace

  • 一个集群内部的逻辑隔离机制(鉴权、资源额度)
  • 每个资源都属于一个Namespace
  • 同一个Namespace中的资源命名唯一
  • 不同Namespace中的资源可重名

逻辑上做的一层隔离,粗略理解为网络里的vlan