网站建网站建设做水利网站需要多少钱
web/
2025/10/4 12:32:47/
文章来源:
网站建网站建设,做水利网站需要多少钱,网络营销搜索引擎,pc蛋蛋游戏体验网站建设一、前言 K8S经过多年的发展#xff0c;构建了云原生的基石#xff0c;成为了云原生时代的统治者。我将用三个博客系列全面#xff0c;循序渐进的介绍K8S相关知识。 初级入门系列#xff0c;主要针对K8S初学者#xff0c;以及希望对K8S有所了解的研发人员#xff0c;重点…一、前言 K8S经过多年的发展构建了云原生的基石成为了云原生时代的统治者。我将用三个博客系列全面循序渐进的介绍K8S相关知识。 初级入门系列主要针对K8S初学者以及希望对K8S有所了解的研发人员重点介绍K8S的使用包括核心概念yaml文件等并配合一些简单的案例进行练习能达到了解K8S的目标。 中级原理系列主要针对K8S有一定研究的架构师开发人员等深度剖析K8S核心架构组件以及实现原理能达到理解K8s的目标。 高级实战系列主要针对K8S的架构研发运维人员结合周边产品构建整体的K8S生态体系将相关知识点运用到实践能达到掌握和使用K8S的目标。 千里之行始于足下Lets go 二、云计算发展历史 在讲K8S之前我们先了解下整个云计算的发展历史这样有助于更加全面的了解和认识K8S的前生今世。 计算的设施经历了物理机虚机以及目前的云原生时代。 1、物理机时代
物理机时代所有的服务都直接部署到物理机上。其架构示意图如下 这种模式部署简单对于早期的单体应用来说能基本满足要求。但这种模式最大的问题是资源无法有效利用无法平民化。
2、虚机时代 随着互联网的兴起一方面线上流量呈指数级增长另一方面对于初创的互联网企业没有足够的资金购买大量的设备资源如何利用技术解决成本问题成为各厂商面临的主要问题。这个时期内诞生了诸如分布式技术虚拟化技术等等。 虚拟化英语Virtualization是一种资源管理技术是将计算机的各种实体资源如服务器、网络、内存及存储等予以抽象、转换后呈现出来打破实体结构间的不可切割的障碍使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式地域或物理组态所限制。 虚拟化技术就是把物理资源(服务器网络硬件CPU)进行隔离的技术。 在计算机的系统中从底层至高层依次可分为硬件层、操作系统层、函数库层、应用程序层每一层都可以实现虚拟化这里主要是指硬件层的虚拟化又称系统级虚拟化。系统级虚拟化从类型上又可以分为完全虚拟化和类虚拟化。
完全虚拟化完全虚拟化的虚拟平台和现实平台是一样的客户机操作系统察觉不到是运行在一个虚拟平台上这样的虚拟平台可以运行现有的操作系统无须对操作系统进行任何修改因此这种方式被称为完全虚拟。在当前的系统级虚拟化解决方案中完全虚拟化技术应用非常普遍典型的有知名的产品有VirtualBox、KVM、VMware Workstation和VMware ESX它在其4.0版被改名为VMware vSphere、Xen也支持全虚拟化。类虚拟化这样的虚拟平台需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境因此客户机操作系统知道其运行在虚拟平台上并且会去主动适应。这种方式被称为类虚拟化有时也称作半虚拟化。这种虚拟技术以Xen为代表微软的Hyper-V所采用技术和Xen类似也可以把Hyper-V归属于半虚拟化。
其架构模型示意图如下 VMM(Virtual Machine Manager)首先可以被看做是一个完备的操作系统不过和传统操作系统不同的是VMM是为虚拟化而设计的因此还具备虚拟化功能。从架构上来看首先所有的物理资源如处理器、内存和I/O设备等都归VMM所有因此VMM承担着管理物理资源的责任其次VMM需要向上提供虚拟机用于运行客户机操作系统因此VMM还负责虚拟环境的创建和管理。 接下来我们来认识下重要的虚拟化的产品。
(1)VMware VMware是x86 虚拟化软件的主流广商之一提供一系列的虚拟化产品其产品的应用领域从服务器到桌面。下面是VMware主要产品的简介包括VMware ESX、VMware Server和VMware Workstation。 VMware ESX Server是VMware的旗舰产品后续版本改称VMware vSphere。ESX Server基于Hypervisor模型在性能和安全性方面都得到了优化是一款面向企业级应用的产品。VMware ESX Server支持完全虚拟化可以运行Windows 、Linux、Solaris和Novell Netware等客户机操作系统。VMware ESX Server也支持类虚拟化可以运行Linux 2. 6. 21 以上的客户机操作系统。 VMware Server之前叫VMware GSX Server是VMware面向服务器端的入门级产品。宿主机操作系统可以是Windows或者Linux。VMware Server的功能与ESX Server类似但是在性能和安全性上与ESX Server有所差距。 VMware Workstation是VMware面向桌面的主打产品。宿主机操作系统可以是Windows或者Linux。专门针对桌面应用做了优化如为虚拟机分配USB设备为虚拟机显卡进行3D加速等。
(2)Xen Xen是一款基于GPL授权方式的开源虚拟机软件。Xen起源于英国剑桥大学Ian Pratt领导的一个研究项目之后Xen独立出来成为一个社区驱动的开源软件项目。 它是运行在裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化Xen支持hypervisor和虚拟机互相通讯而且提供在所有Linux版本上的免费产品包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化此外未经修改的操作系统也可以直接在xen上运行(如Windows)能让虚拟机有效运行而不需要仿真因此虚拟机能感知到hypervisor而不需要模拟虚拟硬件从而能实现高性能。
(3)KVM KVM(Kernel-based Virtual Machine)也是一款基于GPL授权方式的开源虚拟机软件。KVM 最早由Qumranet公司开发在2006年出现在Linux内核的邮件列表上并于2007年被集成到了Linux 2.6.20内核中成为内核的一部分。 它集成到Linux内核的Hypervisor是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块利用Linux做大量的事如任务调度、内存管理与硬件设备交互等。 KVM还可以结合QEMU来提供设备虚拟化。
(4)QEMU QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与BochsPearPC近似但其具有某些后两者所不具备的特性如高速度及跨平台的特性。经由kqemu这个开源的加速器QEMU能模拟至接近真实电脑的速度。 QEMU本身可以不依赖于KVM但是如果有 KVM的存在并且硬件(处理器)支持比如Intel VT功能那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。换言之KVM缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具所以它借用了QEMU的代码并加以精简连同KVM一起构成了一个完整的虚拟化解决方案不妨称之为KVMQEMU。 5OpenStack 不同于前面的几个产品Openstack是一个云管平台项目由美国国家航空航天局和Rackspace在2010年末合作研发的开源项目旨在打造易于部署、功能丰富且易于扩展的云计算平台。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性企图成为数据中心的操作系统即云操作系统。 OpenStack覆盖了网络、虚拟化、操作系统、服务器等各个方面。其核心的组件如下
计算ComputeNova。一套控制器用于为单个用户或使用群组管理虚拟机实例的整个生命周期根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作配置CPU、内存等信息规格。自Austin版本集成到项目中。对象存储Object StorageSwift。一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统允许进行存储或者检索文件。可为Glance提供镜像存储为Cinder提供卷备份服务。自Austin版本集成到项目中。镜像服务Image ServiceGlance。一套虚拟机镜像查找及检索系统支持多种虚拟机镜像格式AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK有创建上传镜像、删除镜像、编辑镜像基本信息的功能。自Bexar版本集成到项目中。身份服务Identity ServiceKeystone。为OpenStack其他服务提供身份验证、服务规则和服务令牌的功能管理Domains、Projects、Users、Groups、Roles。自Essex版本集成到项目中。网络地址管理NetworkNeutron。提供云计算的网络虚拟化技术为OpenStack其他服务提供网络连接服务。为用户提供接口可以定义Network、Subnet、Router配置DHCP、DNS、负载均衡、L3服务网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术如OpenvSwitch。自Folsom版本集成到项目中。块存储 (Block Storage)Cinder。为运行实例提供稳定的数据块存储服务它的插件驱动架构有利于块设备的创建和管理如创建卷、删除卷在实例上挂载和卸载卷。自Folsom版本集成到项目中。UI 界面 (Dashboard)Horizon。OpenStack中各种服务的Web管理门户用于简化用户对服务的操作例如启动实例、分配IP地址、配置访问控制等。自Essex版本集成到项目中。测量 (Metering)Ceilometer。像一个漏斗一样能把OpenStack内部发生的几乎所有的事件都收集起来然后为计费和监控以及其它服务提供数据支撑。自Havana版本集成到项目中。部署编排 (Orchestration)Heat。提供了一种通过模板定义的协同部署方式实现云基础设施软件运行环境计算、存储和网络资源的自动化部署。自Havana版本集成到项目中。数据库服务Database ServiceTrove。为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。自Icehouse版本集成到项目中。
其分层架构如下: 3、云原生时代 云计算发展就是能力不断下沉到基础设备应用开发者不断得到解放的过程。 这个过程可以类比社会的发展从封建主义社会的自给自足到资本主义社会的按劳分配再到共产主义社会的按需分配。云原生时代就可以看做社会主义社会阶段大部分工作已经被底层设施完成应用开发者仅关注业务自身逻辑。 什么是云原生2015年成立的CNCF基金会(Cloud Native Computing Foundation)在2018年对云原生做了如下定义(中英文对照) Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
译文云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。 These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
译文:这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。 关于什么是云原生现在还在争论中可谓百家争鸣笔者认为云原生是一种设计理念一切有利于提升云上资源利用率以及应用交付效率的行为或方式都可以看做云原生如容器化ServiceMeshServerlessK8S等技术。 云原生的设计理念如下:
面向分布式设计Distribution容器、微服务、API 驱动的开发面向配置设计Configuration一个镜像多个环境配置面向韧性设计Resistancy故障容忍和自愈面向弹性设计Elasticity弹性扩展和对环境变化负载做出响应面向交付设计Delivery自动拉起缩短交付时间面向性能设计Performance响应式并发和资源高效利用面向自动化设计Automation自动化的 DevOps面向诊断性设计Diagnosability集群级别的日志、metric 和追踪面向安全性设计Security安全端点、API Gateway、端到端加密 云原生起始于容器化技术前面在讲虚拟化时我们说到计算机系统的每一层都可以虚拟化其中操作系统虚拟化又称之为容器化。 容器技术属于轻量级的虚拟化它不需要虚拟出整个操作系统只需要虚拟一个小规模的环境类似“沙箱”。与虚拟化技术比较
特性虚拟机容器隔离级别操作系统级别进程级别隔离策略HypervisorGGroups系统资源5%15%0%5%启动时间分钟秒镜像存储GB~TBKB~MB集群规模上百上万高可用策略备份容灾迁移弹性负载动态 容器技术与虚拟机技术并不是互斥的而是互补的。大部分的方案是在物理机上虚化一层然后再进行容器化。 总之容器技术在性能弹性可维护性方面的优势成为云原生的基础。 (1)Docker Docker是容器化技术的佼佼者甚至是容器的代名词其实它仅是容器化技术的一个项目产品其类似的产品包括LXCRocket等。Docker项目最初是由一家名为DotCloud的平台即服务厂商所打造其后该公司更名为Docker。Docker在起步阶段使用LXC而后利用自己的Libcontainer库将其替换下来。 对于容器技术大家的方案差不多采用了CgroupNameSpace技术实现了进程级别的隔离。那为什么Docker会脱颖而出其杀手锏是采用一套高效的分层式容器镜像模型实现了高效的部署。 以ubuntu 为例分为只读层和读写层示意图如下 rootfs由多个 image 来构成ubuntu版本之间差异由之前的rootfs变成粒度更小的images对于ubuntu的不同版本来说大部分的images是可以共用的仅下载由变动的images就可以完成容器的创建和迁移大大提升了效率。 rootfs作为只读层是基石不可以被改变的。那么Docker又在其上增加读写层作为增量的修改。通过AUFS实现 rootfs 与 read-write filesystem 的合并形成一个完整的ubuntu系统。 Docker容器是云原生技术的奠基石开启了轰轰烈烈的云原生时代。
(2)CNCF CNCF(Cloud Native Computing Foundation,云原生基金会)成立于2015年12月11日是一个开源软件基金会。CNCF的成立对于云原生是个里程碑式的事件其致力于推动云原生技术的可持续发展以及帮助开发人员快速构建出色的云原生的产品。 CNCF的全景图(原图请见GitHub - cncf/landscape: The Cloud Native Interactive Landscape filters and sorts hundreds of projects and products, and shows details including GitHub stars, funding or market cap, first and last commits, contributor counts, headquarters location, and recent tweets.) 其路线路包含十个步骤也涵盖了云原生技术栈。
容器化。目前最流行的容器化技术是Docker你可以将任意大小的应用程序和依赖项甚至在模拟器上运行的一些程序都进行容器化。随着时间的推移你还可以对应用程序进行分割并将未来的功能编写为微服务。CI/CD持续集成和持续发布。创建CI/CD环境从而使源代码上的任意修改都能够自动通过容器进行编译、测试并被部署到预生产甚至生产环境中。应用编排Kubernetes。Kubernetes是目前市场上应用编排领域被最广泛应用的工具Helm Charts可以用来帮助应用开发和发布者用于升级Kubernetes上运行的应用。监控和分析。在这一步中用户需要为平台选择监控、日志以及跟踪的相关工具例如将Prometheus用于监控、Fluentd用于日志、Jaeger用于整个应用调用链的跟踪。服务代理、发现和治理。CoreDNS、Envoy和LInkerd可以分别用于服务发现和服务治理提供服务的健康检查、请求路由、和负载均衡等功能。网络。Calico、Flannel以及Weave Net等软件用于提供更灵活的网络功能。分布式数据库和存储。分布式数据库可以提供更好的弹性和伸缩性能但同时需要专业的容器存储予以支持。流和消息处理。当应用需要比JSON-REST这个模式更高的性能时可以考虑使用gRPC或者NATS。gRPC是一个通用的RPC远程调用框架类似各种框架中的RPC调用NATS是一个发布/订阅和负载均衡的消息队列系统。容器镜像库和运行环境。Harbor是目前最受欢迎的容器镜像库同时你也可以选择使用不同的容器运行环境用于运行容器程序。软件发布。最后可以借助Notary等软件用于软件的安全发布。 目前(截止2022年10月)已有18个项目从CNCF毕业分别是Kubernetes、Prometheus、Envoy、CoreDNS、Containerd、TUF、Jaeger、Fluentd、VitessHelmEtcdHarborLinkedOpen Policy AgentRookspiffespireTikv。
(3)K8S 写到这我们的主角终于闪亮登场了。Docker技术完美的解决了应用的部署和迁移一致性以及高效性的问题但是还得有人告诉它如何部署和迁移这就是容器的编排和调度也就是K8S的职责所在同时它提供了存储网络权限等一套API已经成为事实意义上的云操作系统是云原生的霸主统治者。 K8S(Kubernetes) 是 Google 于 2014 年 6 月基于其内部使用的Brog系统开源出来的容器编排调度引擎2018年经过CNCF的孵化成为第一个毕业的项目。实际上K8S的霸主之路并非一帆风顺它的问世给如日冲天的Docker形成了威胁遭到多方的绞杀经过与Swarm、Mesos 的混战之后最终胜出。其中的原因是多方面的笔者认为主要有两方面。一方面是谷歌的背书自带光环其技术的领先性以及产品的稳定性都得到了很好的保障另一方面K8S作为开源项目坚持公正公平赢得了广大开发者的支持要知道K8S的服务对象就这这群开发者得人心者得天下。 关于K8S的技术架构我们稍后将详细介绍。
(4) Serverless Serverless(无服务器技术)并不是突然兴起的时髦概念早在2014年AWS就推出Lamada服务这就是早期商用的FAAS(函数即服务)。随着容器和K8S技术的成熟使得Serverless发展走上了快车道。 Serverless并不是说不需要服务器而是包括服务器操作系统环境等基础设备完全对于开发者屏蔽了更进一步部署运维等工作也不需要开发者介入开发者唯一要做的是把业务逻辑代码写好生产力真正得到了解放。 从架构上理解ServerlessFAAS事件驱动BAAS
FAASFunction as a Service,函数即服务应用由诸多个独立的函数组成每个函数实现各自的业务逻辑。事件驱动通过事件触发的形式去完成函数的调用处理请求和响应(如定时任务/http请求...)。BAASBackend as a Service 后端即服务后端能力封装成了服务并以接口的形式提供给FaaS如数据库的增删改查等。 Serverless降低了开发运营成本其良好的扩展能力使得按需弹性算力这些优势使得Serverless被认为是云计算未来十年的趋势。各家大厂也纷纷布局包括基于K8S的Serverless平台KnativeOpenWhisk等。 算力像水电一样成为老百姓平常生活的必须品这个时代已经肉眼可见了。云计算技术也必将改变人类的未来置身于时代洪流之中同流合污拥抱变革才能实现自身价值。
三、K8S的功能 我们再回到主角K8S容器的编排和调度是K8S基本功能除此之外K8S还包括应用部署维护服务注册负载均衡弹性扩缩容扩展机制等一系列的功能套件。现在我们来逐一了解下:
1、服务编排K8S通过YAML文件声明式描述服务间的关系(亲和或者互斥)使得应用程序部署变得更高效。
2、Pod的调度pod是K8S调度的最小单位也是容器依赖的执行环境根据调度策略将pod调度到合适的节点上运行。
3、服务发现服务运行在集群中不同的节点上Service对象对外提供统一的访问IP并转发到服务。
4、负载均衡访问的流量通过kube proxy负载均衡转发请求到后端容器。
5、应用健康检查容器内服务可能进程堵塞无法处理请求可以设置监控检查策略保证应用健壮性。
6、资源监控Node节点组件集成cAdvisor资源收集工具可通过Heapster汇总整个集群节点资源数据。
7、弹性伸缩根据资源的收集数据并通过指定的指标(CPU利用率指定副本数)自动缩放Pod副本数。
8、滚动更新更新服务不中断一次更新一个Pod而不是同时删除整个服务确保服务的不中断。
9、数据卷Pod中容器之间共享数据可以使用数据卷。
10、认证和授权支持属性访问控制ABAC、角色访问控制RBAC认证授权策略。 总体而言K8S统一了云数据中心基础设施层的API成为云操作系统。我们来和单机的linux操作系统做个比较。
对比项LinuxKubernetes隔离单元进程Pod硬件单机数据中心并发线程容器资源管理进程内存CPU内存、CPU Limit/Request存储文件ConfigMap、Secret、Volume网络端口绑定Service终端tty、pty、shellkubectl exec网络安全IPtablesNetworkPolicy权限用户、文件权限ServiceAccount、RBAC
四、K8S概念
下面我们认识K8S一些重要的概念,这里有个初步印象即可后续的章节将详细介绍。
1、Node(节点) Node(节点)是kubernetes集群中的工作负载节点提供物理网络存储算力等资源。每个node都会被master分配一些工作负载docker容器。当某个node节点宕机其上面的工作负载会被master自动转移到其他的节点上。 Node可以是物理机也可以是虚拟机。K8S集群就是有Master节点和Node节点组成的Master-Node架构后面详细介绍。
2、Pod Pod是最基础也是最重要的对象是在 Kubernetes 集群中运行部署应用或服务的最小单元。它与Node以及容器之间的关系如下: 那么Node为什么不直接部署容器而中间需要有个Pod对象这就涉及到Pod支持多容器的设计理念。同一个Pod的一组容器可以共享网络和文件系统通过进程间通信和文件共享这种简单高效的方式组合完成服务对于一些强依赖的应用可以编排到一个Pod中在部署的时候组合成一个微服务对外提供服务。 比如运行一个操作系统发行版的软件仓库一个 Nginx 容器用来发布软件另一个容器专门用来从源仓库做同步这两个容器的镜像由两个团队开发但是它们一块儿工作才能提供一个微服务这种就符合Pod的多容器理念。 Pod 是 Kubernetes 集群中所有业务类型的基础可以看作运行在 Kubernetes 集群中的小机器人不同类型的业务就需要不同类型的小机器人去执行。但需要注意的是Pod是虚拟的概念并不是实际的物理组件。
3、NameSpace(命名空间) 当两个Pod划分到不同的NameSpace下它们之间默认情况下是无法访问的形成逻辑上的隔离和分组。NameSpace主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 Kubernetes 集群初始有两个命名空间分别是默认命名空间 default 和系统命名空间 kube-system除此以外管理员可以可以创建新的命名空间满足需要。
4、Replication Controller(RC,副本控制器)/Replication Set(RS,副本集) RC(副本控制器)是 Kubernetes 集群中最早的保证 Pod 高可用的 API 对象根据指定Pod的副本个数并监控运行过程中实际的副本数两者进行比较实现动态的扩缩容。 RC(副本集)可以认为是RC的升级版相比于RC能支持更多种类的Pod匹配模式。副本集对象一般不单独使用而是作为 Deployment 的理想状态参数使用。
5、Deployment(部署) 部署是K8S集群对于服务的更新操作可以是新建也可以是升级。K8S的部署采用滚动的模式即旧版本的RS逐渐减少到0新版本的RS逐渐增加到指定数的过程。 部署过程中还支持终止和回退到指定版本。
6、Service(服务) 服务部署并运行后对外提供访问服务由于Pod的IP和端口是不确定的(弹性扩缩容会导致pod对象的增删)就需要一个对象提供稳定的服务发现和负载均衡功能该对象就是Service。 在 K8 集群中客户端需要访问的服务就是 Service 对象每个 Service 会对应一个集群内部有效的虚拟 IP集群内部通过虚拟 IP 访问一个服务。 Service配合Kube proxy组件实现流量的负载均衡。
7、Job(任务) 根据服务运行的周期可以分为长服务和短服务长服务是需要一直在线的比如web服务短服务是有头有尾任务完成后可以结束的比如一次性的调用用完就可以销毁掉。Job 是 Kubernetes 用来控制批处型任务(短服务)的 API 对象任务完成后就自动退出。
8、DaemonSet(后台支撑服务集) 有些服务是和Node节点绑定的节点创建后就需要启动并运行某类pod和业务pod没有关系比如监控日志存储等。K8S为这类服务提供了DaemonSet控制器。
9、StatefulSet(有状态服务集) 服务可以分为有状态和无状态无状态是指没有上下文数据的新建的服务实例与其他的服务实例之间没有差异可以相互替代比如web服务有状态是指带有上下文数据的服务实例之间是有差异的典型的就是数据库实例比如Mysql服务分库1实例与分库2实例之间是有差异的无法相互替代。 StatefulSet是K8S为解决有状态服务而提供的管理对象。
10、Persistent Volume(PV,持久存储卷)/Persistent Volume Claim(PVC,持久存储卷声明) 如果服务需要存储支撑那么在声明该服务容器的时候需要申明所需要的存储资源这些资源的规格类型甚至位置都有不同的要求。对于开发者来说这些工作已经超过其认知范围也不会关心这些基础设施的信息这些显然是运维的工作范畴。 K8S通过PV和PVC分离了在存储配置过程中开发和运维的工作运维人员根据存储资源配置PV如存储规格的划分访问路径等开发人员根据服务申请所需的的存储资源即可(即PVC)比如需要50GB的存储空间而不需关系这些资源在哪。PV与PVC的适配就交由K8S实现了。
11、Secret(密钥对象) Secret 是用来保存和传递密码、密钥、认证凭证这些敏感信息的对象。使用 Secret 的好处是可以避免把敏感信息明文写在配置文件里。在 Kubernetes 集群中配置和使用服务不可避免的要用到各种敏感信息实现登录、认证等功能例如访问 AWS 存储的用户名密码。为了避免将类似的敏感信息明文写在所有需要使用的配置文件中可以将这些信息存入一个 Secret 对象而在配置文件中通过 Secret 对象引用这些敏感信息。
12、User Account(用户账户)/Service Account(服务帐户) 用户帐户为人提供账户标识而服务账户为计算机进程和 Kubernetes 集群中运行的 Pod 提供账户标识。用户帐户和服务帐户的一个区别是作用范围用户帐户对应的是人的身份人的身份与服务的 namespace 无关所以用户账户是跨 namespace 的而服务帐户对应的是一个运行中程序的身份与特定 namespace 是相关的。 后续的系列课程将围绕这些概念展示逐一进行详细介绍。
五、K8S架构 K8S的系统架构图如下 K8S整体上采用的是Master-Node架构Master是控制面整个集群的中枢Node为执行面负责应用的具体执行两者通过信息交互完成协作。
1、Master
Mater是整个K8S集群的大脑负责管理所有的Node,调度Pod控制运行过程中的状态。
(1)API Server API Server组件可以认为是这个大脑的办事大厅,一方面对外提供统一的访问接口另一方面各个组件之间不相互通讯都是通过API Server实现信息交互。 这种设计的好处是可以收敛统一请求进行认证、授权以及访问控制。由于API server是一个集中点也可能出现网络风暴将其击穿的风险这一点其实不用担心API server在设计的时候就考虑到弹性伸缩的问题其无状态特性决定了可以快速的扩容避免上述情况的发生。 总体来说API Server具有以下特性
将Kubernetes系统中的所有资源对象都封装成RESTful风格的API接口进行管理。可进行集群状态管理和数据管理是唯一与Etcd集群交互的组件。拥有丰富的集群安全访问机制以及认证、授权及准入控制器。提供了集群各组件的通信和交互功能。
(2) Etcd Etcd可以认为是大脑的信息仓库。是兼具一致性和高可用性的键值数据库在K8S集群中它负责数据的存储包括所有Kubernetes资源对象信息、集群节点信息运行状态信息等。
(3)Control Manager Control Manager 是大脑的总管。弹性扩缩容是云计算的核心诉求control manager(控制器管理)负责监控NodePod等资源运行的状态与期望状态之间的差异当年状态发生偏差就会尝试修复到期望状态。这种偏差的原因有服务配置的变更(比如改配置 yaml 文件中的参数)也有可能是系统异常(节点宕机)。 K8S中内置了很多类型的控制器比如前面介绍的DeploymentReplicaSet 等后面我们详细介绍。 Control Manager组件本身也具备高可用和API Server无状态不同由于其控制器的决策特性无法让所有运行的实例同时参与实际工作必须要有个Leader的实例负责控制逻辑其他的实例称之为Candidate节点作为备份当Leader实用于处理单个主机子网划分并向外部世界公开服务。它跨集群中的各种隔离网络将请求转发到正确的 pod/容器。例出现异常后Candidate节点则通过领导者选举机制参与竞选成为Leader节点继续工作。
(4)Schedule Schedule是大脑的办事员control manager负责监控差异但是调整差异到到期望状态并不是它的责任而是由Schedule(调度器)完成它负责在Kubernetes集群中为一个Pod资源对象找到合适的节点并在该节点上运行。 Schedule的调度算法分为预选和优选两种预选选择符合Pod运行的节点列表而优选则是从列表中挑选出最优的节点。 Schedule的高可用方案与Control Manager是类似的。
2、Node
Node是物理节点应用运行的实体载体其上组件包括:
(1)Kubelet Kubelet是管理节点的组件是节点的运行的代理一方面接受API server下发的任务指令并完成执行当Master节点的Schedule完成节点选择后Pod在节点上的创建工作则是由Kubelet完成另一方面监控所在节点资源的使用状态并上报给API Server组件为调度策略提供数据支撑。
(2)Kube Proxy Kube Proxy是运行在每个节点的网络代理实现 Kubernetes 服务Service 概念的一部分。 Kube Proxy维护节点上的网络规则通过iptables/ipvs等配置负载均衡器为一组Pod提供统一的TCP/UDP流量转发和负载均衡功能。
(3) Container Runtime 容器运行时负责创建容器运行环境最著名的当属Docker(不过即将被K8S废弃),containerd,以及任何实现CRI接口的runtime。
六、总结 本章节我们首先回顾了云计算的发展史经历了物理机虚拟机以及云原生的时代。整个发展的过程就是能力不断下沉生产力不断得到解放的过程。 虚拟机时代产生了VMwareOpenstack等经典的产品容器技术(特别是Docker)揭开了云原生时代幕布K8S横空出世成为事实意义上的云操作系统是当今云原生的统治者。基于容器和K8S技术Serverless技术使的生产力进一步得到解放成为未来十年云计算的发展趋势。 K8S在开发部署运维上提供一系列的概念和功能套件比如PodRSService等通过Master-Node架构整个云计算基础设施(计算存储网络)等整合并run起来。
附:
K8S初级入门系列之一-概述
K8S初级入门系列之二-集群搭建
K8S初级入门系列之三-Pod的基本概念和操作
K8S初级入门系列之四-Namespace/ConfigMap/Secret
K8S初级入门系列之五-Pod的高级特性
K8S初级入门系列之六-控制器(RC/RS/Deployment)
K8S初级入门系列之七-控制器(Job/CronJob/Daemonset)
K8S初级入门系列之八-网络
K8S初级入门系列之九-共享存储
K8S初级入门系列之十-控制器(StatefulSet)
K8S初级入门系列之十一-安全
K8S初级入门系列之十二-计算资源管理
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86777.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!