Выполнение задания на rubyonrails в Kubernetes (Google Kubernetes Engine) приведет к ошибке - PullRequest
0 голосов
/ 22 января 2019

Пока этого достаточно, чтобы сказать, Скопируйте и запишите Kubernetes (Google Kubernetes Engine) команду, которая запускает развертывание, учитывая миграцию приложения Rails с установки переменных среды на Kubernetes (Google Kubernetes Engine) ↑ этот сайт японский (я упомянул вышеупомянутый сайт)

На этот раз я сделал ruby ​​2.4 и rails 5.2.2 локально

Создать Dockerfile

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

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 выше

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

Я выполняю миграцию, но я использовал Job для реализации.Я создал последний файл 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"

script / deploy-tasks.sh

#!/bin/sh

set -e

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

deploy.sh

#!/bin/bash


kubectl delete job deploy-tasks 2&> /dev/null || true

cat kubernetes/deploy-tasks-job.yml | envsubst | kubectl create -f -

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

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 'failure!'
    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

Я думал, что положение папки отличается, я пробовал методом проб и ошибок, но это было бесполезно Папка

in kubernetes /
job.yml
postgresql-service.yml
postgresql.yml
rails-service.yml
rails.yml
in script /
deploy.sh
deploy-tasks.sh

Этосодержит.Кажется, что это не ошибка сборки докера, но я хочу, чтобы последняя часть была как-то успешной.Извините, но спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...