Kubernetes学习(一)之概述

0. 前言

kubernetes也叫K8S,这样叫的原因是K和S之间间隔了8个字母,这是一种命名方式。k8s属于集群资源管理系统,其可以说是谷歌内部资源管理系统borg的开源版本,因为这两个系统的开发团队有重合且涉及思想也有相似的地方。

云计算领域是未来的趋势,而容器技术也将是未来的趋势,主要因为其一他能够实现自动化的部署,对于一些在线类应用来说这种方式非常方便;其二通过容器技术能够实现更深层次和多维的资源隔离,保证任务之间的干扰尽可能减少。2019年5月2号,Twitter宣布将在2020年完成内部资源调度系统由mesos到k8s的转变,这说明了k8s在未来必将是趋势。在未来各个公司的服务都将运行在容器里进行编排,所以学习k8s不管是对于后端开发人员还是基础平台建设的开发人员来说都是非常必要和关键的。

本篇主要参考k8s文档对其进行概述,描述k8s的一些基本概念,理念以及起源。

1. 简介

是什么? Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。一旦用户提交了应用,剩下的事情都交由k8s自动化完成,目前着重于不间断的服务(Web服务,缓存服务)和原生云平台应用(nosql),未来会支持更多的服务。

**怎么运行的?**在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源,对于用户创建的每个Pod,系统会自动选择健康并且有足够容量的机器,node agent会根据创建情况进行重试。

**用户怎么使用?**用户可以自己创建并管理Pod,Kubernetes将这些操作简化为两个操作:基于相同的Pod配置文件部署多个Pod复制品;当一个Pod挂了或者机器挂了的时候创建可替代的Pod。对于后者k8s负责相关操作的部分叫做“replication controller”其会根据模板自动在健康的机器上重新生成一个一模一样的pod。

**分组支持。**我们经常需要选中一组Pod,例如,我们要限制一组Pod的某些操作,或者查询某组Pod的状态,作为Kubernetes的基本机制,用户可以给Kubernetes Api中的任何对象贴上一组 key:value的标签,然后,我们就可以通过标签来选择一组相关的Kubernetes Api 对象,然后去执行一些特定的操作,每个资源额外拥有一组(很多) keys 和 values,然后外部的工具可以使用这些keys和vlues值进行对象的检索,这些Map叫做annotations(注释)。

**pod有独立的ip。**Kubernetes支持一种特殊的网络模型,Kubernetes创建了一个地址空间,并且不动态的分配端口,它可以允许用户选择任何想使用的端口,为了实现这个功能,它为每个Pod分配IP地址。这个是k8s的一大特点,在一般的资源调度系统中,一个机器节点有一个ip地址,这就导致对于跑在上面的在线任务来说,端口也是一种资源,在资源分配的时候也需要考虑。但是k8s中每个pod拥有一个ip就可以很好的解决这个问题。

**服务发现机制。**现代互联网应用一般都会包含多层服务构成,比如web前台空间与用来存储键值对的内存服务器以及对应的存储服务,为了更好的服务于这样的架构,Kubernetes提供了服务的抽象,并提供了固定的IP地址和DNS名称,而这些与一系列Pod进行动态关联,这些都通过之前提到的标签进行关联,所以我们可以关联任何我们想关联的Pod,当一个Pod中的容器访问这个地址的时候,这个请求会被转发到本地代理(kube proxy),每台机器上均有一个本地代理,然后被转发到相应的后端容器。Kubernetes通过一种轮训机制选择相应的后端容器,这些动态的Pod被替换的时候,Kube proxy时刻追踪着,所以,服务的 IP地址(dns名称),从来不变。

所有Kubernetes中的资源,比如Pod,都通过一个叫URI的东西来区分,这个URI有一个UID,UID是时间和空间上的唯一。

2. 起源

2014年6月,谷歌云计算专家埃里克·布鲁尔(Eric Brewer)在旧金山的发布会为这款新的开源工具揭牌,它的名字Kubernetes在希腊语中意思是船长或领航员,这也恰好与它在容器集群管理中的作用吻合,即作为装载了集装箱(Container)的众多货船的指挥者,负担着全局调度和运行监控的职责。

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。Kubernetes在模型建立之初就考虑了容器跨机连接的要求,支持多种网络解决方案,同时在Service层次构建集群范围的SDN网络。其目的是将服务发现和负载均衡放置到容器可达的范围,这种透明的方式便利了各个服务间的通信,并为微服务架构的实践提供了平台基础。而在Pod层次上,作为Kubernetes可操作的最小对象,其特征更是对微服务架构的原生支持。

Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

Kubernetes作为容器集群管理工具,于2015年7月22日迭代到 v 1.0并正式对外公布,这意味着这个开源容器编排系统可以正式在生产环境使用。与此同时,谷歌联合Linux基金会及其他合作伙伴共同成立了CNCF基金会( Cloud Native Computing Foundation),并将Kuberentes 作为首个编入CNCF管理体系的开源项目,助力容器技术生态的发展进步。Kubernetes项目凝结了Google过去十年间在生产环境的经验和教训,从Borg的多任务Alloc资源块到Kubernetes的多副本Pod,从Borg的Cell集群管理,到Kubernetes设计理念中的联邦集群,在Docker等高级引擎带动容器技术兴起和大众化的同时,为容器集群管理提供独了到见解和新思路。

3. 思考

  • k8s提供了对微服务架构的原生支持,将会助力微服务的发展;
  • k8s本质上还是一个资源调度系统,只是其资源的抽象模型变了,主要针对的服务变了;
  • 容器技术(docker,kata container)的发展会对k8s提供底层支持;
  • 相信在未来,云平台上的服务都将会以容器的方式进行运行,通过k8s进行编排;

你可能感兴趣的:(k8s/docker)