醋醋百科网

Good Luck To You!

如何快速理解K8S的核心概念

K8S网上资料多而杂,K8S.io有很多官方文档,但是很多人看了这些文档会犯晕,因为内容很多,而且密度很大,很难一下子抓住核心概念。但是只有理解了这些核心概念,并且在大脑里建立起核心概念模型,才能运用好K8S。

  K8S重要和基础的核心概念:

  • 集群Cluster
  • 容器Docker
  • 豌豆荚POD
  • 副本集ReplicaSet
  • 服务Service
  • 发布Deployment
  • 配置ConfigMap/Secret
  • DeamontSet

集群Cluster


  • 这个集群由很多节点组成,而且可以按需添加更多节点,这些节点可以是物理机也可以是虚拟机。
  • 每个节点都有一定的CPU和内存容量。
  • 整个K8S集群可以抽象看成超大计算机,它的CPU和容量是所有节点的CPU和容量总和,而且可以按需给这台计算机添加更多的CPU和内存。

容器Docker


  • K8S是容器调度平台,所以容器是K8S的一个基本概念。
  • 理解容器关键是两点:
    • 打包机制。背后是由容器的Image机制来实现。
    • 隔离机制。背后是由Name Space和CGroup来实现。Name Space负责隔离,CGroup负责授权。
  • 容器通常被比做集装箱,这个比喻很形象,集装箱是用来打包和运输货物的,而且可以相互隔离。
    • 从宿主机操作系统视角来看,容器其实是一个个的进程。
    • 从容器内部视角来看,容器就是一个个完整的操作系统,有自己的文件系统,网络,CPU,内存资源。

  容器是镜像的运行时实例,镜像是OS文件系统+应用文件+依赖的完整打包。

  镜像可以说是容器的模板。

豌豆荚POD


  • Pod是容器调度的基本单位,一个Pod可以跑一个或多个容器。他们共享Pod的文件系统和网络,每个Pod有自己独立的IP,他们共享IP和空间,并且容器之间可以通过localhost进行相互访问。
  • 大部分场景下,一个Pod只跑一个容器。
  • K8S没直接调度容器,而是增加了Pod封装,主要是考虑一些需要辅助容器的场景(sidecar),另外一个是考虑可以替换不同的容器技术。
  • 副本集ReplicaSet



  • 一个应用发布的时候,一般不会只发一个Pod实例,一般会发布多个,这样才能实现高可用。
  • ReplicaSet是和一组Pod相对应的概念。
  • 它通过YMAL或者JSON文件来配置容器镜像,端口,副本数量,点火和健康检查机制,环境变量,Valume挂载等等信息。
  • 运行时,会监控和维护Pod的数量。如果Pod多了会下线一些,少了会增加一些。

服务Service


  • Pod在K8S中是一个不固定概念(ephemeral),因为Pod随时会挂或者重启(预期或非预期),相应的IP就会发生变化。
  • 如果IP经常变,服务的消费方如何寻址呢?K8S通过引入Service这个抽象来解决,它屏蔽了应用的IP寻址和负载均衡这些细节。
  • 消费方通过服务名称访问目标服务,Service底层机制会做IP寻址和负载均衡,即使这个应用的PodIP发生了变更,Service也会屏蔽这种变更,让消费方无感知(透明机制)。

发布Deployment


  • 副本集可以实现基本的发布,包括实现金丝雀,蓝绿和滚动发布这些高级发布机制,但是实现起来比较繁琐。为了简化这些操作,K8S在副本集基础上又引入了Deployment这个概念。
  • 简单讲Deployment是通过管理副本集实现蓝绿和滚动等高级发布机制。假设应用v1.0发布了,对应的副本集v1.0,我们可以通过Deployment进行升级发布应用的v1.1版本。它会先创建副本集v1.1,之后会不断的拉出绿色版本,拉入蓝色版本,直到所有的蓝色Pod全部上线,绿色Pod全部下线。这个过程Service会屏蔽IP变更,让消费方无感知。如果蓝色Pod点火健康检测不通过,Deployment会自动终止并回退发布。即使发布成功完成,后续根据需要,发布人员仍然可以通过Deployment回退到之前的某个版本,所以Deployment是一种更灵活的发布机制。

  特别强调:Deployment和Service是和应用发布相关的两个概念,也是发布时候经常使用的两个概念,我们发布所要描述的文件里头,主要就是Deployment和Service的规范。


  Service是服务间相互路由寻址概念。

  • 首先,集群内部Client通过Service间接访问目标应用Pod其次,集群外部Client如果要访问集群内部应用Pod,也是通过Service间接访问。

配置ConfigMap/Secret


ConfigMap

  K8S内置支持配置中心,对应的概念叫ConfigMap,针对不同环境的不同配置值,根据启动前后分:

  • 启动前一次性配置好的:如SQL链接字符串等
  • 启动后的动态调整配置:如缓存过期时间,TTL值,商品促销限购数量等。

  如上图,配置可以注入也可以挂载成文件。

Secret

  有些配置是涉及用户敏感数据的,比如用户名密码,安全证书等,K8S通过Secret支持敏感数据的配置,可以认为是一种特殊的Config,提供更安全的配置和访问机制。

DeamonSet



  有时候需要在每个微服务当中常驻一个守护进程,deamon进程,比如监控场景,需要在每个机器上部署一个fluentd(日志采集进程),或者是prometheus的exporter进程。针对这种场景,K8S支持一个叫DeamonSet的发布概念,可以在每个worker的节点上部署一个守护进程Pod,并且保证每个节点上有且仅有一个这样的Pod。

其他概念


  • volume会随着pod一起存亡
  • persistentVolume支持云存储,可以插拔,是一种高级持久存储方案。
  • pvc是申请pv时候需要的规范。
  • pv,pvc的引入使得volume和具体的物理存储进一步解耦。
  • statefulset顾名思义是支持一种有状态应用的发布机制,是和replicaset相对的一种概念。比如mysql或者redis的发布。
  • job跑一次就结束任务
  • cronjob周期性任务
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言