Appearance
Infrastructure Adapterの作成
Infrastructure Adapterを独自に作成、コンパイルしてKubernetes Manifestを生成する方法を解説します。
事前準備として、Adapter作成の準備に従って、cue.mod/module.cue
を使ったモジュール定義ができているリポジトリで作業をしてください。
Infrastructure Adapter の実装
サンプルのInfrastructure Adapterを作成します。 以下の例では、nginxサーバを構成するPodを定義しています。 パラメータとしてk8sNamespace
とimageName
を受け取り、podのnamespace名にk8sNamespace
の値が、コンテナのイメージ名にimageName
の値が渡るようにしています。
- ファイル例:
.valuestream/local/web/main.cue
- Infrastructure Adapter 例:
cue
package web
DesignPattern: {
name: "web"
parameters: {
k8sNamespace: string
imageName: string
}
resources: app: {
pod: _pod
}
_pod: {
apiVersion: "v1"
kind: "Pod"
metadata: {
name: "sample-pod"
namespace: parameters.k8sNamespace
}
spec: {
containers: [{
name: "nginx"
image: parameters.imageName
ports: [{
containerPort: 80
}]
}]
}
}
}
Adapterの記述の詳細については、What is Cloud Native Adapterを参照してください。
QVS Configの作成
作成したサンプルの Adapter をコンパイル対象として宣言する QVS Config を作成します。
- ファイル例:
.valuestream/qvs.yaml
- QVS Config 例:
yaml
params:
- name: k8sNamespace
type: string
- name: imageName
type: string
modules:
- name: github.com/qmonus/sample-module
local:
path: .
designPatterns:
- pattern: github.com/qmonus/sample-module/local/web
params:
k8sNamespace: $(params.k8sNamespace)
imageName: $(params.imageName)
QVS Configを構成するparams
、modules
、designPatterns
の詳細については、QVS Configで指定する各フィールドの詳細を参照してください。
パラメータファイルの作成
パラメータファイルは、QVS Config と一緒にコンパイルするパラメータを指定する JSON ファイルです。このファイルには、name
と value
を指定したパラメータの配列を記載します。
パラメータファイル
実際にQmonus Value Streamを通してCI/CDを実行する際は、AssemblyLineの動作の中でパラメータが自動的に渡されるため、パラメータファイルを意識する必要はありません。 今回はコンパイルが正しく動作することをローカルで確認するために、パラメータ ファイルを一時的に作成します。
以下の例では、.valuestream/qvs.yaml
に必要なパラメータであるk8sNamespace
とimageName
を与えています。
- ファイル例:
.valuestream/params.json
- コンテンツ例:
json
{
"params": [
{
"name": "k8sNamespace",
"value": "test-namespace"
},
{
"name": "imageName",
"value": "nginx:latest"
}
]
}
作成したInfrastructure Adapterのコンパイル
Infrastructure Adapterのコンパイルを行うために、.valuestream
上で、以下のコマンドを実行します。
bash
qvsctl manifest compile -c qvs.yaml -p params.json -m . -o output/nginx-pod.yaml
このコマンドでは、パラメータファイル: params.json
からQVS Config: qvs.yaml
に記述されているAdapterへ必要なパラメータを受け渡してマニフェストを出力しています。-m
で、QVS Configのモジュールパス: github.com/qmonus/sample-module
とカレントディレクトリ: .
の対応付けを行い、-o
ではマニフェストの出力先としてoutput/nginx-pod.yaml
を指定しています。
コンパイル成功時は、以下のようなログが出力されます。
Start to dump manifests - qvsconfig=qvs.yaml, param=params.json, output=output/nginx-pod.yaml
Resolving design pattern from YAML QVS Config
Resolved qvsconfig
Run composite for qvsconfig
[1] Resolving resource with input params {"k8sNamespace":"test-namespace","imageName":"nginx:latest"}
[1] Resolved web
[1] Params {
k8sNamespace: "test-namespace"
imageName: "nginx:latest"
}
Successfully dumped manifests to output/nginx-pod.yaml
.valuestream/output/nginx-pod.yaml
として以下のマニフェストが出力されていることを確認します。
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
namespace: test-namespace
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
以上でqvsctl manifest compile
コマンドによるInfrastructure Adapterのコンパイルが確認できました。
さらにInfrastructure Adapterの試験方法(出力として想定しているマニフェストと、実際に出力されたマニフェストが一致することを試験する方法)を知りたい場合は、Infrastructure Adapterの試験を参照してください。