为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?

这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。

Kubernetes 为你提供:

  • 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
  • 存储编排 Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
  • 自动部署和回滚 你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
  • 自动完成装箱计算 你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
  • 自我修复 Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。
  • 密钥与配置管理 Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
  • 批处理执行 除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器。
  • 水平扩缩 使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩。
  • IPv4/IPv6 双栈 为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址。
  • 为可扩展性设计 在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。

Kubernetes集群主要由控制节点Master(部署高可用需要两个以上)和多个工作节点Node组成,两种节点上分别运行着不同的组件来维持集群高效稳定的运转,另外还需要集群状态存储系统etcd来提供数据存储服务。Kubenetes集群中各节点和Pod的对应关系如图

3207457c80a78a5b0b656a3be49af45

Kubernetes的系统架构中, Master节点上主要运行着 API Server. Controller Manager 和 Scheduler组件,而每个Node节点上主要运行着 Kubelet、Kubernetes Proxy和容器引擎。除此之外,完整的集
群服务还依赖一些附加的组件,如KubeDNS、Heapster、Ingress Controller等。

kubernetes体系结构

Master节点与相关组件

控制节点Master是整个集群的网络中枢,主要负责组件或者服务进程的管理和控制,例如,追踪其他服务器健康状态,保持各组件之间的通信,为用户或者服务提供API接口。
Master中的组件可以在集群中的任何计算机上运行。但是,为简单起见,设置时通常会在一台计算机上部署和启动所有主组件,并且不在此计算机上运行用户容器。

在控制节点Master上部署的组件包括以下三种。

  1. API Server
    API Server是整个集群的网关,作为Kubernetes系统的入口,其内部封装了核心对象的“增”“删”“改”“查”操作,以 REST API方式供外部客户和内部组件调用,就像机场的“联络室”。
  2. Scheduler
    该组件监视新创建且未分配工作节点的Pod,并根据不同的需求将其分配到工作节点中,同时负
    责集群的资源调度、组件抽离。
  3. Controller Manager
    Controler Manager是所有资源对象的自动化控制中心,大多数对集群的操作都是由几个被称为
    控制器的进程执行的,这些进程被集成于kube-controller-manager守护进程中,实现的主要功能如下。
    (1)生命周期功能:Namespace创建,Event、Pod、Node和级联垃圾的回收。
    (2)API业务逻辑功能:ReplicaSet执行的Pod扩展等。

Kubenetes主要控制器功能如表

控制器名称功能
Deployment Controller管理维护Deployment,关联Deployment和 Replication Controller,保证运行指定数量的Pod。 当Deployment更新时,控制实现Replication Controller和Pod的更新
Node Controller管理维护Node,定期检查Node的健康状态,标识出(失效(未失效)的Node 节点
Namespace Controller管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,如Pod、 Service等
Service Controller管理维护Service,提供负载以及服务代理
Endpoints Controller管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时, 实时更新 Endpoints
Service Account Controller管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account 创建 Service Account Secre
Persistent Volume Controller管理维护 Persistent Volume 和 Persistent Volume Claim,为新的 Persistent Volume Claim 分配 Persistent Volume 进行绑定,为释放的Persistent Volume执行清理回收
DaemonSet Controller管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node 上正常运行 Daemon Pod
Job Controller管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
Pod Autoscaler Controller实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作

Node组件

(1)kubelet

kubelet 会在集群中每个节点(node)上运行。 它保证容器containers都运行在 Pod 中。这里之所以放在Master节点组件里面,客观上说Master也属于node。

kubelet 接收一组通过各类机制提供给它的 PodSpecs, 确保这些 PodSpecs 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。

(2)kube-proxy

kube-proxy是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service)概念的一部分。

kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。

如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。

是一名喜欢每天折腾的咸鱼! 也是一名半退役的算竞摸鱼选手,参与过icpc,天梯赛,蓝桥等比赛. --------------------------------------------------- 百度 飞桨领航团-团长 Datawhale -专业助教 上海人工智能实验室 书生·浦语实战营- 助教 --------------------------------------------------- 认证类: 华为 Harmony OS应用开发者高级认证, NISP 一级认证, H3C NE-RS网络工程师认证 --------------------------------------------------- 荣获奖项荣誉: 第十八届“挑战杯”全国大学生课外学术科技作品竞赛 “揭榜挂帅”专项赛-全国特等奖、 “美亚杯”第八届中国电子取证大赛 三等奖、 “蓝桥杯”国优、 中国高校计算机大赛-团体程序天梯赛 省高校一等奖、 “蓝桥杯”省一等奖、 H3C新华三杯 省三等奖、 中国移动“梧桐杯”大数据创新大赛 省三等奖、 百度 飞桨领航团 金牌团长
最后更新于 2024-03-09