容器编排工具—Kubernetes

概述

Kubernetes由google通过go语言基于borg(google内部自研发自用的资源管理器,根据当时K8s面世的时间,brog已在google内部运行长达10年以上)进行重写的容器资源管理器。由于K和s之间有8个字母,因此又被叫做K8S。

Docker与K8s的关系

容器是"云原生"中的概念,除此之外还有DevOps、微服务等。容器带来了对资源更高效利用的方法,也使得对服务的使用便捷性大大提高,因此广受运维和开发等互联网人喜爱,但也带来了新的问题。随着业务的发展,容器的数量增长到一定规模时,如何高效的管理容器?业务的实际需求场景随业务规模扩展而发生变化时,多容器节点分布式部署如何实现?不同服务器之间的容器如何通讯?

容器编排工具的出现主要解决的就是如上问题。

容器编排工具有很多种,随着时间的变化,目前最主流的就是K8s,其具有如下特点

  • 开源:免费开源,使用无成本。
  • 弹性伸缩:扩容方便,平缓升级,一条命令进行资源释放。
  • 轻量级:语言级别支持进程管理,资源消耗少。
  • 负载均衡:内部模块自动实现负载均衡,使用IPVS结构。

K8s架构

Kubernetes本身是基于http协议开发的C/S架构,因此也支持http自带的一些API操作,例如GET、PUT等。主要分为Master Node角色和Work Node角色。

Master Node

在实际的工作任务中一般不会承载工作任务,主要维持K8s集群服务功能正常。其拥有4个核心组件,分别是api server、schedulerd、etcd、Controller Manager。

Master端组件结构

Scheduler
负责资源的调度,负责将接收到的任务进行分发,按照预定的调度策略将Pod调度到合适的节点。

Controller Manager
Controller Manager是集群内部的管理控制中心,负责处理集群中常规后台任务,每一个资源对应一个控制器,其负责管理这些控制器,例如Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)控制器的管理,CM会通过不断的通过apiserver对集群状态进行循环的监视集群的整体状态,并对与预期不符的实际状态进行调整。当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态,除此之外还支持节点自动扩展和滚动更新等。
CM组成

Api Server
所有服务访问,所有请求环节的统一入口,并提供认证、授权、访问控制、API 注册和发现等机制。
Pod创建流程图

Etcd
采用Go语言编写,具有出色的跨平台支持,很小的二进制文件和强大的社区,是可信赖的分布式键值对数据库(key-value),无需额外的组件即可自实现集群化,etcd机器之间通信采用Raft算法处理。

在这里主要保存集群中的一些配置文件以及集群状态信息的记录,例如资源增加、删除等。为整个分布式集群提供持久化的服务。

集群上的所有配置信息都存储在了 etcd,为保证各个组件的相对独立,以及整体的维护性,因此需要一个高可用,强一致性的存储仓库。其中包含各节点资源使用情况、健康状态、以及各 Pod 的基本信息,对于这些存储数据的增、删、改、查,统一由 kube-apiserver 来进行调用。

具有以下优点:

  • 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单
  • 键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中
  • 监测变更:监测特定的键或目录以进行更改,并对值的更改做出反应
  • 安全:支持 SSL 证书验证
  • 快速:根据官方提供的 benchmark 数据,单实例支持每秒 2k+ 读操作
  • 可靠:采用 raft 算法,实现分布式系统数据的可用性和一致性

Etc组成

Work Node

K8s集群中实际承载业务的节点,Pod的实际业务所在的宿主机。
工作节点组成

Kubelet
负责与CRI(Container Runtime Interface容器运行生命周期接口)进行交互,实现Pod中容器的生命周期管理。具体的动作包括创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。

kubelet 是基于 PodSpec 来工作的。每个 PodSpec 是一个描述 Pod 的 YAML 或 JSON 对象。 kubelet 接受通过各种机制(主要是通过 apiserver)提供的一组 PodSpec,并确保这些 PodSpec 中描述的容器处于运行状态且运行状况良好。 kubelet 不管理不是由 Kubernetes 创建的容器。

Kube Proxy
负责为Service提供内部的"服务发现"功能,使用轮询(Round Robin)调度算法实现对访问Pod中具体容器的网络代理和负载均衡,以及不同Pod间的访问。服务发现功能实际上是通过调用宿主机上的防火墙IPTABLES、IPVS实现服务的映射。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes是一个容器编排及其自动化管理的工具,它可以帮助我们管理大量的Docker容器。随着业务增长,如果需要手动管理每一个Docker容器,将会增加我们的工作量。因此,Kubernetes成为我们在学习Docker中需要进阶的知识。在Kubernetes中,集群中的每个非master节点都运行两个进程:kubelet和kube-proxy。kubelet与master节点进行通信,而kube-proxy是一种网络代理,将Kubernetes的网络服务代理到每个节点上。Kubernetes提供了健康检查、自修复、自动扩容缩容、服务发现和负载均衡等功能,使我们对于大量的Docker容器管理更加方便。 #### 引用[.reference_title] - *1* *3* [Docker(二):理解容器编排工具Kubernetes内部工作原理](https://blog.csdn.net/dengyu810/article/details/104224713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [kubernetes(k8s)容器编排工具基础概念](https://blog.csdn.net/weixin_41358004/article/details/103676487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值