一、概述
Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。
k8s 本质上就是用来简化微服务的开发和部署的,关注点包括自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics 监控、日志监控、弹性和容错、API 管理、服务安全等,k8s 将这些微服务的公共关注点以组件形式封装打包到 k8s 这个大平台中,让开发人员在开发微服务时专注于业务逻辑的实现,而不需要去特别关心微服务底层的这些公共关注点,大大简化了微服务应用的开发和部署,提高了开发效率。
K8S的功能
跨主机编排容器。
• 更充分地利用硬件资源来最大化地满足企业应用的需求。
• 控制与自动化应用的部署与升级。
• 为有状态的应用程序挂载和添加存储器。
• K8S的功能线上扩展或缩减容器化应用程序与它们的资源。
• 声明式的容器管理,保证所部署的应用按照我们部署的方式运作。
• 通过自动布局、自动重启、自动复制、自动伸缩实现应用的状态检查与自我修复。 • 为多个容 器提供服务发现和负载均衡,使得用户无需考虑容器IP问题。
K8S解决的问题
K8S 提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。
二、K8S架构与组件
K8S架构
k8s 总体架构采用了经典的 maste/slave 架构模式,分 master 节点和 worker 节点,节点可以是虚拟机也可以是物理机。

K8S组件
master 节点组件
Kube-apiserver
- 用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。以 HTTPRestful 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意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
Kube-scheduler
- 负责资源调度的进程,根据调度算法为新创建的 Pod 选择一个合适的 Node 节点。
- 可以理解成 K8S 所有 Node 节点的调度器。当用户要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod。
Pod
k8s 中特有的一个概念,可以理解为对容器的包装,是 k8s 的基本调度单位,一个 Pod 代表集群上正在运行的一个进程,实际的容器是运行在 Pod 中的, 可以把 Pod 理解成豌豆荚,而同一 Pod 内的每个容器是一颗颗豌豆。一个节点可以启动一个或多个 Pod。生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。

三、K8S核心概念
cluster
集群,Cluster指的是由Kubernetes管理的一组节点和资源池。 由Master和多个Worker节点组成,Master用于集群管理和控制,而Worker节点用于运行应用程序和Pod。提供了一种可扩展的、弹性的平台,用于分布式应用程序和容器的部署和管理。
node
节点,是集群中的工作节点,用于运行Pod和容器。 是物理或虚拟机器,具有足够的资源(CPU、内存、存储)来运行容器化的应用。Kubernetes会自动将Pod调度到可用的节点上,以实现负载均衡和高可用性。
Container
容器, 容器是一种轻量级的虚拟化技术,用于隔离和运行应用程序及其依赖项。将应用程序与其运行时环境进行隔离,并提供了一个独立的运行空间,使得应用程序可以在不同的环境中移植和部署。
Namespace
命名空间, Namespace用于在Kubernetes集群中划分虚拟的资源隔离区域。 可用于组织和管理资源,以及为不同的团队、项目或环境提供逻辑分离。 在一个集群中,可以有多个命名空间,每个命名空间都有自己的一组资源和访问策略。
Pod
容器组,Kubernetes基本调度单位,可以包含一个或多个容器。这些容器共享相同的网络和存储资源,并运行在同一主机上。 提供了一个隔离的运行环境,为容器提供了共享的IP地址和端口空间。 通常,Pod用于运行关联的容器,例如共享相同的资源和上下文的应用程序。
Service
服务, Service定义了一组Pod的稳定网络终点,通过标签选择器与这些Pod进行关联。充当入口和负载均衡器,封装了一组Pod,并提供一个持久的访问地址(Cluster IP或Node IP)。 还支持内部服务发现和跨集群通信。
ReplicaSet
副本集,ReplicaSet用于定义Pod的副本数量和在集群中的运行策略,确保指定的Pod副本数始终运行,并根据需要进行自动扩展或收缩。当Pod由于故障或节点故障而终止时,ReplicaSet会自动重新启动新的Pod副本。
Deployment
部署,Deployment是一种用于声明化管理Pod和ReplicaSet的资源对象。可以定义Pod的期望状态,自动创建和更新ReplicaSet,并实现滚动升级和回滚策略,以确保无缝的应用程序更新。
ConfigMap
配置映射,ConfigMap是一种存储配置数据的资源对象,用于将配置参数传递给应用程序。可以存储环境变量、配置文件、命令行参数等。 可以与Pod或容器相关联,并在容器启动时注入相关的配置信息。
Secrets
密钥用于安全地存储和管理敏感信息,如密码、凭证等。 -Kuberentes中的Secret是一种资源对象,用于存储和传递加密的数据。 -密钥可以被挂载到容器中,用于应用程序的配置文件或认证凭证。
DaemonSet
DaemonSet是Kubernetes中的一个重要概念,提供了一种简单且可靠的方式来在集群的所有节点上运行相同的Pod,适用于许多系统级任务和后台进程的部署场景。 <br>1.每个节点一个Pod副本:DaemonSet会在集群的每个节点上启动一个Pod副本,以确保每个节点都有该Pod的运行实例。<br>2. 系统级任务和守护进程:DaemonSet通常用于运行系统级任务和守护进程,例如日志收集器、监控代理和网络代理等。这些任务通常需要在每个节点上运行,并且要与节点的生命周期同步。 <br>3. 自动扩缩容:当有新节点加入集群或某个节点从集群中移除时,DaemonSet会自动检测节点的状态变化,并相应地启动或终止Pod副本。 <br>4. 节点亲和性规则:可以通过节点亲和性规则来选择在哪些节点上运行DaemonSet的Pod。这允许你将特定的任务或服务与特定类型的节点关联起来。 <br>5. 资源限制和调度约束:可为DaemonSet中的Pod指定资源限制和调度约束,以确保它们在节点上均匀分布并满足资源需求。
1652

被折叠的 条评论
为什么被折叠?



