原来这就是k8s?

405 阅读3分钟

k8s 介绍

首先 k8s 是 Kubernetes 的简称,8 表示中间有 8 个字母。

Kubernetes 是 Google 团队发起的一个开源项目,它的目标是管理多容器编排,用于自动部署、扩展和管理容器化的微服务,或者说是应用程序,主要用 Go 语言实现。

Kubernetes 的组件和架构相对较复杂,下面先来看下整体架构,然后再从基础概念和组件入手。

几个关键特性

  • 自动编排
  • 自动治愈
  • 水平扩容
  • 服务发现和负载均衡
  • 快速发布和回滚
  • 配置管理等

整体架构

Kubernetes 属于主从分布式架构,主要由 Master 和 Node 组成,以及包括客户端命令行工具 kubectl 和其它组件。

  • Master:作为控制主节点,对集群进行调度管理;协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。由 API Server、Scheduler 和 Controller-Manger Server 组成;
  • Node:作为真正的工作节点,运行业务应用的容器;包含 kubelet、kube proxy 和 Container Runtime;
  • kubectl:用于通过命令行与 API Server 进行交互,而对 Kubernetes 进行操作,实现在集群中进行各种资源的增删改查等操作;

基础概念及组件

  • apiserver:集群控制的入口,提供 HTTP REST 服务

  • controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

  • scheduler:负责 Pod 的调度

  • kubelet:负责 Pod 的创建、启动、监控、重启、销毁等工作,同时与 Master 节点协作,实现集群管理的基本功能。

  • kube-proxy:实现 Kubernetes Service 的通信和负载均衡 运行容器化(Pod)应用

  • Pod: Pod 是 Kubernetes 最基本的部署调度单元。每个 Pod 可以由一个或多个业务容器和一个根容器(Pause 容器)组成。一个 Pod 表示某个应用的一个实例

  • ReplicaSet:简称 RS,是 Pod 副本的抽象,用于解决 Pod 的扩容和伸缩

  • Deployment:Deployment 表示部署,在内部使用 ReplicaSet 来实现。可以通过 Deployment 来生成相应的 ReplicaSet 完成 Pod 副本的创建

  • Service:是 Kubernetes 最重要的资源对象。定义了服务的访问入口,服务的调用者通过这个地址访问服务后端的 Pod 副本实例,以及通过 Label Selector 同后端的 Pod 副本建立关系

  • etcd:保存了整个集群的状态,其实就是一个 k/v 数据库;

组件之间的通信

Kubernetes 多组件之间的通信原理:

  • apiserver 负责 etcd 存储的所有操作,且只有 apiserver 才直接操作 etcd 集群
  • apiserver 对内(集群中的其他组件)和对外(用户)提供统一的 REST API,其他组件均通过 apiserver 进行通信。

controller manager、scheduler、kube-proxy 和 kubelet 等均通过 apiserver watch API 监测资源变化情况,并对资源作相应的操作。

下面举个比较典型的创建 Pod 流程的例子:

  • 首先用户通过 REST API 创建一个 Pod
  • 然后 apiserver 将相应状态写入 etcd
  • scheduluer 检测到有未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定
  • kubelet 检测到有新的 Pod 调度过来,通过 container runtime 运行该 Pod
  • 最后 kubelet 通过 container runtime 取到 Pod 状态,并更新到 apiserver 中

小结

今天主要介绍了什么是 Kubernetes,以及一些基础组件介绍和创建一个 pod 时,组件间是如何通信的。