跳转至

Kubernetes 基本概念与组件

alt text

alt text

宏观概念

(1) Master:

Master 节点是 Kubernetes 集群的控制节点,负责整个集群的管理和控制。

Master 节点上包含以下组件:

  • kube-apiserver: 该集群控制的唯一入口, 提供 HTTP REST 服务
  • kube-controller-manager: 负责维护集群的状态, k8s集群中所有资源对象的自动化控制中心
  • kube-scheduler: 负责 Pod 的调度 (按照预定的调度策略将 Pod 调度到相应的机器上)
  • etcd: 保存了整个集群的状态, 就是一个数据库

(2) Node:

Node 节点是 Kubernetes 集群中的工作节点,Node 上的工作负载由 Master 节点分配,工作负载主要是运行容器应用。

Node 节点上包含以下组件:

  • kubelet: 负责 Pod 的创建、启动、监控、重启、销毁等工作, 同时与 Master 节点协作,实现集群管理的基本功能 (Volume 和 Network ...)
  • kube-proxy: 负责为 Service 提供 cluster 内部的服务发现和负载均衡
  • 运行 "容器化应用" (Pod)

(3) Pod:

Kubernetes 最基本的部署调度单元

每个 Pod 可以由一个或多个业务容器和一个根容器(Pause 容器)组成。一个 Pod 表示某个应用的一个实例

常用服务

太多了, 详见官网

这里我们选择最重要的 "工作负载管理", 即: ReplicaSet && Deployment 两个概念来展开

(1) ReplicaSet:

ReplicaSet 的作用是: 维持在任何给定时间运行的一组稳定的副本 Pod

通常,你会定义一个 Deployment,并用这个 Deployment 自动管理 ReplicaSet

ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行

(2) Deployment:

Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能

建议直接使用 Deployment

建议: 使用 Deployment 而不是直接使用 ReplicaSet,除非你需要自定义更新业务流程或根本不需要更新

这实际上意味着, 你可能永远不需要操作 ReplicaSet 对象:

而是使用 Deployment,并在 spec 部分定义你的应用

YAML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3 # <- here
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5

具体使用见官网

如何理解 Node / Pod / ReplicaSet 的关系

(1) Node:

一个物理厨房。它可以是一台真实的物理服务器,也可以是一台云主机(虚拟机)

Node = 拥有计算能力的机器

(2) Pod:

是 k8s 部署应用的最小单位。它就像一个披萨制作小组

这个小组里可以只有一个核心厨师(一个核心业务容器,比如制作披萨的师傅)

也可以包含一个核心厨师外加几个助手(多个辅助容器,比如一个专门准备面团的,一个专门切配料的)

重要的是,这个小组(Pod)的所有成员共享同一个工作台和储物柜(即共享网络和存储空间),他们配合紧密,共同完成“制作披萨”这个任务

Pod = 运行着你的应用容器的最小工作单元,它必须跑在某个 Node 上

(3) ReplicaSet:

ReplicaSet 的字面意思是“副本集”。它不是一个实体,而是一个管理者,就像是厨房值班经理

经理的核心职责是:确保店里永远有规定数量的披萨制作小组在岗。

老板下达指令:“我要求,任何时候都必须有 3 个披萨制作小组 (Pod) 处于工作状态!”

  • 值班经理 (ReplicaSet) 就会去检查。发现现在只有 2 个小组,他会立刻再招募一个新的小组 (创建新 Pod)
  • 如果他发现有 4 个小组在岗,太多了,他就会辞退一个 (删除一个 Pod)
  • 如果某个小组的厨师突然生病请假了(Pod 崩溃了),经理会立刻找一个新的小组来顶替 (重新创建一个 Pod)

ReplicaSet 是一个抽象的管理规则