Kubernetes入门——k8s概念和架构
引言由于工作需要部署机器学习项目到K8s上,因此本文开始记录相关内容的学习笔记。K(ubernete,8个字母)sk8s概念和架构从零搭建k8s集群K8s核心概念搭建集群监控平台系统从零搭建高可用k8s集群概述K8s 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 K8s 拥有一个庞大且快速增长的生态系统。K8s 的服务、支持和工具广泛可用。k8s目标
引言
由于工作需要部署机器学习项目到K8s上,因此本文开始记录相关内容的学习笔记。
K(ubernete,8个字母)s
概述
K8s 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 K8s 拥有一个庞大且快速增长的生态系统。K8s 的服务、支持和工具广泛可用。
k8s目标让部署容器化应用更加简洁和高效。
特性
K8s提供了:
-
服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 -
存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。 -
自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。 -
自动装箱
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来自动部署容器。 -
水平扩展
通过简单的命令基于CPU资源使用情况,对应用容器进行规模扩大或规模裁剪。 -
自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。 -
密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置(热部署),也无需在堆栈配置中暴露密钥。
集群架构和组件
一个k8s集群由一组被称为节点(Node)的机器组成。这些节点上运行ks8所管理的容器化应用,集群具有至少一个工作节点(Worker node)。
工作节点托管最为应用负载的组件的Pod。控制平面((Control Plane)管理集群中的工作节点和Pod。
Control Plane
控制平面组件(Control Plane Component)对集群作出全局决策(比如调度),它暴露API和接口来定义、部署容器和管理容器的生命周期。
Control Plane可以在集群的任何节点上运行(作为Master),并且运行控制平面的组件一般不会运行用户容器。
从上图中可以看到,控制平面中有几个其他组件,我们一一来看。
API server
该组件公开了k8s API,API服务器是k8s控制平面的前端,是集群同一入口。
以restful风格提供操作,把操作交给etcd存储。
API服务器的主要实现是kube-apiserver,它在设计上考虑了水平伸缩,可以运行多个实例,进行流量平衡。
Scheduler
负责节点调度,监视新创建的、未指定运行节点的Pod,选择节点让Pod在上面运行。
Controller manager
处理集群中常规后台任务,一个资源对应一个控制器。
这些控制器包括:
- 节点控制器:负责在节点出现故障时进行通知和响应
- 副本控制器:负责为系统中的每个副本控制器对象维护正确树立的Pod
- 端点控制器:填充端点对象(即加入Service与Pod)
- 服务账户和令牌控制器:为新的命名空间创建默认账户和API访问令牌
当某个节点意外宕机,该组件会及时发现此故障并执行自动化修复流程(节点控制器),确保集群始终处于预期的工作状态。
Cloud Controller Manager
云控制器管理器是指嵌入特定云的控制逻辑的组件。允许连接聚合到云提供商的应用编程接口中。
该组件仅运行于特定云平台的控制回路。如果在自己的环境中运行k8s,则不需要该组件。
etcd
一个键值数据库存储系统,用于保存集群相关的数据。
Node
节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。
其中有两个组件。
kubelet
管理本机容器。它保证容器都运行在Pod中。
kube-proxy
是集群中每个节点上运行的网络代理,维护网络规则,包括负载均衡相关。
核心概念
Pod
Pod是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod是一组容器的集合, Pod中的容器共享存储、网络、以及怎样运行这些容器的声明。
Controller
Controller职责是保证集群中各种资源的状态和用户定义(yaml)的状态一致, 如果出现偏差, 则修正资源的状态。
主要负责:
- 确保预期的pod副本数量
- 无状态应用部署
- 有状态应用部署
- 确保所有的node运行同一个pod
- 负责一次性任务和定时任务
Service
Service定义一组pod的访问规则。
总体过程是,通过Service同一入口进行访问,然后由Controller创建pod进行部署。
本文只是总体的一个概念,具体细节请参考后面的文章。
参考
更多推荐
所有评论(0)