概述

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。

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

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

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

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

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

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

具有以下优点:

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

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实现服务的映射。

容器编排工具—Kubernetes相关推荐

  1. 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读

    目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...

  2. NOMAD 与 KUBERNETES:比较容器编排工具——翻译版

    原文地址:https://www.imaginarycloud.com/blog/nomad-vs-kubernetes/?fbclid=IwAR1VgUJ4ikO30sDaZv7c9WYaVSPPo ...

  3. 容器编排技术 -- Kubernetes kubectl edit 命令详解

    容器编排技术 -- Kubernetes kubectl edit 命令详解 1 kubectl edit 2 语法 3 示例 4 Flags kubectl edit 使用默认编辑器 编辑服务器上定 ...

  4. 容器编排技术 -- Kubernetes kubectl annotate 命令详解

    容器编排技术 -- Kubernetes kubectl annotate 命令详解 1 kubectl annotate 2 有效资源类型包括: 3 语法 4 示例 5 Flags kubectl ...

  5. 容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet

    容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet 1 Before you begin 2 重新配置集群活动节点上的 Kubelet 2.1 基本工作流程概览 2.2 ...

  6. 容器编排技术 -- Kubernetes kubectl 与 Docker 命令关系

    容器编排技术 -- Kubernetes kubectl 与 Docker 命令关系 1 docker run 2 docker ps 3 docker attach 4 docker exec 5  ...

  7. 容器编排技术 -- Kubernetes kubectl 概述

    容器编排技术 -- Kubernetes kubectl 概述 1 语法 2 Operations 3 Resource types 4 输出选项 Output options 4.1 格式化输出 F ...

  8. 容器编排技术 -- Kubernetes 声明网络策略

    容器编排技术 -- Kubernetes 声明网络策略 1 Before you begin 2 创建一个nginx deployment 并且通过服务将其暴露 3 测试服务能够被其它的 pod 访问 ...

  9. 容器编排技术 -- Kubernetes 示例:使用 Stateful Sets 部署 Cassandra

    容器编排技术 -- Kubernetes 示例:使用 Stateful Sets 部署 Cassandra 1 Objectives 2 Before you begin 2.1 Minikube 附 ...

最新文章

  1. Redis源码解析——内存管理
  2. 【jdbc】兴唐第三十一节课之修改数据和查询数据(使用自己写的DBUtil)
  3. pandas使用nsmallest函数返回特定数据列中前N个最小值(搜寻最小的n个元素)、pandas使用nsmallest函数返回特定数据列中前N个最小值所对应的数据行
  4. vue中如何深度监听一个对象?
  5. Error:java: JDK isn't specified for module 'bvisioncloud'
  6. 实现.Net程序中OpenTracing采样和上报配置的自动更新
  7. jdk1.7 String switch的实现
  8. Hibernate笔记7--JPA CRUD
  9. java 文件解签加签_将更改的文件移到另一个分支进行签入
  10. SendMessage 函数
  11. python中非法变量名_第10p,Python中变量名的命名规则与引用
  12. 开启灯光就是近光吗_自动大灯会自动调远近光吗
  13. 计算机网络胡工程施工税率,弱电项目增值税6%、9%、13%税率怎样区分?项目经理必知内容...
  14. 讲解HTML和CSS(超详细)
  15. 需求调研第三篇--现场调研阶段容易犯哪些错误
  16. 一维离散余弦变换(DCT)及其反变换(IDCT)公式的一种推导
  17. Chinese Whisper 人脸聚类算法实现
  18. 微信公众号网页授权思路解析及具体代码
  19. Tsi721和NRS1800连接调试问题记录
  20. php中logic(),thinkphp中的logic和service层是干什么用的?

热门文章

  1. Unity3D网络游戏实战——实践出真知:大乱斗游戏
  2. 解决mysql导入数据库编码格式不同问题。
  3. 怎么让input控件,填充满td
  4. pycharm设置-使用Qt Designer配置
  5. 文字/文本超出显示省略号
  6. 3D音频再现理论研究(一)---3D音频技术历史介绍(转)
  7. 成功的道路上,人脉比知识更重要。(SEO核心)
  8. Android单元测试一:单元测试入门
  9. 【自学Python】Python类型转换
  10. 国内高校硕博补贴大公开!(某校博士在读已经年薪25w了)