引言
由于工作需要部署机器学习项目到K8s上,因此本文开始记录相关内容的学习笔记。
😲小知识:为啥Kubernete被叫做K8s?
🤣K(ubernete,8个字母)s,使用8代替了“ubernete”。
概述
K8s 是一个可移植的、可扩展
的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置
和自动化
。K8s 拥有一个庞大且快速增长的生态系统。K8s 的服务、支持和工具广泛可用。
K8s目标让部署容器化应用更加简洁
和高效
。
特性
K8s提供了:
服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
自动部署和回滚
可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
自动装箱
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来自动部署容器。
水平扩展
通过简单的命令基于CPU资源使用情况,对应用容器进行规模扩大或规模裁剪。
自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置(热部署),也无需在堆栈配置中暴露密钥。
集群架构和组件
一个k8s集群由一组被称为节点(Node)
的机器组成。这些节点上运行K8s所管理的容器化应用,集群具有至少一个工作节点(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进行部署。
本文只是总体的一个概念,具体细节请参考后面的文章。
参考
Kubernetes免费视频教程(https://www.gulixueyuan.com/my/course/383)
K8s官网文档(https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/)
最后一句:BUG,走你!
没有人比我更懂Redis(一)
不会真有人觉得聊天机器人难吧(一)
Spring Cloud学习笔记(一)
没有人比我更懂Spring Boot(一)
入门人工智能必备的线性代数基础
1.看到这里了就点个在看支持下吧,你的在看
是我创作的动力。
2.关注公众号,每天为您分享原创或精选文章
!
3.特殊阶段,带好口罩,做好个人防护。
4.添加微信wupengchoy
,拉你进技术交流群一起学习。