目录
一、什么是k8s?
K8S 的全称为 Kubernetes,用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
二、k8s的特性
1、弹性伸缩:使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。
2、自我修复:在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检査失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
3、服务发现和负载均衡:K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
4、自动发布(默认滚动发布模式)和回滚:K8S采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。
5、集中化配置管理和密钥管理:管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。
6、存储编排,支持外挂存储并对外挂存储资源进行编排:挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
7、任务批处理运行:提供一次性任务,定时任务;满足批量数据处理和分析的场景。
三、核心组件以及工作流程
核心组件:
Kube-apiserver:用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。它具有调度所有组件的权限。
Kube-controller-manager:运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。
Kube-scheduler:是负责资源调度的进程,根据预选策略和优选策略为新创建的 Pod 选择一个合适的 Node 节点。
etcd:K8S 的存储服务。etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。
Kubelet:Node 节点的监视器,以及与 Master 节点的通讯器。Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,它会定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。
Kube-Proxy:在每个 Node 节点上实现 Pod 网络代理,是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作。 负责写入规则至iptables、ipvs实现服务映射访问的。
工作流程:
用户通过客户端发送创建Pod的请求到master节点上的apiserver,apiserver会先把请求信息写入到etcd中保存,再找controller-manager根据预设的资源配置模板创建Pod资源,然后controller-manager会通过apiserver去找scheduler为新创建的Pod选择最合适的node节,scheduler通过调度算法的预选策略和优选策略筛选出最合适的node节点进行调度,其中预选策略是淘汰不符合条件的,而优选策略是选出一个或者几个最优的,然后再通过apiserver找到对应的node节点上的kubelet去创建和管理Pod,kubelet会跟容器引擎交互来管理Pod/容器的生命周期,用户还可通过apiserver在kube-proxy上写入网络规则,创建service资源,实现对Pod的服务发现和负载均衡。