Trong bài viết trước DS Solution Vietnam đã giới thiệu Cách tạo và chạy một web app trên GKE. Trong bài viết này, DS Solution Vietnam sẽ tiếp tục gửi tới bạn đọc cách tạo và chạy batch job trên GKE
Tóm lược các bước thực hiện
- Trước tiên sẽ tạo một batch job thông thường.
- Sau đó build thành docker image
- Push Docker image lên GCP container registry
- Deploy image từ Container Registry lên GKE
1. Tạo một batch job đơn giản
Sẽ sử dụng golang trong nội dung bài viết này. Và viết một module đơn giản giả lập cho job.
Cấu trúc thư mục như sau
simplejob
├── README.md
├── go.mod
├── job
│ ├── handler
│ │ └── simplejob_handler.go
│ └── simplejob.go
├── simplejob.Dockerfile
└── simplejob.deployment.yaml
simplejob.go
package main
import (
"context"
"log"
"github.com/dssolution/gke/simplejob/job/handler"
)
func main() {
log.Println("Job Started.")
ctx := context.Background()
handler.SimpleJobHandler{}.Run(ctx)
log.Println("Job Finished.")
}
simplejob_handler.go
package handler
import (
"context"
"flag"
"log"
"os/exec"
)
type SimpleJobHandler struct {
}
func (j SimpleJobHandler) Run(ctx context.Context) error {
log.Println("Processing ...")
runTime := getArguments()
cmd := exec.Command("sleep", runTime)
err := cmd.Run()
if err != nil {
log.Printf("Error at command: %v", cmd)
return err
}
log.Println("Process completed.")
return nil
}
func getArguments() string {
runTime := flag.String("run-time", "", "specify number of seconds to run job")
flag.Parse()
return *runTime
}
Chạy thử job trên local
cd path_to_simplejob
go run job/simplejob.go --run-time=5
2. Build Docker Image
Chuẩn bị nội dung Dockerfile như bên dưới
simplejob.Dockerfile
FROM golang:1.12 as build_env
WORKDIR /go/src/github.com/dssolution/gke/simplejob
COPY ./job ./job
COPY go.mod ./
ENV PATH="${PATH}:$GOPATH/bin"
ENV GO111MODULE=on
RUN export GOPROXY="https://proxy.golang.org" && export GO111MODULE=on && CGO_ENABLED=0 go build -o simplejob job/simplejob.go
FROM alpine:latest
WORKDIR /app
COPY --from=build_env /go/src/github.com/dssolution/gke/simplejob /job
Tiến hành build Docker image
# chú ý cần khởi động Docker trước khi build
cd path_to_simplejob
# build docker image with tag name
docker build -t ds-gke-simplejob:lasters -f simplejob.Dockerfile .
# checke image after build
docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> ds-gke-simplejob lasters d7fb8721594f 24 seconds ago 8.02MB
3. Push Docker image lên GCP Container Registry
Yêu cầu: đã biết cách dùng gcloud command để tương tác với GCP.
# login then set working project
gcloud auth login
gcloud config set project [PROJECT_ID]
# Configured Docker to use gcloud as a credential
gcloud auth configure-docker
# Tag the local image with the registry name
# docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> ds-gke-simplejob lasters d7fb8721594f 24 seconds ago 8.02MB
docker tag d7fb8721594f asia.gcr.io/ds-project/ds-gke-simplejob:latest
# check image tag
docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> asia.gcr.io/ds-project/ds-gke-simplejob latest d7fb8721594f 3 minutes ago 8.02MB
# Push Docker image to Container Registry
# docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]
docker push asia.gcr.io/ds-project/ds-gke-simplewebapp
Sau đó kiểm tra hình ảnh trên Container Registry.
4. Deploy job and run on GKE
# tạo cluster trong GKE
gcloud container clusters create ds-gke-small-cluster \
--project ds-project \
--zone asia-northeast1-b \
--machine-type n1-standard-1 \
--num-nodes 1 \
--enable-stackdriver-kubernetes
Nội dung file config deployment như dưới.
simplejob.deployment.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: ds-gke-simplejob
spec:
template:
metadata:
name: ds-gke-simplejob
spec:
containers:
- name: ds-gke-simplejob-container
image: asia.gcr.io/ds-project/ds-gke-simplejob
command: ["/job/simplejob"]
args: ["--run-time", "10"]
restartPolicy: Never
Nội dung config này sẽ run job đã được build trong ds-gke-simplejob
image với input run-time là 10s.
# install k8s control tool
gcloud components install kubectl
kubectl version
# get credentials để truy cập cluster
gcloud container clusters get-credentials --zone asia-northeast1-b ds-gke-small-cluster
# deploy web app image to GKE
kubectl apply -f simplejob.deployment.yaml
Check kết quả trong GKE
Check log output của job.
Đây chỉ à một job giả lập đơn giản. Vậy đối với những job thực tế chúng ta cần nhận kết quả output từ job. Hoặc từ job cần truy cập đến các service bên ngoài, thì các giải quyết thế nào?
Các vấn đề trên sẽ lần lượt được DS Solution Vietnam giới thiệu ở các bài tiếp.
Nội dung hướng dẫn kết thúc ở đây. Cảm ơn bạn đã đọc! Hãy liên hệ tới chúng tôi để nhận tư vấn chi tiết, hướng dẫn cách chuyển đổi sang các nền tảng điện toán đám mây GCP, AWS, IBM, hybrid cloud và cách xây dựng các ứng dụng cloud-native.