[Kubernetes 01] 组件介绍

Kubernetes


1. kubernetes组件概念

  1. 节点(node): 一个物理机或者虚拟机

在一个节点上可以运行一个或多个pod,

  1. pod

pod是k8s的最小调度单元, 是一个或多个容器的组合,

一个pod中的容器可以共享一些资源(eg: 网络, 存储), 但建议一个pod只运行一个容器(解耦)

imagepng

  1. Service组件

一个node中的pod是通过分配的ip地址来访问的, 但这个ip地址是不能被外部访问到的。并且, pod是不稳定的, 当因为异常重新创建时, pod的ip地址会发生变化。 因此k8s提供了service组件。 当pod被销毁时, service的ip地址不会变化, 会将请求转发到其他健康的pod上。

上述属于内部服务。

  1. Ingress组件

当一个pod需要暴露给外部的时候, 需要提供外部服务的入口。

在测试阶段, 可以使用node: port的方式,

在生产中, 需要通过域名来访问, 可以使用ingress组件来配置域名映射, 负载均衡,ssl证书等。

imagepng

  1. ConfigMap组件和Secret组件

configMap组件可以把数据库的配置等信息放进去, 当数据库的信息变化时, 就可以去configMap修改数据, 不用在应用程序的pod中去修改配置文件, 但configMap是明文存储。 所以k8s提供了另一个secret组件(只是base64编码而已)


  1. Volumes组件

因为pod销毁后, 数据也消失, 所以对于数据库pod, 提供volumes组件, 可以把数据挂载到集群的本地磁盘或者远程存储中。(生产中, 一般不回把数据库放在pod中, 是在独立的服务器或者单独的云服务上)

  1. Deployment组件

当一个pod的时候, 如果要维护或者故障, 这时候服务不可用, 这样可以在多个node上创建pod, k8s提供了一个deployment组件用来定义和管理副本的数量, 以及应用程序的更新策略, 还有自动扩缩容等。

pod是在容器上增加一层抽象, deployment是在pod上再增加一层抽象。


  1. StateFulSet组件(基本不用)

对于有状态的副本来说, k8s提供了一个statefulSet组件, 来保证数据共享和同步等。(比如对于数据库使用这种组件管理), 此外, 还保证了其中的每个pod都有自己稳定的网络标识符或者持久化存储。(一般不使用这种方式, 数据库等需要持久化存储等还是剥离出k8s集群来单独部署)

2. kubernetes架构

master-worker架构

master-node负责管理整个集群

worker-node负责运行应用程序和服务

既, kubernetes会将容器放入运行在node上的pod中来执行工作负载。

2.1 worker-node

而为了对外提供服务, 每一个node包括三个服务:

kubelet: 负责管理和服务节点上的每个pod, 确保pod按照预期进行, 监控节点的运行情况, 并汇报给api-server

kube-proxy: 负责为Pod对象提供网络代理和负载均衡服务, 如果一个集群有多个节点, 则节点间通过service来通信, 这就需要一个负载均衡器来接收请求, 再把请求发送到不同的节点。kube-proxy会在每个node中启动一个网络代理, 使法往service的请求能路由到正确的pod中。

container-runtime: 容器运行环境, 是一个运行容器的软件, 负责拉取容器镜像, 创建容器, 启动, 停止容器等。所有的应用程序都需要使用容器运行环境来运行, 所以每个node上必须安装容器运行环境。常见的容器运行环境有: (Docker-Engine, Containerd, CRI-O, Mirantis Container Runtime)。

2.2 master-node

核心组件:
Kube API-Server: 它负责提供Kubernetes集群的API接口服务, 比如作为一个用户需要创建一个新的应用,可以使用kubectl命令行工具,或者一些dashboard或其他的UI图形工具, 所有的控制命令都通过api-server来进入集群(api-server就像一个集群的网关一样), 然后再分发给不同的组件进行处理。还对所有的操作如对pod的增删改查进行认证, 授权和访问控制等。进行认证之后, 会把请求转发给调度器。

Scheduler: 调度器 。 调度器负责监控集群中所有节点的资源使用情况, 根据一些调度策略,将新建一个pod这个命令调度到合适的节点上去运行, 保证合理的利用集群资源。

C-M: Controller Manager 控制器管理器, 它负责管理集群中各种资源对象的状态。 比如当集群中某一个pod发生故障, 必须要有机制来检测和处理这个故障, 如重启或者替换。 监控各种资源状态, 确保各种组件按照预期进行。

etcd: 是一个高可用的key-value系统, 用来存储集群中所有资源对象的状态信息, 是整个集群的存储中心, 比如我们通过CLI查询的集群状态等, 数据来源都是etcd。 但是这里只会存储集群的状态信息, 不会存业务数据。

c-c-m: cloud-controller-manager, 云控制器管理器; 如果使用的是aws等服务商提供的服务, 则可以负责与云平台的管理交互。

posted @ 2024-06-28 10:40  Roy2048  阅读(57)  评论(0)    收藏  举报