云计算与Kubernetes(k8s)

2023-10-27

参考链接:
https://blog.csdn.net/zkkzpp258/article/details/86541362
https://blog.csdn.net/Bubbler_726/article/details/85596418
https://blog.csdn.net/wx_15323880413/article/details/100516698

云计算与Kubernetes(k8s)

在这里插入图片描述

目录

发展经历

云计算交互标准(云服务分类):

比如:

  • Infrastructure as a Service( IaaS 基础设施服务) 例如:阿里云、AWS
  • Platform as a Service( PaaS 平台服务) 例如:新浪云
  • Softwate as a Service( SaaS 软件设施服务) 例如:office365

区别:

在这里插入图片描述

请设想你是一个餐饮业者,打算做披萨生意。

方案1:IaaS:
他人提供厨房、炉子、煤气,你使用这些基础设施,来烤你的披萨。
IaaS 是云服务的最底层,主要提供一些基础资源。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。

方案2:PaaS
除了基础设施,他人还提供披萨饼皮。
你只要把自己的配料洒在饼皮上,让他帮你烤出来就行了。也就是说,你要做的就是设计披萨的味道(海鲜披萨或者鸡肉披萨),他人提供平台服务,让你把自己的设计实现。
PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。

方案3:SaaS
他人直接做好了披萨,不用你的介入,到手的就是一个成品。你要做的就是把它卖出去,最多再包装一下,印上你自己的 Logo。
SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。

所以,对于自己的工作量(下图蓝色):IaaS>PaaS>SaaS

在这里插入图片描述

公有云、私有云、混合云

公有云:
什么是公有云呢?设想一个场面,如果你制作了一个网站(代理+应用服务器+数据库),一般来说,都是只可以在本机装个tomcat,mysql等等进行调试,你使用的ip就是localhost,这种Web,一般称之为单机的服务。如果你想让别人也访问你的网页,当然是要把机器接入到Internet上。但是目前你完全不具备购买一台Web服务器的能力,这时候怎么办呢?没关系,你可以购买一台虚拟的云服务器。这台云服务器本身已经具备了一个公网的ip,如果你把服务部署在这台服务器上,那么它的localhost就是这个公网的ip了,你和你的朋友可以在随时随地访问了。因此,公有云的概念简单理解就是申请一台接入Internet的云主机,你可以对其随便搞(装系统、装应用、开关机),你只需要购买一个使用的类似租赁的费用,而并不需要购买它。

这里,你申请的“机器”,可能是一台虚拟机,也可能是一些容器,对于这些容器,一般称它们为“实例”。当代的互联网公司,在进行服务部署的时候,往往会选择部署实例而非虚拟机,至于为什么,可以参考虚拟机和容器的区别的文章。选用实例,是因为实例的部署是秒级的(虚拟机是分钟级别的),而且实例是APP层面的封装,更小更轻便,是对硬件的更有效地利用。

私有云:
私有云是为了解决安全问题的一种云计算方案。虽然公有云很方便,但是毕竟是把数据和资源都交给其它人了,这对于企业管理来说,是一个很大的隐患。毕竟,很多数据是无价的,很多企业把用户数据作为他们的灵魂支柱。因此,当今的企业常常不希望把数据和资源部署到公有云上,他们往往会自己出资搭建机房,这时的解决方案,就是私有云方案。私有云比起公有云,更加安全,但是,成本也更高。

混合云:
混合云是在成本和安全方面的一种折中方案。顾名思义,就是公有云和私有云的结合。数据依然是存到本地的机器上,但是一旦出现大规模的访问或者计算时,就会把这部分计算的需求转移到公有云平台上,实现不同场景的切换。与此同时,在混合云方案中,私有云还常常把公有云作为灾难恢复和灾难转移的平台。混合云在使用起来具有更高的灵活性,是企业在考虑成本效益下的首选方案。

如前文所述,混合云客户一般已经具备了私有云,希望通过对接公有云解决几方面的典型需求:

  1. 跨国:某大型公司在美国销售电子类产品,需要在美国连接该企业的销售系统,通过本地私有云加AWS公有云实现;

  2. 灾备:将一部分系统或者数据定期备份到公有云上;

  3. 性能和高可用:利用公有云的CDN、全局负载均衡等能力提供更好可用性和性能;

  4. 爆发:客户业务需要短时爆发(bursting),满足业务需求同时节省成本。

混合云供应商主要包含:公有云提供商提供混合云能力、私有云供应商提供混合云能力、混合云创新企业等。

历程

MESOS Apache下的分布式资源管理框架 在2019.5,最大使用者Twitter放弃MESOS,转型Kubernetes。

Docker Swarm Docker母公司为Docker开发的分布式资源管理框架 在2019.7,阿里云宣布,将Docker Swarm从阿里云的选择列表中剔除。

Kubernetes Google公司 10年容器化基础架构 采用Go语言对自己的borg系统进程翻写 ----> Kubernetes

Kubernetes特点

K8S官网: https://kubernetes.io/zh-cn/docs/home/

K8S是Kubernetes的全称,源于希腊语,意为“舵手”或“飞行员”,官方称其是: 用于自动部署、扩展和管理“容器化(containerized) 应用程序”的开源系统。

总结来说: K8S是负责自动化运维管理多个Docker程序的集群

核心特性:

  • 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制
  • 存储编排:自动挂载所选存储系统,包括本地存储
  • Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来
  • 批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器
  • 水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩
  • 自动化上线和回滚:Kubernetes会分步骤的针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。
  • 自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性
  • 自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。

组件说明

K8S核心架构原理

在这里插入图片描述

K8S是属于主从设备模型(Master-Slave架构),即有Master节点负责核心的调度、管理和运维,Slave节点则执行用户的程序。但是在K8S中,主节点一般被称为Master Node 或者 Head Node,而从节点则被称为Worker Node 或者 Node

注意: Master Node和Worker Node是分别安装了K8S的 Master和Worker组件的实体服务器,每个Node都对应了一台实体服务器(虽然Master Node可以和其中一个Worker Node安装在同一台服务器,但是建议Master Node单独部署),所有Master Node和Worker Node组成了K8S集群,同一个集群可能存在多个Master Node和Worker Node。

Master Node的组件:

  • Api Server : K8S的请求入口。 API Server负责接收K8S所有请求(来自UI界面或者CLI命令行工具),然后API Server根据用户的具体请求,通知其他组件。
  • Scheduler : K8S所有Worker Node 的调度器。 当用户要部署服务时,Scheduler会选择最合适的Worker Node 来部署。
  • Controller Manager : K8S所有Worker Node的监控器。 Controller Manager有很多具体的Controller,如:Node Controller、Service Controller、Volume Controller等。Controller负责监控和调整在Worker Node上部署的服务的状态,比如用户要求A服务部署2个副本,那么当其中一个服务挂了的时候,Controller会马上调整,让Scheduler再选择一个Worker Node重新部署服务。
  • etcd : K8S的存储服务。 CoreOS公司用Go语言编写的开源键值对数据库,官网定义为一个可信赖分布式键值存储服务。 etcd存储了K8S的关键配置和用户配置,K8S中仅API Server才具备读写权限操作etcd,其他组件必须通过API Server的接口才能读写数据。

Worker Node的组件:

  • Kubelet :Worker Node的监视器,以及与Master Node的通讯器。 Kubelet是Master Node安插在Worker Node上的“眼线”,它会定期向Master Node汇报自己Node上运行的服务的状态,并接收来自Master Node的指示采取调整措施。负责控制所有容器的启动停止,保证节点工作正常。
  • Kube-Proxy : K8S的网络代理。 Kube-Proxy负责Node在K8S的网络通讯、以及对外部网络流量的负载均衡。
  • Container Runtime : Worker Node的运行环境。 即安装了容器化所需的软件环境确保容器化程序能够跑起来,比如Docker Engine运行环境

其他组件

  • CoreDNS:可以为集群中的SVC创建一个域名IP的对应关系解析
  • Dashboard:给K8S集群提供一个B/S结构的访问体系
  • Ingress Controller:官方的Kubernetes只能实现四层代理,Ingress 可以实现七层代理。
  • Federation:提供一个可以跨集群中心多K8S统一管理的功能。
  • Prometheus:提供K8S集群的监控能力。
  • ELK:提供K8S集群日志统一分析介入平台。

各组件间工作流程

例如:我们在master节点执行命令,要master部署一个nignx应用

kubectl create deployment nginx --image=nginx
  1. 这条命令首先发到master节点的网关API Server,这是master的唯一入口
  2. API Server将命令请求交给Controller Manager控制
  3. Controller Manager进行应用部署解析
  4. Controller Manager会生成一次部署信息,并通过API Server将信息存入etcd存储中
  5. Scheduler调度器通过API Server从etcd存储中,拿到要部署的应用,开始调度看哪个节点有资源适合部署
  6. Scheduler把计算出来的调度信息通过API Server存储到etcd中
  7. 每一个node节点的监控组件kubelet,随时和master保持联系(给API Server发送请求不断获取最新的数据),拿到master节点存储在etcd中的部署信息
  8. 假设node2节点的kubelet拿到部署信息,显示他自己节点要部署nginx应用
  9. kubelet就会run一个应用在node2服务器上,并随时给master节点汇报当前应用的状态信息
  10. node和master也是通过master的API Server组件联系的
  11. 每一个机器上的kube-proxy能知道集群的所有网络,只要node访问别人或者别人访问node,node上的kube-proxy网络代理自动计算进行流量转发



Kubernetes核心概念

Kubernetes有很多核心概念,我们先看下几个核心的概念。

Deployment

Deployment负责创建和更新应用程序的实例。 创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的实例。这提供了一种自我修复机制来解决机器故障维护问题。
在这里插入图片描述



Pod

Pod相当于逻辑主机的概念,负责托管应用实例。包括一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源(共享存储、网络、运行信息等)。
在这里插入图片描述



Service

Service是一个抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载均衡和服务发现。
尽管每个Pod 都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在群集外部。Service允许您的应用程序接收流量。Service也可以用在ServiceSpec标记type的方式暴露,type类型如下:

  • ClusterIP(默认):在集群的内部IP上公开Service。这种类型使得Service只能从集群内访问。
  • NodePort:使用NAT在集群中每个选定Node的相同端口上公开Service。使用 <NodeIP>: <NodePort> 从集群外部访问Service。是ClusterIP的超集。
  • LoadBalancer: 在当前云中创建一个外部负载均衡器(如果支持的话),并为Service分配一个固定的外部 IP。是NodePort的超集。
  • ExternalName:通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指 定)公开Service。不使用代理。

在这里插入图片描述



Kubernetes中的资源

k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象,上面说的那些核心概念都是k8s中的资源。

k8s中有哪些资源:

  • 工作负载型资源(workload): Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet等等
  • 服务发现及负载均衡型资源(ServiceDiscovery LoadBalance): Service,Ingress等等
  • 配置与存储型资源: Volume(存储卷),CSI(容器存储接口,可以扩展各种各样的第三方存储卷)
  • 特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型),Secret(保存敏感数据), DownwardAPI(把外部环境中的信息输出给容器)

以上这些资源都是配置在名称空间级别

  • 集群级资源:Namespace,Node,Role,ClusterRole,RoleBinding(角色绑定), ClusterRoleBinding(集群角色绑定)
  • 元数据型资源:HPA(Pod水平扩展),PodTemplate(Pod模板,用于让控制器创建Pod时使用的模板), LimitRange(用来定义硬件资源限制的)



网络通讯模式

Kubernetes 的网络模型假定了所有Pod都在一个可以直接连接的扁平的网络空间中,这在GCE(Google Compute Engine)里是现成的网络模型。Kubernetes 假定这个网络已经存在。而在私有云里搭建Kubernetes 集群,就不能假定这个网络已经存在了。 我们需要自己实现这个网络假设,将不同节点的Docker 容器之间的相互访问先打通,然后运行Kubernetes。

Pod网络通讯类型

  • 同一个Pod内多个容器之间:pause服务,通过loaclhost即可访问
  • 各Pod之间的通讯:Overlay Network
  • Pod 与 Service 之间的通讯:各节点的Iptables规则,最新版本中加入了LVS

网络解决方案 Kubernetes+Flannel (常用)

Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个网络规划服务,简单的说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟Ip地址。而且它还能在这些IP地址直接建立一个覆盖网络(Overlay Network) ,通过这个覆盖网络,将数据包原封不动地传递到目标容器内。

在这里插入图片描述

ETCD 之 Flannel 提供说明

  • ETCD存储管理Flannel可分配的 IP 地址段资源
  • 监控 ETCD 中每个Pod的实际地址,并在内存中建立维护Pod节点路由表

不同情况下网络通讯方式

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

云计算与Kubernetes(k8s) 的相关文章

随机推荐

  • SpringMVC视图解析器

    SpringMVC视图解析器 SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图 当用户对SpringMVC应用程序发起请求时 这些请求都会被SpringMVC的DispatcherServlet处理 通过
  • Xcode 调试之 Hello World

    编译 编译JKD 可以查看 Mac 编译 OpenJDK 8 调试 截图来自 https segmentfault com a 1190000005082098 调试 Hello World 编写好源文件 public class Hell
  • Linux命令行另类使用技巧

    0x00 基础简述 0x01 补全实践 bash completion zsh autosuggestions 文件名补全 特殊补全 命令行参数补齐 可编程补全 0x02 历史命令 设置历史记录 查看历史命令 搜索历史命令 前后移动历史命令
  • CSS层叠性(重要)

    CSS层叠性 重要 指多种CSS样式的叠加 是浏览器处理冲突的一个能力 如果一个属性通过两个相同选择器设置到同一个元素上 那么这个时候一个属性就会将另一个属性层叠掉 原则 1 样式冲突 遵循的原则是就近原则 即CSS的书写位置 2 样式不冲
  • 【2022年MathorCup大数据竞赛】B题:北京移动用户体验影响因素研究(一)

    目录 一 题目背景 二 初赛问题 三 数据集的分享 一 题目背景 移动通信技术飞速发展 给人们带来了极大便利 人们也越来越离不开移动通信技术带来的各种便捷 随着网络不断的建设 网络覆盖越来越完善 各个移动运营商 越来越重视客户的网络使用体验
  • 判断文件的几种方法及其优劣对比

    目录 一 懒人的try语句 二 传统的os模块 三 时尚的pathlib模块 四 几种方法优劣对比 我们知道当 件不存在的时候 open 法的写模式与追加模式都会新建 件 但是对 件进 判 我们之前学过 要 with语句来处理 件读写 但w
  • shell脚本生成两个数据日期之间的所有日期

    在linux下有时候会需要得到两个日期之间的所有日期 作为变量进行处理 例如两个日期之间的所有日期都分别生成一个用日期命名的文件夹 以下shell脚本循环输出两个指定日期之间的所有日期 包括两个输入日期 bin bash 以YYYYMMDD
  • 排列数【第十届】【决赛】【B组】

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • GTK+的优点与QT的优点

    想看看图形界面系统的优缺点 转载了网友整理的 GTK 的优点与QT的优点整理 在嵌入式 Linux 下有很多图形界面系统 GUI 包括 Qt Embedded FLTK Microwindows 和 GTK 等 作为一个开发者 到底使用什么
  • YOLOv8+ByteTrack多目标跟踪(行人车辆计数与越界识别)

    课程链接 https edu csdn net course detail 38901 ByteTrack是发表于2022年的ECCV国际会议的先进的多目标跟踪算法 YOLOv8代码中已集成了ByteTrack 本课程使用YOLOv8和By
  • arcgis已试图对空几何执行该操作_ArcGIS中坐标转换和投影变换

    当不同来源 不同坐标系统的空间数据要在一起使用 相互参照时 就要进行坐标转换 如果涉及不同的地图投影 就要进行投影变换 动态投影 所谓动态投影 是指改变ArcMap中的数据框架 DataFrame 的空间参考或者对后加入ArcMap中的数据
  • liunx常用命令

    在liunx中可能有几百个命令 最常用的就10多个 liunx中最常用的命令 ls 功能 使用说明 案例 pwd 功能 使用说明 案例 cd 功能 使用说明 案例 mkdir 功能 使用说明 案例 touch 功能 使用说明 案例 rm 功
  • 动力节点 SpringBoot教程 p15 Whitelabel Error Page

    一步一步跟着王妈妈敲的 还是报错 后来发现是目录的问题 initiizer初始化出来application和comtroller不在一个包下面 把他挪到controller包下面就ok了 或者把他挪到和controller目录一个层次也可以
  • Android--沉浸式导航栏适配

    转自 Android 沉浸式导航栏适配 Aruba233的博客 CSDN博客 本文是用于设配SDK4 4到5 0的沉浸式导航栏适配 4 4下面的实现不了沉浸式 上次说到适配沉浸式状态栏时 为DecorView添加一个View可以是实现 导航
  • 包装类的使用

    包装类的使用 1 相关概念 java提供了8种基本数据类型对应的包装类 使得基本数据类型的变量具有类的特征 需要掌握 基本数据类型 包装类 String三者之间的相互转换 2 基本数据类型和包装类的互转 基本数据类型转换包装类 调用包装类的
  • EMI 滤 波 器 原 理 与 设 计 方 法 详 解

    输入端差模电感的选择 差模 choke 置于 L 线或 N 线上 同时与 XCAP 共同作用 F 1 2 L C 波器振荡频率要低于电源供给器的工作频率 一般要低于 10kHz L N2AL nH N2 nH N L nH AL nH N2
  • qt 动画(界面跳转进场动画)

    目标 做上位机软软件的时候 觉得QTabWidget的每个tab跳转时候 单纯的界面显示太过单调 希望有界面上面的控件有一个进场的动画效果 效果 实现 通过动画QPropertyAnimation把设置单个控件动画效果 在用组合动画类QSe
  • [编程入门]二维数组的转置

    题目描述 写一个函数 使给定的一个二维数组 转置 即行列互换 输入 一个3x3的矩阵 输出 无 样例输入复制 1 2 3 4 5 6 7 8 9 样例输出复制 1 4 7 2 5 8 3 6 9 思路 二维数组转置 即为i变为j j变为i
  • rabbitmq 常用配置

    rabbitmq 常用配置 rabbitmq 指定RabbitMQ host 默认为 localhost spring rabbitmq host rabbitmq piecloud infra xx 端口号 默认端口号5672 sprin
  • 云计算与Kubernetes(k8s)

    参考链接 https blog csdn net zkkzpp258 article details 86541362 https blog csdn net Bubbler 726 article details 85596418 htt