一、Kubernetes是什么?

(一)读音

了解一个新事物,最先学会都是怎么读,不然以后会一直读错下去,到时候说出去可能就会被人嘲笑。
Kubernetes,读音是[kubə’netis],翻译成中文就是“库伯奈踢死”。当然了,也可以直接读它的简称:k8s。为什么把Kubernetes读作k8s,因为Kubernetes中间有8个字母,所以简称为k8s。

(二)历史

认识任何东西最靠谱的都是去官网看具体的介绍,Kubernetes官网地址:https://kubernetes.io/。有兴趣的小伙伴可以自己去逛逛。
在这里插入图片描述
从官网的介绍可以看到,说Kubernetes有15年的应用经验。这里可能有人疑惑了,Kubernetes不是最近几年才火的吗?是的,Kubernetes是最近几年才火的,但是火之前肯定要有应用到地方。这个地方就是google,google内部已经成熟应用了,所以才开源了,对这部分历史有兴趣的小伙伴可以自行百度,这里就不多说了。

(三)Kubernetes是什么?

在这里插入图片描述

Kubernetes是什么?这个是基础,可以从官网看到对Kubernetes的介绍,Kubernetes一个开源的系统用于自动化部署、扩展和管理应用程序。按照最流行的说法就是Kubernetes是容器编排和管理的一种技术,是云原生落地的底层基础设施。

对Docker有过了解的小伙伴一定听说过,docker-compose和docker-swarm,docker-compose是单机的容器管理技术,docker-swarm是多机版本的容器管理技术。Docker在2016年的1.12的版本内置了docker-swarm用来进行多机版本的容器管理,其实就是为了跟k8s进行竞争。但是到了2018年底,k8s胜出了,其市场占有率和相关开源资料的人数以及更新频率远远高于docker-swarm。有兴趣的小伙伴可以去github上找到对应的开源项目,能看到参与的人数和更新的频率。

到这里,其实对k8s的理解还是对容器编排和管理,这个慢慢的看下去就会慢慢的了解。

二、Kubernetes的核心组件以及架构图

(一)Pod

在这里插入图片描述

既然k8s是对容器进行编排和管理,那么熟悉docker的小伙伴一定知道container这个东西了,不知道的小伙伴自行百度吧,这里container不作为重点介绍,百度一下很快就了解大致是个什么东西。
container是docker里的操作单位,k8s有自己的最小操作单位,那就是Pod。一个Pod可以包含一个或者多个container,Pod中的container共享存储和网络,这是官方定义的。
在这里插入图片描述

(二)ReplicaSet

多个Pod由谁进行管理呢?那就是ReplicaSet,ReplicaSet通过Selector来管理Pod。
在这里插入图片描述

(三)Deployment

Pod和ReplicaSet的状态如何维护和检测呢?这时候就用到了Deployment
在这里插入图片描述

(四)Label

相同的Pod或者有关联的Pod怎么进行区分的,可以用Label对Pod打一个标签,标签一样的Pod是同一类。
在这里插入图片描述

(五)Service

同一类的Pod属于同一个Service
在这里插入图片描述

(六)Node

Pod运行在机器上,机器就是Node
在这里插入图片描述

(七)集群

多台Node组成集群,集群的大致如下:
在这里插入图片描述
一个集群中一般都会区分master node和worker node,外界想跟集群进行交互,那么首先跟master node交互,然后master node再跟worker node交互。

(八)需要的组件

上面的图由上到下,大致应该有个印象。
那么集群要想配合完成工作,总需要不同的组件来进行协调,不同的组件干不同的事。

1、Kubectl

需要一个操作集群的客户端跟集群打交道,这就是kubectl

2、认证授权

kubectl发送请求到达master node,然后再分配给worker node来创建Pod等。kubectl发送请求给master node需要进行认证授权。

3、APIServer

请求达到master node以后谁来接收,APIServer。

4、Scheduler

APIServer收到请求以后调用哪个worker node来创建Pod,Container,需要有调度策略。

5、Controller Manager

Scheduler通过策略,真正要分发请求到不同的worker node上创建内容,具体就是由Controller Manager负责。

6、Kubelet

worker接收到创建请求以后,由kubelet调用Docker Engine创建对应的容器,这里就能看出来Node节点上需要有Docker Engine,不然无法创建容器。

7、DNS

域名解析

8、Dashboard

监控面板检测整个集群的状态。

9、ETCD

集群的数据存储需要用到ETCD分布式存储。

(九)整体架构图

根据上述可以大致总结成以下的图:
在这里插入图片描述

官网也有类似的图:https://kubernetes.io/docs/concepts/architecture/cloud-controller/
在这里插入图片描述

(十)业内常见的环境搭建方式

可能有人看到需要那么多东西,想如果一个个搭建得多长时间,而且中间涉及那么多组件,万一有一个有问题得调多长时间,其实不用担心,肯定会有开源爱好者想到这个问题,然后想出各种办法来解决这个问题的。

1、最难的搭建方式,一个个组件搭建

https://github.com/kelseyhightower

2、最简单的搭建方式,在线搭建

网址 :https://labs.play-with-k8s.com/,缺点是有使用时间限制

3、云上搭建

https://github.com/kubernetes/kops

4、企业级解决方案CoreOS

https://coreos.com/tectonic/

5、Minikube

搭建一个单机版k8s,适合在本地学习使用
官网 :https://kubernetes.io/docs/setup/learning-environment/minikube/
GitHub :https://github.com/kubernetes/minikube

6、kubeadm

搭建多节点的集群:
https://github.com/kubernetes/kubeadm

总结:其实搭建k8s集群的方式很多,但是适合自己搭建使用的只有第六种方式比较靠谱,当然其他的自己也可以试试,例如第一种。当然企业用的可能就是企业级的解决方案,有钱就行,后面将尝试使用kubeadm搭建k8s集群。

本篇文章只是大致介绍一下k8s以及其关键的组件,有个大致的认识,后面会一点点深入介绍的,有问题之处欢迎指出。

Logo

开源、云原生的融合云平台

更多推荐