こんにちは。サイオステクノロジーの塙です。
今回は、CNCFのincubating projectsであるKubeVelaについて紹介したいと思います。
KubeVelaに興味を持った経緯としては、先日拝見したブログにKubeVelaとChatGPTとの統合が紹介されており、どのように実現しているのか、また、KubeVelaとはどんなソリューションなのか気になったので調べてみようと思いました。
KubeVelaとは?
KubeVelaは、様々なインフラ環境に対応したアプリケーションのデプロイを行うプラットフォームです。
CDツールとしての側面を備えており、アプリケーションのデプロイ、運用を効率化することが出来るみたいです。
JenkinsなどのCIツールとの統合機能も備わっています。
また、docker環境でいうdocker-composeのようなイメージを持つこともでき、k8sのPod, Service, Deploymentなどの複雑なリソースの概念を意識せずに運用することが可能です。
それぞれ以下の利点が考えられます。
- 開発者:インフラ環境を意識せずにアプリケーション開発に労力を割ける。
- 運用者:KubeVelaの定義を再利用可能なテンプレートとして登録し、アプリケーションの配信における標準化が見込める。
KubeVela – アーキテクチャ
KubeVelaの基本的なアーキテクチャは以下のとおりです。他に細かい部分はありますが割愛しています。
そして、KubeVelaはコントロールプレーンとしての役割があり、KubeVela API処理、Workflowのオーケストレーション、リビジョン管理などを制御します。
■ Open Application Model (OAM)
k8sベースを前提とすると、k8sを導入しているユーザでも開発者がk8sの概念を理解し、ワークロードの開発を行っていきます。
そして、その後の管理は運用者が担当するといったケースでは、開発者側のやることがどうしても多くなってしまいがちです。
この負担を軽減するためにOAMというモデルが出てきました。
OAMは、クラウドネイティブなアプリケーションの構成、依存関係などコンポーネントの定義を提供する仕様となっています。
これは、アプリケーションの構成やインフラの選定などを標準化することにより、一貫した運用をしやすいようにする目的と解釈しています。
その特徴として、定義の部品化による拡張性であったり、ベンダーに非依存というものがあります。
OAMの詳細については、以下が参考になります。
https://github.com/oam-dev/spec
■ Application
ここでは、一般的なアプリケーションという用語と差別化するために、KubeVelaで使用されているものは‘Application’の表記にしています。
Applicationは、上記で説明しているアプリケーションの構成、依存関係などをOAMに従って定義したものとなります。
Applicationの定義については、以下のとおりです。
- Component(s):
一般的にいうアプリケーション・サービスの種別を指している。
通常、デプロイするサービス種別に応じて、コンテナイメージ先や後述のTraitsの設定を行う。 - Traits:
TraitsはComponentに付随する動作を決定します。
例えば、ingressの設定や、スケーリングの設定などがあります。 - Policy:
デプロイ前に実施するポリシーとなります。
適用範囲としては、Component単位ではなく、Application全体に掛かるものになっています。 - Workflow:
パイプライン形式でデプロイのステップを定義します。
デプロイ方式を変更したり、承認フェーズを作成したりなどが出来ます。
開発者は用意された定義に従い、リソースを作成する流れとなっています。
■ Addons
すぐに使用出来るコミュニティのアドオンがあります。
メジャーなものとして、UIとなるVelaUXはアドオンとして提供されています。
Kubevela – Community Verified Addons
https://github.com/kubevela/catalog/tree/master/addons
アドオンのカスタマイズも可能です。詳細は、以下が参考になります。
KubeVela – Make Your Own Addon
■ Cluster Gateway
k8s APIトラフィックを複数のk8sクラスターにルーティングするためのゲートウェイ APIサーバーになります。
k8s マルチクラスタに対応しており、アーキテクチャ図のKubeVela→k8s Cluster間のアクセスを受け持ちます。
詳細は、以下が参考になります。
https://github.com/oam-dev/cluster-gateway
Applicationの定義について
Applicationの構成については、上記で説明しました。
では、実際にどのように定義していくのか例を見てみます。
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: <name>
spec:
components:
- name: <component name>
type: <component type>
properties:
<parameter values>
traits:
- type: <trait type>
properties:
<traits parameter values>
- name: <component name>
...(snip)...
policies:
- name: <policy name>
type: <policy type>
properties:
<policy parameter values>
workflow:
- name: <step name>
type: <step type>
properties:
<step parameter values>
(KubeVela – Core Conceptsより引用)
基本的な形式は、k8sのCRDと同じようにyaml形式で記述していきます。
spec
以下にcomponents, traits, policies, workflow
の記述を行っていきます。Traitsは前述しているようにComponentに付随する動作なのでインデントを下げて定義しています。
各定義についての詳細は、いくつかビルトインのものもあるので、以下が参考になります。
KubeVela – Built-in Component Type
KubeVela – Built-in Trait Type
KubeVela – Built-in Policy Type
VelaUX
VelaUXはKubeVelaのUIを提供している。
また、VelaUXはアドオンとして提供されており、インストール後にユーザ側で有効化することで使用が可能です。
$ vela addon enable velaux
VelaUXには、k8sサービスと連携する3つのサービスタイプがあります。
- ClusterIP:デフォルトの設定
- LoadBalancer:クラスタのロードバランサーを利用
- NodePort:k8sノードのIP/ポートにアクセス出来る必要がある
また、VelaUXでは、カスタムドメインや、バックエンドDBの変更、イメージリポジトリの指定などいくつかのカスタマイズも可能です。
詳細については、以下が参考になります。
CUE言語
KubeVelaで定義のカスタマイズをするには、CUE言語をベースに宣言していきます。
■ CUE言語(以下、CUE)
簡単にCUEの特徴は以下のとおりです。
- json形式で、jsonよりも使い勝手が良いとされてます
- Go向けのAPIが提供されている
- json, yaml出力に対応
CUEには、CLIが用意されており、作成した.cueファイルにいくつかのコマンドを実施することが可能みたいです。
例えば、スキーマチェック、レンダリングなどでファイルの正当性が確認出来ます。
CUEでのカスタマイズ例は以下のとおりです。
# CUEでのカスタマイズ例
webserver: {
type: "component"
attributes: {}
}
template: {
parameter: {
name: string
image: string
}
output: {
apiVersion: "apps/v1"
kind: "Deployment"
spec: {
containers: [{
name: parameter.name
image: parameter.image
}]
}
}
}
カスタマイズ
- type:定義(Component, policy…)の種類
- parameter:入力の定義
- output:出力の定義
この例では、webserverというComponentを用意し後のtemplateに使用するパターンです。
outputとして記述した箇所が最終的なCRDとして出力されます。
詳細については、以下が参考になります。
まとめ
今回は、KubeVelaのアーキテクチャについてまとめてみました。
CDツールとしては、argoCDなどとの差異化があるかどうか気になるところです。
k8sの概念を気にせず、docker-composeのようにアプリケーションのデプロイを行える点は、作業が楽になって良い点と思いました。
本書の記載が読者のお役に立てれば幸いです。