百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

K8S之基本概念与组件原理(一) k8s主要组件

liebian365 2024-10-25 15:39 18 浏览 0 评论

一、什么是kubernetes?

kubernetes是一个可移植的,可扩展的开源平台,是Google开源的容器集群管理系统(谷歌内部:Borg),用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

二、为什么要使用kubernetes?

k8s在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

同时Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。

同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

三、集群架构及组件

1、集群架构

(1)Master负责管理集群,部署集群所需组件etcd,apiserver,controller manager,scheduler。master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。

(2) Node节点是 Kubernetes 集群中的工作节点,用于托管正在运行的应用程序,可以是物理机或虚拟机。 每个工作节点都有一个 kubeletkube-proxy,它是管理节点并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的容器运行时,例如 Docker 或 rkt。一个 Kubernetes 工作集群至少有三个节点。

2、集群组件

  • etcd: 键值存储数据库,维护集群内各个节点状态的一致性,保存集群的状态及配置;
  • apiserver:处理资源操作的请求,并提供认证、授权、访问控制、API 注册和发现等机制;
  • controller manager: 控制器管理,负责维护集群的状态,如故障检测、自动扩展、滚动更新等;
  • scheduler:调度器,负责资源的调度,按照预定的调度策略将 Pod 调度到相应的节点;
  • kubelet:负责维护容器的生命周期, Pod 的创建、启动、监控、重启、销毁等工作,处理Master节点下发到本节点的任务;
  • Container runtime: 负责镜像管理以及 Pod 和容器的真正运行(CRI);
  • kube-proxy: 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
  • Flannel/calico:网络插件, 负责为整个集群提供 IP 服务;
  • kube-dns/coredns: 负责为整个集群提供 DNS 服务;
  • Ingress Controller: 为服务提供外网入口;

2、集群工作流程

  1. 使用REST API 创建Pod,即(kubectl create pod)请求apiserver。
  2. apiserver接收到pod创建请求后,写入到Etcd,会存在记录但不会创建。
  3. scheduluer 检测到有未绑定 Node 的 Pod,查找集群中资源充足的Node绑定,并将调度信息写入到Etcd。
  4. kubelet 通过监测etcd数据库,检测到有绑定该节点的Pod调度过来需要创建,调用container runtime 运行该 Pod。
  5. kubelet 通过 container runtime 取到 Pod 状态,并更新到 apiserver 中。

四、基本概念及相关名词

1、基本概念

Kubernetes中的绝大部分概念都会被抽象成Kubernetes管理的一种资源对象。

2、相关名词

Pod

Pod是 Kubernetes 项目中最小的 API 资源对象,Pod可以由一个或多个业务容器和一个根容器(Pause容器)组成。一个Pod表示某个应用的一个实例。Kubernetes 项目的调度器,是统一按照 Pod 而非容器的资源需求进行计算的,凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的。

可以这样理解,云计算系统的操作系统是 k8s ,容器就相当于是其进程,而 Pod 则是进程组,容器镜像就是这个系统里的“.exe”安装包。Pod 里的所有容器,它们共享PID、IPC、Network和UTS namespace,可以声明共享同一个 Volume。

ReplicaSet

ReplicaSet是Pod副本的抽象,用于解决Pod的扩容和伸缩。

Deployment

Deployment通常用来部署无状态应用,如Web服务, 该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。在内部使用ReplicaSet来实现Pod副本的创建。Deployment确保指定数量的Pod“副本”在运行,并且支持回滚和滚动升级。创建Deployment时,需要指定 Pod模板和Label标签。

StatefulSet

StatefulSet通常用来部署有状态应用,如Mysql服务,服务运行的实例需要在本地存储持久化数据,多个实例之间有依赖拓扑关系,比如:主从关系、主备关系。如果停止掉依赖中的一个Pod,就会导致数据丢失或者集群崩溃。他的核心功能就是通过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。它包含Deployment控制器ReplicaSet的所有功能,增加可以处理Pod的启动顺序,为保留每个Pod的状态设置唯一标识,同时具有以下功能:

  • 稳定的、唯一的网络标识符
  • 稳定的、持久化的存储
  • 有序的、优雅的部署和缩放

DaemonSet

DaemonSet:服务守护进程,它的主要作用是在Kubernetes集群的所有节点中运行我们部署的守护进程,相当于在集群节点上分别部署Pod副本,如果有新节点加入集群,Daemonset会自动的在该节点上运行我们需要部署的Pod副本,相反如果有节点退出集群,Daemonset也会移除掉部署在旧节点的Pod副本。

DaemonSet的主要特征:

  • 这个 Pod 运行在 Kubernetes 集群里的每一个节点(Node)上;
  • 每个节点上只会运行一个这样的 Pod 实例;
  • 如果新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来;
  • 而当旧节点被删除后,它上面的 Pod 也相应地会被回收掉。

DaemonSet常用场景:

  • 网络插件的 Agent 组件,如(Flannel,Calico)需要运行在每一个节点上,用来处理这个节点上的容器网络;
  • 存储插件的 Agent 组件,如(Ceph,Glusterfs)需要运行在每一个节点上,用来在这个节点上挂载F远程存储目录;
  • 监控系统的数据收集组件,如(Prometheus Node Exporter,Cadvisor)需要运行在每一个节点上,负责这个节点上的监控信息搜集。
  • 日志系统的数据收集组件,如(Fluent,Logstash)需要运行在每一个节点上,负责这个节点上的日志信息搜集。

Job/CronJob

  • Job负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束,解决一些需要进行批量数据处理和分析的需求,,比如Jenkins Slave,发布完代码后任务结束,Pod自动销毁;
  • CronJob则就是在Job上加上了时间调度,用来执行一些周期性的任务。

HPA

Horizontal Pod Autoscaling(Pod水平自动伸缩),简称HPA。通过监控分析RC或者Deployment控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量,这是HPA最基本的原理。

ConfigMap

ConfigMap:就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性,因为一个configMap其实就是一系列配置信息的集合,将来可直接注入到Pod中的容器使用,而注入方式有两种,一种将configMap做为存储卷,一种是将configMap通过env中configMapKeyRef注入到容器中;

RBAC

RBAC:基于角色的访问控制,可以用来给用户授予对集群操作不同的权限。

Secret

Secret:用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等,将这些信息放在Secret中比放在Pod的定义中或者docker镜像中来说更加安全和灵活。

Service

Service:是一种抽象的对象,它定义了一组Pod的逻辑集合和一个用于访问它们的策略,我们可以通过访问Service来访问到后端的Pod服务,其实这个概念和微服务非常类似。一个Serivce下面包含的Pod集合一般是由Label Selector来决定的。

Ingress

Ingress:就是从 kuberenets 集群外部访问集群的一个入口,将外部的请求转发到集群内不同的 Service 上,其实就相当于 nginx、haproxy 等负载均衡代理服务器,目前选择有很多: traefik、nginx-controller、Kubernetes Ingress Controller for Kong、HAProxy Ingress controller。

PV/PVC

  • PV 的全称是:PersistentVolume(持久化卷),是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。
  • PVC 的全称是:PersistentVolumeClaim(持久化卷声明),PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。

StorageClass

StorageClass:动态 PV,可以自动帮我们创建 PV,不再需要手动创建PV。

Helm

Helm:包管理工具,相当于kubernetes环境下的yum包管理工具。

CRD

CRD是对 Kubernetes API 的扩展,Kubernetes 中的每个资源都是一个 API 对象的集合,例如我们在YAML文件里定义的那些spec都是对 Kubernetes 中的资源对象的定义,所有的自定义资源可以跟 Kubernetes 中内建的资源一样使用 kubectl 操作。

Operator

Operator是由CoreOS公司开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator基于 Kubernetes 的资源和控制器概念之上构建,但同时又包含了应用程序特定的一些专业知识,比如创建一个数据库的Operator,则必须对创建的数据库的各种运维方式非常了解,创建Operator的关键是CRD(自定义资源)的设计。Operator是将运维人员对软件操作的知识给代码化,同时利用 Kubernetes 强大的抽象来管理大规模的软件应用。

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: