引言

由于工作需要部署机器学习项目到K8s上,因此本文开始记录相关内容的学习笔记。

K(ubernete,8个字母)s


  1. k8s概念和架构
  2. 从零搭建k8s集群
  3. K8s核心概念

概述

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进行部署。

本文只是总体的一个概念,具体细节请参考后面的文章。

参考

1.Kubernetes免费视频教程
2.K8s官网文档

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐