Linux---Kubernetes服务组件入门详解

K8S简介

  • Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
  • Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用
  • 在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器,当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,但是,如果是Pod失败或者机器,它不会自动的转移并且启动,除非用户定义了 replication controller。

k8s的特性

  • 自动修复:在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在为准备好之前不会处理客户端的请求,确保线上服务不中断。
  • 弹性伸缩:使用命令、UI或者基于CPU的使用自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小的成本运行服务。
  • 自动部署和回滚:k8s采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。
  • 服务发现和负载均衡:k8s为多个容器提供一个统一的访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑IP问题。
  • 机密和配置管理:管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据的安全性,并且可以将一些常用的配置存储在k8s中,方便应用程序使用。
  • 存储编排:挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、GlusterFS、CEPH)都作为集群资源的一部分使用,极大地提高存储使用灵活性。
  • 批处理:提供一次性任务,定时任务,满足批量数据处理和分析的场景。

Kubernetes群集设计架构

Linux---Kubernetes服务组件入门详解_第1张图片

Kubernetes群集组件详解

Master组件

kube-apiserver

  • Kubernetes API,集群的统一入口, 各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

kube-controller-manager

  • 处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManage就是负责管理这些控制器的

kube-scheduler

  • 根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

etcd数据库(非关系数据库)

  • 具备服务发现功能
  • 分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对 象信息
  • 2379:外部访问端口
  • 2380:内部通讯端口

Node组件

kubelet

  • kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下 载secret、获取容器和节点状态等工作.kubelet将每个Pod转换成一组容器。

kube-proxy

  • 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。docker或rocket容器引擎,运行容器。

Pod

Pause容器是Pod 里的万物之源。Pause 容器是最先被创建出来的。起到了开天辟地的作用,Hold 住了Pod中的Namespace。然后其他的容器会加入到这个Pause容器所在的Namespace。

Linux---Kubernetes服务组件入门详解_第2张图片

 

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命名空间
  • Pod是短暂的

pod的分类

自主式pod

  • 自主式pod由k8s管理器进行管理
  • 自主式pod总是在前台运行,同时接受k8s管理与调度,当集群当中的pod因为某种原因停止,k8s会根据其副本的数量,重新的生成对应的pod

static pod

  • static Pod由kubele进行创建管理,一般存在于特定的node上,不通过apiServer管理,并且与Pod管理器(RC,deployment...)无关联,而起kubelet无法实现其健康状态的检查,只能人工手动进行

pod的生命周期

生命周期结构

Linux---Kubernetes服务组件入门详解_第3张图片

初始化容器(init container)

  • 在普通容器启动之前会启动一个或者多个的初始化容器,用于完成的容器启动的初始化条件, init c 与其他容器的本质相同,必须的完成之后,才会启动下一个init c 容器。init c 的重启策略是根据容器的重启策略相同,当restartPolicy=Never时,init c 将不会重启,反之,当restartPolicy=Always时,当初始化失败之后,会进行重启直到成功为止。

pod的五种状态

  • Pending:Pod已经创建但是的pod当中的容器的没有创建,正在下载容器启动所需要的镜像
  • Running:Pod当中的容器已经创建,至少有一个容器处于已经运行,正在启动或正在重启状态
  • Succeeded:Pod当中的所有容器均成功执行后退出,并且不会重启
  • Fialed:Pod当所有容器均退出,至少有一个容器退出失败
  • Unkown:无法获取到Pod的状态信息,有可能是网络问题

Pod健康检测与服务可用性

  • kubernetes对pod进行健康的检测主要是通过两类探针:livnessProbe(存活性探针)与readinessProbe(服务可用性探针)
  • livenessProbe:存活性探针,用于判断容器是否处于运行,正在启动,或正在重启状态(Running),当探测到容器不健康时,kubelet会根据重启策略,重启容器。当容器当中不存在存活性探针时,那么返回给kubelet的永远是容器处于健康状态(Succeeded)
  • readinessProbe:服务可用性探针,判断服务是否可用(),对应被service管理的Pod,当Pod处于不健康(not ready),kubernetes会从EndPoint列表当中移除此not ready的服务保证service不会在进Pod选择时选择到不可用的服务,当有提供正常服务的Pod加入时,会自动加入EndPoint列表当中。

Pod的服务组件

Controllers

  • ReplicaSet:确保预期的Pod副本数量 
  • Deployment :无状态应用部署
  • StatefulSet: 有状态应用部署
  • DaemonSet: 确保所有Node运行同一个Pod
  • Job :一 次性任务
  • Cronjob: 定时任务

Service

  • 防止Pod失联
  • 定义一组Pod的访问策略
  • Label: 标签,附加到某个资源上,用于关联对象、查询和筛选
  • Namespaces :命名空间, 将对象逻辑上隔离
  • Annotations :注释

 

 

 

 

 

你可能感兴趣的:(K8s)