簡體   English   中英

如何使用kubernetes將Rails應用程序部署到Google容器引擎?

[英]How to deploy a rails app to google container engine with kubernetes?

我嘗試了許多方法將Rails應用構建為Docker映像。 並將其部署到Google容器引擎。 但是直到現在,還沒有人成功。

我的Dockerfile(在rails根路徑下)

FROM ruby:2.2.2

RUN apt-get update -qq && apt-get install -y build-essential
RUN apt-get install -y nodejs

ENV APP_HOME /myapp
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

ADD Gemfile $APP_HOME/Gemfile
ADD Gemfile.lock $APP_HOME/Gemfile.lock
ADD vendor/gems/my_gem $APP_HOME/vendor/gems/my_gem
ADD init.sh $APP_HOME/

RUN export LANG=C.UTF-8 && bundle install

ADD . $APP_HOME

CMD ["sh", "init.sh"]

我的init.sh

#!/bin/bash
bundle exec rake db:create db:migrate
bundle exec rails server -b 0.0.0.0

我的kubernetes配置文件

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: web
  name: web-controller
spec:
  replicas: 2
  selector:
    name: web
  template:
    metadata:
      labels:
        name: web
    spec:
      containers:
      - name: web
        image: gcr.io/my-project-id/myapp:v1
        ports:
        - containerPort: 3000
          name: http-server
        env:
          - name: RAILS_ENV
            value: "production"

在我用kubectl在gke上創建Web控制器后:

kubectl create -f web-controller.yml

並查看pod日志:

kubectl logs web-controller-xxxxx

表明:

init.sh: 2: init.sh: bundle: not found
init.sh: 3: init.sh: bundle: not found

似乎找不到路徑。 那該怎么辦?

您可以使用kubectl exec輸入您的容器並打印環境。 http://kubernetes.io/v1.1/docs/user-guide/getting-into-containers.html

例如:kubectl exec web-controller-xxxxx sh -c printenv

您還可以交互使用kubectl來確認捆綁包在您的容器映像中:

kubectl執行程序-ti web-controller-xxxxx sh

如果bundle在您的映像中,則將其目錄添加到init.sh中的PATH中,或在每個命令中顯式指定其路徑。

也許您應該直接執行init.sh而不是sh init.sh 似乎沒有為該sh init.sh shell設置$PATH以及其他ENV變量。 如果可以exec到容器中,並且which bundle顯示了which bundle的路徑,那么使用sh init.sh執行時,您將丟失登錄sh init.sh

如果有幫助的話,我已經寫了一個使用Kubernetes在GKE上部署Rails的方法。 你可能想改變的一件事是,如果你有幾個你的web莢運行,它們將運行init.sh腳本,他們都會嘗試db:migrate 會有一個遷移條件,以及遷移順序(如果您有很多的話)。 您可能只想在部署期間從一個容器運行db:migrate 您可以使用Kubernetes作業來完成該任務,也可以使用kubectl run migrator --image=us.gcr.io/your/image --rm --restart=Never執行類似的操作db:migrate在推出您的db:migrate之前僅執行一次db:migrate任務新的Web連播。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM