VMware Carvel

The k14s carvel toolchain.

Overview

Templating and Packaging

Common issues

The Carvel way

Personas

Sample

Templates and Packages


apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
{%- if master.get('network', {}).get('engine') == 'calico' %}
{% set calico = salt['grains.filter_by']({
    'default': master.network.calico
}, merge=salt['pillar.get']('kubernetes:master:network')) %}
{% do calico.update({
    'enabled': true,
    'calicoctl_image': calico.calicoctl.image,
    'cni_image': calico.cni.image,
}) %}

CNCF Landscape

Common Issues

Forking vs Overlays

Immutable Support

Secret Management

Resource Quotas and Limit Ranges

Offline Environments

Custom resource ordering

And many more…

VMware

Unix philosophy

Composable

Extensible

vendir

git submodules on steroids

vendir example

# vendir.yml
apiVersion: vendir.k14s.io/v1alpha1
kind: Config
directories:
  - path: config/_ytt_lib
    contents:
      - path: demo
        git:
          url: https://github.com/salt-labs/tanzu
          ref: origin/demo
        newRootPath: demo
vendir sync

ytt

YAML Templating Tool.

Templates and Patches YAML files

YAML aware

Chunks

A day in the life of a Helm package author.

ytt example

#@data/values-schema

git:
  repo:
    url: https://github.com/hello-world
# An example of a chunk from a template file

GITOPS_REPO_URL: #@ data.values.gitops.repo.url or assert.fail("Missing GitOps repo URL!")
ytt --file example/ --file values.yaml
GITOPS_REPO_URL: https://github.com/hello-world

kbld

Automated Image Solver

kbld example

spec:
  containers:
    - name: nginx
      image: nginx:1.17 # <-- mutable tag reference (bad!)
      ports:
        - containerPort: 80
 kbld -f my-example/nginx
spec:
  containers:
    - name: nginx
      image: index.docker.io/library/nginx@sha256:2539d4344... # <-- resolved to digest form
      ports:
        - containerPort: 80

kapp

A fancy kubectl apply -f

kapp example

# Example deployment of a YTT template.
kapp -y deploy -a my-app -f <(ytt -f ./examples/simple-app-example/config-1.yml)

imgpkg

Offline environments

kapp-controller

Kubernetes Native Controller

Extras

New Tools?

Personas

Package Author

Platform Engineer

Package Consumer

Application Operators

Whiteboard: Package Author.

Whiteboard: Platform Engineer.

Whiteboard: Package Consumer.

Whiteboard: Application Operator.

Demo: Deploying a Carvel Package.

Resources