Hot Reload Kubernetes Development menggunakan Okteto

Hi gengz, kali ini kita akan belajar bareng bagaimana cara melakukan Hot Reload Kubernetes Development menggunakan Okteto, nyok disimak

Kita buat aja dulu ya folder baru dan codenya seperti dibawah ini

mkdir golang-service
cd golang-service
go mod init golang-service
touch main.go
code .

package main

import (
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)

func main() {
	// Echo instance
	e := echo.New()

	// Middleware
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	// Route => handler
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!\n")
	})

	// Start server
	e.Logger.Fatal(e.Start(":1323"))
}

go mod tidy
go run main.go

Setelah ini kita buat dulu yuk file Dockerfile nya, seperti dibawah ini

# Step 1, membuat binary file
FROM golang:alpine AS builder
RUN apk update && apk add --no-cache git
WORKDIR $GOPATH/src/mypackage/myapp/
# Tambahan ENV penting, karena bila tidak ditambahkan, binary tidak jalan pada saat running di scratch
ENV CGO_ENABLED=0
COPY . .
# Melakukan instalasi terhadap library yang kita gunakan
RUN go get -d -v
RUN go build -o /go/bin/main
# Step 2, meletakkan binary file diatas scratch
FROM scratch
COPY --from=builder /go/bin/main /go/bin/main
ENTRYPOINT ["/go/bin/main"]

Sekarang saatnya kita buat file deployment, mari kita buat folder baru bernama k8s lalu buat 2 file dibawah ini

apiVersion: apps/v1
kind: Deployment
metadata:
  name: golang-service
spec:
  selector:
    matchLabels:
      app: golang-service
  replicas: 1
  template:
    metadata:
      labels:
        app: golang-service
    spec:
      containers:
        - name: golang-service
          image: okteto.dev/golang-service:latest
          ports:
            - containerPort: 1323

apiVersion: v1
kind: Service
metadata:
  name: golang-service
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 1323
  selector:
    app: golang-service

Setelah itu mari kita buat file pipeline milik okteto seperti dibawah ini

deploy:
  - okteto build -t okteto.dev/golang-service:latest
  - kubectl apply -f k8s

Yuk kita push dulu ya, silahkan buat repo baru di Github

Yuk kita buka Okteto kita, silahkan ikuti langkah berikut

Jangan lupa klik deploy ya, saatnya kita tunggu dulu

Kita bisa lihat bahwa Deployment sudah running, mari kita coba check ya

Selamat, Deployment kita ke kubernetes sudah berhasil, nah sekarang kita coba Hot Reloadnya yuk

okteto init

Saat ini kita sudah melakukan init terhadap directory, dan bila diperhatikan, ada file baru bernama okteto.yml. Selanjutnya yang akan kita lakukan adalah mounting local dev kita dengan okteto, yuk kita simak caranya

okteto up

Agak sedikit lama ya gengz, monggo ngopi aja dulu

Sebelum ganti codingan, kita check balik ya servicenya dulu

Bisa kita lihat, service kita tidak berjalan seperti seharusnya, karena kita sudah “terhubung” dengan okteto, yang perlu kita lakukan adalah menjalankan service secara manual, seperti berikut

Nah baru dia mau jalan gengz, yuk kita coba ganti ya code nya seperti dibawah ini

package main

import (
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)

func main() {
	// Echo instance
	e := echo.New()

	// Middleware
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())

	// Route => handler
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hot Reload Kubernetes Development menggunakan Okteto\n")
	})

	// Start server
	e.Logger.Fatal(e.Start(":1323"))
}

Jangan lupa save yak gengz :)), sebelum bisa melihat perubahan kita harus re-run ulang codenya, seperti dibawah ini, biasanya tekan ctrl + c

Yuk coba refresh browsernya untuk mengecheck

Mangstap, sudah berubah ya, nah sekarang kita “putus” dulu ya koneksi kita dengan okteto seperti dibawah ini

okteto down

Mari kita refresh browser kita kembali

Wah kembali lagi seperti awal ya, yup betul, hot reload dipakai untuk bisa merubah secara realtime, tapi tidak akan berpengaruh ke deployment, kita harus melakukan push ke Github kita, lalu Re-Deploy agar bisa melihat codenya berubah di Production, yuk kita gas aja

okteto push

Yuk kita coba refresh lagi browser kita

Selamat, saat ini deployment di okteto juga sudah update ya gengz. Ntaps, saat ini berarti kita sudah bisa coding secara hot-reload ke arah okteto, dan langsung update ke deployment via git push :), semoga bermanfaat ya

Source:

https://okteto.com/docs/tutorials/getting-started-with-pipelines/index.html

https://okteto.com/docs/samples/golang/index.html

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: