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

    View full-size slide

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

    View full-size slide

  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発行
    ソースコード
    取得

    View full-size slide

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

    View full-size slide

  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/

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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/

    View full-size slide

  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
    次のリソースにわたすパラメータ

    View full-size slide

  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

    View full-size slide

  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/

    View full-size slide

  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

    View full-size slide

  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)

    View full-size slide

  14. ありがとうございました

    View full-size slide