k8s基础
- K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经Go语言延用Borg的思路重写并捐献给CNCF基金会开源。 kubernetes的名字来自希腊语,意思是"舵手" 或 "领航员",K8s是将8个字母"ubernete"替换为"8"的缩写。
Kubernetes主要特征
- 以服务为中心:围绕着服务转,使用者不用关心服务运行的环境、运行的细节。所以构建在Koubernetes上的服务不仅可以运行在物理机、虚拟机、也可以是私有云、公有云,在什么地方运行都是无差别的。
- 自动化:在Koubernetes中的服务可以自动扩缩容,自动升级、更新、部署。比如Koubernetes在收到一个指令它会自动触发一个调度流程,选中目标节点部署或停止相应的服务。如果有新的pod启动,它会自动的加入负载均衡器,自动的生效。在运行过程中Koubernetes还会自动去检测实例状态,当发现某个实例不可用会自动销毁这个实例,然后重新去调度一个新的实例。以上操作全部都是自动化完成不需要人工参与。
Koubernetes与Docker的关系
- Koubernetes可以看成是Docker的上层架构,Koubernetes是以Docker基础的标准为基础,去打造一个全新的分布式架构系统。当然Koubernetes并不是一定要依赖Docker。Docker是个产品,Docker技术本质是一系列的标准,所以实现了某个标准的产品都可以替代Docker。所以Koubernetes可以在底层支持自己本身的容器技术并且通过了Google的持续优化,在某些方面会做的比Docker更加的优秀。
Koubernetes的核心概念
- 基本结构
Container
容器,容器中会有镜像版本,通过这个镜像运行了一个容器。- 容器外面就是
POD
实例,一个POD
中可以有多个容器。 POD
的特征- 是一个
POD
内的所有容器都是运行在一台机器上的。 - 它里面的容器共享网络。
- 有一个唯一的IP。
- 是一个
- 每一个POD里面都会有一个
Pause
,会有一个固定的镜像,Pause
的作用是作为Container
的根容器,把其他的容器都Link到一起。 Pause
会负责当前POD
的健康检查。POD
的上一层是RS(ReplicaSet) 副本集
,它的作用是管理POD
实例的。比如同一个应用需要用两个POD
,如上图它就会把两个POD
关联起来。如果在运行过程中某一个POD
出现了异常,RS
就会保证副本始终为2,在另外的机器去调度启动新的POD
。- 在
RS
上层有一个Deployment
概念,它的作用是更新容器(应用)。
当我们的业务里面有两个以上的容器,他们关系非常的紧密,这时我们就可以考虑把他们放到同一个POD里。
-
版本升级 / 更新
- 当版本升级 / 更新时,
Deployment
会自动的创建一个RS
副本集,然后滚动的去先启动一个新版本的POD
,新的POD
启动完成健康检查通过之后,就会将旧的POD
停止 下线。然后以此类推。这就是滚动的方式。我们管理的层面只是在Deployment
。
- 当版本升级 / 更新时,
-
Service
Service
中有个Selector
概念,用于指定POD
实例,POD
实例通过label
进行区分。Service
对外提供一个协议簇IP。- 用户端
Client
访问Service
通过Service
最终访问到具体的POD
。
Koubernetes的架构设计
Master
: 主节点Worker
: 节点ETCD
: 集群的存储组件API Server
: 是操作K8s唯一的入口Scheduler
: 调度器ControllerManager
: 集群内部的控制中心Kubelet
: 负责启动节点,维护POD的生命周期及网络等管理
集群搭建方案对比
- 社区方案
- 杂乱
- 不可靠
- 升级难
- Kubeadm(官方推荐)
- 优点
- 优雅
- 简单
- 支持高可用
- 升级方便
- 缺点
- 不易维护
- 文档不够细致
- 优点
- Binary(官方方案)
- 优点
- 易于维护
- 灵活
- 升级方便
- 缺点
- 没有文档
- 安装复杂
- 优点