1、K8S 概述和特性
概述
k8s 是谷歌在 2014 年开发的容器化集群管理系统
使用 k8s 进行容器化应用部署
使用 k8s 利于应用扩展
k8s 目标实施让部署容器化应用更加简洁和高效
特性
1)自动装箱
构建于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利用率。
(2)自我修复(自我治愈)
支持容器故障后自动重启、节点故障后重新调度容器,以及其他可用节点、健康状态检查失败后关闭容器并重新创建等自我修复机制。
(3)水平扩展
支持通过简单命令或UI手动水平扩展,以及基于CPU等资源负载率的自动水平扩展机制。
(4)服务发现和负载均衡
k8s通过其附件组件之一的KubeDNS(或CoreDNS)为系统内置了服务发现功能,它会为每个service配置DNS名称,并允许集群内的客户端直接使用此名称发出访问请求,而service则通过iptables或ipvs内建立负载均衡机制。
(5) 自动发布和回滚
k8s支持“灰度”更新应用程序或其配置信息,监控更新过程中应用程序的健康状态,以确保不会同一时间杀掉所有实例,在这个过程中一旦出现故障,立马进行回滚操作。
(6)密钥和配置管理
k8s的configMap实现了参数配置和Docker镜像的解耦,修改配置时无需重新build镜像,这为应用开发部署带来了很大的灵活性。另外,对于应用依赖的一些敏感数据,如用户名和密码、令牌、密钥等,k8s专门提供了Secret对象为其解耦。
(7)存储编排
k8s支持Pod对象按需自动挂载不同类型的存储系统,包括节点的本地存储系统,云存储(AWS),网络存储系统(NFS、GlusterFS)。
(8)批量处理执行
除了服务型应用,k8s还支持批处理作业及CI(持续集成),如果需要,一样可用实现容器故障后恢复,
2、K8S 架构组件
master(主控节点)和 node (工作节点)
(1)master 组件
-
api server
:集群统一入口,以 restful 方式,交给 etcd 存储 -
scheduler
:几点调度,选择 node 节点应用部署 -
controller-manager
:处理集群中常规后台任务,一个资源对应一个控制器 -
etcd
:存储系统,用于保存集群相关数据
(2)node 组件
-
kubelet
:master 排到 node 节点代表,管理本机容器 -
kube-proxy
:提供网络代理,负载均衡等操作
3、K8S 核心概念
3.1、Pod
- 最小部署单元
- 一组容器的集合
- 共享网络(同一个容器,多个应用)
- 生命周期是短暂的
3.2、Controller
- 确保预期的 Pod 副本数量
- 无状态应用部署(任何条件下使用)
- 有状态应用部署(需要特定条件才能使用)
- 确保所有的 node 运行同一个 Pod
- 一次任务和定时任务
3.3、Service
- 定义一组 Pod 的访问规则