Kubernetes是一种开源容器管理工具,可自动进行容器部署、容器扩展、去规模和容器负载平衡(也称为容器编排工具)。它是用 Golang 编写的,拥有庞大的社区,因为它最初由 Google 开发,后来捐赠给 CNCF(云原生计算基金会)。 Kubernetes 可以将“n”个容器组合到一个逻辑单元中,以便轻松管理和部署它们。它与所有云供应商(即公共云、混合云和本地云)完美配合。
Kubernetes 是一个开源平台,以集群的形式管理 Docker 容器。随着容器的自动部署和扩展,它通过自动重启失败的容器并在它们的主机死亡时重新调度它们来提供修复。此功能提高了应用程序的可用性。
Kubernetes 的特点——
- 自动调度——Kubernetes 提供了高级调度程序来在集群节点上启动容器。它执行资源优化。
- 自我修复能力——它提供重新调度、替换和重新启动已死亡的容器。
- 自动推出和回滚——它支持容器化应用程序所需状态的推出和回滚。
- 水平扩展和负载平衡——Kubernetes 可以根据需要扩展和缩减应用程序。
Kubernetes 与 Docker
Docker Swarm | Kubernetes |
---|---|
No Auto-Scaling | Auto-Scaling |
Does Auto Load-Balancing | Manually configure your Load-Balancing settings |
It performs rolling updates to containers straightaway | K8S performs rolling updates to Pods as a whole |
Share storage volumes with any other containers | Share storage volumes between multiple containers inside the same pods |
Its uses 3rd party tools like ELK | K8S provides in-built tools for logging and monitoring |
Kubernetes 的架构
Kubernetes 遵循客户端-服务器架构,我们将 master 安装在一台机器上,节点安装在不同的 Linux 机器上。它遵循 masterslave 模型,该模型使用 master 来管理跨多个 Kubernetes 节点的 Docker 容器。一个主节点及其控制的节点(工作节点)构成了一个“Kubernetes集群” 。开发人员可以在 Kubernetes 主控的帮助下在 docker 容器中部署应用程序。
1. Kubernetes-Master 节点组件 –
Kubernetes master 负责管理整个集群,协调集群内的所有活动,并与工作节点通信以保持 Kubernetes 和您的应用程序运行。这是所有管理任务的入口点。当我们在系统上安装 Kubernetes 时,我们将安装 Kubernetes Master 的四个主要组件。 Kubernetes Master 节点的组件有:
a.) API 服务器– API 服务器是用于控制集群的所有 REST 命令的入口点。所有管理任务都由主节点内的 API 服务器完成。如果我们想在 Kubernetes 中创建、删除、更新或显示对象,它必须通过这个 API 服务器。API 服务器验证和配置 API 对象,例如端口、服务、复制、控制器和部署,它负责公开 API每一个操作。我们可以使用名为kubcetl的工具与此 API 进行交互。
‘kubcetl’ 是一个非常小的 go 语言二进制文件,它基本上与 API 服务器通信以执行我们从命令行发出的任何操作。它是一个命令行界面,用于针对 Kubernetes 集群运行命令
b.) 调度器——它是 master 中的一个服务,负责分配工作负载。它负责跟踪每个工作节点的工作负载利用率,然后将工作负载放置在资源可用且可以接受的工作负载上。调度程序负责根据您在配置文件中提到的约束跨可用节点调度 pod,它相应地调度这些 pod。调度器负责工作负载利用率并将 pod 分配给新节点。
c.) 控制器管理器——也称为控制器。它是一个运行在非终止循环中的守护进程,负责收集信息并将其发送到 API 服务器。它通过执行生活方式函数规范 kubernetes 集群,例如命名空间创建和生命周期事件垃圾收集、终止的 pod 垃圾收集、级联删除的垃圾收集、节点垃圾收集等等。基本上,如果集群的当前状态不符合期望状态,则控制器监视集群的期望状态,然后控制回路采取纠正步骤以确保当前状态与期望状态相同。关键控制器是复制控制器、端点控制器、命名空间控制器和服务帐户控制器。因此,通过这种方式,控制器负责整个集群的整体健康状况,确保节点始终启动并运行,并且正确的 pod 正在运行,如规范文件中所述。
d.) etcd – 它是一个分布式键值轻量级数据库。在 Kubernetes 中,它是一个中央数据库,用于存储任何时间点的当前集群状态,也用于存储配置细节,如子网、配置映射等。它是用 Go 编程语言编写的。
2. Kubernetes-Worker 节点组件 –
Kubernetes Worker 节点包含管理容器之间网络、与主节点通信以及为调度的容器分配资源所需的所有服务。 Kubernetes Worker 节点的组件有:
a.) Kubelet – 它是一个主节点代理,它与主节点通信并在集群内的每个工作节点上执行。它通过 API 服务器获取 pod 规范并执行与 pod 关联的容器,并确保 pod 中描述的容器正在运行和健康。如果 kubelet 发现在工作节点上运行的 pod 有任何问题,那么它会尝试在同一节点上重新启动 pod,如果问题出在工作节点本身,那么 Kubernetes 主节点会检测到节点故障并决定重新创建 pod另一个健康节点。
b.) Kube-Proxy – 它是 kubernetes 集群内的核心网络组件。它负责维护整个网络配置。 Kube-Proxy 维护跨所有节点、所有 pod 和所有容器的分布式网络,并在外部世界公开服务。它充当单个工作节点上服务的网络代理和负载均衡器,并管理 TCP 和 UDP 数据包的网络路由。它为每个服务端点的创建和删除监听 API 服务器,以便为每个服务端点设置路由,以便您可以访问它。
c.) Pods – Pod 是一组一起部署在同一主机上的容器。在 pod 的帮助下,我们可以将多个依赖容器部署在一起,因此它充当这些容器的包装器,因此我们可以主要通过 pod 交互和管理这些容器。
d.) Docker – Docker 是容器化平台,用于以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何开发、测试或生产环境中无缝运行。 Docker 是一种工具,旨在通过使用容器更轻松地创建、部署和运行应用程序。 Docker 是世界领先的软件容器平台。它由一家名为 Dotcloud 的公司于 2013 年推出。它是用 Go 语言编写的。 Docker 推出仅 6 年时间,但社区已经从 VM 转向它。 Docker 旨在使开发人员和系统管理员都受益,使其成为许多 Devops 工具链的一部分。开发人员可以编写代码而无需担心测试和生产环境。系统管理员无需担心基础设施,因为 Docker 可以轻松扩展和缩减系统数量。 Docker 在软件开发周期的部署阶段发挥作用。