图解 Kubernetes(k8s)

1. 前言

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

2. 容器

在了解 Kubernetes 之前,让我们先了解一个容器。因为如果不了解容器就没法聊容器编排
在这里插入图片描述

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

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

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

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

3. 什么时候使用Kubernetes

容器挺好的,为什么需要 Kubernetes 这样的容器协调器呢?
在这里插入图片描述
如果你达到图中这个状态时,你就需要他了,有太多的容器需要管理了。

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

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

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

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

Q:如何滚动升级?

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

4. Kubernetes 体系结构

在这里插入图片描述
每个Kubernetes集群都有两种类型的节点:masterworkermaster 是控制和监控 worker 工作的这个集群的。

4.1 master 的构成

在这里插入图片描述

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

在这里插入图片描述

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

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

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

5. Controller 控制器

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

5.1 ReplicaSet

在这里插入图片描述
主要职责是根据给定的 pod 创建副本。

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

5.2 Deployment

在这里插入图片描述
使用 ReplicaSet 来管理副本。

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

5.3 Service

在这里插入图片描述

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

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

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

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

5.4 Ingress

在这里插入图片描述
Ingress(入口)控制器是和外部世界沟通的唯一入口。

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

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

6. 小结

在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值