重新认识Kubernetes

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

·  核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

·  应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

·  管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

·  接口层:kubectl命令行工具、客户端SDK以及集群联邦

·  生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
1)Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
2)Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

Kubernetes的核心组:

1、Master组件

1.1 kube-apiserver

1.2 Kube-controller-manager

1.3 kube-scheduler

1.4 配置存储中心 — etcd

1.5 主节点工作流程

2、Node 组件

2.1 Kubelet

2.2 Kube-Proxy

2.3 docker 或 rocket

主节点工作流程

API Server 接收到请求创建一批 Pod,API Server 会让 Controller-manager 按照所预设的模板去创建 Pod,Controller-manager 会通过 API Server 去找 Scheduler 为新创建的 Pod 选择最适合的 Node 节点。比如运行这个 Pod 需要 2C4G 的资源,Schedular 会通过预算策略在所有 Node 节点中挑选最优的。Node 节点中还剩多少资源是通过汇报给 API Server 存储在 etcd 里,API Server 会调用一个方法找到 etcd 里所有 Node 节点的剩余资源,再对比 Pod 所需要的资源,在所有 Node 节点中查找哪些 Node 节点符合要求。如果都符合,预算策略就交给优选策略处理,优选策略再通过 CPU 的负载、内存的剩余量等因素选择最合适的 Node 节点,并把 Pod 调度到这个 Node 节点上运行。

世界上为什么有这么多的流程引擎

DAG 基础核心非常简单,同时,各个领域想要做的事情却迥然不同。即使一个简单的步骤,大数据步骤说:“这一步要执行的 SQL 语句是 xxx”,而 K8s 任务步骤却说:“这一步执行需要的 Docker 镜像是 yyy”。

所以,各种各样的流程引擎就自然的出现了。

举几个例子:

  • AWS:Cloudformation 编排,Batch 服务,SageMaker-ML Pipeline,Data Pipeline
  • Azure:Pipeline 服务,ML Pipeline,Data Factory
  • Aliyun:函数 Pipeline 服务,ROS 资源编排,Batch 服务,PAI-Studio
  • 大数据领域:Oozie,AirFlow
  • 软件部署:Puppet,Chef,Ansible
  • 基因分析:DNAnexus,NextFlow,Cromwell

每个领域总能找出一两个流程引擎,来控制谁先干活谁后干活。

总结一下:

(1)DAG 引擎核心很小

(2)各领域步骤的描述方式不一样

这就是为什么各个领域,总会有一个自己的流程引擎,而不像 K8s 能一统容器平台一样,出现一个能一统江湖的流程引擎。

你可能感兴趣的:(云开发之kubernetes,kubernetes,docker,容器)