初识Kubernetes(K8S)
一.简介
- Kubernetes简称k8s, 是Google在2014年开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件
- k8s是为容器服务而生的一个可移植容器的编排管理工具,当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地
- 从架构设计层面,我们关注的可用性,伸缩性都可以结合k8s得到很好的解决
- 从部署运维层面,服务部署,服务监控,应用扩容和故障处理,k8s都提供了很好的解决方案,k8s可以使我们应用的部署和运维更加方便
二.kubernetes特性
1.自我修复
- 在节点故障时可以删除失效容器,重新创建新的容器,替换和重新部署,保证预期的副本数量,kill掉健康检查失败的容器,并且在容器未准备好之前不会处理客户端情况,确保线上服务不会中断
2.弹性伸缩
- 使用命令、UI或者k8s基于cpu使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性,业务低峰时回收资源,以最小成本运行服务
3.自动部署和回滚
- k8s采用滚动更新策略更新应用,一次更新一个pod,而不是同时删除所有pod,如果更新过程中出现问题,将回滚恢复,确保升级不影响业务
4.服务发现和负载均衡
- k8s为多个容器提供一个统一访问入口(内部IP地址和一个dns名称)并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题
5.机密和配置管理
- 管理机密数据和应用程序配置,而不需要把敏感数据暴露在径向力,提高敏感数据安全性,并可以将一些常用的配置存储在k8s中,方便应用程序调用
6.存储编排
- 挂载外部存储系统,无论时来自本地存储、公有云(aws)、还是网络存储(nfs、GFS、ceph),都作为集群资源的一部分使用,极大提高存储使用灵活性
7.批处理
- 提供一次性任务,定时任务:满足批量数据处理和分析的场景
三.Kubernetes集群架构
工作流程
-
通过Kubectl提交一个创建RC的请求,该请求通过API Server被写入etcd中,此时Controller Manager通过API Server的监听资源变化的接口监听到这个RC事件,分析之后,发现当前集群中还没有它所对应的Pod实例,于是根据RC里的Pod模板定义生成一个Pod对象,通过API Server写入etcd,接下来,此事件被Scheduler发现,它立即执行一个复杂的调度流程,为这个新Pod选定一个落户的Node,然后通过API Server讲这一结果写入到etcd中,随后,目标Node上运行的Kubelet进程通过API Server监测到这个“新生的”Pod,并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束。
-
随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求,Controller Manager会通过Label标签查询到相关联的Pod实例,然后生成Service的Endpoints信息,并通过API Server写入到etcd中,接下来,所有Node上运行的Proxy进程通过API Server查询并监听Service对象与其对应的Endpoints信息,建立一个软件方式的负载均衡器来实现Service访问到后端Pod的流量转发功能。
四.Kubernetes集群组件
1.Master组件
Kube-apiserver
- Kubernetes API,集群的统一入口, 各组件协调者,以 RESTful API提供接口服务(支持网站标准协议)所有对象资源的增删改查和监听操作都交给 APIServer 处理后再提交给 Etcd 存储数据
Kube-controller-manager
- 处理集群中常规后台任务,一个资源对应一个控制器,比如容器资源(pod)挂了,若控制器还存活,则会重新创建该资源,所以修复能力依赖于控制完成,controllerManager 负责管理这些控制器
kube-scheduler
- 根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署可以部署在同
一个节点上,也可以部署在不同的节点上,所有资源的创建不一定都要经过调度器
etcd
- 分布式键值存储系统
用于保存集群状态数据,比如 Pod、Service 等对象信息
2.Node组件
kubelet
- kubelet 是 Master 在 Node 节点上的 Agent(代理),管理本机运行容器的生命周期,比如创建容器、Pod 挂载数据卷、下载 secret、获取容器和节点状态等工作,kubelet 将每个 Pod 转换成一组容器
kube-proxy
在 Node 节点上实现 Pod 网络代理,维护网络规则和四层负载均衡工作
docker 或 rocket(容器类型)
- 容器引擎
- 运行容器
五.Kubernetes核心概念
1.Pod
- K8s 中最小的部署单元,是一组容器的集合
一个 Pod 中的容器共享网络命名空间,像一个小型局域网一样,所以其中容器之间可以彼此通讯
Pod 是短暂的,因为其一旦故障,会重新创建新的
K8s 管理的基本都是业务,而业务都是跑在 Pod 上
2.Controllers(控制器)
- ReplicaSet:创建资源,确保预期的 Pod 副本数量
- Deployment:无状态应用部署
- StatefulSet:有状态应用部署
- DaemonSet:确保所有 Node 运行同一个 Pod,即管理进程资源
- Job:一次性任务
- Cronjob:周期性计划定时任务
更高级层次对象,部署和管理Pod
3.Service
- 对外提供服务,防止 Pod 失联,定义一组 Pod 的访问策略,方便访问
4.Label
- 标签,附加到某个资源上,用于关联对象、查询和筛选
5.Namespaces
- 命名空间,将对象逻辑上隔离,用于角色管理和控制
6.Annotations
- 注释,方便阅读