Пока этого достаточно, чтобы сказать, Скопируйте и запишите 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
Этосодержит.Кажется, что это не ошибка сборки докера, но я хочу, чтобы последняя часть была как-то успешной.Извините, но спасибо.