Kubernetes——初识k8s(1)
k8s基本概念及各个组件作用
文章目录
一、Kubernetes概述
1、什么是Kubernetes
kubernetes,词根源于希腊语的舵手、飞行员。简称“k8s”,至于为什么这样叫,是因为这个单词比较长,写起来太累了,而“k”和“s”之间是8个字母,所以叫k8s。
kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,它的目标是让部署容器化的应用简单并且高效。
2、作用
k8s用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
是不是有些难理解,简单来说就是k8s是负责自动化运维管理多个容器化程序(比如docker)的集群,它是一个生态及其丰富的容器编排框架。
3、由来
k8s是有Google的borg系统(博格系统,Google内部使用的大规模容器编排工具)作为原型,后经过go语言延用borg的思路重写并捐献给CNCF基金会开源。
k8s官网https://kubernetes.io
GitHub: https://github.com/kubernetes/kubernetes
二、为什么要用k8s
试想下传统的后端部署方法:把程序包(包括可执行的二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。
如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
这样问题就出现了:从监控告警到部署服务,中间需要人力介入。那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?而这就是K8S要做的事情:自动化运维管理容器化(Docker)程序。
k8s是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。其主要功能如下:
- 使用Docker等容器技术对应用程序包装(package)、实例化 (instantiate)、运行(run)。
- 以集群的方式运行、管理跨机器的容器
- 解决 Docker跨机器容器之间的通讯问题。
- k8s的自我修复机制使得容器集群总是运行在用户期望的状态。
三、k8s的特性
- 弹性伸缩
使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。 - 自我修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。 - 服务发现和负教均衡
K8s为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。 - 自动发布(默认滚动发布模式)和回滚
K8s采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。 - 集中化配置管理和密钥管理
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在k8s中,方便应用程序使用。 - 存储编排,支持外挂存储并对外挂存储资源进行编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。 - 任务批处理运行
提供一次性任务,定时任务;满足批量数据处理和分析的场景。
四、Kubernetes集群架构与组件
1、集群架构
k8s是属于主从设备模型(Master-Slave 架构),即有Master节点负责集群的调度、管理和运维,slave 节点是集群中的运算工作负载节点。在k8s中,主节点一般被称为 Master节点,而从节点则被称为Worker Node 节点,每个Node 都会被Master分配一些工作负载。
Master组件可以在群集中的任何计算机上运行,但建议Master 节点占据一个独立的服务器。因为 Master 是整个集群的大脑,如果 Master所在节点宕机或不可用,那么所有的控制命令都将失效。除了Master,在 K8S集群中的其他机器被称为Worker Node节点,当某个Node宕机时,其上的工作负载会被 Master自动转移到其他节点上去。
2、核心组件
master组件:
- Kube-apiserver
用于暴露Kubernetes API,任何资源请求或调用操作都是通过kube-apiserver 提供的接口进行。以HTTP Restful API提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给Etcd存储。
可以理解成API Server是K8S的请求入口服务。API Server负责接收K8S所有请求(来自UI界面或者CLI命令行工具),然后根据用户的具体请求,去通知其他组件干活。可以说 API Server是 K8S 集群架构的大脑。
- Kube-controller-manager
运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S集群里所有资源对象的自动化控制中心。在K8S集群中,一个资源对应一个控制器,而Controller manager就是负责管理这些控制器的。
由一系列控制器组成,通过API Server监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个Node 意外宕机时,Caontroller Manaer会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
-
这些控制器主要包括:
-
Node Controller(节点控制器):负责在节点出现故障时发现和响应。
-
Replication Controller(副本控制器)︰负责保证集群中一个RC(资源对象Replication Controller)所关联的 Pod副本数始终保持预设值。可以理解成确保集群中有且仅有N个 Pod 实例,N是RC中定义的 Pod副本数量。
-
Endpoints Controller(端点控制器):填充端点对象(即连接Services和Pods),负责监听Service和对应的Pod副本的变化。可以理解端点是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道它的endpoint。
-
Service Account & Token Controllers(服务帐户和令牌控制器):为新的命名空间创建默认帐户和API访问令牌。Resourceluota Controller (资源配额控制器):确保指定的资源对象在任何时候都不会超量占用系统物理资源。
-
Namespace Controller(命名空间控制器):管理namespace 的生命周期。
-
Service Controller(服务控制器):属于K8s集群与外部的云平台之间的一个接口控制器。
-
-
Kube-scheduler
是负责资源调度的进程,根据调度算法为新创建的 Pod选择一个合适的 Node节点。
可以理解成k8s所有Node 节点的调度器。当用户要部署服务时,Scheduler 会根据调度算法选择最合适的Mode 节点来部署Pod。
- 预选策略(predicate)
- 优选策略(priorities)
配置存储中心
- etcd
k8s的存储服务。etcd是分布式键值存储系统,存储了k8s的关键配置和用户配置,k8s中仅API server才具备读写权限,其他组件必须通过API server的接口才能读写数据。
Node组件
-
Kubelet
Node节点的监视器,以及与Master节点的通讯器。Kaubelet 是Master节点安插在 Node节点上的"眼线",它会定时向API Server。汇报自己 Node节点上运行的服务的状态,并接受来自 Master节点的指示采取调整措施。
从Master节点获取自己节点上 Pod 的期望状态(比如运行什么容器、运行的副本数量、网络或者存储如何配置等),
直接跟容器引擎交互实现容器的生命周期管理,如果自己节点上Pod的状态与期望状态不一致,如调用对应的容器平台接口(即 docker的接口)达到这个状态。
管理镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源。 -
Kube-Proxy
在每个 Node 节点上实现 Pod网络代理,是Kubernetes Service资源的载体,负责维护网络规则和四层负裁均衡工作。负责写入规则至iptables、ipvs实现服务映射访问的。
Kube-Proxy本身不是直接给 Pod提供网络,Pod的网络是由 Kubelet提供的,Kube-Proxy实际上维护的是虚拟的 Pod 集群网络。Kube-apiserver通过监控Kube-Proxy进行对 Kubernetes Service 的更新和端点的维护。
在K8S集群中微服务的负载均衡是由 Kube-proxy 实现的。Kube-proxy 是K8S集群内部的负载均衡器。它是一个分布式代理服务器,在K8S的每个节点上都会运行一个Kube-proxy组件。
3、k8s工作流程
API Server接收到请求创建一批Pod ,API Server 会让Controller-manager 按照所预设的模板去创建Pod,Controller-manager 会通过apiserver 去找scheduler 为新创建的 pod选择最适合的Node 节点。比如运行这个Pod需要24G的资源。
Scheduler会通过预选策略过滤掉不满足策略的 node节点。Node节点中还剩多少资源是通过汇报给API Server存储在etcd里,API Server会调用一个方法找到 etcd里所有Node节点的剩余资源,再对比Pod 所需要的资源,如果某个Node节点的资源不足或者不满足预选策略的条件则无法通过预选。
预选阶段筛选出的节点,在优选阶段会根据优先策略为通过预选的 Node节点进行打分排名,选择得分最高的Node。例如,资源越富裕、负载越小的Node能具有越高的排名。
五、总结
k8s几个组件及其作用
- master节点
- apiserver:所有服务访问的统一入口
- controller-manager:负责根据预设模块创建pod,维持pod等资源的副本期望数目
- scheduler:负责调度pod,通过预选策略、优选策略选择最合适的node节点分配pod
- etcd:分布式键值对数据库,负责存储k8s集群的重要信息(持久化)
- work node节点
- kublet:跟apiserver通信汇报当前node节点上的资源使用情况和状态,接受apiserver的指令跟容器引擎交互实现容器的生命周期管理
- kube-proxy: 在node节点上实现pod的网络代理,维护网络规则和四层负载均衡工作,负责写入规则到iptables或ipvs实现服务的映射访问
更多推荐
所有评论(0)