Optimizing Cloud Native Development Workflows: Combining Skaffold, Telepresence, and ArgoCD

Summary of my new talk delivered at GOTOpia EU

Daniel Bryant
Ambassador Labs

--

I had the pleasure of presenting at the GOTOpia EU on Tuesday and Wednesday this week, and I decided to role out an entirely new talk based on our current approach to building effective developer workflows at Ambassador Labs: “Cloud Native Development Without the Toil: An Overview of Practices and Tooling”.

The Need For an Opinionated Development Workflow

We all know that the CNCF do amazing work in the cloud community, and we also all know that the CNCF tooling landscape is a bit of an eye chart. This is understandable though, as the core purpose of the landscape is to show the breadth of technologies.

What I’m most interested in at the moment is how to assemble an opinionated selection of these technologies in order to create an effective idea-to-value toolchain for developers :

Many thanks to Manju Bhat for this great tweet!

The Price of Getting the Migration to Kubernetes Wrong

The core premise of the talk was that you have to think holistically about the necessary changes to the software development and delivery workflow when migrating away from monoliths and VMs to microservices and Kubernetes.

Bringing along old mental models and ways of working won’t help. Instead you need focus on creating “paved paths” platforms and new developer workflows:

Taking some cues from the Information Security domain, I argued that engineers need to think about both safety and speed when adopting new ways of working:

As the above slide hints, a lot of these new ways of working are coupled to the platform that your organization is using (whether this has been created intentionally or not).

The Rise of Cloud-Native Engineering Organizations

As my Ambassador Labs colleagues Richard Li and Bjorn Freeman-Benson recently discussed in the blog post: “The Rise of Cloud-Native Engineering Organizations: SRE, Platform Engineering, DevOps, and GitOps”, over the past decade engineering and technology organizations have converged on a common set of best practices for building and deploying cloud-native applications.

These best practices include continuous delivery, containerization, and building observable systems.

Modern platform engineers need to constantly examine the entire software development lifecycle from source to production, looking for opportunities to improve safety and speed.

The above slide mentions three key patterns for an effective cloud development workflow: artifact syncing, dev environment bridging, and GitOps. Let’s now look at some opinionated tooling that can be used to implement this patterns.

Three Opinionated Tools: Skaffold, Telepresence, and Argo CD

The first pattern, artifact syncing, is all about minimizing friction for building and deploying a local container image to a remote development cluster. Skaffold is an excellent tool for watching a local code folder, rebuilding a container image when a change is detected, and deploying this to a remote cluster for integration testing.

The next pattern, development environment bridging, takes the previous pattern a step further by effectively bridging the network between your local machine and a remote cluster.

Using a tool like Telepresence “puts your laptop in the cluster”, and allows you to not only locally call remote services as if you were in the cluster (e.g. `curl k8s-service-name:8080/test`) but you also get that “hot reload” experience on any arbitrary services deployed with your cluster: you can make a request against the remote ingress, re-route the associated upstream request to a locally running instance of the service that you are modifying/debugging, and then send the response back into the cluster to see the results of your change.

With Ambassador Cloud you can also share preview URLs that enable specified groups of developers to see the results of traffic that is being rerouted and intercepted selectively to a local service. Your entire dev team can share a Kubernetes cluster containing all of the services, and each group can send test traffic and iterate on their individual service (or services) in isolation from others.

The final pattern discussed was GitOps. This pattern is focused on removing pain from deploying applications to Kubernetes by ensuring that all declarative config is stored within version control (git) and any changes to this are automatically reconciled against a target cluster. I discussed both Argo CD and Argo Rollouts in this section of the talk

Learn More About “Cloud Native Development Without the Toil

You can find the latest iteration of the talk slides on our SlideShare. Many thanks to all of the great questions and feedback from GOTOpia attendees that drove the evolution of the talk over the two days I presented it:

Please Get in Touch!

As with any new talk, there is much more to talk about. I left a bunch of content on the cutting room floor, and I’m still thinking about many of the great questions asked by attendees.

If you have a question please get in touch. Find me as @danielbryantuk on Twitter and on the Ambassador Labs Slack

--

--

DevRel and Technical GTM Leader | News/Podcasts @InfoQ | Web 1.0/2.0 coder, platform engineer, Java Champion, CS PhD | cloud, K8s, APIs, IPAs | learner/teacher