什么是Kubernetes?

Kubernetes(简称K8s)是由Google开发的开源容器编排系统,2014年6月基于内部Borg系统开源,现由云原生计算基金会(CNCF)托管管理。其核心功能包括容器化应用的自动化部署、服务发现、负载均衡及集群资源管理,通过Master节点与Worker节点协同实现应用规模化运维,支持Docker和rkt运行时环境

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。

Kubernetes 的架构是什么样的?

一个健康、可工作的 Kubernetes 集群由两大部分组成:控制平面(Control Plane) 和 工作节点(Nodes)。它们各司其职,共同维护整个集群的运行。

1. 控制平面(Control Plane):集群的大脑

控制平面负责做出全局决策(如资源调度),以及检测和响应集群事件。它通常独立运行在专门的机器上。

  • kube-apiserver:整个集群的唯一入口,所有组件和外部命令(如 kubectl)都通过它来交互。它对外公开了Kubernetes API 。
  • etcd:一个高可用的键值存储数据库,用于持久化存储所有集群数据、配置和状态,是集群的“数据存储中心”。
  • kube-scheduler:负责调度。它会监视新创建但还未分配节点的Pod,并根据资源需求、策略约束等因素,为其选择一个最合适的工作节点去运行。
  • kube-controller-manager:运行着各种控制器的组件。这些控制器通过API Server监视集群状态,并努力将当前状态推向用户定义的期望状态。例如,Node控制器负责节点故障时的响应,Deployment控制器负责管理Pod的副本数量。

2. 工作节点(Node):集群的肌肉

节点是实际运行容器化应用的机器(可以是物理机或虚拟机)。

  • kubelet:运行在每个节点上的主要代理。它负责与API Server通信,接收指令,并确保其管理的容器(在Pod中)健康运行。
  • kube-proxy:每个节点上的网络代理。它负责维护网络规则,实现服务(Service)的发现和负载均衡,使得集群内外可以访问到指定的Pod。
  • 容器运行时(Container Runtime):真正负责运行容器的软件。Kubernetes通过容器运行时接口(CRI)支持多种运行时,如 containerd、CRI-O 等。

3. 核心概念:Pod 与 其他对象

  • Pod:Kubernetes中最小的部署和管理单元。一个Pod可以包含一个或多个紧密相关的容器(例如一个应用容器和一个日志收集容器),它们共享存储、网络和运行规范。Pod是“短暂的”,随时可能被创建、销毁或重新调度。
  • Deployment:最常用的工作负载控制器。它描述了Pod的期望状态(如使用的镜像、副本数),并负责以滚动更新的方式创建或更新Pod副本,确保应用无中断地运行。
  • Service:将一组Pod(通常由标签选择器定义)暴露为网络服务的抽象方式。由于Pod是动态创建和销毁的,其IP地址会变化,Service为这些Pod提供了一个稳定的访问入口和负载均衡能力。
  • Namespace:在同一个物理集群内实现的虚拟集群隔离机制,常用于区分不同的环境(如开发、测试、生产)或不同的团队。

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

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

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

Kubernetes 为你提供:

  • 服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址来曝露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

软件

  • 自我修复

Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

更多推荐