Post Detail

集群管理 - 一篇文章读懂Kubernetes

Hugiss  

简介

Kubernetes是Google开源的容器集群管理系统。它借鉴了Google内部的Borg系统的诸多概念。

  • 大数据 在大数据趋势下,谷歌发表BigTable等互联网基础论文后,Hadoop生态圈如火如荼,Google却没有任何影响力。
  • 云计算 谷歌开源Kubernetes,意图很明确,即在云计算领域不希望犯大数据的错误。
  • 人工智能 类似的,谷歌开源TensorFlow剑指人工智能。

本文尽量以一篇文章的篇幅讲清楚Kubernetes的大体概念及基本用法。除了Kubernetes外,我们还有别的选择,如Mesos等。

为什么叫Kubernetes

Kubernetes,简称k8s。这个词是古希腊语:“舵手”。那为什么选择舵手这个词呢?这是因为Docker太火了,火到不得不做Kubernetes来保持云计算的影响力。Docker是集装箱,一个鲸鱼运着。舵手的含义不言而喻,就是控制Docker。

知道了这个典故,你就明白了Kubernetes的定位,也就跟容易理解各个概念。

物理机器基本概念

数据中心(Data Center)

一栋或几栋楼,里面很多机器。

集群 (Cluster)

按某逻辑用途划分的多台机器。

  • 一个数据中心,一般有一个或多个集群。
  • 一个集群一般几百台或几千台。

机柜(Rack)

一个大机柜,里面很多机器。一个大机柜顶上一般有个交换机。同机柜间机器网络通讯延时小一些。

机架单元(Rack unit)

大机柜里面被标准化的空间,1U, 2U等等。可以放不同尺寸的服务器。

Kubernetes概念

module_01_cluster
node 一个物理机器,或一个虚拟机(KVM类型,而不是容器类型);将虚拟机作为node一般是历史原因,或是为了彻底隔绝杜绝安全问题。

cluster 一组node需要被集中管理,统一叫一个cluster。一个cluster有一个master和多个node。每个node里面有一个kubelet用来服从master调度并管理node本身。

module_02_first_app
app containers 一个node里面可以有一个或多个容器化的应用程序,即app container。可以简单认为就是docker容器。

module_03_nodes
pod 多个app containers之间可能需要共享硬盘,或共享同一个ip,这样一组app containers合起来叫一个pod。典型应用如:一个容器不停产生日志到本地硬盘,另一个容器不停读本地硬盘并上传日志到日志服务器。

module_04_services
service 当一个node挂了时,上面的pod及pod里面的container也自然都挂了。为了死不掉,需要有个pod上层的抽象,pod挂了,service还在。service通过如下几种方式暴露出来。

  • ClusterIP (default),cluser的内网ip,只能此cluster内可见
  • NodePort,端口NAT到cluster外面
  • LoadBalancer,在cluster外面搞个LB并分配个外面可见的固定IP给LB
  • ExternalName,类似CNAME方式

deployment 配置yaml格式,存在master上,当机器故障或需要横向scale时或需要更新binary时,master根据配置搞定一切。

Show Disqus Comments