<s id="gfgra"><dfn id="gfgra"></dfn></s>
      <span id="gfgra"></span>

        <s id="gfgra"></s>

    1. <s id="gfgra"><dfn id="gfgra"><i id="gfgra"></i></dfn></s>
    2. 使用rudr构建云原生应用

      来源:互联网   阅读:-

      企业
      2020
      03/23
      06:24

      介绍

      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

      git clone https://github.com/oam-dev/rudr.git
      curl -LO &#34;https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl&#34;
      wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
      tar xf helm-v3.0.0-linux-amd64.tar.gz
      cp helm /usr/local/bin/helm
      helm install rudr ./charts/rudr --wait --set image.tag=v1.0.0-alpha.1

      验证安装

      kubectl get crds -l app.kubernetes.io/part-of=core.oam.dev
      kubectl get deployment rudr

      升级rudr

      helm upgrade rudr charts/rudr

      卸载rudr

      helm delete rudr

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

      kubectl delete crd -l app.kubernetes.io/part-of=core.oam.dev

      安装具体特性的实现

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

      手动缩放

      手动缩放没有外部依赖性

      ingress

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

      • 首先,将稳定版本库添加到您的Helm安装中。helm repo add stable https://kubernetes-charts.storage.googleapis.com/
      • 使用Helm 3安装NGINx ingresshelm install nginx-ingress stable/nginx-ingress您仍然还必须管理DNS配置。如果您也无法控制example.com的域映射,则无法将入口映射到example.com。

      使用rudr

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

      $ kubectl apply -f examples/helloworld-python-component.yaml

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

      $ kubectl get componentschematics
      NAME AGE
      helloworld-python-v1 14s

      您可以查看单个组件

      $ kubectl get componentschematic helloworld-python-v1 -o yaml
      apiVersion: core.oam.dev/v1alpha1
      kind: ComponentSchematic
      metadata:
      creationTimestamp: &#34;2019-10-08T13:02:23Z&#34;
      generation: 1
      name: helloworld-python-v1
      namespace: default
      resourceVersion: &#34;1989944&#34;
      ...
      spec:
      containers:
      - env:
      - fromParam: target
      name: TARGET
      # ... more YAML

      查看Trait

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

      $ kubectl get traits
      NAME AGE
      autoscaler 19m
      ingress 19m
      manual-scaler 19m
      volume-mounter 19m

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

      $ kubectl get trait ingress -o yaml
      apiVersion: core.oam.dev/v1alpha1
      kind: Trait
      metadata:
      creationTimestamp: &#34;2019-10-02T19:57:37Z&#34;
      generation: 1
      name: ingress
      namespace: default
      resourceVersion: &#34;117813&#34;
      selfLink: /apis/core.oam.dev/v1alpha1/namespaces/default/traits/ingress
      uid: 9f82c346-c8c6-4780-9949-3ecfd47879f9
      spec:
      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 &#39;/&#39;
      name: path
      required: false
      type: string

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

      安装应用程序配置

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

      apiVersion: core.oam.dev/v1alpha1
      kind: ApplicationConfiguration
      metadata:
      name: first-app
      spec:
      components:
      - componentName: helloworld-python-v1
      instanceName: first-app-helloworld-python-v1
      parameterValues:
      - name: target
      value: Rudr
      - name: port
      value: &#39;9999&#39;
      traits:
      - name: ingress
      parameterValues:
      - name: hostname
      value: example.com
      - name: path
      value: /
      - name: service_port
      value: 9999

      这是一个应用程序的示例,该应用程序由单个组件组成,该组件的入口特征为example.com,服务端口为9999。
      要安装此应用程序配置,请使用kubectl:

      $ kubectl apply -f examples/first-app-config.yaml
      configuration.core.oam.dev/first-app created

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

      $ kubectl get configurations
      NAME AGE
      first-app 4m23s
      $ kubectl get configuration first-app -o yaml
      apiVersion: core.oam.dev/v1alpha1
      kind: ApplicationConfiguration
      metadata:
      annotations:
      ...
      creationTimestamp: &#34;2019-10-08T12:39:07Z&#34;
      generation: 6
      name: first-app
      namespace: default
      resourceVersion: &#34;2020150&#34;
      selfLink: /apis/core.oam.dev/v1alpha1/namespaces/default/applicationconfigurations/first-app
      uid: 2ea9f384-993c-42b0-803a-43a1c273d291
      spec:
      components:
      - instanceName: first-app-helloworld-python-v1
      componentName: helloworld-python-v1
      parameterValues:
      - name: target
      value: Rudr
      - name: port
      value: &#34;9999&#34;
      traits:
      - name: ingress
      parameterValues:
      - name: hostname
      value: example.com
      - name: path
      value: /
      - name: service_port
      value: 9999
      status:
      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

      export POD_NAME=$(kubectl get pods -l &#34;oam.dev/instance-name=first-app-helloworld-python-v1,app.kubernetes.io/name=first-app&#34; -o jsonpath=&#34;{.items[0].metadata.name}&#34;)
      echo &#34;Visit http://127.0.0.1:9999 to use your application&#34;
      kubectl port-forward $POD_NAME 9999:9999

      kubectl port-forward 命令将阻塞并处理您的请求。
      您将获得以下输出:

      Hello Rudr!

      升级应用程序配置文件

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

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

      更改应用程序配置文件

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

      apiVersion: core.oam.dev/v1alpha1
      kind: ApplicationConfiguration
      metadata:
      name: first-app
      spec:
      components:
      - componentName: helloworld-python-v1
      instanceName: first-app-helloworld-python-v1
      parameterValues:
      - name: target
      - value: Rudr
      + value: World
      - name: port
      value: &#39;9999&#39;
      traits:
      - name: ingress
      parameterValues:
      - name: hostname
      - value: example.com
      + value: oamexample.com
      - name: path
      value: /
      - name: service_port
      value: 9999

      应用更改的文件

      再次,我们应用这个yaml:

      $ kubectl apply -f examples/first-app-config.yaml
      applicationconfiguration.core.oam.dev/first-app configured

      检查更新的应用

      然后先检查应用的Yaml:

      $ kubectl get configuration first-app -o yaml
      apiVersion: core.oam.dev/v1alpha1
      kind: ApplicationConfiguration
      metadata:
      annotations:
      ...
      creationTimestamp: &#34;2019-10-08T12:39:07Z&#34;
      generation: 9
      name: first-app
      namespace: default
      resourceVersion: &#34;2022598&#34;
      selfLink: /apis/core.oam.dev/v1alpha1/namespaces/default/applicationconfigurations/first-app
      uid: 2ea9f384-993c-42b0-803a-43a1c273d291
      spec:
      components:
      - instanceName: first-app-helloworld-python-v1
      componentName: helloworld-python-v1
      parameterValues:
      - name: target
      value: World
      - name: port
      value: &#34;9999&#34;
      traits:
      - name: ingress
      parameterValues:
      - name: hostname
      value: oamexample.com
      - name: path
      value: /
      - name: service_port
      value: 9999
      status:
      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:

      export POD_NAME=$(kubectl get pods -l &#34;oam.dev/instance-name=first-app-helloworld-python-v1,app.kubernetes.io/name=first-app&#34; -o jsonpath=&#34;{.items[0].metadata.name}&#34;)
      echo &#34;Visit http://127.0.0.1:9999 to use your application&#34;
      kubectl port-forward $POD_NAME 9999:9999

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

      Hello World!

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

      更改升级后的组件

      假设已经过去了几天,并且开发人员已经开发了Web应用程序的新版本
      例如,我们将响应的前缀从Hello更改为Goodbye,
      然后制作一个名为helloworld-python-v2的新组件。
      您可以在升级组件中找到有关我们如何创建它的更多详细信息。

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

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

      apiVersion: core.oam.dev/v1alpha1
      kind: ApplicationConfiguration
      metadata:
      name: first-app
      spec:
      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: &#39;9999&#39;
      traits:
      - name: ingress
      parameterValues:
      - name: hostname
      value: oamexample.com
      - name: path
      value: /
      - name: service_port
      value: 9999

      应用它:

      $ kubectl apply -f examples/first-app-config.yaml
      applicationconfiguration.core.oam.dev/first-app configured

      检查升级结果

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

      $ curl oamexample.com
      Goodbye World!

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

      卸载应用程序

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

      $ kubectl delete configuration first-app
      configuration.core.oam.dev &#34;first-app&#34; deleted

      这将删除您的应用程序和所有相关资源。
      它不会删除特征和组件,它们很高兴在下一个应用程序配置中等待您的使用

      $ kubectl get traits,components
      NAME AGE
      trait.core.oam.dev/autoscaler 31m
      trait.core.oam.dev/empty 31m
      trait.core.oam.dev/ingress 31m
      trait.core.oam.dev/manual-scaler 31m
      NAME AGE
      component.core.oam.dev/alpine-replicable-task 19h
      component.core.oam.dev/alpine-task 19h
      component.core.oam.dev/hpa-example-replicated 19h
      component.core.oam.dev/nginx-replicated 19h
      component.core.oam.dev/nginx-singleton 19h

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

      ?

      推荐阅读:查找我的苹果

       

      THE END
      本文系转载,版权归原作者所有;旨在传递信息,不代表长沙在线的观点和立场。

      相关热点

      影音先锋另类重口在线播放,射精视频a片,看中国农村妇女黄色电影院,国产极品白嫩超清magnet,pr社婚纱,国产AV麻豆制片杨思敏www.hcxns.org 泽州县| 云南省| 陵川县| 霍城县| 榆中县| 柳林县| 阜阳市| 集安市| 黑河市| 庆安县| 庆城县| 田阳县| 濮阳县| 永济市| 贵州省| 五指山市| 香港| 博兴县| 马鞍山市| 孝感市| 景德镇市| 尖扎县| 客服| 绥德县| 那坡县| 昌黎县| 略阳县| 冷水江市| 嘉禾县| 城固县| 东宁县| 贵德县| 渝中区| 杭锦后旗| 天门市| 堆龙德庆县| 扶风县| 寻乌县| 西吉县| 荣成市| 黄大仙区| http://444 http://444 http://444 http://444 http://444 http://444