Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cartographer入門

masanara
August 19, 2022

 Cartographer入門

TUNA-JP Conference #4

masanara

August 19, 2022
Tweet

More Decks by masanara

Other Decks in Technology

Transcript

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

  2. 本日の内容 • KubernetesにおけるSource to URL • Cartographerの仕組み • Cartographerのデモ •

    Application Toolkit 2.0 • Cartographerのインストールとサプライチェーン • Application Toolkitでsource-to-urlをやってみる
  3. 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発行 ソースコード 取得
  4. Soruce to URLを実現するには、これらのKubernetesリソースを繋げる必要がある。Cartographer が実現する “ClusterSupplyChain” によりKubernetesの任意のリソースを利用したサプライチェーン を定義することが可能。 Cartographerの役割 Workload GitRepositories

    Image App kservice Deployment HTTPProxy
  5. 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/
  6. 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
  7. 複数の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
  8. 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/
  9. 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 次のリソースにわたすパラメータ
  10. 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
  11. 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/
  12. 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
  13. まとめ • 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)
  14. ありがとうございました