前言
目前对k8s的一期学习规划如下:
- 实践k8s搭建(已完成,点击查看)
- 了解k8s前世今生(本文)
- 由点到面认识k8s架构
- 由面到点深入k8s架构
今天开始逐步去了解k8s前世今生,本文结构如下:
- 物理机以及存在的问题
- 虚拟主机以及存在的问题
- docker诞生
- docker存在的问题
物理机以及存在的问题
直接使用物理机部署业务服务:
部署方式 | 问题 | |
---|---|---|
独立部署业务服务 | 资源利用率低 | |
混合部署业务服务 | 耦合/互相影响 |
虚拟主机以及存在的问题
物理机通过虚拟化技术,可以虚拟出多台虚拟主机,即提升了物理设备的利用率又达到了隔离的目的。
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dbd002184eaa42579bafbb3b82b67026~tplv-k3u1fbpfcp-zoom-1.image" style="width:50%">
</p>
但是虚拟硬件 + 虚拟操作系统不够轻量,于是诞生了docker
。
docker
诞生
docker
如何解决隔离问题,依赖Linux核心能力Namespace
实现:
- 进程隔离
- 网络隔离
- 文件隔离
- 用户隔离
- 等等
依赖Linux核心能力Control Group
实现:资源隔离/限制。
使用docker
部署的业务应用直接运行在宿主机上,更加的轻量:
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/64130eebb04d45048bfe5373ae102624~tplv-k3u1fbpfcp-zoom-1.image" style="width:50%">
</p>
虚拟主机和docker
对比图:
<p align="center">
<img src="https://blog-1251019962.cos.ap-beijing.myqcloud.com/qiniu_img_2022/why%20k8s/%E8%99%9A%E6%9C%BA%20VS%20docker%20.png" style="width:70%">
</p>
docker
存在的问题
但是面对复杂的业务的场景,直接使用docker
仍然存在如下问题:
容器和宿主机管理问题
单宿主机上N个容器如何管理?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a296c9e911dc41bcad6aa4a08efea6ac~tplv-k3u1fbpfcp-zoom-1.image" style="width:60%">
</p>
一个容器集群N个宿主机如何管理?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9ffb899d538841f6b798897321b9e4c1~tplv-k3u1fbpfcp-zoom-1.image" style="width:60%">
</p>
容器不断动态变更,如何支持负载均衡
集群内部一个业务应用对应多个容器且容器不断动态变更,如何实现负载均衡?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bd986737be2f4263b981880fe0b3b193~tplv-k3u1fbpfcp-zoom-1.image" style="width:80%">
</p>
新创建的容器如何调度
创建一个容器该创建在哪台宿主机上?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/288585e4150d475fa6c49bd3993616b9~tplv-k3u1fbpfcp-zoom-1.image" style="width:80%">
</p>
如何达到高可用
单个宿主机挂了如何自动摘除容器流量和剔除宿主机?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/00a3cd1fff2640349390d4cc920efe54~tplv-k3u1fbpfcp-zoom-1.image" style="width:80%">
</p>
如何实现自动按需伸缩容器数量?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a17763dba21c47e78f373c7cc396e57f~tplv-k3u1fbpfcp-zoom-1.image" style="width:70%">
</p>
发布新版本镜像,如何实现容器平滑启动?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d86dc1901fd04f83986005b207b25752~tplv-k3u1fbpfcp-zoom-1.image" style="width:70%">
</p>
容器依赖管理
存在“进程级”依赖关系容器如何管理和控制启动顺序:
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f7414401cc29449d8bfde1790116bc0e~tplv-k3u1fbpfcp-zoom-1.image" style="width:70%">
</p>
权限如何管理
不同团队或租户权限如何管理?
<p align="center">
<img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f372898c1f8c4b0c8283d07347bcf021~tplv-k3u1fbpfcp-zoom-1.image" style="width:70%">
</p>
总结
综上所述,直接使用docker
部署服务会存在以下问题,这也就是k8s
要解决的问题:
容器和宿主机管理问题
- 单宿主机上N个容器如何管理?
- 一个容器集群N个宿主机如何管理?
容器不断动态变更,如何支持负载均衡
- 集群内部一个业务应用对应多个容器且容器不断动态变更,如何支持负载均衡?
新创建的容器如何调度
- 创建一个容器该创建在哪台宿主机上?
如何达到高可用
- 单个宿主机挂了如何自动摘除容器流量和剔除宿主机?
- 如何实现自动按需伸缩容器数量?
- 发布新版本镜像,如何实现容器平滑启动?
容器依赖管理
- 存在“进程级”依赖关系容器如何管理和控制启动顺序
权限如何管理
- 不同团队或租户权限如何管理?
- 等等
所以,为什么需要k8s,你理解了吗?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。