写点什么

Kubernetes 常见组件

作者:Rayzh
  • 2021 年 12 月 30 日
  • 本文字数:1500 字

    阅读完需:约 5 分钟

Kubernetes常见组件

Kubernetes 本身也是个系统,我们以看一个 Go 应用的眼光看:包括程序、配置以及实现程序间通讯。官网提供的集群图示:



一个 Kubernetes 集群应当包括如下几个组件:Etcd、Apiserver、controller-manager、scheduler、kubelet 等。尽管还有些组件在上图中没提及,但是我相信了解了这些基础的组件,再看其他的也会很快速的理解。接下来,我对以上组件分开介绍。

1-1 Etcd

非 Kubernetes 环境下也值得使用


​ Etcd 是一个 k-v 数据库,主要用于服务发现。这个工具可以对比 zookeeper 学习。Kubernetes 集群中的程序用于交互的配置内容、资源信息都是存储在 etcd 集群中的。Kubernetes 的 etcd 集群使用的 https 双向认证,提供 watch 机制用于资源变更时的通知。


​ etcd 详细参考官方文档:etcd.io ,建议直接使用 v3 版本。

1-2 API Server

​ 集群管理的 rest API 入口。API Server 是 Kubernetes 的核心组件,是各个组件通信的渠道。我们如果要创建资源对象比如 Deployment、Service、RC、ConfigMap 等,都是要通过 API Server 的。可以理解为,通过 rest api 接口往 etcd 中写入集群的各种数据。


​ 举个例子,我们使用 Node 相关接口(不同版本集群 API 接口会有差异):


/api/v1/proxy/nodes/{name}/pods/  #列出指定节点内所有Pod的信息/api/v1/proxy/nodes/{name}/stats/ #列出指定节点内物理资源的统计信息/api/v1/prxoy/nodes/{name}/spec/  #列出指定节点的概要信息
复制代码


​ 另外,集群其他的组件如果需要获取和操作这些数据时,通过 API Server 提供的 REST 接口(GET\LIST\WATCH 方法)来实现,从而实现各模块之间的信息交互。比如每个 Node 节点上的 kubelet 定期就会调用 API Server 的 REST 接口报告自身状态。总之 API Server 是我们管理集群的入口,我们写自己的 Kubernetes UI 也是通过这个进行交互的。

1-3 Scheduler

​ Kubernetes 的调度器。运行在 kube-system 命名空间里的程序,Scheduler 监听(etcd-watch 方法)API Server,当需要创建新的 Pod 时,Scheduler 通过调度的算法负责选择该 Pod 与哪个 Node 进行绑定。将此绑定信息通过 API Server 写入到 Etcd 中。


​ Kubernetes 调度算法简单的来说就是为待调度的 POD 绑定合适的 Node。调度算法里,从队列里拿到待调度的 pod 后会根据要求对 Node 进行筛选和打分,从而选出满足的 Node 运行。

1-4 Controller Manager

​ Kubernetes 集群的控制器,主要功能就是保证集群运行达到我们预期的状态。比如我们某个 deployment 配置的副本是 3,那副本控制器(Replication Controller)就是保证副本数达到 3。其他如 Node Controller,会得到一些节点信息如健康状态、名称、节点地址信息等;如果节点出现了故障,则删除节点与节点相关的 Pod 等资源的信息。ResourceQuota Controller 将期望的资源配额信息通过 API Server 写入到 Etcd 中。Namespace Controller 则把创建 namespace 通过 APIserver 写入到 etcd 中等。

1-5 Kubelet

​ Kubelet 是运行在 Node 节点上的守护进程,通过指定的命令和 token 加入到集群中。主要负责 Master 下发到该节点的具体任务,管理该节点上的 Pod 和容器。也会定期汇报节点的信息,监控容器和节点的资源。

1-6 Kube-proxy

​ 负责接收并转发请求。网络代理,将 Service 请求转发到后端具体的 Pod 中。

1-7 coreDNS

非 Kubernetes 环境下也值得使用


​ 开源 DNS 工具。参考 CoreDNS: DNS and Service Discovery


Kubernetes 使用这个 DNS 插件主要是有一些内部的 service 调用可能使用到了内部 dns 域名,仅仅是集群内的。


小结:除了以上组件,还有很多第三方的插件,都是基于 Kubernetes API 封装的一些接口实现的,比如网络、存储、监控。当 Kubernetes 成为日常应用上线的标准,自然就对这些插件有自己的取舍或者二次开发。LNMP 是 WEB 应用的标准,希望 Kubernetes 也可以成为下一代的标准。

发布于: 刚刚
用户头像

Rayzh

关注

我知道我需要什么 2018.11.13 加入

仅仅是个做运维的...

评论

发布
暂无评论
Kubernetes常见组件