一. Kubernetes简介
Kubernetes(简称K8s)是以Google Borg为原型重新设计和实现的基于容器技术的容器管理和编排调度工具,它支持自己部署,大规模可伸缩,可应用容器化管理,和docker公司的swarm和Apache的Mesos项目一样,2014年由Google开源。
2015年,谷歌将Kubernetes捐赠给Linux基金会下属的云原生计算基金会(CNCF)。
2018年初CNCF宣布Kubernetes正式毕业,标志着Kubernetes项目的成熟并可以用于生产环境使用。
Kubernetes最终使命是成为云计算新一代应用上的云的首选平台。
官网上面也有Kubernetes基本介绍
Borg和Kubernetes
在Kubernetes之前谷歌公司就有了10多年使用大规模容器管理使用经验,这些经验就是来源于谷歌内部Borg系统的使用。Borg是一个比较顶层的集成管理系统,它功能就是负责谷歌内部很多服务的调度和管理,在它上面跑了谷歌大部分的应用程序,框架包括Gmail、Google Docs、Web Search等这样直接面对客户的一些应用程序,这些应用程序都需要通过它来管理底层的这些物理机。
Borg的特点
1. 隐藏的资源管理和故障处理的细节,让用户不用关心资源管理的问题,不用操心底层的系统是怎么操作的(运行在Borg的程序,就算挂了也会被启动起来),可以专注自己的业务。
2. Borg是一个典型的分布式平台的架构,可以提供高可靠性和高可用性的操作,并支持应用程序做到高可靠高可用。
3. Borg可以在数以万计的机器上高资源利用率运行,就是可以将资源最大化的利用。
图片来源:https://imgedu.lagou.com/ca6e2b48f7a64829aea24d788349e01b.jpg
Kubernetes设计思想就是源自于Google Borg系统,例如Kubernetes继承了Borg项目中集群管理的理念。Kubernetes如今的成功是离不开Google Borg这么多年的使用经验积累。
为什么使用Kubernetes
1. Google业内最成熟容器编排技术管理经验的输出。包括先进的Workload管理经验模型:Pod和Controllers。
2. 2017年战胜Docker Swam和Apache Mesos,成为云原生应用首选容器编排管理平台。
3. 传统云平台提供商Google k8s engine,Red Hat的OpenShift,Microsoft的Azure container service,IBM的cloud container service全面支持。
二. Kubernetes能做什么
1.容器自动化部署和复制,随时扩展或者收缩容器规模(资源配额和分配管理),并提供负载均衡。比如当某个容器内存使用不够,会自动扩展出一个副本出来。当多个副本提供服务的时候,能够保证负载均衡。
2健康检查,自愈,容器滚动升级。
3.提供容器弹性,方便容器替换,比如有容器失效了Kubernetes就可以很容易将损害的容器从集群中替换掉。
4.将容器组织成组,并且提供容器间的负载均衡。
5.方便测试。可以将测试服务器集中化,自动化管理。可分配资源将各种平台的服务器加入集群,按需部署或者销毁。
6.持续集成时候方便对应用部署。
7.提供了对微服务的支撑 ,包括服务发现,服务编排,内部路由支持,服务快速部署,自动负载均衡等。
8.面向云原生可移植的新"云平台"。
三. Kubernetes核心概念及架构设计
Kubernetes总体架构图
Kubernetes基本概念:
1. Cluster(集群):Kubernetes作为一个服务调度平台,需要资源/机器等资源才可以进行调度,所以是Kubernetes一个集群架构,Kubernetes可以利用集群上的资源运行各种基于容器的应用。下面这篇文章就是说Kubernetes Cluster:https://www.redhat.com/en/topics/containers/what-is-a-kubernetes-cluster
Master node是主服务器,Work node是用于部署应用容器的服务器。
Master节点
上图中间六边形就是Master节点。Master是Cluster 的大脑,是控制整个Kubernetes集群的核心,它的主要职责是调度,即决定将应用放在哪里运行。运行着如下一系列Daemon服务:
1. kube-apiserver
2. kube-scheduler
3. kube-controller-manager
4. etcd
5. Pod网络
Node节点
Node是Pod运行的实际节点,Node职责是运行容器应用。Kubernetes本身知道Docker和rkt等容器的运行。 在Node节点中,运行的Kubernetes组件包括:
1. kubelet
2. kube-proxy
3. Pod网络
2. Pod:Pod是kubernetes中一个非常重要的概念,Pod是放置容器的地方,因为所有的应用最终都是运行在Pod里的。
Pod里可以运行容器,那么Pod运行在哪呢?
Pod运行在一个node上。只要资源足够,一个node上可以有任意个pod。kubelet负责调度pod。
位于Work node里面,Pod是基本操作单元,也是应用运行的载体,比如可以存放web服务器的容器。整个Kubernetes系统都是围绕着Pod展开,比如如何部署和运行Pod,如何保证Pod数量,如何访问Pod等。而之前所说的副本就是指Pod。另外Pod是有生命周期的。
分离关注点,每个容器只做一件事。
3. Deployment:Deployment控制器定义了Pod部署信息,并控制Pod的部署并维持其状态。