在了解K8s的功能後,我们就要来了解K8s是使用那些元件来管理容器,就像在docker中有最小的单位container一样,k8s中的最小单位则是pod,清楚了解每个元件所负责的工作是非常重要的事,有的元件像大脑一样负责控制和管理,有些则像是四肢负责进行操作完成任务,但只要缺少任何一个元件就可能无法完成任务,因此这个章节会让大家清楚知道每个元件的功能和如何使用。
在k8s中的元件是可以区分出大小顺序的。从小到大排序分为: Pod -> Node -> Controller Plane -> Cluster。
pod 是 Kubernetes 运作的最小单位,一个 Pod 对应到一个应用服务(Application) ,负责装一个或多个多个 Container (容器),但一般情况一个 Pod 最好只有一个 Container
,同一个 Pod 中的 Containers 共享相同资源及网路,原因是如果每个 Container 都作为 K8S 的最小单位,那麽管理网路会变得非常的困难,以 Pod 来区隔彼此透过 local port number 沟通。
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 的功能,负责执行容器的程序
Kubernetes 运作的指挥中心,可以简化看成一个特化的 Node 负责管理所有其他 Node。一个 Master Node(简称 Master)中有四个组件:kube-apiserver、etcd、kube-scheduler、kube-controller-manager。
kube-apiserver
etcd
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 中多个 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 就会自动帮我们完成後续的动作。
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 今天要跟大家分享当网页上有子表时,...
昨天我们介绍了如何用 KDoc 语法标记程序码并用 Dokka 来产生 API 文件,今天我们要将产...
我知道你还没准备好,但我们已经在稽核的路上了。 这篇就是我曾经充满血泪的建议改善清单,就请各位前辈多...
EMR的分散式运算与分散式储存适用是批量处理的应用场景,它也和Glue一样有提供互动式分析介面:EM...
先来制作死亡後开启死亡画面,把之前死亡画面的Active(开启)暂时先关闭,等Player死亡时候才...