Want to Contribute to us or want to have 15k+ Audience read your Article ? Or Just want to make a strong Backlink?

The fastest way to deploy a Go app to Kubernetes

😰 Establishing a Kubernetes cluster could be a main time funding. Going from zero to deploy will usually contain many steps, requiring you to confer with documentation and a number of other guides β€” simply to get issues stood up in a comparatively safe approach.

✨ Encore: a brand new type-safe workflow for infrastructure
On this article, we’ll be utilizing Encore‘s Infrastructure SDK to declaratively outline the infrastructure our Go backend wants, after which use Encore to robotically provision our Kubernetes cluster together with different infrastructure, immediately in our cloud account.

Your code will likely be deployable to each GCP and AWS, and Encore will provision your cluster utilizing both GKE or EKS Fargate, relying on which cloud you select.πŸ™‹β€β™‚οΈ

In order for you, you too can deploy utilizing serverless compute situations, with out altering a line of code. That is nice for organising check environments which might be low-cost and straightforward to run.πŸ’Έ

πŸš€ What’s on deck:

  • Set up Encore
  • Create your backend app from a template
  • Run domestically
  • Join your cloud account
  • Deploy to Kubernetes

πŸ’½ Set up Encore

Set up the Encore CLI to run your native atmosphere:

  • macOS: brew set up encoredev/faucet/encore
  • Linux: curl -L https://encore.dev/set up.sh | bash
  • Home windows: iwr https://encore.dev/set up.ps1 | iex

πŸ”¨ Create your app

To maintain issues easy as we clarify how Encore works, we will clone a pre-made app from Encore’s template repo. It is a easy monolith implementing a URL shortener. The app has a REST API and a PostgreSQL database.

Set up it by operating:

encore app create my-app-name --example=url-shortener
Enter fullscreen mode

Exit fullscreen mode

🏁 Working domestically

To run the appliance domestically, be sure to have Docker put in and operating. That is required to run Encore functions with SQL databases.

Then merely run:

encore run
Enter fullscreen mode

Exit fullscreen mode

You must see this:

πŸ§ͺ Strive the API

Subsequent, name your endpoint:

curl http://localhost:4000/url -d '{"URL": "https://encore.dev"}'
Enter fullscreen mode

Exit fullscreen mode

You must see this:

  "ID": "5cJpBVRp",
  "URL": "https://encore.dev"
Enter fullscreen mode

Exit fullscreen mode

πŸ•Ή Open the developer dashboard

Whereas encore run is operating, open http://localhost:9400/ to view Encore’s native developer dashboard.

Right here you may see API documentation, use the API through an API explorer, and see traces utilizing Encore’s built-in distributed tracing.

🧐 Have a look a the code

This app is now operating domestically, with none guide work to arrange a neighborhood Kubernetes occasion, and we’re about to deploy it to our cloud account. So how does it work?

Let’s check out the code.πŸ‘‡

bundle url

import (


kind URL struct {
    ID  string // short-form URL id
    URL string // full URL, in lengthy kind

kind ShortenParams struct {
    URL string // the URL to shorten

// Shorten shortens a URL.
//encore:api public methodology=POST path=/url
func Shorten(ctx context.Context, p *ShortenParams) (*URL, error) {
    id, err := generateID()
    if err != nil {
        return nil, err
    } else if err := insert(ctx, id, p.URL); err != nil {
        return nil, err
    return &URL{ID: id, URL: p.URL}, nil

// Get retrieves the unique URL for the id.
//encore:api public methodology=GET path=/url/:id
func Get(ctx context.Context, id string) (*URL, error) {
    u := &URL{ID: id}
    err := sqldb.QueryRow(ctx, `
        SELECT original_url FROM url
        WHERE id = $1
    `, id).Scan(&u.URL)
    return u, err

kind ListResponse struct {
    URLs []*URL

// Checklist retrieves all URLs.
//encore:api public methodology=GET path=/url
func Checklist(ctx context.Context) (*ListResponse, error) {
    rows, err := sqldb.Question(ctx, `
        SELECT id, original_url FROM url
    if err != nil {
        return nil, err
    defer rows.Shut()

    urls := []*URL{}
    for rows.Subsequent() {
        var u URL
        if err := rows.Scan(&u.ID, &u.URL); err != nil {
            return nil, err
        urls = append(urls, &u)

    if err := rows.Err(); err != nil {
        return nil, err
    return &ListResponse{URLs: urls}, nil

// generateID generates a random quick ID.
func generateID() (string, error) {
    var information [6]byte // 6 bytes of entropy
    if _, err := rand.Learn(information[:]); err != nil {
        return "", err
    return base64.RawURLEncoding.EncodeToString(information[:]), nil

// insert inserts a URL into the database.
func insert(ctx context.Context, id, url string) error {
    _, err := sqldb.Exec(ctx, `
        INSERT INTO url (id, original_url)
        VALUES ($1, $2)
    `, id, url)
    return err
Enter fullscreen mode

Exit fullscreen mode

As you may see there isn’t any Kubernetes configuration or different infrastructure config. It is all Go code, and virtually solely enterprise logic.

We have merely outlined an API endpoint by utilizing the //encore:api annotation and have imported the encore.dev/storage/sqldb bundle.

At compile time, Encore parses the code to grasp what the infrastructure necessities are to run the appliance after which generates the boilerplate code crucial.

When operating domestically, the CLI takes care of organising native variations of the infrastructure, and within the cloud Encore provisions the cloud companies you want primarily based in your configuration choices whenever you create an atmosphere. Now, let’s go forward and just do that!

⛅️ Join your cloud account

First, we have to join a cloud account to Encore. Do that by the Cloud Dashboard > (Choose your app) > App Settings > Integrations > Join Cloud.


In case you are utilizing AWS, observe the directions on the web page to create an IAM Position, after which join the function with Encore.

To your safety, be sure that to test Require exterior ID and specify the exterior ID supplied within the directions.

Connect AWS


In case you are utilizing GCP, observe the directions on the display screen to create a GCP Service Account to your Encore software.

Word: You might want to have a GCP Group account to have the ability to create service accounts.

Connect GPC

πŸ–Ό Create Surroundings

As soon as you’ve got related your account, it is time to create a brand new atmosphere. Do that by going to the Environments web page in Encore’s Cloud Dashboard and clicking Create Surroundings.

From this web page, you may configure:

  • Which cloud to deploy to (Choose the one you join your account for)
  • Area (Choose the one you favor)
  • Compute occasion (Choose Kubernetes)
  • Course of allocation (Choose All processes in a single service)

Then click on Create to avoid wasting your atmosphere.πŸ’Ύ

Create environment

Lastly, let’s be sure that the atmosphere we simply created is about because the default deployment goal:

  • Go to Basic within the software settings menu
  • Underneath Main Surroundings choose the atmosphere you simply created and click on Replace.

Now we’re able to deploy!✨

πŸš€ Deploy to Kubernetes

Earlier than pushing the button, keep in mind: Encore will provision a real-live Kubernetes cluster in your account, together with greatest practices safety measures. This implies deploying will incur a value in your account.πŸ€‘

To deploy your app and create a brand new Kubernetes cluster, merely run:

$ git add -A .
$ git commit -m 'Preliminary commit'
$ git push encore
Enter fullscreen mode

Exit fullscreen mode

Encore will now construct and check your app, provision the wanted infrastructure, together with a Kubernetes cluster and database cluster, and deploy your software to the cloud.πŸš€

After triggering the deployment, you will notice a URL the place you may view its progress in Encore’s Cloud Dashboard.πŸ‘ˆ

It’s going to look one thing like: https://app.encore.dev/$APP_ID/deploys/...

From there you too can see metrics, traces, and join your GitHub account.

πŸŽ‰Now you will have a fully-fledged Go backend operating in Kubernetes, nicely achieved!

Word: If you wish to hold prices in test, it is best to delete all of the sources created if you happen to do not need to hold utilizing your new cluster. That is straightforward to do out of your cloud supplier’s console.

🍰 Nice job – you are achieved!

You now have the beginning of a scalable Go backend operating in Kubernetes.

Maintain constructing with these Open Supply Encore App Templates.πŸ‘ˆ

If in case you have questions or need to share your work, be a part of the builders hangout in Encore’s community Slack.πŸ‘ˆ

Add a Comment

Your email address will not be published. Required fields are marked *

Want to Contribute to us or want to have 15k+ Audience read your Article ? Or Just want to make a strong Backlink?