Kubernetes初认识

系列文章目录

`

文章目录

  • 系列文章目录
  • 一、Kubernetes初认识
    • 1.k8s的特性
    • 2.K8S架构
    • 3.Kubernetes工作流程
  • 二、K8S创建Pod流程
    • 1.详细版
    • 2.简单版
  • 总结

一、Kubernetes初认识

1.k8s的特性

弹性伸缩:使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。
自我修复:在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
服务发现和负载均衡:K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
自动发布(默认滚动发布模式)和回滚:K8S采用滚动策略更新应用,一个更新一个Pod,而不是同时删除所有的Pod,如果更新过程中出现问题,将回滚更改,确保升级不收影响业务。
集中化配置管理和密钥管理:管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在K8S中,方便应用程序使用。
存储编排:支持外挂存储并对外挂存储资源进行编排,挂载外部存储系统,无论是来自本地存储,公有云(如:AWS),还是网络存储(如:NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
任务批量处理运行:提供一次性任务,定时任务,满足批量数据处理和分析的场景。

2.K8S架构

K8S 也是一个典型的C/S架构,由master主控节点和node节点组成
1、Master主控节点组件
auth:认证
身份权限的认证;客户端通过堡垒机管理node,在k8s内只有master可以管理集群,这时就需要master对node进行授权,使用的是apiserver,授权node管理集群
kube-APIserver:6443
调度、统筹k8s集群,各组件协调者,以RESTful API提供接口服务
所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给 Etcd存储,从而隔离其他组件与etcd直接交互
kube-controller-manager(控制器管理中心-定义资源类型)
处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager 就是负责管理这些控制器的。
kube-scheduler:集群调度器
通过调度算法策略决定最终任务在哪个node节点上
根据调度算法(预选/优选的策略)为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
etcd :分布式键值存储系统
特性是服务自动发现,去中心化,版本是V3+,v2只支持把数据保存在内存中。用于保存k8s集群几乎所有的信息数据,包括路由状态,比如Pod、Service等对象信息
2、work-node组件
kubelet
kubelet是Master在Node节点上的Agent,管理代理的角色(kubelet)是bootstrap,kublet管理对应的node节点,及node节点与master之间的交互,kubectl会监控负责的node节点,周期性汇报给master(kubectl)
kube-proxy(四层)
使用services定义了一组pod资源的访问策略,做反向代理,只要访问到services的id即可访问到pod
docker或rocket
容器引擎,运行容器;kubelet借助于docker引擎创建容器
Kubernetes初认识_第1张图片
Kubernetes初认识_第2张图片

3.Kubernetes工作流程

首先,运维人员使用kubectl命令行工具向API Server发送请求,API Server接收到请求后会写入到etcd中,API Server会让Controller-manager按照预设的模板去创建pod,Controller-manager通过API Server读取etcd中用户的预设信息,再通过API Server去找Scheduler可以为新创建的pod选择最合适的node节点。scheduler会通过API Server在etcd存储中心根据存储的node节点元信息、剩余资源等,用预选和优选策略选最优的node节点。
scheduler确定node节点后通过API Server交给这个node节点上的kubele进行pod资源的创建,kubele调用容器引擎交互创建pod,同时将pod监控信息通过API Server存储到etcd中。
用户访问时,通过kube-proxy负载、转发,访问相应的pod
Kubernetes初认识_第3张图片

二、K8S创建Pod流程

1.详细版

kubectl创建一个Pod(在提交时,转化为json**)**
1.首先经过auth认证(鉴权),然后传递给API Server进行处理。
2.API Server将请求信息提交给etcd
3.scheduler和controller-manager会watch(监听)API Server,监听请求。
4.在scheduler和controller-manager监听到请求后,scheduler会提交给API Server一个list清单-----》包含的是获取node节点信息。
5.此时API Server就会向etcd获取后端node节点信息,获取到后,被scheduler监听到,然后scheduler进行预选优选进行打分,最后将结果给API Server。
6.此时API Server也会被controller-manager 监听,controller-manager会根据请求创建Pod的配置信息(需求什么控制器),然后把控制器资源给API Server。
7.此时API Server会提交清单给与对应节点的kubelet(代理)。
8.kubelet代理通过K8S与容器的接口(例如containerd)进行交互,假设是docker容器,那么此时kubelet就会通过dockershim以及runc接口与docker的守护进程docker-server进行交互,来创建对应的容器,再生成对应的Pod。
9.kubelet同时会借助于metric server收集本节点的所有状态信息,然后再提交给API Server
10.最后API Server会提交list清单给与etcd来存储(最后api-server会将数据维护在etcd中)
Kubernetes初认识_第4张图片

2.简单版

1、首先kubectl 转化为json后,向api-server 提交创建Pod请求
2、api-server将请求信息记录在etcd中
3、scheduler 监听api-server处理的请求,然后向api-server申请后端节点信息
4、api-server 从etcd中获取后端节点信息后,给与scheduler
5、scheduler 进行预选优选、打分,然后提交结果给api-server
6、controller-manager 监听api-server处理的请求信息,并将所需的控制器资源给与api-server
7、api-server 对接node节点的kubelet
8、kubelet调用资源创建pod,并将统计信息返回给api-server
9、api-server将信息记录在etcd中

总结

你可能感兴趣的:(kubernetes,运维,docker)