【kubernetes】k8s概念、核心及组件详细说明
kubernetes虚拟化环境框架图下面的每张图都是独立的,是用不同的方法展示出来而已。Kubernetes 特点简洁的:轻量级,简单,易上手可移植的:公有,私有,混合,多重云(multi-cloud)可扩展的: 模块化, 插件化, 可挂载, 可组合可自愈的: 自动布置, 自动重启, 自动复制通俗来说:自动化容器的部署和复制随时扩展或收缩容器规模将容器组织成组,并且提供容器间的负载均衡很容易地升级
- 当然,也有快速安装的工具,比如 kubeadm,kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes 集群的工具,目前的还处于孵化开发状态,伴随 Kubernetes 每个版本的发布都会同步更新,当然,目前的 kubeadm 是不能用于生产环境的。
=================================================================================
下面的每张图都是独立的,是用不同的方法展示出来而已。
============================================================================
-
简洁的:轻量级,简单,易上手
-
可移植的:公有,私有,混合,多重云(multi-cloud)
-
可扩展的: 模块化, 插件化, 可挂载, 可组合
-
可自愈的: 自动布置, 自动重启, 自动复制
-
通俗来说:
-
自动化容器的部署和复制
-
随时扩展或收缩容器规模
-
将容器组织成组,并且提供容器间的负载均衡
-
很容易地升级应用程序容器的新版本
-
提供容器弹性,如果容器失效就替换它
==================================================================================
-
简单来说: 用于控制 Kubernetes 节点的计算机,所有任务分配都来自于此。
-
k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;Kubernetes Schedule是负责资源调度(Pod调度)的进程。
-
简单来说:执行请求和分配任务的计算机,由 Kubernetes 主机负责对节点进行控制。
-
Node也称之为worker。
-
Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,拥有名称和IP、系统资源信息。运行docker eninge服务,守护进程kunelet及负载均衡器kube-proxy.
-
每个Node节点都运行着以下一组关键进程
-
kubelet:负责对Pod对于的容器的创建、启停等任务
-
kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
-
Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作
-
Node节点可以在运行期间动态增加到Kubernetes集群中,默认情况下,kubelet会想master注册自己,这也是Kubernetes推荐的Node管理方式,kubelet进程会定时向Master汇报自身情报,如操作系统、Docker版本、CPU和内存,以及有哪些Pod在运行等等,这样Master可以获知每个Node节点的资源使用情况,冰实现高效均衡的资源调度策略。
-
简单来说:被部署在单个节点上的,且包含一个或多个容器的容器组,Pod 是可以被创建,调度,并与 Kubernetes 管理最小部署单元,同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来,这样,您就能更加轻松地在集群中移动容器。
-
运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址,同一个Pod中,端口不能重复,否则报错,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。
-
Pod其实有两种类型:普通Pod和静态Pod,后者比较特殊,它并不存在Kubernetes的etcd存储中,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动。普通Pod一旦被创建,就会被放入etcd存储中,随后会被Kubernetes Master调度到摸个具体的Node上进行绑定,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器冰启动起来,在。在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问起并且重启这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。
-
简单来说:服务为一组 Pod 提供单一稳定的名称和地址,服务可将工作定义与容器集分离,Kubernetes 服务代理会自动将服务请求分配到正确的容器集 — 无论这个容器集会移到集群中的哪个位置,即使它已被替换,也是如此。
-
Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行。
-
外部系统访问Service的问题
首先需要弄明白Kubernetes的三种IP这个问题
-
Node IP:Node节点的IP地址
-
Pod IP: Pod的IP地址
-
Cluster IP:Service的IP地址
-
首先,Node IP是Kubernetes集群中节点的物理网卡IP地址,所有属于这个网络的服务器之间都能通过这个网络直接通信。这也表明Kubernetes集群之外的节点访问Kubernetes集群之内的某个节点或者TCP/IP服务的时候,必须通过Node IP进行通信
-
其次,Pod IP是每个Pod的IP地址,他是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络。
-
最后Cluster IP是一个虚拟的IP,但更像是一个伪造的IP网络,原因有以下几点
-
Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址
-
Cluster IP无法被ping,他没有一个“实体网络对象”来响应
-
Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
-
Kubernetes集群之内,Node IP网、Pod IP网于Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊路由规则。
Replication Controller【复制控制器 (Replication Controller)】
-
简单来说:复制控制器管理 Pod 的生命周期,它们保证指定数量的 Pod 在任何给定的时间都在运行,他们通过创建或删除 Pod 做到这一点
-
Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
-
这个东西是Replication Controller的升级版,了解下就行,平常还是使用Replication Controller更多。
-
Deployment 是新一代用于 Pod 管理的对象,与 Replication Controller 相比,它提供了更加完善的功能,使用起来更加简单方便。
-
简单来说:标签用于组织和选择基于键值对的对象组,它们被用于每一个 Kubernetes 组件。
-
Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key于value由用户自己指定。Label可以附加在各种资源对象上,如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。
-
我们可以通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便的进行资源分配、调度、配置等管理工作。
一些常用的Label如下:
-
版本标签:“release”:“stable”,“release”:“canary”…
-
环境标签:“environment”:“dev”,“environment”:“qa”,“environment”:“production”
-
架构标签:“tier”:“frontend”,“tier”:“backend”,“tier”:“middleware”
-
分区标签:“partition”:“customerA”,“partition”:“customerB”
-
质量管控标签:“track”:“daily”,“track”:“weekly”
-
Label相当于我们熟悉的标签,给某个资源对象定义一个Label就相当于给它大了一个标签,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。
Label Selector在Kubernetes中重要使用场景如下:
-
kube-Controller进程通过资源对象RC上定义Label Selector来筛选要监控的Pod副本的数量,从而实现副本数量始终符合预期设定的全自动控制流程
-
kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service岛对应Pod的请求转发路由表,从而实现Service的智能负载均衡
-
通过对某些Node定义特定的Label,并且在Pod定义文件中使用Nodeselector这种标签调度策略,kuber-scheduler进程可以实现Pod”定向调度“的特性
==============================================================================
kubectl
客户端命令行工具,将接受的命令格式化后发送给 kube-apiserver,作为整个系统的操作入口。
Kubernetes API Server
-
作为整个系统的控制入口,以 REST API 服务提供接口。
-
其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
kube-controller-manager
用来执行整个系统中的后台任务,包括节点状态状况、Pod 个数、Pods 和 Service 的关联等。
kube-scheduler(将 Pod 调度到 Node 上)
-
负责节点资源管理,接受来自 kube-apiserver 创建 Pods 任务,并分配到某个节点。
-
为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
etcd
负责节点间的服务发现和配置共享。
kube-proxy
运行在每个计算节点上,负责 Pod 网络代理。定时从 etcd 获取到 Service 信息来做相应的策略。
kubelet
运行在每个计算节点上,作为 agent,接受分配该节点的 Pods 任务及管理容器,周期性获取容器状态,反馈给 kube-apiserver。
DNS
一个可选的DNS服务,用于为每个 Service 对象创建 DNS 记录,这样所有的 Pod 就可以通过 DNS 访问服务了。
flannel
Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署。我们知道当我们启动 Docker 后会有一个用于和容器进行交互的 IP 地址,如果不去管理的话可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的 Docker 容器。Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP 通信。
Replication Controller
管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
Node Controller
管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
Namespace Controller
管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
Service Controller
管理维护Service,提供负载以及服务代理。
EndPoints Controller
管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
Service Account Controller
管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
Persistent Volume Controller
管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
Daemon Set Controller
管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
Deployment Controller
管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
Job Controller
管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
Pod Autoscaler Controller
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。
Kubernetes Node运行节点,运行管理业务容器,包含如下组件:
===================================================================================================
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
本次面试答案,以及收集到的大厂必问面试题分享:
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
本次面试答案,以及收集到的大厂必问面试题分享:
[外链图片转存中…(img-3wno9Q2Q-1713398459449)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)