GKE에서 배치 작업을 실행하는 방법

글의 목적

  • 배치 작업에 대한 Docker 이미지 만들기
  • GKE에서 배치 작업 활성화
  • 절차의 총결산

  • 일괄 처리 작업 제작
  • Docker 이미지 구축
  • Docker 이미지를 GCP Container Registry
  • 로 밀어냄
  • Container Registry에서 GKE로의 디버깅
  • 1. 숙제 배치 제작


    우선 고 언어로 간단한 일괄 처리 작업을 만듭니다.
    작업 폴더 구성
    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/itdevsamurai/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
    }
    
    이 일괄 처리 작업은 매개 변수를 입력해서 작업 시간 (몇 초) 을 지정합니다.
    현지에서 운행해 보다
    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 브리지

    좋은 웹페이지 즐겨찾기