Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Title TextTitle Text
The State of Kubernetes Development ToolingOctober 2019
Kubernetes the hardKubernetes the hardwayway falsely implies that falsely implies thatthere's an easy way.there's an easy way.
@pczarkowski
@ellenkorbes
@ellenkorbes
■ Run on Kubernetes.■ Are not Kubernetes itself. E.g. CRDs & operators.
Who is this talk for?@ellenkorbes
Developers working on apps that...
■ Their pre-commit workflow.■ The part of their day where code gets written.
Who is this talk for?
■ Their CI/CD pipelines.■ Ops stuff not directly related to writing code.
But not necessarily...
Developers looking to improve...
@ellenkorbes
You put the whole appYou put the whole appin one container?!in one container?!
@7hunderbird
@ellenkorbes
■ Provisioning■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug■ Git & CI■ Ship to prod. & CD■ Observability
DevelopmentCycle:
@ellenkorbes
Pre-CommitStage:
■ Provisioning■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug■ Git & CI■ Ship to prod. & CD■ Observability
@ellenkorbes
■ Configuration files
■ Bootstrap
■ Write code
■ Build
■ Deploy to dev
■ Test
■ Debug
Setup
Dev
Feedback
@ellenkorbes
■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug
Wishlist■ Manageable size■ Create them for me?
@ellenkorbes
■ Setup tasks (like migrations)
@ellenkorbes
■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug
Wishlist
■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug
■ Automate docker/kubectl cycle■ Short feedback loop■ Unobtrusive■ Hot reload■ Easy to on-board■ Dependency-aware
@ellenkorbes
Wishlist
■ Do testing■ Highlight failures■ End-to-end tests
@ellenkorbes
■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug
Wishlist
■ Log streaming■ Highlight issues■ Allow breakpoints■ Not tracing
@ellenkorbes
■ Configuration files■ Bootstrap■ Write code■ Build■ Deploy to dev■ Test■ Debug
Wishlist
Maybe containers wereMaybe containers werea mistake.a mistake.
@jessfraz
@ellenkorbes
@ellenkorbes
■ Debug■ Connect■ Build & Deploy
Cycle
Categories
■ Draft■ Garden■ Skaffold■ Tilt■ Jenkins X■ Forge■ Helm
@ellenkorbes
Tools■ ksync■ kubefwd■ Okteto■ Telepresence■ inlets■ Squash■ Stern
■ Debug■ Connect■ Build & Deploy
Cycle
Categories
■ kubeval■ yq■ kubectx■ kubens■ ytt■ kpxg■ kbld■ kapp■ kwt■ ...
Others...
@ellenkorbes
@ellenkorbes
Trivia:Which of theseisn't a real tool?
■ kubeval■ yq■ kubectx■ kubens■ ytt■ kpxg■ kbld■ kapp■ kwt■ ...
Others...
Kubernetes:Kubernetes:complicating simplecomplicating simplethings since 2014.things since 2014.
@texmandie
@ellenkorbes
Debug■ kubectl■ Squash■ Stern
■ Easily shows you the status of your pods,deployments, services.
■ Learn it.■ kubectl logs --follow -n [namespace] [pod]
Notes@ellenkorbes
@ellenkorbes
Debug■ kubectl■ Squash■ Stern
■ Steps and breakpoints on deployedcontainers!
■ No more Printf debugging �■ IDE or CLI■ Delve, gdb, Java, Node, Python■ Fun!
@ellenkorbes
Notes:Debug■ kubectl■ Squash■ Stern
@ellenkorbes
Debug■ kubectl■ Squash■ Stern
■ Streams logs from multiple pods■ Color-coded■ Easy to filter■ It's the best■ I love it �■ Use it!
@ellenkorbes
Notes:Debug■ kubectl■ Squash■ Stern
@ellenkorbes
Debug■ kubectl■ Squash■ Stern
■ "[...] think of it as a very fancy shell scriptthat does a docker build, docker push,kubectl apply [...]" — rdldw
■ Builds and deploys! Doesn't watch.■ Requires YAML, Dockerfile, Forge config.■ Allows profiles e.g. dev/canary/production.■ Development seems stopped �
@ellenkorbes
Notes:Connect■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
■ Package manager for Kubernetesapplication structure.
■ Install and uninstall off-the-shelf apps. Thinkapt-get, brew, npm, pip, gem.
■ App lifecycle management. Deploy a service'snew version, roll back, delete.
■ Omnipresent: Haven't used it? You will.■ Pro & con: Go templating on configs.
@ellenkorbes
Notes:■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
■ Reverse proxy & websocket tunnel to exposeinternal endpoints to the internet.
■ Similar to ngrok or Argo Tunnel, but free andopen source.
■ Has a Kubernetes operator so you canseamlessly expose a local Kubernetes cluster.
■ Use it to share works in progress, set upwebhooks in development, and so on.
■ ACHTUNG! You're exposing internals to theinternet. Be mindful of security.
@ellenkorbes
Notes:■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
@ellenkorbes
■ inlets
■ Watches your file system■ Syncs local files with files in your cluster■ Straight forward and easy to use■ Built on top of Syncthing■ You do need a watcher inside the
container to act on the updated files!
@ellenkorbes
Notes:■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
■ Forward all possible ports—asopposed to kubectl which forwardsindividual ports.
■ Access any service locally like a podin the cluster
■ Easy! Fun! Buy it now! (Just kidding.)
@ellenkorbes
Notes:■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
■ Swaps a deployment for adevelopment environment.
■ Syncs & watches files, gives you aremote terminal, does port forwarding.
■ Ideal to build admission controllers,operators, things deeply integratedwith k8s.
■ One service at a time.
@ellenkorbes
Notes:■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
■ Hot swaps a running pod and creates alocal shell where the network is proxied intothe cluster.
■ Run app locally; it acts as if in the cluster.■ Use local IDE, debugger, etc.■ Vs. Squash: Single instance. Might cause
conflicts like env vars and docker version.■ Vs. Okteto: Local machine pretends tobe a node vs. moving dev into the cluster.
@ellenkorbes
Notes:■ Forge■ Helm■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
Connect
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
■ Generates config files: Great if you're newto containers or Kubernetes! Helm based.
■ Supports bootstrapping tasks.■ Works per-service: You must "draft up"
for every service.■ "The team originally working on Draft
have to put it on the backburner whilefocusing on efforts like Brigade, Helm 3,and CNAB."
■ No hot reload!
Notes:
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
■ No Kubernetes manifests required.(Unless you want to!)
■ Allows in-cluster builds. LocalKubernetes, Docker, minikube notrequired.
■ Project awareness: It tracks build anddeploy dependencies.
■ Tests are first-class citizens. Locally & CI.■ Pluggable: Custom module types for e.g.
OpenFaaS, Java, Terraform. (Soon alsoGo!)
Notes:Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
■ Something about provisioning.■ Something about CI.■ Uses Skaffold and ksync in the
background.■ Has build packs that generate config
files similarly to Draft! �
Notes:Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
■ Automatically builds & deploys!■ For those already familiar with k8s, it
doesn't require learning new concepts.■ Requires k8s manifests! Not for
beginners.■ Easy set up if you already have them.■ No support for dependencies, tests, or
bootstrapping.
Notes:Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
■ Like Skaffold: Requires k8s manifests;easy set up if you already have them.
■ Gorgeous UI, dashboard, and logging.■ Vs. Skaffold? Skaffold's concepts map
almost directly into Tilt. ■ Starlark configs!
Notes:Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
@ellenkorbes
Build &Deploy■ Draft■ Garden■ Jenkins X■ Skaffold■ Tilt
Toolchains:
■ Helm■ kubectl
■ Draft ☠■ Garden■ Jenkins X■ Skaffold■ Tilt
■ Forge ☠■ inlets■ ksync■ kubefwd■ Okteto■ Telepresence
■ kubefwd■ Squash■ Stern
Debug:Connect: Build&DeployCycle:
@ellenkorbes
Omnipresent:
It works on my cluster...It works on my cluster...@maeddes
@ellenkorbes
Still missing:■ Better docs!■ Consistent naming for
things across different tools.■ Better support for tests!■ ■ Beginner friendliness.■ Clarity. A cohesive story. ?
@ellenkorbes
(ls *.go | entr r ./mytest.sh)
■ Draft → ■ entr → ■ Forge → ■ Garden → ■ Helm → ■ inlets → & ■ Jenkins X → ■ ksync → ■ kubectl 'Debug Services' →
■ kubefwd → ■ Okteto → ■ Skaffold → ■ Squash → ■ Stern → ■ Telepresence → ■ Tilt →
draft.sheradman.com/entrproject/forge.shgarden.io
helm.shgithub.com/inlets/inlets inlets-operator
jenkins-x.iogithub.com/vapor-ware/ksync
kubernetes.io/docs/tasks/debug-application-cluster/debug-service/
kubefwd.comokteto.comskaffold.devgithub.com/solo-io/squash
github.com/wercker/sternwww.telepresence.io
tilt.dev
Links:@ellenkorbes
@krisnova
You can't have aYou can't have aclusterf!$& without aclusterf!$& without a
cluster.cluster.
@ellenkorbes
■ developer relations■ [email protected]■ @ellenkorbes■ #[email protected]■ they/them
ellen körbes
[email protected] | @ellenkorbes