(2)Kubernetes基本概念和术语

  k8s中大部分概念如Node、Pod、Replication Controller、Service等均可以看做是一种 资源对象,几乎全部的资源对象均可以经过Kubernetes提供的kubectl工具执行增删改查并将其保存在etcd中持久化存储。 从这个角度看,k8s是一个高度自动化的资源监控系统,经过跟踪对比etcd库里保存的资源指望状态与当前环境中的实际资源状态的差别来实现自动控制与自动纠错的高级功能。node

 

如下来解释一些常见术语linux

一、Masterdocker

  集群控制节点  全部的控制命令都是发给这个节点,而后他来负责具体的执行过程,若是他宕机,则左右控制命令都会失败。编程

  主要进程以下:后端

    Kubernetes API Server(kube-apiserver)提供了标准的 Rest 接口,是k8s资源增删改查的惟一入口。api

    Kubernetes Controller Manager (kube-controller-manager) 全部资源的自动化控制中心。bash

    Kubernetes Scheduler(kube-scheduler) 负责资源调度的进程。网络

    etcd  资源对象的数据保存架构

二、Node负载均衡

  工做负载节点,每一个Node都会被Master分配一些工做负载(Docker)容器,当某个Node宕机,其上的工做负载会被Master转到其它节点

  主要进程入下:

    kubelet 负责Pod对应容器的建立、启停等任务,同时与Master节点密切协做,实现集群管理的基本功能。

    kube-proxy 实现k8s的通讯与负载均衡的主要组件

    Docker Engine (docker) Docker引擎,负责容器建立以及管理工做

  在Master获取Node信息命令以下:

#查看集群中有多少个node
[root@node1 ~]# kubectl get nodes NAME STATUS AGE node2 Ready 24d node3 Ready 24d
#查看node2的详细信息 [root@node1 ~]# kubectl describe node node2 #名称、标签、建立时间
Name: node2 Role: Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/hostname=node2 Taints: <none> CreationTimestamp: Tue, 23 May 2017 09:04:05 +0800 Phase: #node当前的运行状态 好比:磁盘满了就会OutOfDisk就会标注True
Conditions:
  Type			Status	LastHeartbeatTime			LastTransitionTime			Reason				Message
  ----			------	-----------------			------------------			------				-------
  OutOfDisk 		False 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:36:59 +0800 	KubeletHasSufficientDisk 	kubelet has sufficient disk space available
  MemoryPressure 	False 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:04:05 +0800 	KubeletHasSufficientMemory 	kubelet has sufficient memory available
  DiskPressure 		False 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:04:05 +0800 	KubeletHasNoDiskPressure 	kubelet has no disk pressure
  Ready 		True 	Fri, 16 Jun 2017 10:31:56 +0800 	Tue, 23 May 2017 09:36:59 +0800 	KubeletReady 			kubelet is posting ready status
#node的IP地址和主机名
Addresses: 192.168.59.12,192.168.59.12,node2 #资源总量
Capacity: alpha.kubernetes.io/nvidia-gpu: 0 cpu: 8 memory: 3882344Ki pods: 110 #可分配的资源
Allocatable: alpha.kubernetes.io/nvidia-gpu: 0 cpu: 8 memory: 3882344Ki pods: 110 #主机系统信息
System Info: Machine ID: 241163503ce842c489360d0a48a606fc System UUID: D55867F7-F78F-4C50-A691-414BBCAE6141 Boot ID: a6f0316a-d7ff-415a-9fb3-4c82c8b5c2cd Kernel Version: 3.10.0-229.el7.x86_64 OS Image: CentOS Linux 7 (Core) Operating System: linux Architecture: amd64 Container Runtime Version: docker://1.12.6 Kubelet Version: v1.5.2 Kube-Proxy Version: v1.5.2 ExternalID: node2 #正在运行的Pod
Non-terminated Pods: (0 in total) Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits --------- ---- ------------ ---------- --------------- ------------- #Requests表示该资源的最小申请量 limit为最大使用量
Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted. CPU Requests CPU Limits Memory Requests Memory Limits ------------ ---------- --------------- ------------- 0 (0%) 0 (0%) 0 (0%) 0 (0%) #event记录了资源的一些事件信息,对排错有很大的用
No events

三、Pod

  Pod是k8s最重要也是最基本的概念

    每一个Pod都有一个特殊的被称为跟容器的Pause容器 ,Pause容器属于k8s平台一部分,初此以外,每一个Pod还包含一个或多个紧密相关的用户业务容器。

    为何设计一个全新的Pod概念:

      1.在一组容器为一个单元的状况下,难以对总体简单进行判断,引入业务无关切不容易死亡的Pause容器做为Pod根容器,以它状态来表明容器组的状态。

      2.Pod里多个业务容器共享Pause容器的IP、挂接的Volume、简化了密切关联容器通讯和文件共享问题。

         注:k8s要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通讯,一般采用虚拟二层网络技术实现,如Flannel、Openvswitch等 使一个Pod里的容器于其它主机Pod容器可以直接通讯

      3.Pod 资源限额  以千分之一个cpu来划分   100~300m  指0.1到0.3个CPU    内存 64Mi   分配64M  

四、Label

  标签 一个Label是一个key=value的键值对,可附加到各个资源对象上,之后能够经过Label Selector(标签选择器) 来查询和筛选用有某些标签的资源对象

  使用Label能够对对象建立多组标签,Label和Label Selector共同构成了Kubernetes系统中最核心的应用模块,使得被管理对象可以精细的分组管理,同时实现了整个集群的高可用性。

五、Replication Controller (RC)

  RC 简单来讲定义了一个指望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值。

    RC包括如下几个部分:

      1. replicas  Pod期待的副本数             注:若是为了删除全部的Pod,能够将replicas设置为0,而后更新该RC

      2.selector  用于筛选目标Pod的Label Selector

      3.template  当Pod的副本数小于预期数量的时候,用于建立新Pod的Pod模板。

  因为Replication Controller与kubernetes中的模块Replication Controller同名,因此在kubernetes 1.2 ,它升级为Replica Set ,与以前的RC的惟一区别是支持基于集合的Label selector ,而RC只支持基于等式的Label Selector 这使得Replica Set的功能更强。

  总结RC(Replica Set)的一些特性及做用:

    在大多数状况下,咱们经过定义一个RC实现Pod的建立过程以及副本数量的自动控制。

    RC里包括完整的Pod定义模板

    RC经过Label Selector 机制实现对Pod副本的自动控制

    经过改变RC的Pod副本数量,能够实现Pod的扩容和缩容功能

    经过改变RC里Pod模板中的镜像版本,能够实现Pod的滚动升级功能

六、Deployment

  Deployment是kubernetes1.2引入的概念,为了更好的解决Pod编排问题。相比于RC是咱们能够随时知道当前Pod部署的进度

  典型适用场景:

    建立一个Deployment对象来生成对应的Replica Set并完成Pod副本的建立过程

    检查Deployment的状态来看部署动做是否完成(Pod副本的数量是否达到预期的值)

    更新Deployment以建立新的Pod(好比镜像升级)

    若是当前的Depoyment不稳定,则回滚到一个早先的Deployment版本

    挂起或者回复一个Deployment

七、Horizontal Pod Autoscaler (HPA)

  简称HPA,意思是Pod横向自动扩容,也属于k8s的一种资源对象

  实现原理: 经过追踪分析RC控制的全部目标Pod的负载变化状况,来肯定是否须要针对性的调整目标Pod的副本数

  HPA有如下两种方式来做为HPA的负载指标

    1.CPUUtilizationPercentage  是指Cpu利用率的平均值(一般是1分钟,目前是经过Heapster扩张组件来获得这个值),用当前CPU的使用量除以它的Pod Request值 ,高于指定值(targetCPUUtilizationPercentage)就会建立新的Pod副本数(最大不超过设置的maxReplication)

    2.应用程序自定义的度量标准,好比服务在每秒内的响应的请求数(TPS或QPS)

八、Service

  服务,k8s的每一个Service就是咱们常常提起的微服务架构中的一个微服务

  1.Service与其后端Pod副本集群之间经过label Selector 来实现无缝对接的,k8s经过在每一个node节点的kube-proxy实现智能负载均衡,Service不是共用一个负载均衡器的ip,而是每一个Service分配了一个全局的惟一的虚拟IP(Cluster IP)

  Cluster IP:

    1.Cluster IP仅仅做用于Kubernetes Service这个对象,并由kubernetes管理和分配IP池

    2.Cluster IP没法被ping,由于没有一个实体网络对象来相应

    3.Cluster IP只能结合Service Port组成一个具体的通讯端口,单独的Cluster IP 不具有TCP/IP通讯的基础,而且它们只属于Kubernetes集群这样一个封闭的空间,集群以外的节点要访问这个通讯端口,则要作一些额外的工做

    4.在Kubernetes集群以内,Node IP网、Pod IP网与Cluster IP网之间的通讯,采用的是Kubernetes本身设计的一种编程方式的特殊的路由规则,与咱们熟知的IP路由有很大的不一样。

  外部网络访问service是经过Nodeport来访问的。

九、Volume

  存储卷(Volume)是Pod中可以被多个容器访问的共享目录。与Pod的生命周期相同,支持多种类型的volume,例如GlusterFS,Ceph等。

  Volume类型:

    1.emptyDir pod分配到Node时建立的。 用途:临时空间、长时间任务的中断过程CheckPoint的临时保存目录、多容器共享目录

    2.hostPath pod挂在宿主机上的文件和目录

    3.gcePersistentDisk 

    4.NFS

十、Persisten Volume 

  kubernetes集群中某个网络存储中对应的一块存储,它与Volume很相似,区别以下:

    PV只能是网络存储,不属于任何node,但能够在每一个node上访问

    不是定义在Pod上的

    目前只有几种类型 GCE Persistent Disks 、NFS、RBD、iSCSCI、GlusterFS等。

十一、Namespace 

  用于实现多租户的资源隔离,Namespace经过将集群内部的资源对象分配到不一样的namespace中,造成逻辑上分组的不一样项目、小组和用户组

  默认分配到名为default的NameSpace中,一旦建立了namespace就能够指定哪些资源属于哪一个namespace

  还能够结合k8s的资源配额管理,限定不一样租户能占用的资源。

 

以上即为k8s的核心组件,他们共同组成了k8s的系统的框架和计算模型,经过对他们进行灵活组合,用户可快速方便的对容器集群进行配置、建立、和管理。

相关文章
相关标签/搜索