GKE에서 배치 작업을 실행하는 방법
11778 단어 GogcpGKEkubernetesbatch_job
글의 목적
절차의 총결산
1. 숙제 배치 제작
우선 고 언어로 간단한 일괄 처리 작업을 만듭니다.
작업 폴더 구성
simplejob
├── README.md
├── go.mod
├── job
│ ├── handler
│ │ └── simplejob_handler.go
│ └── simplejob.go
├── simplejob.Dockerfile
└── simplejob.deployment.yaml
simplejob.gopackage main
import (
"context"
"log"
"github.com/itdevsamurai/gke/simplejob/job/handler"
)
func main() {
log.Println("Job Started.")
ctx := context.Background()
handler.SimpleJobHandler{}.Run(ctx)
log.Println("Job Finished.")
}
simplejob_handler.gopackage 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
}
이 일괄 처리 작업은 매개 변수를 입력해서 작업 시간 (몇 초) 을 지정합니다.현지에서 운행해 보다
cd path_to_simplejob
go run job/simplejob.go --run-time=5
2. Docker 이미지 구축
Docker file 준비
simplejob.Dockerfile
FROM golang:1.12 as build_env
WORKDIR /go/src/github.com/itdevsamurai/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/itdevsamurai/gke/simplejob /job
Docker 이미지 만들기# ockerを事前に起動する必要は注意
cd path_to_simplejob
# tag名付きDockerイメージをビルド
docker build -t ds-gke-simplejob:lasters -f simplejob.Dockerfile .
# ビルド後の確認
docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> ds-gke-simplejob lasters d7fb8721594f 24 seconds ago 8.02MB
3. Docker 이미지를 GCP Container Registry로 밀어냄
전제: GCP와 gcloud 명령을 사용한 경험이 있습니다.
# k8sコントロールツールをインストール(事前にインストールされたらこのをスキップ)
gcloud components install kubectl
kubectl version
# GKEのクラスタにアクセスするため、credentialsを設定
gcloud container clusters get-credentials --zone asia-northeast1-b ds-gke-small-cluster
# GKEにバッチジョブをデップロイ
kubectl apply -f simplejob.deployment.yaml
# ログイン、とワーキングProjectを設定
gcloud auth login
gcloud config set project [PROJECT_ID]
# ロカルDockerはGCPにアクセスするため、GCPのcredentialを設定
gcloud auth configure-docker
# ロカルイメージをレポジトリのタグ名を付ける
# 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
# タグ名の確認
docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> asia.gcr.io/ds-project/ds-gke-simplejob latest d7fb8721594f 3 minutes ago 8.02MB
# DockerイメージをContainer Registryにプッシュ
# docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]
docker push asia.gcr.io/ds-project/ds-gke-simplewebapp
Container Registry의 이미지 확인4. Container Registry가 GKE로 설계
# 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
데모 정의 파일을 준비합니다.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
이 디자인 정의 파일은 dsgker 단순job의 Docker 이미지를 사용하여 Kubernetes 작업을 설계합니다.매개변수를 입력하여 작업 시간을 10초로 지정합니다.# k8sコントロールツールをインストール(事前にインストールされたらこのをスキップ)
gcloud components install kubectl
kubectl version
# GKEのクラスタにアクセスするため、credentialsを設定
gcloud container clusters get-credentials --zone asia-northeast1-b ds-gke-small-cluster
# GKEにバッチジョブをデップロイ
kubectl apply -f simplejob.deployment.yaml
디버그 후 결과 확인실행 로그 확인
본고에서 사용한 원본 코드는 다음과 같다.
https://github.com/dssolutioninc/dss_gke/tree/master/simplejob
이번에 간단한 일을 소개했는데, 실제 조건에는 또 다른 것이 있다.
디버그 방법에 관해서는 Cloud build을 사용하면 일부 작업을 모아서 쉽게 할 수 있습니다.
또한 작업의 복잡한 입력과 처리 결과의 출력은 어떻게 전달합니까?얻을 수 있습니까?다음 기사에서 소개하고 싶습니다.
끝까지 읽어 주셔서 감사합니다!
DSS 브리지
Reference
이 문제에 관하여(GKE에서 배치 작업을 실행하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dss_hashimoto/items/4679ad5075a513679766텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)