k8s快速入门:理论篇
一.简单了解k8s
1.k8s是什么
k8s全称Kubernetes,了解它之前我们先要知道他的前辈——Borg,Borg是谷歌⼗⼏年以来⼤规模应⽤容器技术的经验积 累和升华的⼀个重要成果,是⾕歌的⼀个久负 盛名的内部使⽤的⼤规模集群管理系统,它基于容器技术,⽬的是实现资源管理的⾃动化,以及跨多个数据中⼼的资源利⽤率的最⼤化,它运行着来自数千个不同应用程序的数十万个作业,跨越许多集群,而每个集群拥有多达数万台计算机,Borg给谷歌内部带来了改革般的变化,大大精简了运维人员,而谷歌也严格保密Borg,所以员工都签署了保密协议,直到2015年4月随着Kubernetes的诞生,才了解Borg的更多内幕,而Kubernetes是吸取了Borg过去十年间的经验与教训,所以Kuerneter一经开源就迅速称霸了容器技术领域。
k8s应用于应用服务与服务器之间,用于管理容器,能够通过策略协调和管理多个应用服务,内建智能负载均衡器,能够自动扩缩容,而且服务挂了后也能自动将应用部署到其他服务上,同时,Kubernetes 提供了完善的管理⼯具,这些⼯具涵盖了包括开 发、部署测试、运维监控在内的各个环节。因此,Kubernetes是⼀ 个全新的基于容器技术的分布式架构解决⽅案,并且是⼀个⼀站式的 完备的分布式系统开发和⽀撑平台。
2.k8s的架构原理
2.1 k8s的工作流程大致:
运维人员通过apiserver发出创建Pod请求,告诉它我的需求
API Server 响应请求,并通过一系列认证授权,把请求存储到etcd
通知Controller-manager,它会通过API server读取etcd,然后按照所预设的模板去创建Pod,并将pod数据写入etcd
然后Controller-manager 会通过API Server去找Scheduler 为新创建的Pod选择最适合的Node 节点
Scheduler 会通过预算策略在所有Node节点中挑选最优的(Node 节点中还剩多少资源是通过汇报给API Server 存储在etcd 里)API Server 会调用一个方法找到etcd 里所有Node节点的剩余资源,再对比Pod 所需要的资源,在所有Node 节点中查找哪些Node节点符合要求。如果都符合,预算策略就交给优选策略处理,优选策略再通过CPU的负载、内存的剩余量等因素选择最合适的Node 节点,并把Pod调度到这个Node节点上运行。controller manager会通过API Server通知kubelet去创建pod,然后通过kube-proxy中的service对外提供服务接口
kube-proxy创建网络规则,制定转发规则。创建service,把用户的请求负载均衡转发到关联的pod上
2.2 Master组件部分
2.2.1 kube-API server
用于暴露kubernetes API ,任何资源请求或调用操作(来自 UI界面或者 CLI 命令行工具)都是通过 kube-apiserver 提供的接口进行,并提供认证、授权、访问控制、API 注册和发现等机制。可以说,API Server 是K8S集群架构的大脑
2.2.2 kube- controller-manager
运行管理控制器,是k8s集群中处理常规任务的后台线程,是k8s集群里所有资源对象的自动化控制中心,通过API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个Node意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期工作状态
这些控制器主要包括:
Node Controller(节点控制器):负责在节点出现故障时发现和响应
Replication Controller(副本控制器):负责保证集群中一个RC(资源对象Replicaion Contraller)所关联的Pod副本数始终保持在预设值
Endpoints Controller(端点控制器):填充端点对象(即连接Services和Pods),负责监听Service和对应Pod副本的变化
Service Accont && Token Controllers(服务账户和令牌控制器):为新的命名空间创建默认账户和API访问令牌
Namespace Controller(命名空间控制器):管理namespace的生命周期
Service Controller(服务控制器):属于K8S集群与外部的云平台之间的一个接口控制器
2.2.3 Kube-scheduler
是负责资源调度的进程,根据调度算法为新创建的Pod选择一个合适的Node节点,当用户要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod,先使用预算策略在使用优选策略
2.2.4 Kube- etcd
K8S 的存储服务
etcd是分布式键值存储系统,存储了K8S的关键配置和用户配置
K8S中仅API Server 才具备读写权限,其他组件必须通过API Server的接口才能读写数据
2.3 node 组件
2.3.1 Kubelet 组件
监视node 节点上的资源和服务状态,并汇报给master节点的apiserver;和容器引擎交互,管理镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源,实现容器的生命周期管理
2.3.2 Kube-Proxy
在 K8S 集群中微服务的负载均衡是由 Kube-proxy 实现的。****Kube-proxy 是 K8S 集群内部的负载均衡器,它是一个分布式代理服务器,在 K8S 的每个节点上都会运行一个 Kube-proxy 组件
2.3.3 docker或者rocket
容器引擎,运行容器,负责本机的容器创建和管理工作
2.3.4 Pod
Pod是 Kubernetes 创建或部署的最小/最简单的基本单位,一个 Pod 代表集群上正在运行的一个进程,一个 Pod 由一个或多个容器组成,Pod中容器共享网络、存储和计算资源,在同一台 Docker 主机上运行。一个 Pod 里可以运行多个容器,又叫边车模式(SideCara)模式。而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个Pod,同一个 Pod 之间的容器可以通过localhost 互相访问,并且可以挂载Pod内所有的数据卷,不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷
评论区