前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用rudr构建云原生应用程序

使用rudr构建云原生应用程序

作者头像
有点技术
发布于 2020-07-14 06:55:28
发布于 2020-07-14 06:55:28
1K00
代码可运行
举报
文章被收录于专栏:有点技术有点技术
运行总次数:0
代码可运行

介绍

OAM是构建云原生应用程序的规范 专注于分离开发和运营需求,Open Application Model将模块化, 可扩展和可移植的设计引入到Kubernetes等平台上,以构建和交付应用程序。

rudr是开放应用模型规范(oam)的Kubernetes实现,允许用户轻松地在任何Kubernetes集群上部署和管理应用程序, 而无需担心应用程序开发人员和运营商的问题

Rudr目前处于Alpha状态。它可能反映了我们纳入Open App Model规范之前正在审查的API或功能

创建云原生应用程序并不难

用户希望专注于轻松地描述和构建应用程序, 但是使用Kubernetes直接实现这一点很复杂。从本质上讲,容器编排平台将应用程序原语与基础结构原语密不可分。开发人员和操作人员等不同角色必须彼此关注彼此域中的问题,以便了解底层基础结构的整体情况。深入了解容器基础架构的要求为应用程序部署和管理引入了以下问题

  • 没有针对云原生应用程序的标准定义,这使用户难以寻找更简便的现代化方法。
  • 有许多工具和方法可以完成任务。一方面,这是积极的,因为它使用户可以自由选择自己的路径。但是,对于正在寻找自以为是的方式的用户而言,这是一个机会
  • 在基础设施运营商,应用程序运营商和开发人员之间很难明确区分角色。用户接触到其域外的结构,他们必须学习这些结构才能完成日常任务

方法:让我们一次迈出一步

  • 这使应用程序开发人员可以专注于构建OAM组件,应用程序运营商可以通过OAM应用程序配置来专注于运营功能,而基础架构运营商可以专注于Kubernetes
  • 通过利用开放应用程序模型,用户现在拥有一个框架,可以在其Kubernetes集群上定义其应用程序
  • 目前,Rudr将利用已定义的特征来完成任务。这样就可以自由使用用户想要的任何基础工具,同时提供着重于功能而不是技术的特征。将来,Rudr可能会提供一组默认技术来提供特征所需的功能。

从头开始创建应用

在本教程中,我们将构建一个用Python编写的简单Web应用程序组件, 您可以将其用于测试。它读取一个环境变量TARGET并显示"Hello $ {TARGET}!"。如果未指定TARGET,它将使用"world"作为TARGET

先决条件

  • 现有的k8s集群,当前支持1.15以上版本

安装rudr

安装rudr,kubectl,helm
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/oam-dev/rudr.gitcurl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gztar xf helm-v3.0.0-linux-amd64.tar.gzcp helm /usr/local/bin/helmhelm install rudr ./charts/rudr --wait --set image.tag=v1.0.0-alpha.1
验证安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get crds -l app.kubernetes.io/part-of=core.oam.devkubectl get deployment rudr

升级rudr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm upgrade rudr charts/rudr

卸载rudr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm delete rudr

这样删除将保留CRD,可以通过以下命令删除CRD

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl delete crd -l app.kubernetes.io/part-of=core.oam.dev

安装具体特性的实现

Rudr提供了多个特征,包括入口和自动缩放器。但是,它不会安装其中一些的默认实现。这是因为它们映射到可由不同控制器实现的原始Kubernetes功能。查找符合您的特征的实现的最佳位置是Helm Hub。

手动缩放

手动缩放没有外部依赖性

ingress

要成功使用ingress特性,您将需要安装Kubernetes入口控制器之一。我们建议使用nginx-ingress。

  • 首先,将稳定版本库添加到您的Helm安装中。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
  • 使用Helm 3安装NGINx ingress
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install nginx-ingress stable/nginx-ingress

您仍然还必须管理DNS配置。如果您也无法控制example.com的域映射,则无法将入口映射到example.com。

使用rudr

一旦安装了Rudr,就可以开始创建和部署应用程序。部署应用程序的第一步是部署其组成组件。在部署组件的父应用程序之前, 该组件实际上不会运行。但是,必须先部署它,然后再部署应用程序

首先,安装示例组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl apply -f examples/helloworld-python-component.yaml

该组件声明了一个用Python编写的简单Web应用程序。您可以阅读Scratch文档中的创建组件以了解我们如何构建它。之后,您可以使用kubectl列出所有可用的组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get componentschematicsNAME              AGEhelloworld-python-v1   14s

您可以查看单个组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get componentschematic helloworld-python-v1 -o yamlapiVersion: core.oam.dev/v1alpha1kind: ComponentSchematicmetadata:  creationTimestamp: "2019-10-08T13:02:23Z"  generation: 1  name: helloworld-python-v1  namespace: default  resourceVersion: "1989944"  ...spec:  containers:  - env:    - fromParam: target      name: TARGET# ... more YAML

查看Trait

Rudr提供了一种在安装时附加操作功能的方法。这使应用程序操作有机会在安装时提供自动缩放,缓存或入口控制等功能,而无需开发人员更改组件中的任何内容。您还可以列出Rudr上可用的特征:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get traitsNAME            AGEautoscaler      19mingress         19mmanual-scaler   19mvolume-mounter  19m

您可以像研究组件一样查看单个特征:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get trait ingress -o yamlapiVersion: core.oam.dev/v1alpha1kind: Traitmetadata:  creationTimestamp: "2019-10-02T19:57:37Z"  generation: 1  name: ingress  namespace: default  resourceVersion: "117813"  selfLink: /apis/core.oam.dev/v1alpha1/namespaces/default/traits/ingress  uid: 9f82c346-c8c6-4780-9949-3ecfd47879f9spec:  appliesTo:  - core.oam.dev/v1alpha1.Server  - core.oam.dev/v1alpha1.SingletonServer  properties:  - description: Host name for the ingress    name: hostname    required: true    type: string  - description: Port number on the service    name: service_port    required: true    type: int  - description: Path to expose. Default is '/'    name: path    required: false    type: string

上面描述了一种Trait,该Trait将入口附加到组件上,处理到该应用的流量路由

安装应用程序配置

当您准备尝试安装某些产品时,请查看examples/first-app-config.yaml, 它显示了应用了单个trait的基本应用程序配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: core.oam.dev/v1alpha1kind: ApplicationConfigurationmetadata:  name: first-appspec:  components:    - componentName: helloworld-python-v1      instanceName: first-app-helloworld-python-v1      parameterValues:        - name: target          value: Rudr        - name: port          value: '9999'      traits:        - name: ingress          parameterValues:            - name: hostname              value: example.com            - name: path              value: /            - name: service_port              value: 9999

这是一个应用程序的示例,该应用程序由单个组件组成,该组件的入口特征为example.com,服务端口为9999。

要安装此应用程序配置,请使用kubectl:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl apply -f examples/first-app-config.yamlconfiguration.core.oam.dev/first-app created

您需要等待一两分钟才能完全部署它。在幕后,Rudr正在创建所有必要的对象。完全部署后,您可以看到您的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get configurationsNAME        AGEfirst-app   4m23s$ kubectl get configuration first-app -o yamlapiVersion: core.oam.dev/v1alpha1kind: ApplicationConfigurationmetadata:  annotations:     ...  creationTimestamp: "2019-10-08T12:39:07Z"  generation: 6  name: first-app  namespace: default  resourceVersion: "2020150"  selfLink: /apis/core.oam.dev/v1alpha1/namespaces/default/applicationconfigurations/first-app  uid: 2ea9f384-993c-42b0-803a-43a1c273d291spec:  components:  - instanceName: first-app-helloworld-python-v1    componentName: helloworld-python-v1    parameterValues:    - name: target      value: Rudr    - name: port      value: "9999"    traits:    - name: ingress      parameterValues:      - name: hostname        value: example.com      - name: path        value: /      - name: service_port        value: 9999status:  components:    helloworld-python-v1:      deployment/first-app-helloworld-python-v1: running      ingress/first-app-helloworld-python-v1-trait-ingress: Created      service/first-app-helloworld-python-v1: created  phase: synced

访问web服务

在不同平台上,访问Web应用程序的方式可能有所不同 让我们使用端口转发通过运行以下命令来帮助我们获取应用程序URL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export POD_NAME=$(kubectl get pods -l "oam.dev/instance-name=first-app-helloworld-python-v1,app.kubernetes.io/name=first-app" -o jsonpath="{.items[0].metadata.name}")echo "Visit http://127.0.0.1:9999 to use your application"kubectl port-forward $POD_NAME 9999:9999

kubectl port-forward 命令将阻塞并处理您的请求。

您将获得以下输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hello Rudr!

升级应用程序配置文件

现在,我们已经成功安装了Web应用程序并检查了结果,该应用程序运行良好。但是总有一天,操作员可能需要更改某些内容。例如:

  • hostname:可能是因为与其他应用程序发生冲突,假设我们将主机名更改为oamexample.com。
  • env(target): 假设我们将目标的值更改为World,这可能代表一些正常的更新情况

更改应用程序配置文件

因此,您可以如下更改first-app-config.yaml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: core.oam.dev/v1alpha1kind: ApplicationConfigurationmetadata:  name: first-appspec:  components:    - componentName: helloworld-python-v1      instanceName: first-app-helloworld-python-v1      parameterValues:        - name: target-         value: Rudr+         value: World        - name: port          value: '9999'      traits:        - name: ingress          parameterValues:            - name: hostname-             value: example.com+             value: oamexample.com            - name: path              value: /            - name: service_port              value: 9999

应用更改的文件

再次,我们应用这个yaml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl apply -f examples/first-app-config.yamlapplicationconfiguration.core.oam.dev/first-app configured

检查更新的应用

然后先检查应用的Yaml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get configuration first-app -o yamlapiVersion: core.oam.dev/v1alpha1kind: ApplicationConfigurationmetadata:  annotations:    ...  creationTimestamp: "2019-10-08T12:39:07Z"  generation: 9  name: first-app  namespace: default  resourceVersion: "2022598"  selfLink: /apis/core.oam.dev/v1alpha1/namespaces/default/applicationconfigurations/first-app  uid: 2ea9f384-993c-42b0-803a-43a1c273d291spec:  components:  - instanceName: first-app-helloworld-python-v1    componentName: helloworld-python-v1    parameterValues:    - name: target      value: World    - name: port      value: "9999"    traits:    - name: ingress      parameterValues:      - name: hostname        value: oamexample.com      - name: path        value: /      - name: service_port        value: 9999status:  components:    helloworld-python-v1:      deployment/first-app-helloworld-python-v1: running      ingress/first-app-helloworld-python-v1-trait-ingress: Created      service/first-app-helloworld-python-v1: created  phase: synced

您可以看到字段已更改。

再次,通过运行以下命令获取应用程序URL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export POD_NAME=$(kubectl get pods -l "oam.dev/instance-name=first-app-helloworld-python-v1,app.kubernetes.io/name=first-app" -o jsonpath="{.items[0].metadata.name}")echo "Visit http://127.0.0.1:9999 to use your application"kubectl port-forward $POD_NAME 9999:9999

让我们再次访问该Web应用程序并找到以下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hello World!

响应表明我们的环境更改成功。

更改升级后的组件

假设已经过去了几天,并且开发人员已经开发了Web应用程序的新版本

例如,我们将响应的前缀从Hello更改为Goodbye, 然后制作一个名为helloworld-python-v2的新组件。您可以在升级组件中找到有关我们如何创建它的更多详细信息。

更改并应用应用程序配置文件

我们需要更改并应用配置文件以使组件升级工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: core.oam.dev/v1alpha1kind: ApplicationConfigurationmetadata:  name: first-appspec:  components:-   - componentName: helloworld-python-v1+   - componentName: helloworld-python-v2-     instanceName: first-app-helloworld-python-v1+     instanceName: first-app-helloworld-python-v2      parameterValues:        - name: target          value: World        - name: port          value: '9999'      traits:        - name: ingress          parameterValues:            - name: hostname              value: oamexample.com            - name: path              value: /            - name: service_port              value: 9999

应用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl apply -f examples/first-app-config.yamlapplicationconfiguration.core.oam.dev/first-app configured

检查升级结果

您可以自己再次检查应用的yaml。您应该找到组件名称已更改。让我们直接访问该网站:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ curl oamexample.comGoodbye World!

更新的Web应用程序运行良好!

现在,我们已经成功地使我们的新组件正常工作。这可能更容易,因为开发人员只需要关心组件更新,而操作员只需要关心应用程序配置。

卸载应用程序

您可以使用kubectl轻松删除配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl delete configuration first-appconfiguration.core.oam.dev "first-app" deleted

这将删除您的应用程序和所有相关资源。

它不会删除特征和组件,它们很高兴在下一个应用程序配置中等待您的使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get traits,componentsNAME                                AGEtrait.core.oam.dev/autoscaler      31mtrait.core.oam.dev/empty           31mtrait.core.oam.dev/ingress         31mtrait.core.oam.dev/manual-scaler   31m
NAME                                             AGEcomponent.core.oam.dev/alpine-replicable-task   19hcomponent.core.oam.dev/alpine-task              19hcomponent.core.oam.dev/hpa-example-replicated   19hcomponent.core.oam.dev/nginx-replicated         19hcomponent.core.oam.dev/nginx-singleton          19h

总结:rudr基于OAM集成了云原生应用程序所需要的ingress,scale,volume等周边的管理功能,从而更加快捷的进行定义。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有点技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
JVM内存模型
运行时数据区域 Java虚拟机(Java Virtual Machine,简称JVM)在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时
武培轩
2018/04/18
1K0
JVM内存模型
JVM系列分析- 内存模型
JVM的内存模型是java语言绕不开的一个话题。要进行java的性能调优,首先就要了解其内存模型。在诸多的面试笔试中,这也是很多面试官会考察的内容。
JathonKatu
2020/10/27
3500
JVM系列分析- 内存模型
JVM运行时数据区-方法区
JVM运行时数据区-方法区 方法区和Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、域信息、方法信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。很多人都更愿意把方法区称为“永久代”(Permanent Generation)。从jdk1.7已经开始准备“去永久代”的规划,jdk1.7的HotSpot中,已经把原本放在方法区中的静态变量、字符串
晓果冻
2022/09/08
3760
JVM运行时数据区-方法区
深入理解JVM(一)——JVM内存模型
JVM内存模型 Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区。 下面对这五个区域展开深入的介绍。 1. 程序计数器 1.1. 什么是程序计数器? 程序计数器是一块较小的内存空间,可以把它看作当前线程正在执行的字节码的行号指示器。也就是说,程序计数器里面记录的是当前线程正在执行的那一条字节码指令的地址。 注:但是,如果当前线程正在执行的是一
大闲人柴毛毛
2018/03/09
7620
JVM内存模型1 程序计数器2. Java虚拟机栈(JVM Stack)3. 本地方法栈(Native Method Stack)4 Java堆(Java Heap)5 方法区6 直接内存(Direc
JVM内存模型 1 程序计数器 1.1. 定义 程序计数器是一块较小的内存空间,可看作当前线程正在执行的字节码的行号指示器 如果当前线程正在执行的是 Java方法 计数器记录的就是当前线程正在执行的字节码指令的地址 本地方法 那么程序计数器值为undefined 1.2. 作用 程序计数器有两个作用 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程
JavaEdge
2018/05/16
1.4K0
快速串讲——JVM内存的区域划分
目的 快速定位JVM内存泄漏或者溢出等问题。 面试基础题,加分项。 程序计数器(Program Counter Register) 记录当前线程所执行的字节码的行号。 依赖其实现分支、循环、跳转、异常处理、线程恢复。 Natvie 方法时,其的值就为空。 Java 虚拟机规范中唯一没有规定内存溢出的区域。 “线程私有”的内存区域。 虚拟机栈(Virtual Machine Stacks) 其生命周期与线程相同。 存储局部变量表、操作数栈、动态链接、方法出口等信息。 方法被执行的时候创建一个栈帧并入
万猫学社
2022/04/22
3730
快速串讲——JVM内存的区域划分
JVM内存模型
内存结构是JVM中比较重要的存储结构,是硬盘和cpu之间的桥梁,JVM的内存结构规定了程序在运行过程中的内存的申请,分配,管理等一系列策略,保证了程序的高效有序地进行。因为本人的JDK为1.8版本,因此我去百度了一下Java8的内存结构图,如下:
ma布
2024/10/21
1160
JVM内存模型
JVM内存区域认识
这是一张图🐰 区域介绍 程序计数器 程序计数器是一块较小的内存空间,它可以被看作是指示当前线程执行的字节码的行号指示器。(即记录当前的执行位置) 在虚拟机的概念模型里,字节码解释器就是通过改变计数器得之来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 由于Java虚拟机的多线程是通过轮流切换并分配处理器执行执行时间来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程种的指令。因此,线程为了切换后能恢复到正
高大北
2022/06/14
2250
JVM内存区域认识
JVM内存结构探秘及编码实战
在Java的开发过程中,因为有JVM自动内存管理机制,不再需要像在C、C++开发那样手动释放对象的内存空间,不容易出现内存泄漏和内存溢出的问题。但是,正是由于把内存管理的权利交给了JVM,一旦出现内存泄漏和内存溢出方面的问题,如果不了解JVM是如何使用内存的,不了解JVM的内存结构是什么样子的,就很难找到问题的根源,就更难以解决问题。
万猫学社
2022/04/22
3580
JVM内存结构探秘及编码实战
【面试题精讲】JVM-方法区
方法区是 Java 虚拟机规范中的一种内存区域,它用于存储已被加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。在某些版本的 JDK 中,方法区也被叫做 Non-Heap 内存。
程序员朱永胜
2023/10/31
1850
【面试题精讲】JVM-方法区
JVM的内存结构
这是个什么鬼呢?我们都知道,CPU的计算时间是以分片的方式给到每个线程的,换句话说,所谓的并行其本质就是串行。比如线程A执行到了一部分,CPU将控制权给了线程B,那么线程A重新得到CPU的资源时,如何恢复工作呢?这个程序计数器就来帮助线程A找到其中间状态,从而恢复到正确的执行位置。程序计数器所占内存是线程私有的,同时也是Java 虚拟机规范中没有规定任何OutOfMemoryError 情况的区域。
HUC思梦
2022/05/11
4470
JVM内存区域
JVM虚拟机,也就是虚拟的计算机,它有自己虚拟的CPU、虚拟的内存等等,当然还有大名鼎鼎的垃圾回收器。第一篇我们来讲解一下JVM的虚拟内存。
用户4439777
2020/08/01
9710
jvm系列(二):JVM内存结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问
纯洁的微笑
2018/04/18
9620
jvm系列(二):JVM内存结构
JVM内存模型
JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁
黑洞代码
2021/01/14
5590
JVM内存模型
内存篇:JVM内存结构
Java8相对之前的版本,JVM结构发生了较大的变化,取消了永久代,新增了元空间,同时,元空间不再与堆连续,而且是存在于本地内存(Native memory)。下面,以Java8为例,对JVM结构做一番总结。
云深i不知处
2020/09/16
6.1K0
【原创】面试官:JVM内存区域你了解吗?
JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【Java 堆、方法区】、直接内存。
良月柒
2020/04/14
5100
【原创】面试官:JVM内存区域你了解吗?
深入理解JVM虚拟机---JVM内存管理
​ 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里 ,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
俺也想起舞
2020/05/06
4470
JVM内存与垃圾回收篇第9章方法区
ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及独立会话管理
yuanshuai
2022/08/17
4120
JVM内存与垃圾回收篇第9章方法区
JVM活学活用——Jvm内存结构
Java内存结构: JVM内存结构主要是有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分为三部分,Eden空间、From Survivor空间、To S
Janti
2018/04/10
8560
JVM活学活用——Jvm内存结构
JVM内存模型基础
我们知道运行一个Java应用程序,我们必须要先安装JDK或者JRE包。这是因为Java应用在编译后会变成字节码,然后通过字节码运行在JVM中,而JVM是JRE的核心组成部分。
架构狂人
2023/08/16
2070
JVM内存模型基础
相关推荐
JVM内存模型
更多 >
LV.2
北京题加教育科技有限公司java高级研发工程师
目录
  • 介绍
  • 创建云原生应用程序并不难
  • 方法:让我们一次迈出一步
  • 从头开始创建应用
    • 先决条件
      • 安装rudr
      • 升级rudr
      • 卸载rudr
    • 安装具体特性的实现
      • 手动缩放
      • ingress
  • 使用rudr
    • 查看Trait
    • 安装应用程序配置
    • 访问web服务
    • 升级应用程序配置文件
      • 更改应用程序配置文件
      • 应用更改的文件
      • 检查更新的应用
    • 更改升级后的组件
      • 更改并应用应用程序配置文件
      • 检查升级结果
    • 卸载应用程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档