
The k14s carvel toolchain.

Templating and Packaging
Common issues
The Carvel way
Personas
Sample

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,
}) %}





Forking vs Overlays
Immutable Support
Secret Management
Resource Quotas and Limit Ranges
Offline Environments
Custom resource ordering
And many moreβ¦

Unix philosophy
Composable
Extensible
git submodules on steroids
# 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
YAML Templating Tool.
Templates and Patches YAML files
YAML aware
Chunks

A day in the life of a Helm package author.
#@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
Automated Image Solver
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
A fancy kubectl apply -f
# Example deployment of a YTT template.
kapp -y deploy -a my-app -f <(ytt -f ./examples/simple-app-example/config-1.yml)
Offline environments
Kubernetes Native Controller
New Tools?
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.