kubernetes快速入门-基础概念

kubernetes基础概念

概述

kubernetes是一个开源的容器编排系统,可实现容器化应用程序的自动部署、水平扩展和管理kubernetes集群是maste^ a H ur/nodes的架构,master是管理节点,一般由3个节点组成,nodes节点称为工作节点,节点要多至上千个。

组件

更详细的请参考官方文k I 5 J %档: https://kubernetes.io/zh/docsc S [ ^ o w Y 9/concepts/overview/components/

master节点上的组件: API Server,Scheduler,Contd 9 / j s P 0roller-Manager

  • API Server: 它提供了各类资源的增、删、改、查以及watch等的接口,是整个kubernetesE x . b 3 3 ; G !系统的中心。如Pod、Replication Conty L q ^ x #roller、Service等资源。

  • Scheduler: 调度器,默认调度器为kube-scheduler,调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node 上的 Pod,调度器会将发现的每一个未调度的 Pod 调度o U # * p ! = v到一个合适的 Node 上来运) l 7 j V

  • ContP 7 , R a 1 *roller-MaR I l / o 8 , nager: 控制管理器,Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(NamespacM x _ V 2e)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager{ V +会及时发现并执自动化修复流程,确保集群始终处于预期的工作状态。k8s中有许多Controllh ) k ~ _ 6er,如:Replication Cot K ]ntroller,Node Cos W Z A % ; gntroller, Namespace Controller, Token Controller, Service Control- ~ h D = :ler等,这些控制器保证集群内的资源保持预期状态,而Controller Manager则管理这些Contro4 5 d F ! # +ller的状态。

node节点上的组件: kubelet, 容器运行时(一般指docker引擎),kube-proxy

  • kubelet: kubel; A L 4et是在每个Node节点上运行的主要 “节点代理

  • kube-proxy: kube-proxy是每个Node节点上运行的网络代理,它作为附件(addons)运行,自托管在kubernets上,
    帮忙负责生成iptabels或ipvs规则,k2 B 8 I n X q V }ubenetes1.11版本后(包含1.11)默认使用ipvs,之前的版本默认使用! % q Q : J uiptables。

  • 容器运行时:负责运行容器的软件,一般是docker引擎

Pod

kubernetes管理和调度的最小单位是Pod,这只是一个逻辑上的概念,一个pod是运行一个或多个应用容器,Pod中的* J r f q b 9 8 每个容器共享网络名字空间。

在node节点上把关系比较紧密的容器打上标签归成一类pod,然后通过Label Selector对打上的标签进行过滤,这样node节点就能利用标签选择器来选择出我们需要的一类容器。

Pod分类:

第一类. 自主式Pod
用户向API Server发送创建一个Podu X t / = Z m W v的请求,通过Scheduler选择一个nod* 6 { m Ke后向kubelet发送任务,k{ ] l ^ [ t 4 =ubelet并创建好相应的Pod,当该node宕机后,该Pod从集群中消失,不能自动迁移到其他node。
第二类. 控 v ? I m E # S制器管j a * d - ^ 7 ) d理的Pod
ReplicationController,简称RC,副本控制器,它能实现始终按照用户指定的目标状态,在node上运行指定个数的Pod,当其中某个Pod因故障被kill后,能自动寻找合适的node,在其上运行相应的Pod,始终能保证指定个数的Pod数量G H $ ~ `。它还能实现Pod的滚动更新,并能实现回滚操作。
ReplicaSet,简称RS, 副本控制器:
一般不直接使用,它有一个声明式的控制器,叫De# U z gployment
Deployment控制9 4 k = a ]器,只能管理无状态应用,Deployment还支持二级控制器,叫HPA(HorizontalPodAutoscaler)A g ] R g U ! n,水平x + { ` K L i 8 *自动伸缩控制器,能+ % n I O 6实现自动扩容和缩容
StatefulSV  6 * j : a 7et 有状态副本h : n H [  w 1 -集控制器,管理有状态应用
DaemonSK z b wet控制器,在每个node上运行一个副本时使用
Job 作业控制器,
Ct$ G ] } Sonj: O 6ob 周期性作业控制器:

Service

Pod是有生命周期的,一个Pod随时都有可能被杀掉r / g l 3 @,也随时可能有Pod被创建,所以客户端程序要想访问Pod中容器提供的服务,kubernetes引8 | S入了一个中间层service,工作在Pod之上,客户端程序直接访问service,只要service不被删除,那IP地址就固定,service作为服务访问的入口。

service是靠标签选择器来关联Pod的,只要标签相同就被关联。service不是什么应用程序,也不是实体组件,它只是一个iptables的一个DNAT规则,如果service后端的Pod是个时,iptables的DNAT就是多目标的负载均衡转发,在kubernetes的1.x r 3 1 6 b11版中此种功能已使用ipvs(LVS)来实现。

网络

kubernetes集群需要三个网络,物理主机网卡所在网络称为主机节点网络,service上有个IP地址,此IP地址是虚拟的,只存在于iptables或ipvo K H : +s中,此网络称为service网络,Pod所在网络称为pod网络

kubernetes快速入门-基础概念

通信

同一个Pod内的多个容器共享网络名称空间,可以使用lo回环地址- 7 b ^ 9 :通信

各Pod之间通信通过隧道转发报文来实现叠加网络(Overlay Network) 来通信

Pod与Service之间通信是通过Q - D xiptables或ipvs规则调度

CNI

ContaT ^ 2iner Ng O c ^ & ] Getwork Interface,容器网络接口API。

实现CNI的组件:

  1. flannel:支持网络配置,不支持网络策略
  2. calico: 支持网络配置,也支持网络策略
  3. canel: 是flannel与calico的结合体,支持网络配置和网络策略