上周我们谈到了docker,而docker往往不是在单节点环境下运行,规模比较大的企业docker一般都跑在成千上百个节点的集群上。那么问题就来了,这么多节点应该如何部署,如何扩展,如何管理?就在这个时候K8s诞生了...
K8s由谷歌开发并在2014年6月宣布开源。
K8s是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署,扩展和操作,提供以容器为中心的基础架构。
一. K8s由如下特点:
1. 便携性:无论是在On-Prem,公有云,私有云,混合云都可以支持
2. 可扩展性:它是模块化,可插拔,可挂载,可组合的,支持各种形式的扩展
3. 自修复:它可以自保持应用状态,可自重启,自复制,自缩放,通过声明式语法提供强大的自修复能力
二. 为什么我们需要 Kubernetes,它能做什么?
Kubernetes 可以在物理或虚拟机集群上调度和运行应用程序容器。然而,Kubernetes 还允许开发人员从物理和虚拟机’脱离’,从以主机为中心的基础架构转移到以容器为中心的基础架构,这样可以提供容器固有的全部优点和益处。Kubernetes 提供了基础设施来构建一个真正以容器为中心的开发环境。
Kubernetes 满足了生产中运行应用程序的许多常见的需求,例如:
Pod 提供复合应用并保留一个应用一个容器的容器模型
挂载外部存储
Secret管理
应用健康检查
副本应用实例
横向自动扩缩容
服务发现
负载均衡
滚动更新
资源监测
日志采集和存储
支持自检和调试
认证和鉴权
这提供了平台即服务 (PAAS) 的简单性以及基础架构即服务 (IAAS) 的灵活性,并促进跨基础设施供应商的可移植性。
三. K8s 架构
1. Master Node
Master是控制集群的大脑,包含API Server,Scheduler, Control Manager, etcd。Master运行Linux操作系统,可以是物理机或者虚拟机,为了实现HA(High availability)也可以设置多个Master
API Server
可定义集群网络状态,可对外提供Restful接口
Scheduler
负责内部作业调度,分配工作节点
Control Manager
负责维护集群的状态/比如故障检测,自动扩展,滚动更新等
etcd
存储K8s集群配置和状态
2. Work Node
Workd Node的指责是运行容器应用。Work Node由 Master Node管理。Work Node运行在Linux操作系统,可以是物理机或者是虚拟机。
kubelet
负责维护容器的生命周期,包括创建,修改,监控,删除等
kube-proxy
为Pod对象提供代理及负载均衡
pod
是K8s中最小最小的工作单元。Pod可以理解为Docker单机环境,每个Pod中包含一至多个容器,Pod中的容器会作为一个整体被Master Node调度到一个Work Node上运行。
另外,下面是Youtube上通俗易懂讲K8s架构的视频,可以看下
参考文献:
https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/