Kubernetes 是 Google 开源的容器集群管理系统,其提供应用部署、维护、扩展机制等功能,利用Kubernetes 能方便地管理跨机器运行容器化的应用。
Kubernetes —— 基本概念
Kubernetes(k8s)中的 Master 节点,负责管理整个集群,含有一个集群的资源数据访问入口,还包含一个 Etcd 高可用键值存储服务。Master 中运行着 API Server,Controller Manager 及 Scheduler 服务。
Node 为集群的一个操作单元,是 Pod 运行的宿主机。Node 节点里包含一个 agent 进程,能够维护和管理该 Node 上的所有容器的创建、启停等。Node 还含有一个服务端 kube-proxy,用于服务发现、反向代理和负载均衡。Node 底层含有docker engine,docker 引擎主要负责本机容器等创建和管理工作。
Pod 运行于 Node 节点上,是若干相关容器等组合。在 K8s 里面 Pod 是创建、调度和管理的最小单位。
Kubernetes —— 架构图
Kubernetes 的架构如图所示,从这个图里面能看出 Kubernetes 的整个运行过程。
- API Server 相当于用户的一个请求入口,用户可以提交命令给 Etcd,这时会将这些请求存储到 Etcd 里面去。
- Etcd 是一个键值存储,负责将任务分配给具体的机器,在每个节点上的 Kubelet 会找到对应的 container 在本机上运行。
- 用户可以提交一个 Replication Controller 资源描述,Replication Controller 会监视集群中的容器并保持数量;用户也可以提交 service 描述文件,并由 kube proxy 负责具体工作的流量转发。
Kubernetes —— 核心概念
Kubernetes 中比较重要的概念有:
- Replication Controller(RC)用来管理 Pod 的副本。RC 确保任何时候 Kubernetes 集群中有指定数量的 pod 副本(replicas)在运行,如果少于指定数量的 pod 副本,RC 会启动新的 Container,反之会杀死多余的以保证数量不变。
- Service 提供了一个统一的服务访问入口以及服务代理和发现机制。
- Persistent Volume(PV)和 Persistent Volume Claim(PVC)用于数据的持久化存储。
- ConfigMap 是指存储用户程序的配置文件,其后端存储是基于 Etcd。
Flink on Kubernetes —— 架构
Flink on Kubernetes 的架构如图所示,Flink 任务在 Kubernetes 上运行的步骤有:
- 首先往 Kubernetes 集群提交了资源描述文件后,会启动 Master 和 Worker 的 container。
- Master Container 中会启动 Flink Master Process,包含 Flink-Container ResourceManager、JobManager 和 Program Runner。
- Worker Container 会启动 TaskManager,并向负责资源管理的 ResourceManager 进行注册,注册完成之后,由 JobManager 将具体的任务分给 Container,再由 Container 去执行。
- 需要说明的是,在 Flink 里的 Master 和 Worker 都是一个镜像,只是脚本的命令不一样,通过参数来选择启动 master 还是 worker。