K8S 基本概念:
K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。
作用:
用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。
K8S是一款强大的容器编排平台,可以帮助企业实现容器化的业务部署和管理,提升效率和可靠性。
K8S是一个容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
K8S 的特点包括:
●自动化管理:大大减少了人工干预,提高了应用部署和管理的效率。
●弹性伸缩:能够根据负载自动调整容器的副本数量,实现资源的高效利用。
●高可用性:通过副本和故障转移机制,确保应用的持续可用。
●负载均衡:可以在多个节点上自动分配负载,实现负载均衡。
●跨平台支持:可以在不同的基础设施上运行,包括物理机、虚拟机和云平台。
核心组件
K8S有 master 和 worker node 两类节点
master:
Kube-apiserver:集群的统一入口,负责接收、验证和转发请求。
controller-manager:控制器管理器,负责管理K8s各种资源对象的控制器,通过apiserver监控整个k8s集群的资源状态,并确保资源始终处于预期的工作状态。
scheduler:资源调度器,负责pod资源的调度,通过调度算法(预选/优选策略)为待部署的Pod选择最适合的node节点。
etcd:K8S集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8S集群所有配置和状态信息,仅apiserver拥有访问和读写权限
work node节点:负责运行工作负载,即容器应用
kubelet:接受apiserver的请求,创建和管理pod 及其容器的生命周期,定期收集节点的资源使用情况,并上报给apiserver。
kube-proxy:负责实现pod网络代理,维护网络规则和四层负载均衡。
K8S创建Pod资源对象的工作流程:
用户通过客户端发送创建pod请求给apiserver,apiserver接收到请求并进行认证后,将请求信息存储到etcd中;contorller-manager通过list-watch监听到apiserver的指令后,根据请求信息中的资料模板配置创建pod资源(这里是个抽象的pod);scheduler也通过list-watch监听到api-server的指令,调度新创建的pod,根据调度算法(预选优选策略)选出最合适的node节点部署pod,node节点上的kubelet也通过list-watch监听api-server的指令,会在指定node的节点上创建pod,并管理容器的生命周期;用户还可以用过apiserver在kube-proxy上配置网络规则,实现网络代理和负载均衡。
K8S资源对象
Pod:是K8S能够创建和管理的最小单元。一个Pod里可以包含一个或多个应用容器,同一个Pod里的容器之间共享网络、存储等资源(容器之间可以通过localhost相互访问,还可以共享Pod的存储卷)
Pod控制器:
- deployment:部署无状态应用(没有实时数据需要存储);同时也负责管理replicaset(维持Pod副本数量始终符合预期状态)和Pod(容器化的应用程序)
- statefulset:部署有状态应用(有实时数据需要存储)
- daemonset:在每个node节点上都部署一个Pod副本
- job:一次性的部署短期任务的Pod(执行完任务后会自动退出)
- cronjob:周期性的部署短期任务的Pod(执行完任务后会自动退出)
service:在K8S集群内部,为通过标签选择器相关联的一组Pod提供一个统一的访问(clusterIP)和负载均衡(只支持四层)
service 通过标签选择器关联Pod的标签,从而自动发现相关联Pod的端点(Pod的IP和端口)
ingress:作为K8S集群外部的访问入口,可定义ingress规则根据不同的域名或URL路径绑定并转发请求给指定的service,支持七层负载均衡
volume:Pod中容器可以访问的文件系统
k8s集群外部访问的过程:
集群外部访问需要用ingress作为集群外部入口访问入口,ingress根据不同的域名或者url路径绑定不同的servers,根据外部的路径,转发给相应的servers,再通过servers想关联的pod进行转发。