Kusion 構成言語 (KCL) は、ほとんどがレジェンドであり、便利な言語です。 KCL は、その歴史的なプログラミング言語技術と準備を通じて、クラウドネイティブ インスタンスに相当する多様な高度な構成を記述する複雑さを改善します。 これは、より優れたモジュール性、スケーラビリティ、および構成に関する安定性、非常に細かい常識的な記述、より迅速な自動化、および実質的な生態学的拡張性を構築することに専念しています.
イチジク。 1: KCLの紹介. "a(i)": checklist.Max() }} a=ラムダ x: int, y: int -> int { max([x, y])}temp={“a${i}”: a(1, 2) for i in vary(10000)} ネイティブ a(x, y)=std.max(x, y);{ temp: {[“a%d” % i]: a(1, 2) for i in std.vary(0, 10000)} ,} }出力 "r6" { 刻印={vary(5000, 6000) の s : layout("a% d"、s)=> max(1, 2)}} imprint={for s in vary(6000, 7000) : layout(“a%d”, s)=> max(1, 2) }}output “r8” { output “r10” { インプリント={vary(9000, 10000) の s : layout(“a%d”, s)=> max(1, 2)}} イチジク。 3: ストレートケースでのパフォーマンス KCL と CUE を利用して Kubernetes の設定を書き留める 展開: apps.#Deployment展開: { apiVersion: “apps/v1” 種類: “展開” }} kubernetes.api.apps.v1 のインポート 展開=v1.Deployment { metadata.title=”me” metadata.labels.タイトル=”私”} KCL のコア部分は、そのモデリングと制約機能です。 KCL の基本的な機能は、2 つのコア部分を中心に展開されます。 さらに、KCL は人中心の構成マップに従って基本的な機能を開発します。 ドメイン マネキン中心の構成の概要: KCL 言語の豊富な部分と 構成の垣間見ることは問題ではありません構成コードの場合、構成レコードデータ制約、フォーム制約、構成属性の必須/選択的制約、可変制約、および不変性制約に相当する必要があります。 これは、KCL が修正に専念しているすべてのコア ポイントの 1 つになる可能性があります。 KCL は、基本的に図 5 に示すコア部分から構成されます。 イチジク。 5: KCLコアパーツ , 言語プラグイン過剰な効率: Rust & C と の使用による過剰な収集時間と実行効率LLVM 、ネイティブコードへのコンパイルを強化し、 、Kubernetes CRD、Kubernetes YAML仕様 建設一次充電: リッチなファッション体験 ジョグ Python 、および 多様化するインスタンスやアプリケーションに対応排気プレリュード. イチジク。 6: KCL コアの開発 追加された言語開発と機能については、KCLドキュメント 。 KCL はもはや基本的な言語ではありませんが、対応するアプリケーション インスタンスがあります。 図 6 に示すように、開発者は KCL を介して構成、スキーマ、機能、およびルールを記述できます。確立された構成は、recordsdata を規定するために不規則であり、スキーマは、recordsdata のマネキン定義を記述するために不規則であり、recordsdata を検証するためにガイドラインは不規則です。そして、スキーマとルールは、recordsdata コードを整理するために KCL のラムダ純粋な機能を使い果たす可能性が最も高いように思われます。基本的なコードをカプセル化し、必須の場合は拡張せずに接続します。 . Kusion Stack イチジク。 7: KCL の構造化されたレコードデータの検証 主に主にベースこれについて、KCL は対応する 検証ツール JSONを検証する/YAML は拡張なしでデータを記録します。 さらに、主にこの能力に基づいて、図 8 に示すような KV 検証可視化製品を発明します。 KCL OpenAPI ツール、私たちは賢明にデザインされた幅広い形のファッションを際限なく統合するつもりです. イチジク。 9: KCL の高度な構成モデリングの老舗マップ 図 10 に示すように イチジク。 11: KCL の堅実な制約チェックシステム. KCL 言語のフォーム デバイスは静的に設計されています。 ソートとインプリントの定義は分離されています。 収集時のソート導出と種類チェックがサポートされています。 静的な種類は、収集時にほとんどのフォーム エラーを簡単に分析できなくなりますが、実行時の動的なフォーム チェックの効率不足も解消されます。 さらに、KCL スキーマの属性は強制的に null にならなくなりました。これにより、構成の省略を回避することができる可能性があります。 KCL 設定をエクスポートする場合が宣言されると、それらの種類と値は交換できなくなります。 この静的な機能により、構成が意のままに改ざんされることはなくなります。 KCL は、構造の組み込みの検証ルールを通じて安定性をさらに確保するのに役立ちます。 たとえば、図 12 は、KCL コードが の制約を定義していることを示しています。 containerPort, プルミ: Google ボーグ紙: https://storage.googleapis.com/pub-instruments-public-publication-recordsdata/pdf/43438 .pdf Terraform の仕組み: 目に見えるイントロ: https://betterprogramming.pub/how-terraform-works-a-visible-intro-6328cddbe067図 2: KCL Playground
KCL は CUE/Jsonnet/HCL よりもパフォーマンスが高く、コード サイズが大きい場合や計算負荷が高い場合の他の言語 (CUE やその他の言語は、実行時の制約チェックのオーバーヘッドが小さいのに対し、KCL は静的にコンパイルされた言語です)。
CUE (.cue を見てください)
インポート「チェックリスト」一時: {
for i, _ in checklist.Fluctuate(0, 10000, 1) {
Jsonnet (.jsonnet を見てください)
Terraform HCL (.tf. テラフォームなので vary 機能の最も単純な機能は、1024 個の反復子
vary(10000)
は 10 のサブ範囲に分割されます)
output "r1" { 刻印={vary(0, 1000) の s : layout("a%d", s)=> max(1, 2)}}出力 "r2" { インプリント={ for s in vary(1000, 2000) : layout("a%d", s)=> max(1, 2)}} 出力 "r3" { 刻印={vary(1000, 2000) の : レイアウト(" a%d", s)=> max(1, 2)}} 出力 "r4" { imprint={vary(2000, 3000) の s : layout("a%d", s)=> max(1, 2)}
output "r5" { 刻印={s の場合変化する (3000, 4000) : layout("a%d", s)=> max(1, 2)}
output "r7" { imprint={vary(7000, 8000) の s : layout("a%d", s)=> max(1, 2)}}output "r9" { 刻印={for s in vary (8000, 9000) : レイアウト("a%d", s)=> max(1, 2)}}
雰囲気:
OS: macOS 10.15.7; CPU: Intel(R) Core(TM) i7–8850H CPU @ 2.60GHz; メモリ: 32 GB 2400 MHz DDR4; いいえ NUMA
もうひとつの高度なケース
アプリ “k8s.io/api/apps/v1”
)
メタデータ: { タイトル: 「私」 ラベル: 私: “私” KCL (見てみましょう。大丈夫です)
イチジク。 4: アドバンストケースでのパフォーマンス
インストルメントは、拡張せずに統合するつもりです近所の賢くデザインされた幅広いファッションをKCLに取り入れました(K8sリソースマネキンなど). 私たちはおそらく、さまざまなインスタンスに応じてゲイン KCL ファッションまたはライブラリを開発および実装し、他の構成エンド カスタマーが使い果たすためのドメイン ファッションの全空間を形成する可能性が最も高いと思われます. 人中心の設定を垣間見る: KCL のコードのカプセル化、抽象化、および再利用機能により、マネキン アーキテクチャは、さらに抽象化および単純化されているように見える可能性があります (例として、K8s リソース マネキンはアプリケーション中心のサーバー マネキンに抽象化されています)。ハンドブックまたはコンピューター化された API の変更
に基づいた形式、常識、およびカバレッジを備えた構成構成
スケーラビリティ: による過度のスケーラビリティ 分離された構成ブロックのコンピューター化されたマージメカニズム
ラピッドオートメーション: の勾配自動化装置CRUD API, 多言語SDK
API アフィニティ: と同等のネイティブ強化 API エコロジー仕様OpenAPI
安全性と保守性: ドメイン指向であり、ネイティブ スレッドと同等のデバイス ステージ機能はありません nd IO、低ノイズとセキュリティ リスク、簡単な修理とガバナンス。
豊富な多言語 API: 豊富な多言語 API:
REST API
を使用して構成レコードデータのボイラープレートを減らす スキーマモデリング.
生きて、簡素化して、統一して、整理するによる副次的な結果のない大規模な構成グラデーションオートメーションスキーム
プラットフォーム エンジニアリング プログラミング言語としてのベテラン
図 7 に示すように、KCL は JSON/YAML レコードデータのレイアウト検証を支援します。 構成言語として、KCL は検証を通じて OpenAPI のほぼすべての部分をカバーします。 KCL では、構成レコードデータは、構造定義によってさらに制約される可能性が最も高いように思われます。 同時に、テスト ブロックやスキーマ内での検証式の記述を通じて、ユーザーが定義した制約規則を支援し、スキーマ内で定義された属性を認識して制約します。 テスト式は、明らかに不規則に見える可能性があり、入力された JSON/YAML が対応するスキーマ構造の定義とテストの制約を満たしているかどうかを評価するだけです。
イチジク。 8: 主に KCL に基づいた KV 検証可視化製品
図 9 に示すように、
Konfig
製品とサービス
、 と ボリューム の
アプリ
.
イチジク。 12: 制約ルールを使用した KCL コードの検証
Google SRE Work Book 構成の開発:
YAML仕様: https://yaml.org/spec/
https://github.com/rix0rrr/ gcl
キューブリンター: https://github.com/stackrox/kube-linter["a%d" % i] KCL ドキュメント:
Helm vs. Kustomize: