如何在Kubernetes上构建新的应用管理平台?

《K8s+Jenkins》技术笔记 前些日子从阿里的朋友那里取得这两份K8s+Jenkins的爆款技术笔记《K8S(kubernetes)学习指南》+《Jenkins持续集成从入门到精通》,非常高质量的干货,我立马收藏!噢啦~以上便是咱这两份技术笔记《K8S(kubernetes)学习指南》+《Jenkins持续集成从入门到精通》大致的内容,篇幅原因我就不必介绍的如此细致了,大部分皆以截图展现~4、Jenkins+Docker+SpringCloud微服务持续集成(上)Jenkins项目构建类型(4)-Pipeline流水线项目构建(*).. 阅读详情

【导语】云原生时代,直接使用Kubernetes和云基础设施过于复杂,如用户需要学习很多底层细节、应用管理的上手成本高、容易出错、故障频频。随着云计算的普及,不同云又有不同的细节,进一步加剧了上述问题。

本文将介绍如何在Kubernetes上构建新的应用管理平台,提供一层抽象以封装底层逻辑,只呈现用户关心的接口,使用户可以只关注自己的业务逻辑,管理应用更快更安全。

作者 | 司徒放 责编 | 田玮靖
出品 | 优快云(ID:优快云news)

云原生时代是一个非常好的时代,我们所面临的是整体技术的颠覆性革新,全面地对应用做端到端重构。目前,云原生在演进过程中产生了三个关键技术:

  • 一是容器化,容器作为标准化交互的介质,在运维效率、部署密度和资源隔离性方面相比传统方式有很大改进,据CNCF最新调研报告显示,目前已有92%的企业生产系统在使用容器;

  • 二是Kubernetes,它对基础设施进行了抽象和管理,现已成为云原生的标配;

  • 三是Operator自动化运维,通过控制器和定制资源的机制,使Kubernetes不仅可以运维无状态应用,还可以执行由用户定义的运维能力,实现更复杂的自动化运维应用进行自动化部署和交互。

这三项关键技术其实是逐渐演进的关系,另外,在应用交付领域,也有与之对应的理论在跟随上述技术不断地演进。云原生的崛起,带来了交付介质、基础设施管理、运维模型和持续交付理论的全面升级和突破,加速了云计算时代的到来。
在这里插入图片描述
图1 云原生技术全景图(来源:CNCF Landscape 2021-10,https://landscape.cncf.io/)

从CNCF发布的云原生技术全景图(见图1)中,可以看到云原生的蓬勃生态,细数图中这900+Logo,其中不乏开源项目、创业公司,未来云原生的技术都会在这些地方诞生。

云原生“操作系统”Kubernetes带来的应用交付挑战

上文提到,Kubernetes已成为云原生的标配,其对下封装基础设施的差异,对上支持各种应用的运维部署,如无状态应用、微服务,再如有状态、批处理、大数据、AI、区块链等新技术的应用,在Kubernetes上面都有办法部署。Kubernetes已经成为了现实意义的“操作系统”。它在云原生的地位正如移动设备中的Android。为什么这样讲?Android不仅仅装在我们的手机上,它还进一步渗透到汽车、电视、天猫精灵等智能终端里,移动应用可以通过Android运行在这些设备上。而Kubernetes也有这样的潜力或发展趋势,当然它不是出现在智能家电中,而是出现在各家公有云、自建机房,以及边缘集群。可以预想,Kubernetes未来会像Android一样无处不在。

那么,有了Kubernetes这层交付以后,容器+Kubernetes这层界面是不是就可以解决掉所有的交付问题了?答案肯定不是。试想,如果我们的手机中只有Android系统,它能够满足我们工作和生活需求吗?不能,必须有各种各样的软件应用才行。对应到云原生,它除了Kubernetes这个“操作系统”外,也需要一套应用的交付能力。在手机中,软件应用可以通过类似“豌豆荚”这样的应用以便用户安装,同样在云原生时代,我们也需要将应用部署到不同的Kubernetes集群上。但由于Kubernetes海量琐碎的设施细节与复杂各异的操作语言,导致部署过程中会遇到各种各样的问题,这时就需要云原生的“豌豆荚”来解决这个问题,也就是应用管理平台,去屏蔽交付的复杂性。

应用管理平台在业界有两种主流模式,第一种是传统平台模式,在Kubernetes上“盖一个大帽子”,将所有复杂度屏蔽,在此之上,再根据需求自己提供一层简化的应用抽象。通过这种方式,虽然应用平台变得易用了,但新的能力需要由平台开发实现,也就带来了扩展难、迭代缓慢的问题,无法满足日益增长的应用管理诉求。

另一种解法是容器平台模式。这种模式比较云原生,组件是开放的,扩展性强,但是,它缺乏应用层的抽象,导致了很多问题,比如开发者学习路线陡峭。举个例子,当一个业务开发者把自己的代码提交到应用平台时,他需要写Deployment部署应用、写Prometheus规则配置监控、写HPA设置弹性伸缩,写Istio规则控制路由等,这些都不是业务开发希望去做的。

所以,不论是哪种解法,都有优缺点,需要取舍。那么,到底怎么做才能封装平台的复杂性,还能拥有良好的扩展性?这是我们一直在探索的。

通过应用管理平台,屏蔽云原生应用交付的复杂性

2012年,阿里巴巴已经开始做容器化相关的调研,起初主要是为了提高资源利用率,开始了自研容器虚拟化技术之路。随着应对大促的机器资源量不断增多,在2015年开始采用容器的混合云弹性架构,并使用阿里云的公有云计算资源,支撑大促流量高峰。这也是阿里巴巴做云原生的早期阶段。

转折发生在2018年,阿里巴巴的底层调度采用开源的Kubernetes后,我们从面对虚拟机的脚本化安装部署模式,转变为基于标准的容器调度系统部署应用,全面推进阿里巴巴基础设施的Kubernetes升级。但很快,新的问题就出现了:应用平台没有标准、不统一,大家“各自为政”。

因此,我们在2019年携手微软发布了开放应用模型——OAM(Open Application Model),并开始做OAM平台化改造。一切都比较顺利,2020年OAM的实现引擎KubeVela正式开源,在内部推进多套应用管理平台基于OAM和KubeVela演进。并推动了三位一体战略,不仅阿里内部的核心系统全面使用这套技术,而且在面向客户的商业化云产品以及在开源时,都使用同样的技术。通过全面拥抱开源,让整个OAM和KubeVela社区参与共建。

在这段探索历程中,我们走了不少弯路,也累积了许多踩坑经验,接下来将作具体介绍,同时分享KubeVela的设计原理和使用方法,帮助开发者了解云原生应用管理平台的完整解决方案,提高应用开发者的使用体验和应用交付效率。

云原生应用管理平台的解决方案

在探索云原生应用管理平台解决方案的过程中,我们主要遇到4项重大挑战,并总结了4个基本原则,下文将一一介绍。

挑战1:不同场景的应用平台接口不统一,重复建设。

虽然,云原生有了Kubernetes系统,但在不同场景它会构建不一样的应用平台,且接口完全不统一,交付能力存在很大差异,比如AI、中间件、Serverless和电商在线业务都有各自不同的服务平台。因此,在构建应用管理平台时,难免重复开发和重复运维。最理想的状况当然是实现复用,但运维平台架构模式各有不同,没办法做到互通。另外,业务开发者在不同场景对接应用交付时,对接的API完全不同,交付能力存在很大差异。这是我们遇到的第一个挑战。

挑战2:“面向终态”无法满足过程式的交付方式。

在云原生时代,面向终态的设计很受欢迎,因为它能减少使用者对实现过程的关心。使用者只需要描述自己想要什么,不需要详细规划执行路径,系统就能自动把事情做好。但在实际使用过程中,交付过程通常需要审批、暂停观察、调整等人为干预。举个例子,我们的Kubernetes系统在交付过程中处于强管护的状态,要审批发布。在《阿里集团变更管理规范》中明确“线上变更,前 x 个线上生产环境批次,每个批次变更后观察时间应大于y分钟。”“必须先在安全生产环境(SPE)内进行发布,只有在SPE验证无问题后,才能在线上生产环境进行灰度发布。”因此,应用交付是一个面向过程而非面向终态的执行流程,我们必须考虑,怎样让它更好地适应面向过程的流程。

挑战3:平台能力扩展复杂度太高。

上文提到,传统模式下的应用平台扩展性差,那么在云原生时代,有哪些常见扩展平台的机制?在Kubernetes系统中,可以直接用Go Template等模板语言做部署,但缺点是灵活性不够,整个模板写下来结构复杂,难以做大规模的维护。有些高手可能会说“我可以自定义一套Kubernetes Controller,扩展性一定很好!”没错,但是,了解Kubernetes及CRD扩展机制的人比较少。即使高手把Controller写出来了,他还有后续的许多工作要做,比如需要编译并将其安装在Kubernetes上运行,另外,Controller数量也不能一直这样膨胀上去。因此,要想做一个高可扩展的应用平台有很大挑战。

挑战4:不同环境不同场景,交付差异巨大。

在应用交付过程中,对于不同用途的环境,其运维能力差异特别大。比如开发测试环境,重视开发和联调效率,每次修改采用热加载,不重新打包、走镜像部署的一套流程,同时为开发人员部署按需创建的独立环境。再比如预发联调环境,有攻防演练、故障注入的日常运维诉求。以及在生产环境,需要加入安全生产、服务高可用方面的运维能力。此外,同一个应用,组件依赖也有巨大差异,数据库、负载均衡、存储,在不同云上存在诸多差异。

针对以上四项挑战,我们总结了现代应用管理平台的4点核心设计原则:

  1. 统一的、基础设施无关的开放应用模型。

  2. 围绕工作流的声明式交付。

  3. 高度可扩展,易编程。

  4. 面向混合环境的设计。

原则1:统一的、基础设施无关的开放应用模型。

怎样提炼统一的、基础设施无关的开放应用模型呢?以开放应用模型,即OAM为例,首先,它的设计非常简单,且能够大幅简化我们对管理平台的使用:原来使用者要面对上百个API,OAM将其抽象成4类交付模型。其次,OAM从业务开发者视角描述要交付的组件,要用到的运维能力和交付策略,由平台开发者提供运维能力和交付策略的实现,从而对开发者屏蔽基础设施细节与差异性。通过组件模型,OAM可以用来描述容器、虚拟机、云服务、Terraform 组件、Helm等制品。
在这里插入图片描述
图2 用开放应用模型描述的一个应用交付示例

如图2,这是用OAM描述的一个KubeVela应用交付示例,里面包含上述4类模型。首先,要描述一个应用部署时包含的待交付组件(Component),一般是镜像、制品包、云服务等形式;其次,要描述应用部署后用到的运维能力(Trait),比如路由规则、自动扩缩容规则等,运维能力都作用于组件上;再次,是交付策略(Policy),比如集群分发策略、健康检查策略、防火墙规则等,任何一个部署前需要遵守的规则都可以在这个阶段声明和执行;最后,是工作流(Workflow)的定义,比如蓝绿部署、带流量的渐进式部署、手动审批等任意的管道式持续交付策略。

原则2:围绕工作流做声明式的交付。

上面4类模型中最核心的是工作流,应用交付本质上是一次编排,将组件、运维能力、交付策略、工作流步骤等按顺序定义在一个有向无环图DAG里面。
在这里插入图片描述
图3 KubeVela 通过工作流编排应用交付的示例

举个例子,应用交付前的第一步,比如安装系统部署依赖、初始化检查等,通过交付策略描述并在交付最开始的时候执行;第二步是依赖的部署,比如应用依赖了数据库,我们可以通过组件创建相关的云资源,也可以引用一个已有的数据库资源,将数据库连接串作为环境参数注入到应用环境中;第三步是用组件部署应用本身,包括镜像版本、开放端口等;第四步是应用的运维能力,比如设置监控方式、弹性伸缩策略、负载均衡等;第五步是在线上环境插入一个人工审核,检查应用启动是否有问题,人工确认没问题之后再继续让工作流往下走;第六步是将剩下的资源并行部署完,然后通过钉钉消息做回调,将部署完的消息告诉开发人员。这就是我们在真实场景中的交付流程。

这个工作流最大的价值在于,它把一个复杂的、面向不同环境的交付过程通过标准化的程序,较为规范地描述了出来。

原则3:高度可扩展、易编程。

我们一直希望能够像乐高积木一样构建应用模块,平台开发者可以使用平台的业务开发轻松扩展应用平台的能力。但前文提到,用模板语言这种方式,灵活性不够、扩展性不足,而写 Kubernetes Controller又太复杂、对开发者的专业能力要求极高。那怎么才能既有高度可扩展性,又有编程的灵活性?我们最后借鉴了谷歌Borg的CUElang,这是一个适合做数据模板化、数据传递的配置语言。它天然适合调用Go语言,很容易与Kubernetes生态融合,具备高灵活性。而且CUElang是动态配置语言,不需要编译发布,响应速度快,只要将规则发布到Kubernete,就立马生效。
在这里插入图片描述
图4 KubeVela动态扩展机制

以KubeVela的动态扩展机制为例,平台开发者编写完Web服务、定时任务等组件模板,以及弹性伸缩、滚动升级等运维能力模板后,将这些能力模板(OAM X-Definition)注册到对应的环境。KubeVela根据能力模板内容将能力运行时需要的依赖安装到对应环境的集群上。此时,应用开发者就可以使用平台开发者刚才编写的这些模板,他通过选择组件和运维能力构建出一个应用Application yaml,并将yaml发布到KubeVela控制面上。KubeVela通过Application yaml编排应用,运行对应选取的能力模板,最终把应用发布到Kubernetes集群中。整个从能力定义、应用描述,到最终完成交付的过程就完成了。

原则4:面向混合环境的设计。

在KubeVela设计之初,我们就考虑到未来可能是在混合环境(混合云/多云/分布式云/边缘)中做应用的交付,且不同环境、不同场景的交付差异较大。我们做了两件事。第一,将KubeVela控制平面完全独立,不入侵业务集群。可以在业务集群中使用任何来自社区的Kubernetes插件运维和管理应用,由KubeVela负责在控制平面管理和操作这些插件。第二,不使用KubeFed等会生成大量联邦对象的技术,而是直接向多集群进行交付,保持和单集群管理一致的体验。通过集成OCM/Karmada等多容器集群管理方案支持Push和Pull模式。在中央管控、异构网络等场景下,KubeVela可以实现安全集群治理、环境差异化配置、多集群灰度发布等能力。

以阿里云内部边缘计算产品的方案为例,开发人员只需将编写的镜像和KubeVela的文件直接发布到KubeVela控制平面,控制平面会将应用组件分发到中心托管集群或边缘集群。边缘集群可以采用OpenYurt等边缘集群管理方案。因为KubeVela是多集群统一的控制平面,所以它可以实现应用组件的统一编排、云-边集群差异配置,以及汇聚所有底层的监控信息,实现统一可观测和绘制跨集群资源拓扑等目的。

总结

总的来说,上述4个KubeVela核心设计原则可以简单囊括为:

  1. 基于OAM抽象基础设施底层细节,用户只需要关心4个交付模型。
  2. 围绕工作流的声明式交付,工作流无需额外启动进程或容器,交付流程标准化。
  3. 高度可扩展、易编程:将运维逻辑用CUE语言代码化,比模板语言更灵活,比写Controller简单一个量级。
  4. 面向混合环境的设计,提供环境和集群等围绕应用的概念抽象,统一管控所有应用依赖的资源 (包含云服务等)。

在这里插入图片描述
图5 KubeVela在阿里云原生基础设施的位置

目前,KubeVela已经成为阿里云原生基础设施一部分。从图5可见,我们在Kubernetes之上做了很多扩展,包括资源池、节点、集群管理能力,对工作负载和自动化运维能力也做了很多支持。KubeVela在这些能力之上做了一层统一的应用交付和管理层,以便集团业务能够适用不同场景。

未来云原生将如何演进呢?回顾近十年的云原生发展,一个不可逆转的趋势是标准化界面不断上移。为什么?从2010年左右云计算崭露头角到如今站稳脚跟,云的算力得到普及;2015年前后容器大范围铺开,带来了交付介质的标准化;2018年左右,Kubernetes通过对集群调度和运维抽象,实现了基础设施管理的标准化;近两年Prometheus和OpenTelemetry逐渐让监控走向统一,Envoy/Istio等Service Mesh技术在让流量管理更加通用。从这些云原生发展历程中,我们看到了云原生领域技术碎片化和应用交付复杂性的问题,提出开放应用模型OAM并开源KubeVela试图解决这个问题。我们相信,应用层标准化将是云原生时代的趋势。

作者介绍:司徒放,花名“姬风”,阿里云资深技术专家,阿里云应用PaaS及Serverless产品线负责人。2010年加入阿里巴巴后一直深度参与服务化和云原生架构的多次跨代演进,如链路跟踪、容器虚拟化、全链路压测、异地多活、中间件云产品化、云原生上云等。负责并主导了阿里巴巴在微服务、可观测性、Serverless等领域的开源技术和商业化产品建设,致力于通过云原生技术,为外部企业提供成熟稳定的互联网架构解决方案和产品。参与或主导设计的开源项目包括KubeVela、Spring Cloud Alibaba、Apache Dubbo、Nacos等。

KubeSphere 是一款基于 Kubernetes 构建的开源容器混合云平台,它为企业提供了在 Kubernetes 之上的分布式应用管理的全栈化解决方案,以下是关于它的详细介绍: KubeSphere 是构建在 Kubernetes 之上的,它依赖于 Kubernetes 提供的容器编排、资源管理等核心功能。Kubernetes 作为底层的容器编排引擎,负责管理容器的生命周期、调度和资源分配等基础操作。而 KubeSphere 则在 Kubernetes 的基础上,增加了更多的功能和特性,如可视化界面、多租户管理、应用生命周期管理、微服务治理等,为用户提供了一个更加完整和易用的容器云平台解决方案。 阅读详情

相关推荐

不用公网IP,如何在内网高效搭建RustDesk远程控制服务器?基于Windows Server 2019的完整实践

本文详细介绍了在Windows Server 2019上部署RustDesk远程控制服务器的完整实践方案,无需公网IP即可实现内网高效远程控制。从环境准备、基础服务安装到网络与安全配置,提供了零成本的私有化部署指南,适用于企业、校园等内网环境。

weixin_28737073的博客 455

k8s 部署android实例

环境: root@k8s-master:~/work/ingress-controller/1.1.1/test/deployment/android-x86# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTI

唐顺才的博客 5034

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1799

【CN】项目介绍

Nginx的关键词是Web服务器和反向代理,Envoy是透明接管流量,更加体现对流量的控制和掌控力。Open Policy Agent (OPA) 于 2018 年 3 月 29 日被 CNCF 接受,于 2019 年 4 月 2 日转至孵化成熟度级别,然后于 2021 年 1 月 29 日转至毕业成熟度级别。Falco 于 2018 年 10 月 10 日被 CNCF 接受,于 2020 年 1 月 8 日转至孵化成熟度级别,然后于 2024 年 2 月 29 日转至毕业成熟度级别。

琴韵悠悠 1277

让Claude连续写代码24小时会发生什么?揭秘长时运行”架构背后的工程逻辑与未来

AI长时运行实验揭示软件开发新范式 Claude Opus通过Harness框架24小时独立开发全栈应用的成功实验,展示了AI从辅助工具向异步协作者的进化。实验采用"上下文轮转"机制解决记忆管理难题,将任务拆解为微周期并通过文件系统同步进度。核心突破在于:1)TDD成为AI自治基石,200+测试用例确保开发不偏航;2)文件取代对话成为AI间高效沟通介质;3)开发者角色重构为需求定义和框架设计者。该实验证明,通过严谨的架构约束和验收标准,AI可完成复杂长周期任务,预示着软件开发将从手工作坊

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1094

全球半导体设备氧化钇熔射服务行业规模预测:预计未来六年CAGR为7.8%

本文将对“半导体设备氧化钇熔射服务”行业进行深度分析,探讨市场趋势的演变、核心竞争者的战略布局、供应链结构的内外特点、研发创新的最新进展、法规政策环境的适应性调整以及投资机会与风险评估。这一稳健的增长趋势表明半导体设备氧化钇熔射服务在电子行业中的重要性逐渐增强。由于全球对于高效、高精度和可靠的电子解决方案的需求增加,对能够提供这些功能的半导体设备氧化钇熔射服务的需求日益增长。由于半导体设备氧化钇熔射服务主要为就地服务型,其“配送”主要依赖于专业团队和技术设备的及时调配,强调服务的时效性和高质量。

CC1239777的博客 571

Kubernetes 已经成为云原生时代的安卓,这就够了吗?

作者:司徒放 审核&校对:田玮靖、溪洋 编辑&排版:雯燕 导语: 云原生时代,直接使用 Kubernetes 和云基础设施过于复杂,如用户需要学习很多底层细节、应用管理的上手成本高、容易出错、故障频频。随着云计算的普及,不同云又有不同的细节,进一步加剧了上述问题。 本文将介绍如何在 Kubernetes 上构建新的应用管理平台,提供一层抽象以封装底层逻辑,只呈现用户关心的接口,使用户可以只关注自己的业务逻辑,管理应用更快更安全。 云原生时代是一个非常好的时代,我们所面临的是整体技术的颠覆性革

阿里巴巴云原生的博客 283

Autosar进阶专栏索引

Autosar进阶专栏索引

赞的博客 3545

什么是应用管理与运维平台(ServiceStage)?

什么是应用管理与运维平台(ServiceStage)? 更新时间:2020/07/15 GMT+08:00 查看PDF 分享 应用管理与运维平台(ServiceStage)是一个应用托管和微服务管理平台,可以帮助企业简化部署、监控、运维和治理等应用生命周期管理工作。ServiceStage面向企业提供微服务、移动和Web类应用开发的全栈解决方案,帮助您的各类应用轻松上云,聚焦业务创新,帮助企业数字化快速转型。 图1ServiceStage产品功能 应用开发 ServiceStage提供了丰..

荒野求生的博客 2587

【25届数字IC秋招总结】面试经验10——紫光同芯

25届数字ic面试记录——紫光同芯

lalala0635的博客 863

Android 13 SPRD 源码默认打开多用户实际无效果问题修复

【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。

m0_60898338的博客 449

云原生的五大趋势,K8s安卓化位列其一

简介:Kubernetes 本身并不直接产生商业价值,你不会花钱去购买 Kubernetes 。这就跟安卓一样,你不会直接掏钱去买一个安卓系统。Kubernetes 真正产生价值的地方也在于它的上层应用生态。“未来的软件一定是生长于云上的”,这是云原生理念的最核心假设。而所谓“云原生”,实际上就是在定义一条能够让应用最大程度利用云的能力、发挥云的价值的最佳路径。因此,云原生其实是一套指导软件架构设计的思想。按照这样的思想而设计出来的软件:首先,天然就“生在云上,长在云上”;其次,能够最大化地发挥云的能力,使

阿里云开发者 2465

PCL点云算法与项目实战案例汇总(长期更新)

本专栏将深入探讨PCL(点云库)的基础算法,旨在帮助读者掌握点云处理的核心技术。内容涵盖点云的采样、过滤、配准、分割等基础操作,并结合实际案例,展示这些算法在工程中的应用。无论你是初学者还是有一定经验的开发者,都能通过本专栏加深对PCL的理解,提升在三维数据处理领域的技能。

纵马踏花向自由 3008

基于K8s与OAM构建统一 标准化的应用管理平台

2020 年 7 月 22 日上午 10:00,《基于 Kubernetes 与 OAM 构建统一、标准化的应用管理平台》主题线上网络研讨会即将召开。 7 月 22 日网研会邀您参与 题目:《基于 Kubernetes 与 OAM 构建统一、标准化的应用管理平台》 时间:7 月 22 日上午 10:00 语言:中文 【议题介绍】 本次网研会将以中文进行,在本次演讲中,我们将分享基于 Kubernetes 构建应用管理平台的各种实践与背后的原则。我们将尝试基于我们从整个社..

数据库技术 1039

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何基于K8S打造轻量级PaaS平台

4月23日天云软件技术开放日已圆满落幕,接下来几天将陆续放出沙龙期间技术大牛们的干货分享现场实录及相关文件,敬请关注。此文为第2篇,由天云软件CTO牛继宾给大家带来名为“如何基于K8S打造轻量级PaaS平台”的精彩分享,以下为演讲实录。牛继宾:大家下午好,我从几个角度介绍一下PaaS平台。我们把天云软件基于K8S与Docker构建轻量级平台叫做ECP,就是弹性计算平台。我们知道刚才马俊讲的CMP,

容器技术爱好者 3万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

CentOS 7 构建Kubernetes集群

kubernetes概述 kubernetes简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制 ------来源百度百科 附:kubernetes和OpenStack的区别 kubernetes:k8s是管理container(容器)的云平台 OpenStack:Open

qq_45631844的博客 435

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Kubernetes架构:构建容器化应用的可扩展管理平台

Kubernetes是一款用于容器编排和管理的开源工具,其架构设计具有高度可扩展性和弹性。本文将介绍Kubernetes的架构,包括Master节点和Worker节点的角色和功能,以及它们之间的交互方式,帮助读者更好地理解Kubernetes的工作原理。

DTCloud 374

作为测试你连K8S都不懂,你还有脸说自己是测试?

是用 8 代替中间 8 个字符 “ubernete” 而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。对于中小型企业,为了降本增效,使用 k8s 来构建一套自动化运维平台,提供了应用部署,规划,更新,维护的一种机制。现在服务器越来越多,不可能都人工部署,需要使用自动化的运维平台来监控服务,来实现自动服务化的部署、运维。

hlsxjh的博客 858

【Rancher】Rancher & K8s

简单来说,K8s 为企业提供了一种一致的方式来管理任何计算基础架构,Rancher 则是用于管理位于任何位置的 Kubernetes 集群的完整平台。如果用户是自己手动部署 K8s 集群,流程还是比较复杂的,需要掌握一定的技术知识,所以为了简化 Kubernetes 操作,一些 Kubernetes 管理平台应运而生,例如 Rancher。

Data · Model · Agent · Repeat 1037

centos7 下google Kubernetes(k8s)集群安装部署

centos7 下google Kubernetes(k8s)集群安装部署简介安装环境安装前准备ECTD集群配置命令含义:master节点配置1.安装kubernetes和etcd2.修改ectd配置文件nodes节点配置1.分别在两台node节点上安装部署kubernetes-node、etcd、flannel、docker2.修改etcd配置文件更新etcd系统默认配置:启动/停止ectd服务...

举个栗子の不容易的博客 1万+

Kubernetes(K8s):容器编排与管理的强大利器

Kubernetes(K8s)作为一款领先的容器编排和管理平台,为现代应用的部署、运行和管理提供了全方位的支持。它涵盖了从应用部署到资源管理、服务发现等多个关键领域,极大地简化了容器化应用的生命周期管理。本文将详细探讨 K8s 的核心功能及其应用示例。

m0_57836225的博客 338

kubesphere_kubesphere: KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器管理平台,支持部署和运行在任何基础设施之上,提供简单易用的操作界面以及...

KubeSphere 容器平台KubeSphere 是什么KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的 容器混合云,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。KubeSphere 愿景是打造一个基于 Kubernet...

weixin_30704909的博客 695

Kubernetes(k8s)容器编排概述

目录 1 k8s 是什么 2 K8s的由来 2.1 K8s发展历程 2.2 发展时间线 3 为什么使用k8s 3.1 什么是容器 3.2 什么是 Kubernetes 3.3 K8s 的著名优势特色 3.3.1 一个平台搞定所有 3.3.2 云环境无缝迁移 3.3.3 高效的利用资源 3.3.4 开箱即用的自动缩放能力 3.3.5 使 CI/CD 更加简单 3.3.6 可靠性 4 核心概念 4.1 节点 4.1.1 Master 节点 4.1.2 Node 4.2 Pod 4.3 Label

赵广陆 3607

【从零到生产级】:手把手带你部署基于K8s的云原生应用平台

掌握云原生应用部署全流程,本云原生实战教程带你从零搭建基于Kubernetes的生产级平台。涵盖容器化部署、服务编排与CI/CD集成,适用于微服务架构落地。方法实用、步骤清晰,值得收藏。

PoliVein的博客 1060

Kubernetes(K8s)学习笔记

Kubernetes(简称K8s)是一个开源的容器编排和管理平台,由Google主导开发,旨在自动化容器化应用程序的部署、扩展和管理。K8s以其强大的功能、高度的可扩展性和广泛的社区支持,已成为现代云原生应用架构的核心组件。Kubernetes是一个功能强大且复杂的容器编排平台,它提供了丰富的功能和灵活的架构,能够满足各种应用场景的需求。通过不断学习和实践,你可以逐步掌握K8s的核心概念和操作技巧,为构建高效、可扩展的云原生应用打下坚实的基础。:K8s是一个快速发展的项目,不断有新的功能和改进。

m0_62458145的博客 1538

探索 Kubernetes 管理新境界:kubemanage

探索 Kubernetes 管理新境界:kubemanage kubemanagekubemanage是使用go+vue3开发的一款云原生运维平台,功能包括但不限于Kubernetes多集群管理、CMDB、Devops,可作为企业二次开发的模板,新手入门的学习项目项目地址:https://gitcode.com/gh_mirrors/ku/kubemanage 在一个快速发展的云原生时代,Kub...

gitblog_00028的博客 645
上一篇: 开发者关心的十个数据库技术问题
下一篇: 当智能汽车变成一个超级计算机,传统车厂还有机会吗?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值