图解 Kubernetes(k8s)

1. 前言

Kubernetes是Google开源的容器集群管理系统,提供应用部署、维护、扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化得应用。真实的生产环境应用会包含多个容器,而这些容器还很可能会跨越多个服务器主机部署。Kubernetes 提供了为那些工作负载大规模部署容器的编排与管理能力。Kubernetes 编排让你能够构建多容器的应用服务,在集群上调度或伸缩这些容器,以及管理它们随时间变化的健康状态。

2. 容器

在了解 Kubernetes 之前,让我们先了解一个容器。因为如果不了解容器就没法聊容器编排
图解 Kubernetes(k8s)_第1张图片

容器就是…一个你塞入所有材料的容器。“材料”是指你的应用代码、依赖库,以及直到内核的依赖关系。关键概念是隔离,把你的这些材料隔离出来,以便更好的控制他们。

容器提供了3种类型的隔离:

  • 工作空间隔离(进程、网络)
  • 资源隔离(CPU、内存)
  • 文件系统隔离

容器可以理解为节食的VM,具有隔离性,但容器非常精简、体积小、启动快。VM是在操作系统之上又安装了多个操作系统,VM之间自然是隔离的。而容器是通过 Linux 的 cgroup 实现了VM那样的隔离性,并不需要安装操作系统。

3. 什么时候使用Kubernetes

容器挺好的,为什么需要 Kubernetes 这样的容器协调器呢?
图解 Kubernetes(k8s)_第2张图片
如果你达到图中这个状态时,你就需要他了,有太多的容器需要管理了。

Q:我前端容器在哪儿呢?有多少个在运行?

A:很难说啊,快使用容器编排吧。

Q:如何让我的前端容器与新创建的后端容器沟通?

A:可以硬编码 IP,或者,使用容器编排。

Q:如何滚动升级?

A:你可以手动控制每一步,或者,使用容器编排。

4. Kubernetes 体系结构

图解 Kubernetes(k8s)_第3张图片
每个Kubernetes集群都有两种类型的节点:masterworkermaster 是控制和监控 worker 工作的这个集群的。

4.1 master 的构成

图解 Kubernetes(k8s)_第4张图片

  • etcd: 作为数据库,所有 kubernetes 对象、当前状态、访问信息、集群配置信息 …,都存在这。
  • API Server : 暴露集群操作的端点,masterworker 上的组件都需要访问 api servrer,以便完成自己的工作。
  • Scheduler : 调度程序,负责决定哪个工作由哪个机器干。
  • Control Manager : 控制管理器,监视集群的状态(通过调用API服务器来获取此数据)并采取措施将其置于预期状态。

4.2 worker 的构成

图解 Kubernetes(k8s)_第5张图片

  • kubelet : worker 节点的核心,与 master 的 api server 沟通,运行调度到本节点的容器。
  • kube Proxy : 使用 IP表/ IPVS 处理Pod的网络需求。
  • Pod : kubernetes 运行容器的主力,提供了容器间联网的能力。

图解 Kubernetes(k8s)_第6张图片
一个 pod 中可以有多个容器,这些容器中的应用互相间都视为本地。pod 的网络接口提供了一个机制,使其可以与本节点或其他节点上的 pod 进行网络连接。
图解 Kubernetes(k8s)_第7张图片
每个 pod 都会被指定一个 IPkube-proxy将使用该IP地址来路由流量,而且此IP地址仅在群集中可见。

一个 pod 中挂载的数据卷可以被所有容器看到,例如,你的 APP 是一个图片上传应用,把图片保存在一个数据卷中,同一个 pod 中的其他容器可以监控这个数据卷,发现有新图片时,就开始处理,例如缩放多个尺寸的图片、上传到云存储。

5. Controller 控制器

kubernetes 中有很多控制器,例如 ReplicaSet, Replication Controllers, Deployments, StatefulSets, Service。他们都是控制 pod 的对象,我们来看几个重点的控制器。

5.1 ReplicaSet

图解 Kubernetes(k8s)_第8张图片
主要职责是根据给定的 pod 创建副本。

如果一个 pod 挂了,这个控制器就会得到通知,立马创建一个新的。

5.2 Deployment

图解 Kubernetes(k8s)_第9张图片
使用 ReplicaSet 来管理副本。

提供了滚动升级的能力,扩展新的,缩减旧的。

5.3 Service

图解 Kubernetes(k8s)_第10张图片

像一个负载均衡器一样,像相应节点分派包。

可以跨 worker 节点构建一个 pod 组(通常是根据 pod 的标签)。

例如你的前端应用、后端应用,各自都有很多个实例在运行,前后端怎么沟通?

前端需要知道后端各个实例的访问地址,硬编码后端 IP 的方式显然不能用,那么就需要把后端实例组成一个 service,前端只需要访问这个 service,由 service 对其中的后端实例进行流量负载均衡转发。

5.4 Ingress

图解 Kubernetes(k8s)_第11张图片
Ingress(入口)控制器是和外部世界沟通的唯一入口。

外部世界通过 Ingress 与集群中的所有服务沟通。

就像是一个网关,方便我们在一个地方统一设置安全策略、监控、记录日志。

6. 小结

图解 Kubernetes(k8s)_第12张图片

你可能感兴趣的:(Kubernetes,Kubernetes)