6

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

 2 years ago
source link: https://blog.51cto.com/jianguo/5252044
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

容器编排技术

容器编排技术 •容器(如Docker)以及周边生态系统提供了很多工具来实现容器生命周期管理,能够满足在单台宿主机管理容器的需求。但越来越多企业开始使用容器,对容器技术的进一步 发展提出了以下新的诉求:
高效的容器管理及编排。
容器的跨主机部署及调度。
容器的存储、网络、运维、安全等能力的拓展。

华为云大咖带你玩转云原生基础设施之K8s_集群管理

容器编排的价值

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

华为云大咖带你玩转云原生基础设施之K8s_docker_02

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

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

Kubernetes起源于Google内部的Borg项目,它对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。它的目标是管理大规模的容器, 提供基本的部署、维护以及应用伸缩等功能,其主要实现语言为Go语言。
Kubernetes作为容器集群管理工具,于2015年7月22日迭代到v1.0并正式对外公布。与此同时,谷歌联合Linux基金会及其他合作伙伴共同成立了CNCF基金会(Cloud Native Computing Foundation),并将Kuberentes作为首个编入CNCF管理体系的开源项目, 助力容器技术生态的发展进步。

容器集群管理竞争史

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

华为云大咖带你玩转云原生基础设施之K8s_集群管理_03

Kubernetes架构

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

华为云大咖带你玩转云原生基础设施之K8s_docker_04Node的职责是运行容器应用,由Master管理,Node Node 监控并汇报容器状态,同时根据Master的要求管理容器的生命周期。

Master节点提供的集群控制,对集群做出全局性决策,例如调 Master Master 节点上不运行用户容 器。为了实现高可用, 可以创建多个Master 节点。
Pod是Kubernetes的最小工 作单元。每个Pod包含一个 或多个容器。Pod中的容器 会作为一个整体被Master Container 调度到一个Node上运行。

Master节点

Kube-apiserver

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

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

Kube-controller-manager

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

Kube-scheduler

负责任务调度工作,监控没有分配节点的新创建的Pod,选择一个节点供 Pods运行。
华为云大咖带你玩转云原生基础设施之K8s_命名空间_05

Node节点

Kubelet

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

Kube-proxy

负责做负载均衡工作,在多个Pod/Service之间做负载均衡。
用于管理Service的访问入口,包括集群内Pod到Service的访问和集群外访问 Service.

Add-ons 。

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

Container runtime

通常使用Docker来运行容器,也可使用rkt等做为替代方案。
华为云大咖带你玩转云原生基础设施之K8s_docker_06

开放接口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工作流程

华为云大咖带你玩转云原生基础设施之K8s_集群管理_07

Kubernetes核心概念

Kubernetes核心概念- Pod

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

引入Pod的目的:

将联系紧密的容器封装在一个Pod单元内,以Pod整体进行调度、扩展和实现生命周期管理。
Pod内所有容器使用相同的网络Namespace和共享存储。即Pod内容器拥有相同IP地址和Port空间,容器间直接使用localhost通信。当挂载volume到Pod,即可实现将volume挂载到Pod中的每个容器。

华为云大咖带你玩转云原生基础设施之K8s_docker_08

Kubernetes核心概念- Label

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

华为云大咖带你玩转云原生基础设施之K8s_命名空间_09

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是组成工作负载最小的单元

华为云大咖带你玩转云原生基础设施之K8s_命名空间_10

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

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

Kubernetes核心概念- Service

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

华为云大咖带你玩转云原生基础设施之K8s_docker_11

Kubernetes核心概念- Volume

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

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

华为云大咖带你玩转云原生基础设施之K8s_集群管理_12

Kubernetes管理-对象类型总览

华为云大咖带你玩转云原生基础设施之K8s_docker_13

思考题
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​


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK