[Day 03]K8s 集群中有那些元件?

Kubernetes 元件介绍

在了解K8s的功能後,我们就要来了解K8s是使用那些元件来管理容器,就像在docker中有最小的单位container一样,k8s中的最小单位则是pod,清楚了解每个元件所负责的工作是非常重要的事,有的元件像大脑一样负责控制和管理,有些则像是四肢负责进行操作完成任务,但只要缺少任何一个元件就可能无法完成任务,因此这个章节会让大家清楚知道每个元件的功能和如何使用。

在k8s中的元件是可以区分出大小顺序的。从小到大排序分为: Pod -> Node -> Controller Plane -> Cluster。

1. Pod

pod 是 Kubernetes 运作的最小单位,一个 Pod 对应到一个应用服务(Application) ,负责装一个或多个多个 Container (容器),但一般情况一个 Pod 最好只有一个 Container
,同一个 Pod 中的 Containers 共享相同资源及网路,原因是如果每个 Container 都作为 K8S 的最小单位,那麽管理网路会变得非常的困难,以 Pod 来区隔彼此透过 local port number 沟通。

2. Node

Kubernetes 运作的最小硬体单位,一个 Worker Node(简称 Node)对应到一台机器,可以是实体机如你的笔电、或是虚拟机如 AWS 上的一台 EC2 或 GCP 上的一台 Computer Engine。
每个 Node 中都有三个组件:kubelet、kube-proxy、Container Runtime。

  • kubelet
    主要为和 Master 沟通的元件,能读取管理当前Node的状态

  • kube-proxy
    用来反应 K8S 各个 Node 上的网路服务,并更新 Node 的ip位置

  • Container Runtime
    像是 Docker Engine 的功能,负责执行容器的程序

3. Controller Plane

Kubernetes 运作的指挥中心,可以简化看成一个特化的 Node 负责管理所有其他 Node。一个 Master Node(简称 Master)中有四个组件:kube-apiserver、etcd、kube-scheduler、kube-controller-manager。

kube-apiserver

  • 通过Command Line 下 kubectl 指令让其他服务可以读写 K8S 的资源物件 (Resouce Object),并且能管理所需的api接口。
  • 尤於node彼此间不能互相沟通,必须apiserver完成

etcd

  • 用来存放 Kubernetes Cluster 的资料作为备份,当 Master 因为某些原因而故障时,我们可以透过 etcd 帮我们还
    原 Kubernetes 的状态

kube-controller-manager

  • 负责管理并运行 Kubernetes controller 的组件,简单来说 controller 就是 Kubernetes 里一个个负责监视 Cluster 状态的 Process,例如:Node Controller、Replication Controller

  • 这些 Process 会在 Cluster 与预期状态(desire state)不符时尝试更新现有状态(current state)。例如:现在要多开一台机器以应付突然增加的流量,那我的预期状态就会更新成 N+1,现有状态为 N,这时相对应的 controller 就会想办法多开一台机器

  • controller-manager 的监视与尝试更新也都需要透过访问 kube-apiserver 达成

kube-scheduler

  • 整个 Kubernetes 的 Pods 调度员,scheduler 会监视新建立但还没有被指定要跑在哪个 Node 上的 Pod,并根据每个 Node 上面资源规定、硬体限制等条件去协调出一个最适合放置的 Node 让该 Pod 跑

4. Cluster

Kubernetes 中多个 Node 与 Master 的集合。基本上可以想成在同一个环境里所有 Node 集合在一起的单位。

基本运作
接下来我们用一个简单的问题「Kubernetes 是如何建立一个 Pod?」来复习整体 Kubernetes 的架构。上图为一个简易的 Kubernetes Cluster,通常一个 Cluster 中其实会有多个 Master 作为备援,但为了简化我们只显示一个。
当使用者要部署一个新的 Pod 到 Kubernetes Cluster 时,使用者要先透过 User Command(kubectl)输入建立 Pod 的对应指令(下面会在解说如何实际动手操作来建立一个 Pod)。此时指令会经过一层确认使用者身份的认证後,传递到 Master Node 中的 API Server,API Server 会把指令备份到 etcd 。
接下来 controller-manager 会从 API Server 收到需要创建一个新的 Pod 的讯息,并检查如果资源许可,就会建立一个新的 Pod。最後 Scheduler 在定期访问 API Server 时,会询问 controller-manager 是否有建置新的 Pod,如果发现新建立的 Pod 时,Scheduler 就会负责把 Pod 配送到最适合的一个 Node 上面。
虽然上面的基本运作看似复杂,但实际上我们在操作时,只要输入一行指令後 Kubernetes 就会自动帮我们完成後续的动作。


<<:  架构规画

>>:  Day1-熟悉电脑的第一堂课 键盘与快捷键

自动化测试,让你上班拥有一杯咖啡的时间 | Day 24 - 学习 trigger 的用法

此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 今天要跟大家分享当网页上有子表时,...

第二十六天:在 TeamCity 上显示 API 文件

昨天我们介绍了如何用 KDoc 语法标记程序码并用 Dokka 来产生 API 文件,今天我们要将产...

[Day09]实习稽核常见情境

我知道你还没准备好,但我们已经在稽核的路上了。 这篇就是我曾经充满血泪的建议改善清单,就请各位前辈多...

DAY 20 Big Data 5Vs – Variety(速度) EMR (2)

EMR的分散式运算与分散式储存适用是批量处理的应用场景,它也和Glue一样有提供互动式分析介面:EM...

30天轻松学会unity自制游戏-开启死亡画面

先来制作死亡後开启死亡画面,把之前死亡画面的Active(开启)暂时先关闭,等Player死亡时候才...