【云驻共创】华为云大咖带你玩转云原生基础设施之K8s
前言
容器技术的诞生虽解决了应用打包和发布的难题,但单一的容器技术工具并无 法支持起生产级大规模容器部署的场景。针对这一场景,容器管理与编排成为了容器技术发展的关键。Kubernetes便是在这样的大背景下诞生的。本文将由华为云大咖带你玩转云原生基础设施之K8s。
容器编排技术
容器编排技术 •容器(如Docker)以及周边生态系统提供了很多工具来实现容器生命周期管理,能够满足在单台宿主机管理容器的需求。但越来越多企业开始使用容器,对容器技术的进一步 发展提出了以下新的诉求:
高效的容器管理及编排。
容器的跨主机部署及调度。
容器的存储、网络、运维、安全等能力的拓展。
容器编排的价值
容器编排是指自动化容器的部署、管理、扩展和联网,可为企业带来以下价值:
-
灵活的资源管理及调度
-
自动化部署
-
高效的监控及运维
-
弹性扩展及高可用及服务发现
大规模容器集群管理工具,从Borg到Kubernetes
Kubernetes起源于Google内部的Borg项目,它对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。它的目标是管理大规模的容器, 提供基本的部署、维护以及应用伸缩等功能,其主要实现语言为Go语言。
Kubernetes作为容器集群管理工具,于2015年7月22日迭代到v1.0并正式对外公布。与此同时,谷歌联合Linux基金会及其他合作伙伴共同成立了CNCF基金会(Cloud Native Computing Foundation),并将Kuberentes作为首个编入CNCF管理体系的开源项目, 助力容器技术生态的发展进步。
容器集群管理竞争史
Kubernetes逐步统一容器编排和资源管理框架生态。
Kubernetes架构
一个基础的Kubernetes集群(Cluster)通常包含一个Master节点和多个Node节点。每个节点可以是一台物理机,也可以是一台虚拟机。
Node的职责是运行容器应用,由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运行。
Node节点
Kubelet
在集群内每个节点中运行的一个代理,用于保证Pod的运行,接收Master的 指令,负责管理容器(Pod)。
Kube-proxy
负责做负载均衡工作,在多个Pod/Service之间做负载均衡。
用于管理Service的访问入口,包括集群内Pod到Service的访问和集群外访问 Service.
Add-ons 。
插件,用于扩展Kubernetes的功能。
Container runtime
通常使用Docker来运行容器,也可使用rkt等做为替代方案。
开放接口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工作流程
Kubernetes核心概念
Kubernetes核心概念- Pod
Pod是Kubernetes中最重要最基本的概念,Pod是Kubernetes最小 工作单元。每个Pod包含- -个或多个相关容器,Kubernetes将Pod看做一个整体进行调度。
引入Pod的目的:
将联系紧密的容器封装在一个Pod单元内,以Pod整体进行调度、扩展和实现生命周期管理。
Pod内所有容器使用相同的网络Namespace和共享存储。即Pod内容器拥有相同IP地址和Port空间,容器间直接使用localhost通信。当挂载volume到Pod,即可实现将volume挂载到Pod中的每个容器。
Kubernetes核心概念- Label
当资源变得非常多的时候,如何分类管理就非常重要了,Kubernetes提供了一种机制来 为资源分类,那就是Label(标签)。Label非常简单,但是却很强大,Kubernetes中几 乎所有资源都可以用Label来组织。Label的具体形式是key-value的标记对,可以在创建 资源的时候设置,也可以在后期添加和修改。
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是组成工作负载最小的单元
工作负载按不同业务类型,在Kubernetes中分为 以下四类:
-
Deployment和ReplicaSet
-
StatefulSet
-
DaemonSet
-
Job和CronJob
Kubernetes核心概念- Service
在Kubernetes中,Pod副本发生迁移或者伸缩的时候会发生变化,IP也是变化部。 Kubernetes中的Service是一种抽象概念,它定义了一个Pod逻辑集合以及访问广们的策 略。 Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端中 'Service为 Pod提供了负载均衡。
Kubernetes核心概念- Volume
Volume用来管理Kubernetes存储,是用来声明在Pod中的容器可以访问的文件目录,含义如下:
-
声明在Pod中的容器可以访问的文件目录。
-
可以被挂载在Pod中一个或多个容器的指定路径下。
-
支持多种后端存储(本地存储、分布式存储、云存储等)
Kubernetes管理-对象类型总览
总结
本文通过和大家一起了解了容器编排技术,容器编排的价值,然后大规模容器集群管理工具,从Borg到Kubernetes 的演进,容器集群管理竞争史 ,以及详解Kubernetes架构 以及Kubernetes的核心概念最后完成对Kubernetes管理-对象类型总览 。
本文整理自华为云社区【内容共创】活动第15期。
https://bbs.huaweicloud.com/blogs/345822
- 点赞
- 收藏
- 关注作者
评论(0)