欢迎光临祥和棋牌首页
主页 > 分析 > 使用 OAM 定义与管理 Kubernetes 内置 Workload

使用 OAM 定义与管理 Kubernetes 内置 Workload

分析 2020-10-17 14:183588祥和棋牌首页祥和棋牌首页

作者 | 周正喜 阿里云技术专家 爱好云原生,深度参与 OAM 社区

大家都知道,应用开放模型 Open Application Model(OAM) 将应用的工作负载(Workload)分为三种 —— 核心型、标准型和扩展型,这三者的主要区别在于一个 OAM 平台对于具体某一类工作负载进行实现的自由度不同。其中,OAM 社区中目前唯一一个核心工作负载是 Containerized Workload,它用来描述一个基于容器的工作负载,可以理解为是 Kubernetes Deployment 的简化版(去掉了 PodSecurityPolicy 等大量与业务研发无关的字段)。

祥和棋牌首页不过,很多读者可能会有疑问:对于 Kubernetes 内置的工作负载 OAM 是否还能直接支持呢?

答案当然是肯定的,而且这是 OAM 作为 Kubernetes 原生的应用定义模型的默认能力。

祥和棋牌首页下面,本文就以 Deployment 为例,介绍如何使用 OAM 基于 Kubernetes 的内置工作负载来定义和管理云原生应用。

示例准备

基于 GitHub FoodTrucks (旧金山美味街边小吃地图应用)项目,构建镜像 zzxwill/foodtrucks-web:0.1.1,加上依赖的 Elasticsearch 镜像,在默认情况下,它的 Deployment 描述文件 food-truck-deployment.yaml 如下所示:

apiVersion: apps/v1

祥和棋牌首页kind: Deployment

metadata:

name: food-trucks-deployment

labels:

app: food-trucks

spec:

selector:

matchLabels:

app: food-trucks

template:

metadata:

labels:

app: food-trucks

spec:

containers:

- name: food-trucks-web

image: zzxwill/foodtrucks-web:0.1.1

env:

- name: discovery.type

value: single-node

ports:

- containerPort: 5000

- name: es

image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2

ports:

- containerPort: 9200

- containerPort: 9300

如果将上述 yaml 文件提交到 Kubernetes 集群,通过 port-forward 可以通过浏览器查看效果:

定义 Component 与 Workload

在 OAM 中, 一个应用是由多个 Component(组件)构成的,而一个 Component 里的核心字段,就是 Workload(工作负载)。

所以说,像 Kubernetes Deployment、StatefulSet 等内置的工作负载,其实天生就可以被定义为 OAM Component 中的 Workload。比如下面这个 sample-deployment-component.yaml 文件,可以看到,.spec.workload 的内容,就是一个 Deployment,也就是 food-truck-deployment.yaml 里定义的 Deployment。

接下来,我们就将上述 OAM Component 提交到 Kubernetes 集群验证一下。

部署这个应用

在 OAM 中,我们需要编写一个应用配置 ApplicationConfiguration 来组织所有的 OAM Component。由于只有一个 Component,本例中的 sample-applicationconfiguration.yaml 非常简单,如下所示:

apiVersion: core.oam.dev/v1alpha2

kind: ApplicationConfiguration

Copyright © 2020 祥和棋牌首页 版权所有