Slide 1

Slide 1 text

Cartographer 入門 TUNA-JP Conference #4 2022/08/19

Slide 2

Slide 2 text

本日の内容 ● KubernetesにおけるSource to URL ● Cartographerの仕組み ● Cartographerのデモ ● Application Toolkit 2.0 ● Cartographerのインストールとサプライチェーン ● Application Toolkitでsource-to-urlをやってみる

Slide 3

Slide 3 text

KubernetesにおけるSource to URL 指定したソースコードからコンテナイメージをビルドして、ビルドしたコンテナイメージをデプロイして HTTPアクセスを可能にする。 Kubernetes上でビルド・デプロイを完結するためにすべてを Kubernetesリソースとして管理する。 ソースコード gitrepositories.source.toolkit.fluxcd.io FluxCD Source Controller イメージビルド images.kpack.io Cloud Native Buildpacks - kpack デプロイ services.serving.knative.dev Knative Serving OCIイメージ ビルド Podデプロイ URL発行 ソースコード 取得

Slide 4

Slide 4 text

Soruce to URLを実現するには、これらのKubernetesリソースを繋げる必要がある。Cartographer が実現する “ClusterSupplyChain” によりKubernetesの任意のリソースを利用したサプライチェーン を定義することが可能。 Cartographerの役割 Workload GitRepositories Image App kservice Deployment HTTPProxy

Slide 5

Slide 5 text

Cartographerの “ClusterTemplate” を利用すると、Workloadリソースから任意のKubernetesリ ソースの作成が可能。 Cartographerの仕組み : WorkloadからDeploymentの作成 apiVersion: carto.run/v1alpha1 kind: Workload metadata labels: workload-type: pre-built name: hello namespace: demo spec: image: harbor.example.com/nginxdemos:latest apiVersion: carto.run/v1alpha1 kind: ClusterTemplate metadata: name: app-deploy spec: template: apiVersion: apps/v1 kind: Deployment metadata: name: $(workload.metadata.name)$-deployment labels: app: $(workload.metadata.name)$ spec: replicas: 3 selector: matchLabels: app: $(workload.metadata.name)$ template: metadata: labels: app: $(workload.metadata.name)$ spec: containers: - name: $(workload.metadata.name)$ image: $(workload.spec.image)$ apiVersion: apps/v1 kind: Deployment metadata: name: hello-deployment labels: app: hello spec: replicas: 3 selector: matchLabels: app: hello template: metadata: labels: app: hello spec: containers: - name: hello image: harbor.example.com/nginxdemos:latest ClusterTemplate Workload Deployment Build Your First Supply Chain : https://cartographer.sh/docs/v0.4.0/tutorials/first-supply-chain/

Slide 6

Slide 6 text

ClusterSupplyChainの定義方法 “ClusterSupplyChain” によりWorkloadリソースに対するクラスターサプライチェーンの内容を定義 する。 apiVersion: carto.run/v1alpha1 kind: ClusterSupplyChain metadata: name: supply-chain-simple spec: resources: - name: deploy templateRef: kind: ClusterTemplate name: app-deploy serviceAccountRef: name: default namespace: demo selector: workload-type: pre-built ● resources : Workloadリソースに対する、処理内容を記述。 templateRef内のテンプレートを利用して Workloadリソースを基に新た なリソースを作成する。 ● serviceAccountRef : CartographerがKubernetesクラスター上の各 種リソースの作成や更新を行うため、適切な権限を持ったサービスアカ ウントを指定する。 ● selector : 指定したラベルに一致する Workloadリソースに対して ClusterSupplyChainで定義する処理が適用される。 Workload ClusterTemplate app-deploy Deployment hello

Slide 7

Slide 7 text

複数のClusterTemplateで、一つのWorkloadリソースから複数のKubernetesリソースを作成するこ とが可能。 ClusterTemplateによるClusterSupplyChainの例 Workload ClusterTemplate app-httpproxy ClusterTemplate app-deploy ClusterTemplate app-service Deployment hello Service hello-service HTTPProxy hello-httpproxy apiVersion: carto.run/v1alpha1 kind: ClusterSupplyChain metadata: name: supply-chain-simple spec: resources: - name: deploy templateRef: kind: ClusterTemplate name: app-deploy - name: service templateRef: kind: ClusterTemplate name: app-service - name: httpproxy templateRef: kind: ClusterTemplate name: app-httpproxy serviceAccountRef : name: default namespace: demo selector : workload-type: pre-built https://cartgrapher.sh/live-editor

Slide 8

Slide 8 text

ClusterSupplyChainを構成するためのTemplate ● ClusterTemplate : サプライチェーン内の他のオブジェクトに対する出力を持たないリソース、 例えばメージをデプロイするリソースを生成するために利用する。 ● ClusterConfigTemplate : configPathに定義されたステータスを更新して、作成されたオブ ジェクトのconfig値として出力する。サプライチェーンは出力の値を他のリソースで利用すること が可能。(※次のリソースに渡すパラメータ ) ● ClusterSourceTemplate : ソースコードを管理するためのリソースの定義に利用する。 urlPath と revisionPath を指定可能。 ● ClusterImageTemplate : コンテナイメージを生成するリソースの定義に利用する。ビルドさ れ たコンテナイメージは imagePath に作成される。 TemplateはシンプルなTemplate書式の他、yttを利用して動的に値を指定可能。 Template Custom Resources : https://cartographer.sh/docs/v0.4.0/reference/template/

Slide 9

Slide 9 text

ClusterTemplateとClusterConfigTemplateの例 apiVersion: carto.run/v1alpha1 kind: ClusterConfigTemplate metadata: name: demo-app-service spec: configPath: .spec.selector template: apiVersion: v1 kind: Service metadata: name: $( configs.deploy.config .app)$-service labels: app: $(workload.metadata.name)$ spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: $(workload.metadata.name)$ type: ClusterIP apiVersion: carto.run/v1alpha1 kind: ClusterTemplate metadata: name: demo-app-httpproxy spec: template: apiVersion: projectcontour.io/v1 kind: HTTPProxy metadata: name: $( configs.svc.config .app)$-httpproxy labels: app: $(workload.metadata.name)$ spec: virtualhost: fqdn: $(workload.metadata.name)$.demo.tce.example.com routes: - conditions: - prefix: / services: - name: $(workload.metadata.name)$-service port: 80 apiVersion: carto.run/v1alpha1 kind: ClusterConfigTemplate metadata: name: demo-app-deploy spec: configPath: .spec.selector.matchLabels template: apiVersion: apps/v1 kind: Deployment metadata: name: $(workload.metadata.name)$-deployment labels: app: $(workload.metadata.name)$ spec: replicas: 3 selector: matchLabels: app: $(workload.metadata.name)$ template: metadata: labels: app: $(workload.metadata.name)$ spec: containers: - name: $(workload.metadata.name)$ image: $(workload.spec.image)$ apiVersion: apps/v1 kind: Deployment metadata: name: hello-deployment spec: selector: matchLabels: app: hello template: metadata: labels: app: hello spec: containers: - image: harbor.tce.example.com/library/nginxdemos:latest apiVersion: v1 kind: Servic metadata: name: hello -service spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: hello apiVersion: projectcontour.io/v1 kind: HTTPProxy metadata: name: hello -httpproxy spec: routes: - conditions: - prefix: / services: - name: hello-service port: 80 virtualhost: fqdn: hello.demo.tce.example.com deploy svc 次のリソースにわたすパラメータ

Slide 10

Slide 10 text

ClusterTemplateとClusterConfigTemplateの例 “ClusterConfigTemplate” と “ClusterTemplate” を組み合わせて、複数のKubernetesリソースによ るチェーンを作成することが可能。 Workload ClusterTemplate demo-app-httpproxy ClusterConfigTemplate demo-app-deploy ClusterConfigTemplate demo-app-service Deployment hello Service hello-service HTTPProxy hello-httpproxy apiVersion: carto.run/v1alpha1 kind: ClusterSupplyChain metadata: name: demo2 spec: resources: - name: deploy templateRef: kind: ClusterConfigTemplate name: demo-app-deploy - name: service templateRef: kind: ClusterConfigTemplate name: demo-app-service configs: - name: deploy resource: deploy - name: httpproxy templateRef: kind: ClusterTemplate name: demo-app-httpproxy configs: - name: svc resource: service serviceAccountRef: name: default namespace: demo selector: workload-type: pre-built2

Slide 11

Slide 11 text

Application Toolkit 0.2.0 source-to-urlに必要なコンポーネントで構成される tanzuパッケージ Name Package Version Cartographer cartographer.community.tanzu.vmware.com 0.3.0 cert-manager cert-manager.community.tanzu.vmware.com 1.6.1 Contour contour.community.tanzu.vmware.com 1.20.1 Flux CD Source Controller fluxcd-source-controller.community.tanzu.vmware.com 0.21.2 Knative Serving knative-serving.community.vmware.com 1.0.0 kpack kpack.community.tanzu.vmware.com 0.5.2 Application Toolkit : https://tanzucommunityedition.io/docs/v0.12/package-readme-app-toolkit-0.2.0/

Slide 12

Slide 12 text

Application Toolkit 0.2.0にはSource to URLのためのSupplyChain/Template が含まれている ClusterSupplyChain : source-to-url apiVersion: carto.run/v1alpha1 kind: ClusterSupplyChain metadata: name: source-to-url spec: selector: app.tanzu.vmware.com/workload-type: web resources: - name: source-provider templateRef: kind: ClusterSourceTemplate name: git-repository - name: image-builder templateRef: kind: ClusterImageTemplate name: image sources: - resource: source-provider name: source - name: deployer templateRef: kind: ClusterTemplate name: app images: - resource: image-builder name: image Workload (.spec.source.git.url) ClusterSourceTemplate source-provider GitRepositories (.status.artifact.url) ClusterImageTemplate image-builder Image.kpack.io (.status.latestImage) ClusterTemplate deployer App.kappctrl.k14s.io Services.serving.knative.dev

Slide 13

Slide 13 text

まとめ ● CartographerでKubernetes上のリソースによるサプライチェーンを作成することが可能。 ● サプライチェーンは ClusterSupplyChain リソースによって定義する。 ● ClusterSupplyChain で生成するリソースは ClusterSourceTemplate, ClusterImageTemplate, ClusterConfigTemplate, ClusterTemplateによって定義する。 ● Application Toolkitにはsource-to-urlに必要なコンポーネントが含まれている。 ClusterSourceTemplate source-provider ClusterImageTemplate image-builder ClusterTemplate deployer Workload (.spec.source.git.url) App.kappctrl.k14s.io GitRepositories (.status.artifact.url) Image.kpack.io (.status.latestImage)

Slide 14

Slide 14 text

ありがとうございました