これでもかって言うくらいコピペでKubernetes(Google Kubernetes Engine)に環境変数の設定からRailsアプリケーションのmigrateも考慮したデプロイが動くコマンドを書いていく- Qiita

実行してみました。

CentOS7とRails5とMySQL5.7で使う(1) - Qiita
DockerのCentOSイメージを取得して、Railsアプリを動かすまで

で今回ローカルにruby2.4とrails5.2.2を作って

FROM ruby:2.4.1-alpine

RUN apk update && apk upgrade && apk add --update --no-cache alpine-sdk tzdata postgresql-dev nodejs
RUN mkdir /app
WORKDIR /app

ARG BUNDLE_OPTIONS

ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install --path vendor/bundle -j4 
ADD . /app

RUN bundle exec rake assets:precompile

EXPOSE  3000

を作り

その後上記のdocker buildしたimageで進め無事

NAME                          READY   STATUS    RESTARTS   AGE
postgresql-85b6cbb544-rzb22   1/1     Running   0          18m
rails-5995b6b985-gl6lz        1/1     Running   0          15m

最後job.ymlとdeploy.shdeploy-tasks.shを作りました

job.yml

apiVersion: batch/v1
kind: Job
metadata:
  name: deploy-tasks
spec:
  template:
    metadata:
      name: deploy-tasks
      labels:
        name: deploy-tasks
    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
      restartPolicy: Never
      containers:
        - name: deploy-tasks-runner
          image: $RAILS_IMAGE
          command: ["/app/script/deploy-tasks.sh"]
          env:
            - name: RAILS_ENV
              value: "production"
            - name: DATABASE_HOST
              value: postgresql
            - name: DATABASE_USERNAME
              valueFrom:
                secretKeyRef:
                  name: rails
                  key: database_user
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: rails
                  key: database_password
            - name: SECRET_KEY_BASE
              valueFrom:
                secretKeyRef:
                  name: rails
                  key: secret_key_base
            - name: DATABASE_PORT
              value: "5432"

deploy-tasks.sh

#!/bin/sh

set -e

bundle exec rails db:create
bundle exec rails db:migrate

deploy.sh

#!/bin/bash
# 前のJobが残っていたらまずは消す
kubectl delete job deploy-tasks 2&> /dev/null || true
# マイグレート用のJobを作成し、実行します
cat kubernetes/deploy-tasks-job.yml | envsubst | kubectl create -f -
# Jobが正常に実行されるまで待ちます
while [ true ]; do
  phase=`kubectl get pods -a --selector="name=deploy-tasks" -o 'jsonpath={.items[0].status.phase}' || 'false'`
  if [[ "$phase" != 'Pending' ]]; then
    break
  fi
done

# Jobの終了状態を取得します
while [ true ]; do
  succeeded=`kubectl get jobs deploy-tasks -o 'jsonpath={.status.succeeded}'`
  failed=`kubectl get jobs deploy-tasks -o 'jsonpath={.status.failed}'`
  if [[ "$succeeded" == "1" ]]; then
    break
  elif [[ "$failed" -gt "0" ]]; then
    kubectl describe job deploy-tasks
    kubectl delete job deploy-tasks
    echo 'マイグレートに失敗!'
    exit 1
  fi
done
kubectl delete job deploy-tasks || true

そのあと

export RAILS_IMAGE=us.gcr.io/rails-test-182304/rails:latest
./script/deploy.sh

を実行したところデータベースの作成&マイグレーションの実行でエラーがでました

エラー内容は

cat: kubernetes/deploy-tasks-job.yml: No such file or directory
error: no objects passed to create
Flag --show-all has been deprecated, will be removed in an upcoming release
error: error executing jsonpath "{.items[0].status.phase}": Error executing template: array index out of bounds: index 0, length 0. Printing more information for debugging the template:
        template was:
                {.items[0].status.phase}
        object given to jsonpath engine was:
                map[string]interface {}{"kind":"List", "apiVersion":"v1", "metadata":map[string]interface {}{"selfLink":"", "resourceVersion":""}, "items":[]interface {}{}}

Error from server (NotFound): jobs.batch "deploy-tasks" not found

です。
フィルダーの位置が違うのかと思い、いろいろ試行錯誤してみたんですが、だめでした
フォルダーは

kubernetes/の中に

job.yml
postgresql-service.yml
postgresql.yml
rails-service.yml
rails.yml

script/の中に

deploy.sh
deploy-tasks.sh

が入っています。
docker buildのエラーではないようですがなんとか最後の部分成功させたいです。
すいませんが、よろしくお願いします。
見にくかったら、修正します。