首页 文章详情

K8s修炼宝典(卷一)

Hello丶Java | 450 2021-08-21 21:21 0 0 0
UniSMS (合一短信)

引言

        由于工作需要部署机器学习项目到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进行部署。

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

参考

  1. Kubernetes免费视频教程(https://www.gulixueyuan.com/my/course/383)

  2. K8s官网文档(https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/)

最后一句:BUG,走你!

没有人比我更懂Redis(一)
不会真有人觉得聊天机器人难吧(一)
Spring Cloud学习笔记(一)
没有人比我更懂Spring Boot(一)
入门人工智能必备的线性代数基础

1.看到这里了就点个在看支持下吧,你的在看是我创作的动力。
2.关注公众号,每天为您分享原创或精选文章
3.特殊阶段,带好口罩,做好个人防护。
4.添加微信wupengchoy,拉你进技术交流群一起学习。

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter