前言

容器技术的诞生虽解决了应用打包和发布的难题,但单一的容器技术工具并无 法支持起生产级大规模容器部署的场景。针对这一场景,容器管理与编排成为了容器技术发展的关键。Kubernetes便是在这样的大背景下诞生的。本文将由华为云大咖带你玩转云原生基础设施之K8s。

容器编排技术

容器编排技术 •容器(如Docker)以及周边生态系统提供了很多工具来实现容器生命周期管理,能够满足在单台宿主机管理容器的需求。但越来越多企业开始使用容器,对容器技术的进一步 发展提出了以下新的诉求:

高效的容器管理及编排。

容器的跨主机部署及调度。

容器的存储网络、运维、安全等能力的拓展。

image-20220424210646330

容器编排的价值

容器编排是指自动化容器的部署、管理、扩展和联网,可为企业带来以下价值:

image-20220424211022288

  • 灵活的资源管理及调度
  • 自动化部署
  • 高效的监控及运维
  • 弹性扩展及高可用及服务发现

大规模容器集群管理工具,从Borg到Kubernetes

Kubernetes起源于Google内部的Borg项目,它对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。它的目标是管理大规模的容器, 提供基本的部署、维护以及应用伸缩等功能,其主要实现语言为Go语言。

Kubernetes作为容器集群管理工具,于2015年7月22日迭代到v1.0并正式对外公布。与此同时,谷歌联合Linux基金会及其他合作伙伴共同成立了CNCF基金会(Cloud Native Computing Foundation),并将Kuberentes作为首个编入CNCF管理体系的开源项目, 助力容器技术生态的发展进步。

容器集群管理竞争史

Kubernetes逐步统一容器编排和资源管理框架生态。

image-20220424211241025

Kubernetes架构

一个基础的Kubernetes集群(Cluster)通常包含一个Master节点和多个Node节点。每个节点可以是一台物理机,也可以是一台虚拟机。

image-20220424211716866Node的职责是运行容器应用,由Master管理,Node Node 监控并汇报容器状态,同时根据Master的要求管理容器的生命周期。

Master节点提供的集群控制,对集群做出全局性决策,例如调 Master Master 节点上不运行用户容 器。为了实现高可用, 可以创建多个Master 节点。

Pod是Kubernetes的最小工 作单元。每个Pod包含一个 或多个容器。Pod中的容器 会作为一个整体被Master Container 调度到一个Node上运行。

Master节点

Kube-apiserver

kube-apiserver对外暴露了Kubernetes API。它是的Kubernetes前端控制层。 被设计为水平扩展架构,即通过部署更多实例来承载业务。

etcd

etcd用于Kubernetes的后端存储,存储集群数据,提供数据备份。

Kube-controller-manager

控制器,负责策略控制,针对不同的工作负载执行不同的策略,如无状态 应用,有状态应用等。

Kube-scheduler

负责任务调度工作,监控没有分配节点的新创建的Pod,选择一个节点供 Pods运行。

image-20220424213831269

Node节点

Kubelet

在集群内每个节点中运行的一个代理,用于保证Pod的运行,接收Master的 指令,负责管理容器(Pod)。

Kube-proxy

负责做负载均衡工作,在多个Pod/Service之间做负载均衡。

用于管理Service的访问入口,包括集群内Pod到Service的访问和集群外访问 Service.

Add-ons 。

插件,用于扩展Kubernetes的功能。

Container runtime

通常使用Docker来运行容器,也可使用rkt等做为替代方案。

image-20220424214212081

开放接口CRI、CNI、CSI

Kubernetes作为云原生应用的的基础调度平台,相当于云原生操作系统,为了便于系统的扩展,Kubernetes中开放的以下接口,可以分别对接不同的后端,来实现自己的业务逻辑:

  • CRI(Container Runtime Interface):容器运行时接口,提供计算能力,是定义了容器和镜 像的服务的接口,常见的CRI后端有Docker、rkt、kata-containers等。

  • CNI(Container Network Interface):容器网络接口,提供网络能力,由一组用于配置Linux 容器的网络接口的规范和库组成,同时还包含了一些插件,它仅关心容器创建时的网络分配, 和当容器被删除时释放网络资源。

  • CSI(Container Storage Interface):容器存储接口,提供存储能力,通过它,Kubernetes可 以将任意存储系统暴露给自己的容器工作负载。

Kubernetes工作流程

image-20220424215705354

Kubernetes核心概念

Kubernetes核心概念- Pod

Pod是Kubernetes中最重要最基本的概念,Pod是Kubernetes最小 工作单元。每个Pod包含- -个或多个相关容器,Kubernetes将Pod看做一个整体进行调度。

引入Pod的目的:

将联系紧密的容器封装在一个Pod单元内,以Pod整体进行调度、扩展和实现生命周期管理。

Pod内所有容器使用相同的网络Namespace和共享存储。即Pod内容器拥有相同IP地址和Port空间,容器间直接使用localhost通信。当挂载volume到Pod,即可实现将volume挂载到Pod中的每个容器。

image-20220424221316975

Kubernetes核心概念- Label

当资源变得非常多的时候,如何分类管理就非常重要了,Kubernetes提供了一种机制来 为资源分类,那就是Label(标签)。Label非常简单,但是却很强大,Kubernetes中几 乎所有资源都可以用Label来组织。Label的具体形式是key-value的标记对,可以在创建 资源的时候设置,也可以在后期添加和修改。

image-20220424221650632

Kubernetes核心概念- Namespace

命名空间(Namespace)是对一组资源和对象的抽象整合。在同一个集群内可创建不同 的命名空间,不同命名空间中的数据彼此隔离。使得它们既可以共享同一个集群的服务, 也能够互不干扰。

在默认情况下,新建的集群存在以下四个Namespace:

  • default:所有未指定Namespace的对象都会被分配在default命名空间。
  • kube-public:此命名空间下的资源可以被所有人访问(包括未认证用户),用来部署公共插 件、容器模板等。
  • kube-system:所有由Kubernetes系统创建的资源都处于这个命名空间。
  • kube-node-lease:每个节点在该命名空间中都有一个关联的“Lease”对象,该对象由节点定 期更新,被用来记录节点的心跳信号。

Kubernetes核心概念- Controller

工作负载是在Pod之上的一层抽象,我们可以通过控制器(controller)实现”“茶列是” Pod的高级特性,比如节点故障时Pod的自动迁移,Pod多副本横向扩展,应用滚动升级 等。我们通常使用controller来做应用的真正的管理,而Pod是组成工作负载最小的单元

image-20220424222144823

工作负载按不同业务类型,在Kubernetes中分为 以下四类:

  • Deployment和ReplicaSet
  • StatefulSet
  • DaemonSet
  • Job和CronJob

Kubernetes核心概念- Service

在Kubernetes中,Pod副本发生迁移或者伸缩的时候会发生变化,IP也是变化部。 Kubernetes中的Service是一种抽象概念,它定义了一个Pod逻辑集合以及访问广们的策 略。 Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端中 'Service为 Pod提供了负载均衡。

image-20220424222515700

Kubernetes核心概念- Volume

Volume用来管理Kubernetes存储,是用来声明在Pod中的容器可以访问的文件目录,含义如下:

  • 声明在Pod中的容器可以访问的文件目录。
  • 可以被挂载在Pod中一个或多个容器的指定路径下。
  • 支持多种后端存储(本地存储、分布式存储、云存储等)

image-20220424222735026

Kubernetes管理-对象类型总览

image-20220424223135943

思考题

1.(多选题)Kubernetes Master节点包含以下哪些组件?(AB)

A. kube-scheduler

B. etcd

C. kubelet

D. kube-proxy

2.(单选题)Kubernetes的管理对象,从小到大的管理逻辑为?(A)

A.容器<Pod<ReplicaSet<Deployment

B.容器<Pod<Deployment<ReplicaSet

C. Deployment<ReplicaSet<Pod<容器

D. ReplicaSet<容器<Pod<Deployment

总结

本文通过和大家一起了解了容器编排技术,容器编排的价值,然后大规模容器集群管理工具,从Borg到Kubernetes 的演进,容器集群管理竞争史 ,以及详解Kubernetes架构 以及Kubernetes的核心概念最后完成对Kubernetes管理-对象类型总览 。

本文整理自华为云社区【内容共创】活动第15期。

https://bbs.huaweicloud.com/blogs/345822

任务1:华为云大咖带你玩转云原生基础设施之K8s

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐