はじめに
コミット
558f788のcdk8sエンジン (npmcdk8s、最新リリースv2.70.80) で検証済み。コマンドは Node.js 18 以上と npm、Unix 系シェルを想定。
前提
- Node.js 18 以上と npm。
- ターミナル。合成にはクラスタ不要。適用するときだけクラスタが必要。
インストール
公式の最短路はコマンドラインツールです。プロジェクト雛形を生成し、cdk8s エンジンも取り込んでくれます。
bash
npm install -g cdk8s-cli最初の動く構成
TypeScript からマニフェストを生成し、ディスクに書き出します。
プロジェクトディレクトリを作って移動します。
bashmkdir hello-cdk8s && cd hello-cdk8sTypeScript アプリの雛形を生成します。
main.tsを生成し、依存をインストールし、outputディレクトリがAppのoutdirと一致しなければならないcdk8s.yamlを書きます。bashcdk8s init typescript-appmain.tsの本体を書き換え、chart が 1 リソースを定義するようにします。App・Chart・ApiObjectクラスはcdk8sから来ます。typescriptimport { App, Chart, ApiObject } from 'cdk8s'; import { Construct } from 'constructs'; class MyChart extends Chart { constructor(scope: Construct, id: string) { super(scope, id); new ApiObject(this, 'configmap', { apiVersion: 'v1', kind: 'ConfigMap', data: { hello: 'world' }, }); } } const app = new App(); new MyChart(app, 'hello'); app.synth();合成します。CLI がコードをコンパイルしてアプリを実行し、chart ごとに 1 ファイルを
dist/へ書き出します。bashcdk8s synth
動作確認
出力を一覧し、生成されたマニフェストを確認します。
bash
ls dist/
cat dist/hello.k8s.yamlhello.k8s.yaml が見えるはずです。その内容はリソースヘッダから始まり、apiVersion・kind・metadata が先頭に並びます (キー順序は src/api-object.ts:215 で強制)。
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hello-configmap-c87d4c10
data:
hello: world名前末尾のサフィックスは construct アドレス由来の 8 文字ハッシュなので (src/names.ts:202)、実際の出力では異なります。
次に読むもの
- 合成したマニフェストは自分で適用します:
kubectl apply -f dist/。CDK8s はクラスタに接続しません。 - 生の
ApiObjectではなく型付きワークロードクラス (Pod・Deployment・Service) が欲しければcdk8s-plusライブラリを追加します。 - CRD や Kubernetes API から型付き construct を生成するには CLI の
cdk8s importを使います。 - マルチ chart アプリ・resolver・Helm chart 取り込みなど本番向けの話題は公式ドキュメント cdk8s.io を参照してください。