目录
- 理解 Kubernets 技术
- 1、什么是 Kubernets
- 2、为什么使用 Kubernets
- Kubernets 重要概念
- 1、先看 Kubernets 架构图
- 2、集群(cluster)
- 3、主节点(Master)
- 3.1、API 服务器(Kubernets API Server)
- 3.2、控制器管理器(Kubernets Controller Manager)
- 3.3、调度器(Kubernets Scheduler)
- 3.4、Etcd
- 4、节点(node)
- 4.1、代理(kube-proxy)
- 4.2、kubelet
- 5、Pod
- 6、服务
- 7、存储卷
- 8、命名空间
Kubernets 是容器技术快速发展的产物。Kubernets 的出现是的大规模的服务器服务运维变得便捷、简单起来。本节从最简单的概念开始,循序渐进的学习 Kubernets。
理解 Kubernets 技术
1、什么是 Kubernets
简单地讲,Kubernets 是一套自动化容器运维的开源平台,这些运维操作包括部署、调度和节点集群间扩展。Kubernets 的主要功能是容器编排,是指确保所有容器都按照计划运行再物理机或虚拟机上。
2、为什么使用 Kubernets
Kubernets 是一个自动化部署、伸缩和操作应用程序容器的开源平台。使用 Kubernets 可以快速、高效地满足用户的需求,例如:
• 快速准确地部署应用程序。
• 根据需要动态扩缩容。
• 当出现故障时自愈。
• 进行不停机的滚动升级和回滚。
Kubernets 具有以下明显的优势:
• 可移动:公有云、私有云、混合云。
• 可扩展:模块化、插件化、可挂载、可组合。
• 自修复:自动部署、自动重启、自动复制、自动伸缩。
Kubernets 重要概念
1、先看 Kubernets 架构图
2、集群(cluster)
集群是计算、存储和网络资源的集合,Kubernets 使用集群来运行组成系统的各种工作负载。cluster 是整个 Kubernets 容器集群的基础环境。
3、主节点(Master)
主节点(Master)是集权的控制节点,由几个组件组成,包含 API 服务器、调度器和控制器管理器。主节点负责节点在全局、集群水平的调度和事件处理。通常,所有的主控制器组件都设置在一个单一主机上,为了实现高可用性,用户可以部署多个 Master 节点。
Master 上运行的关键进程:
3.1、API 服务器(Kubernets API Server)
Kubernets API Server 的进程名为 kube-apiserver。Kubernets API Server 提供了 Kubernets 各类资源对象的增删改查的 HTTP Rest API。是整个系统的数据总线和数据中心,它的所有数据都存储在 etcd 集群中。
3.2、控制器管理器(Kubernets Controller Manager)
Kubernets Controller Manager 作为集群内部的管理控制中心,是各种管理器的集合。负责集群内的 Node、Pod 副本、服务端点、命名空间、服务账号、资源配额的管理。所有控制前通过 API 监控集群状态,确保集群始终处于预期的工作状态。
3.3、调度器(Kubernets Scheduler)
Kubernets Scheduler 负责将 Pod 调度到指定的工作节点中,这一过程也叫绑定,他是一个非常复杂的任务,因为它需要考虑多个相互作用的因素,例如:资源需求、服务要求、硬/软件的策略约束、数据局部性、截止日期等。
3.4、Etcd
Etcd 是 Kubernets 集群中一个十分重要的组件,也是一个非常可靠的分布式数据存储。用于保存集群所有的网络配置和对象的状态信息。
4、节点(node)
在 Kubernets 中,除了 Master 节点外,其他的节点都成为 Node。与 Master 节点不同,Node 才是 Kubernets 中的承担主要计算功能的工作节点。Node 可以是一台物理机,也可以是一台虚拟机。
整个 Kubernets 集群中的 Node 协同工作,Master 会根据实际情况将某些负载分配给各个 Node。每个 Kubernets 节点运行多个 Kubernets 组件,如 Kubelet 和 Kube 代理:
4.1、代理(kube-proxy)
kube-proxy 在每个节点上进行最低水平的网络维护,它用于呈现本地 Kubernets 服务,可以执行 TCP 及 UDP 转发,通过环境变量或 DNS 寻找集群 IP。监听每个节点上 Kubernets API 中定义的服务变化情况,创建路由规则来进行服务负载均衡。
4.2、kubelet
在 Kubernets 集群中,每个 Node 节点都会启动 kubelet 进程,用来处理 Master 节点下发到本节点的任务,管理 Pod 和其中的容器。Kubelet 会在 API Server 上注册节点信息,定期向 Master 汇报节点资源使用情况,并通过 cAdvisor 监控容器和节点资源。可以把 Kubelet 理解成是一个代理进程,是 Node 上的 Pod 管家。
5、Pod
Pod 是 Kubernets 最基本的工作单元,一个 Pod 中可以包含一个或多个容器,一个 Pod 可以被一个容器化的环境看作应用层的逻辑宿主机。一个 Pod 中的多个容器应用通常是紧密耦合的,Pod 在 Node 上被创建、启动或者销毁。每个 Pod 里运行着一个特殊的被称为 Pause 的容器,其他容器则为业务容器,这些业务容器共享 Pause 容器的网络栈和 Volume 挂载卷,因此他们之间通信和数据交换更为高效。
Pod 是 Kubernets 调度的基本操作单元,Master 节点会以 Pod 为单位,将其调度到 Node 节点上面。
6、服务
在 Kubernets 的集群中,虽然每个 Pod 都会被分配一个单独的 IP 地址,但这个 IP 地址会随着 Pod 的销毁而消失。这就引出一个问题,如果有一组 Pod 组成一个集群来提供服务,那么如何来访问它呢?那就是通过服务。
一个服务可以看作一组提供相同服务的 Pod 的对外访问接口,服务作用于哪些 Pod 是通过标签选择器来定义的。服务通常拥有以下特点:
• 提供一个指定的名字,例如MySQL-server。
• 拥有一个虚拟 IP 地址和端口号,销毁之前不会改变,只能内网访问。
• 能提供某种远程服务能力。
• 被映射到了提供这种服务能力的一组容器应用上。
7、存储卷
Pod 上的存储是临时的,会随 Pod 一起消失。如果只在节点的容器间交换数据,这已经足够,但有时数据需要在 Pod 上存储更长的时间,或在 Pod 间传递数据,存储卷的概念便支持了这种需求。Kubernets 存储卷的生命周期与 Pod 绑定。容器宕掉后 kubelet 再次重启容器时,存储卷的数据依然还在,而 Pod 删除时,存储卷才会被清零。数据是否丢失取决于具体的存储卷类型,持久化存储卷为独立于计算资源的一种实体存储资源,不属于任何一个 Node。因此,在 Pod 被删除时,不会丢失数据,除非人工将其删除。
8、命名空间
命名空间时一个虚拟集群。由命名空间分隔的多个虚拟集群可组成一个单独的物理集群。每个虚拟集群与其他的虚拟集群完全隔离,他们只通过公共接口交换信息。
Kubernets 集群在启动后,会创建一个名为 default 的默认的命名空间,如果不特别指定命名空间,则用户创建的 Pod、RC、服务都被系统创建到默认的命名空间中。
需要注意的是,节点对象和持久化存储卷不存在命名空间中。Kubernets 可以调度来自不同命名空间的 Pod 在同一节点运行。同样,来自不同命名空间的 Pod 可以使用相同的持久化存储。