设为首页 收藏本站
查看: 698|回复: 0

[经验分享] (2)Kubernetes基本概念和术语

[复制链接]

尚未签到

发表于 2018-1-4 19:15:45 | 显示全部楼层 |阅读模式
  k8s中大部分概念如Node、Pod、Replication Controller、Service等都可以看作是一种 资源对象,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具执行增删改查并将其保存在etcd中持久化存储。 从这个角度看,k8s是一个高度自动化的资源监控系统,通过跟踪对比etcd库里保存的资源期望状态与当前环境中的实际资源状态的差异来实现自动控制与自动纠错的高级功能。
  以下来解释一些常见术语
  1、Master
  集群控制节点  所有的控制命令都是发给这个节点,然后他来负责具体的执行过程,如果他宕机,则左右控制命令都会失败。
  主要进程如下:
  Kubernetes API Server(kube-apiserver)提供了标准的 Rest 接口,是k8s资源增删改查的唯一入口。
  Kubernetes Controller Manager (kube-controller-manager) 所有资源的自动化控制中心。
  Kubernetes Scheduler(kube-scheduler) 负责资源调度的进程。
  etcd  资源对象的数据保存
  2、Node
  工作负载节点,每个Node都会被Master分配一些工作负载(Docker)容器,当某个Node宕机,其上的工作负载会被Master转到其它节点
  主要进程入下:
  kubelet 负责Pod对应容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
  kube-proxy 实现k8s的通信与负载均衡的主要组件
  Docker Engine (docker) Docker引擎,负责容器创建以及管理工作
  在Master获取Node信息命令如下:
  

#查看集群中有多少个node
[iyunv@node1 ~]# kubectl get nodes

  
NAME      STATUS     AGE
  
node2     Ready      24d
  
node3     Ready      24d
  #查看node2的详细信息
  
[iyunv@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:  TypeStatusLastHeartbeatTimeLastTransitionTimeReasonMessage
  ----------------------------------------------------------
  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>  System UUID:D55867F7-F78F-4C50-A691-414BBCAE6141

  Boot>  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)
  NamespaceNameCPU RequestsCPU LimitsMemory RequestsMemory Limits
  ---------------------------------------------------------------
  
#Requests表示该资源的最小申请量 limit为最大使用量
  Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.
  CPU RequestsCPU LimitsMemory RequestsMemory Limits
  --------------------------------------------------
  0 (0%)0 (0%)0 (0%)0 (0%)
  
#event记录了资源的一些事件信息,对排错有很大的用
  No events
  

  

  3、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
  4、Label
  标签 一个Label是一个key=value的键值对,可附加到各个资源对象上,以后可以通过Label Selector(标签选择器) 来查询和筛选用有某些标签的资源对象
  使用Label可以对对象创建多组标签,Label和Label Selector共同构成了Kubernetes系统中最核心的应用模块,使得被管理对象能够精细的分组管理,同时实现了整个集群的高可用性。
  5、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的滚动升级功能
  6、Deployment
  Deployment是kubernetes1.2引入的概念,为了更好的解决Pod编排问题。相比于RC是我们可以随时知道当前Pod部署的进度
  典型适用场景:
  创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程
  检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值)
  更新Deployment以创建新的Pod(比如镜像升级)
  如果当前的Depoyment不稳定,则回滚到一个早先的Deployment版本
  挂起或者回复一个Deployment
  7、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)
  8、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来访问的。
  9、Volume
  存储卷(Volume)是Pod中能够被多个容器访问的共享目录。与Pod的生命周期相同,支持多种类型的volume,例如GlusterFS,Ceph等。
  Volume类型:
  1.emptyDir pod分配到Node时创建的。 用途:临时空间、长时间任务的中断过程CheckPoint的临时保存目录、多容器共享目录
  2.hostPath pod挂在宿主机上的文件和目录
  3.gcePersistentDisk
  4.NFS
  10、Persisten Volume 
  kubernetes集群中某个网络存储中对应的一块存储,它与Volume很类似,区别如下:
  PV只能是网络存储,不属于任何node,但可以在每个node上访问
  不是定义在Pod上的
  目前只有几种类型 GCE Persistent Disks 、NFS、RBD、iSCSCI、GlusterFS等。
  11、Namespace
  用于实现多租户的资源隔离,Namespace通过将集群内部的资源对象分配到不同的namespace中,形成逻辑上分组的不同项目、小组和用户组
  默认分配到名为default的NameSpace中,一旦创建了namespace就可以指定哪些资源属于哪个namespace
  还可以结合k8s的资源配额管理,限定不同租户能占用的资源。
  以上即为k8s的核心组件,他们共同组成了k8s的系统的框架和计算模型,通过对他们进行灵活组合,用户可快速方便的对容器集群进行配置、创建、和管理。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431634-1-1.html 上篇帖子: kubernetes Ubuntu部署 下篇帖子: Kubernetes API源码学习笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表