OAMが開発者向けのKubernetesとDevOpsの導入を簡素化する方法

このブログでは、DeveloperWeek 2020, San Franciscoにおいて、Hongchao Deng氏が、**OAM**がどのように**Kubernetes**や**DevOps**の導入を開発者のために簡素化することができるかについて考えを述べています。

著者アリババ、クラウドネイティブアプリケーションチーム、Hongchao Deng氏

この記事は、DeveloperWeek 2020 at San FranciscoでHongchao Dengが行った講演の内容を抜粋したものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/c2e56d40-a1a4-26c2-9c64-423b97d8aba1.png)

現在、[アリババではKubernetes（略称：k8s）をクラウド規模で運用](https://www.alibabacloud.com/product/kubernetes?spm=a2c65.11461447.0.0.509b4b28DVUwqt)しています。アリババは、クラウド上で数万のk8sクラスターを管理するだけでなく、数万ノード規模のクラスターを稼働させ、Eコマース事業の運営をサポートしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8d7b8d5a-7d28-b3bb-5b75-44c54df86dfc.png)




私たちのコンテナ化の旅は、2013年に始まりました。Dockerが誕生する前、ベアメタルマシンにコロケーションされたアプリを展開するためにAlibabaで開発されたlxcベースのコンテナエンジン、T4というものがありました。2017年にはk8sに似たコンテナオーケストレーションエンジンであるSigmaが、平均利用率40％のマシンの社内プールを管理するための統一レイヤーとして開発されました。2018年、Sigmaはk8sと互換性があるように作り直され、移行されました。当社のエンジニアは、カスタムコントローラやスケジューリングアルゴリズムを書き、宣言型スタイルのAPIをユーザーに公開しました。2019年末には、アリババのほとんどのアプリケーションがk8s上で動作し、数十のフレームワークがk8sエコシステムの上に構築されています。2019年のDouble 11イベントは、ビジネス的に成功しただけでなく、k8sがこれほどの規模のインフラをサポートできることを技術的に証明しました。

k8sのスケーラビリティと安定性の問題を解決した後、私たちは別の大きな課題に直面していました -- k8sのAPIは複雑すぎて、開発者が学ぶには難しいのはなぜでしょうか？その理由を3つに分けて説明します。

まず第一に、K8sのリソースモデルはアプリケーション中心ではありません。k8sには「アプリケーション」という概念はなく、インフラレベルのリソースが疎結合になっているだけです。アプリケーションをデプロイするためには、ポッドやネットワーク、ストレージなどのインフラリソースを書く必要がありますが、中心点がないため、それらは疎結合になっています。開発者にとっては、そのような低レベルの詳細を指定したいとは思わず、オートスケーリング、モニタリング、VPCなどを備えたステートレスなサービスコンポーネントのような、ハイレベルなアプリケーション仕様を指定したいと考えています。私たちは、アプリケーションのデプロイとインフラの設定の間のギャップを埋めるために、ハイレベルなアプリケーション仕様とアプリケーション中心のリソースモデルを提供する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6bd3660f-77ea-3437-36ce-ff20debd2ecb.png)


第二に、k8sのAPIには関心事の分離がありません。上の図から、k8sは異なる役割に属するすべてのフィールドを1つのAPIにカプセル化していることがわかります。例えば、開発者はコンテナイメージ、ポート、ヘルスチェックを指定するだけで、運用者はレプリカサイズ、ローリングアップデート戦略、ボリュームアクセスモードなどを指定する責任があります。k8sのAPIには何の問題もありません。K8sはインフラの機能を公開するために設計されており、他のプラットフォームを構築するために使用されます。そのため、すべてを含む必要があり、オールインワンのAPIを提供しています。しかし、オールインワンのAPIは、エンドユーザーのアプリケーションには適していないことがわかりました。k8s APIの上に、役割を切り離し、開発者と運用者の関心事を分離する必要があります。

第三に、k8sにはポータブルなアプリケーションの抽象化がありません。K8sはインフラのリソースを消費する標準的な方法を定義しています。しかし、前述したように、アプリをデプロイするには、ingressやモニタリングなどが必要です。このようなアプリ操作のインターフェースを標準化し、プラットフォーム間でポータブルなアプリケーションの抽象化を行う必要があります。

これを実現するのが、本日ご紹介するOpen Application Model (OAM)という新しいものです。これは、クラウドネイティブアプリケーションを構築・提供するための、モジュラーで拡張可能なポータブルアプリケーションモデルを定義した標準仕様です。それでは、OAMをより深く理解し、上記の問題をどのように解決するかを見ていきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/16d66cb6-5796-89fc-0828-e23adbf9db7f.png)


上の図から、開発者はサービス単位を記述するためにComponentを定義することがわかります。次にオペレータは、OAMの最終的な成果物であるApplicationConfigurationの中で、運用上のTraitsを定義し、Componentに取り付けます。そして、基盤となるインフラリソースはOAMプラットフォームによってレンダリングされます。OAMは、インフラがクラウドであるかIoTであるかといった低レベルの詳細を隠し、アプリケーション中心の観点から展開モデルを標準化します。

OAMは、アプリケーションデリバリープラットフォームの基礎として、一連のワークロード／トレイト／スコープタイプを含むコアを定義しています。これらは、デプロイメント・パイプラインを構築するための最小限の機能セットです。Rudrと呼ばれるオープンソースの実装では、コアの仕様を実装しています。

さらに、Rudrはユーザがその機能性を拡張するためのメカニズムを提供します。例えば、Rudrコアは、アプリケーションをコンテナで実行し、アプリケーションのライフサイクルを管理するServer Workloadを提供します。サーバーレス機能を実行するためのFaaSのようなWorkloadや、CronJobスタイルのHPAポリシーを定義するためのCronHPAのようなTraitsをさらに追加することができ、OAMは、これらの機能とその関係を、標準的な宣言型の方法で単一のプラットフォームで管理します。

ここまで、OAMの動機とアーキテクチャの詳細について述べてきました。注目すべきは、OAMプロジェクトがベンダーニュートラルでコミュニティ主導であることです。この仕様と実装は、Alibaba、Microsoft、Upboundなどのオープンコミュニティによってサポートされています。OAMプロジェクトは、より多くの人々が参加し、アプリケーションデリバリーの未来を共に築いています。以下のことができます。

レポ-トに貢献する:

- [https://github.com/oam-dev/spec](https://github.com/oam-dev/spec?spm=a2c65.11461447.0.0.509b4b28DVUwqt)
- [https://github.com/oam-dev/rudr](https://github.com/oam-dev/rudr?spm=a2c65.11461447.0.0.509b4b28DVUwqt)


メーリングリストへの参加： [https://groups.google.com/forum/#!forum/oam-dev](https://groups.google.com/forum/?spm=a2c65.11461447.0.0.509b4b28DVUwqt#!forum/oam-dev)

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-alibaba-improves-developer-experience-on-k8s_595874)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*


*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*