⼀、编排分类
单机容器编排
:
docker-compose
容器集群编排
:
docker swarm
、
mesos+marathon
、
kubernetes
应⽤编排
:
ansible(
模块,剧本,⻆⾊
)
⼆、系统管理进化史
1.
传统部署时代
早期,各个组织是在物理服务器上运⾏应⽤程序。 由于⽆法限制在
物理服务器中运⾏的应⽤程序资源使⽤,因此会导致资源分配问
题。
例如,如果在同⼀台物理服务器上运⾏多个应⽤程序, 则可能会出
现⼀个应⽤程序占⽤⼤部分资源的情况,⽽导致其他应⽤程序的性
能下降。
⽽⼀种解决⽅案是将每个应⽤程序都运⾏在不同的物理服务器上,
但是当某个应⽤程序资源利⽤率不⾼时,剩余资源⽆法被分配给其
他应⽤程序,⽽且维护许多物理服务器的成本很⾼。
2.
虚拟化部署时代
⽽后,虚拟化技术被引⼊了。虚拟化技术允许在单个物理服务器的
CPU
上运⾏多台虚拟机
(VirtureMachine)
。 虚拟化能使应⽤程序在不
同
VM
之间被彼此隔离,且能提供⼀定程度的安全性, 因为⼀个应
⽤程序的信息不能被另⼀应⽤程序随意访问。
虚拟化技术能够更好地利⽤物理服务器的资源,并且因为可轻松地
添加或更新应⽤程序,⽽因此可以具有更⾼的可扩缩性,以及降低
硬件成本等等的好处。通过虚拟化,你可以将⼀组物理资源呈现为
可丢弃的虚拟机集群。
每个
VM
是⼀台完整的计算机,在虚拟化硬件之上运⾏所有组件,
包括其⾃⼰的操作系统,所以由此看来,虚拟机技术占⽤资源量
⼤,在⼀台主机上最多运⾏⼗⼏台,效率不⾼。
3.
容器部署时代
容器,衍⽣于虚拟技术,但具有更宽松的隔离特性,使容器可以在
共享操作系统的同时,还能保持其轻量级的特点。⽽且每个容器都
具有⾃⼰的⽂件系统、
CPU
、内存、进程空间等,且具有最良好的
可移植性和平台兼容性。
敏捷应⽤程序的创建和部署:
与使⽤
VM
镜像相⽐,提⾼了容
器镜像创建的简便性和效率
持续开发、集成和部署:通过快速简单的回滚
(
由于镜像不可变
性
)
,提供可靠且频繁的容器镜像构建和部署。
关注开发与运维的分离:
在构建、发布时创建应⽤程序容器镜
像,⽽不是在部署时,从⽽将应⽤程序与基础架构分离。
可观察性:
不可以显示
OS
级别的信息和指标,还可以显示应⽤
程序的运⾏状况和其他指标信。
跨开发、测试和⽣产的环境⼀致性:
在笔记本计算机上也可以和
在云中运⾏⼀样的应⽤程序。
跨云和操作系统发⾏版本的可移植性:
可在
Ubuntu
、
RHEL
、
CoreOS
、本地、
GoogleKubernetes Engine
和其他任何地⽅运
⾏。
以应⽤程序为中⼼的管理:
提⾼抽象级别,从在虚拟硬件上运⾏
OS
到使⽤逻辑资源在
OS
上运⾏应⽤程序。
松散耦合、分布式、弹性、解放的微服务:
应⽤程序被分解成较
⼩的独⽴部分, 并且可以动态部署和管理
-
⽽不是在⼀台⼤型单
机上整体运⾏。
资源隔离:
可预测的应⽤程序性能。
资源利⽤:
⾼效率和⾼密度。
三、
Kubernetes
简介
Kubernetes
缩写:
K8S
,
k
和
s
之间有⼋个字符,所以因此得名。
Kubernetes
由
google
的
Brog
系统作为原型,后经
Go
语⾔延⽤
Brog
的思路重写,并捐献给
CNCF
基⾦会开源。
Kubernetes
是⼀个可移植的、可扩展的开源平台,⽤于管理容器化
的⼯作负载和服务,可促进声明式配置和⾃动化。
官⽹:
https://kubernetes.io
Github
:
https://github.com/kubernetes/kubernetes
四、
Kubernetes
功能
Kubernetes
的⽬标是让部署容器化的应⽤简单并且⾼效,提供了应
⽤部署,规划,更新,维护的⼀种机制。
Kubern