每次开始学习和了解一个新的开源系统时,我都会习惯性问自己几个问题:
- 是怎么发展来的?
- 它是用的是什么架构,这些架构解决了哪些问题?
- 它的适用场景是什么?
下面就按着上面这些问题的脉络来一步步了解一下,我们经常听说的kubernete到底是啥
Kubernete的由来
kubernete是一个容器编排工具,最开始由谷歌进行开发,随后开源并成为CNCF基金会的第一个项目。它能够提供自动的容器部署、负载均衡、资源隔离和故障恢复等功能,让运维人员从在成百上千的容器部署的繁杂工作中解放出来。kubernete把多台的服务物理服务器抽象成一个集群,集群上的计算资源、存储、网络由kubernete来统一管理和分配。让组件繁多的微服务部署变得简单。
kubernete之所以能够快速的发展主要基于两点,一个是从单体应用的微服务的转变,另一个是容器规模的增长。
Kubernete的基础架构
kubernete在架构上可以分为两种不同的逻辑节点,一种是Master,一种是Worker。
worker
容器实际上是跑在Worker节点上的,每个worker节点都有一个叫kubelet的节点代理进程,负责节点间的通信,接收master的调度指令进行容器部署
master
master节点是这个集群管理的入口,包含了几个主要的kubernete进程
- API Server, k8s集群的入口, 包含webUI、API、CLI
- Controller Manager, 监控容器是不是挂了,需不需要重新部署
- Scheduler Manager, 根据每个节点的资源和负载情况,把容器应用部署到资源比较充足的节点上
- ectd, kv存储, 存储整个集群的容器状态、资源状态等元信息
看下几种不同的容器部署流程:
# 命令行触发
etcd _ __ __
/ \
CLI -> Scheduler Manager -> Worker
# Controller Manager 发现故障重新部署
etcd _ __ __ __
/ \ \
/ \ \
Controller Manager -> Scheduler Manager -> Worker
kubernete帮我们做了大部分的事情,当我们需要部署一个容器是不再需要逐个登录到具体机器上,看资源是否足够。字需要在UI或CLI触发一个部署命令,kubernete就能帮忙你把事情完成。
从上面的架构,可以看出来容器应用是运行在worker节点上的,因此worker节点比master节点需要更多的资源。在部署集群时考虑把配置高的机器倾斜给worker节点
Kubernete的最小调度单位
kubernete的最小调度单位是一个pod。pod封装了一个或多个容器,每个节点可以运行一个或多个pod
和pod关联的资源:
- service(ip), 和pod绑定, pod消亡重启可以复用service的ip地址,同时service可以提供负载均衡的能力
参考
What is Kubernetes | Kubernetes explained in 15 mins - YouTube