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 时,组件间是如何通信的。