1
0

More than 1 year has passed since last update.

Kubernetesを統合して、Railsアプリケーションをデプロイするチュートリアル

Posted at

Docker Desktop for MacにKubernetesを統合して、Railsアプリケーションをデプロイするチュートリアル

Docker Desktop for Macを使用して、ローカルのKubernetes環境にRailsアプリケーションをデプロイする方法を紹介します。

目次

  1. 環境の準備
  2. Railsアプリケーションの作成
  3. Docker化
  4. イメージのビルド
  5. Kubernetesのデプロイメントとサービスの作成
  6. アクセス
  7. トラブルシューティング

1. 環境の準備

  1. Docker Desktop for Macを公式サイトからダウンロードしてインストールします。
  2. Dockerの設定からKubernetesを有効化します。
  3. kubectl コマンドが動作することを確認します。
kubectl version

2. Railsアプリケーションの作成

新しいRailsアプリケーションを作成します (既存のアプリケーションを使用しても構いません):

rails new my-rails-app
cd my-rails-app

3. Docker化

  1. アプリケーションのルートにDockerfileを作成します:
FROM ruby:2.7.2

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /my-rails-app

COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install

COPY . ./

CMD ["rails", "server", "-b", "0.0.0.0"]
  1. 同じくアプリケーションのルートにdocker-compose.ymlを作成します:
version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/my-rails-app
    ports:
      - "3000:3000"

4. イメージのビルド

Docker Composeを使用してアプリケーションのDockerイメージをビルドします。

docker-compose build

5. Kubernetesのデプロイメントとサービスの作成

  1. アプリケーションのルートにk8s-deployment.ymlファイルを作成し、以下の内容を追加します:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-rails-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-rails-app
  template:
    metadata:
      labels:
        app: my-rails-app
    spec:
      containers:
      - name: my-rails-app
        image: my-rails-app:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
  1. アプリケーションのルートにk8s-service.ymlファイルを作成し、以下の内容を追加します:
apiVersion: v1
kind: Service
metadata:
  name: my-rails-app
spec:
  selector:
    app: my-rails-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: LoadBalancer
  1. 作成したマニフェストを用いてKubernetesにアプリケーションをデプロイします:
kubectl apply -f k8s-deployment.yml
kubectl apply -f k8s-service.yml

6. アクセス

Docker Desktop for

MacのKubernetesはローカル開発用に設計されています。LoadBalancerタイプのサービスを使用する場合、ブラウザからhttp://localhostに直接アクセスすることでRailsアプリケーションを表示できます。

7. トラブルシューティング

7.1. PodのImagePullBackOffエラーの解決

問題:
PodのステータスがImagePullBackOffとなり、KubernetesがDockerイメージをプルする際に問題が発生していました。

解決策:

  1. kubectl describe pod <POD_NAME>コマンドを使用してPodの詳細なログを調査します。
  2. ログには、イメージmy-rails-app:latestのプルに失敗したことが示されています。
  3. これはローカルのDockerイメージであり、Kubernetesがそのイメージを見つけることができなかった原因です。
  4. docker imagesを使用して、ローカルで利用可能なDockerイメージをリストアップします。
  5. イメージ名のミスマッチを確認します。実際のイメージ名はmy-rails-app-webであるため、k8s-deployment.ymlのイメージ名を適切に修正する必要があります。
  6. 更新されたk8s-deployment.ymlを再適用して、Podが正常に起動することを確認します。

この方法で、ImagePullBackOffエラーを解決しました。同様の問題が発生した場合、ローカルのDockerイメージ名とKubernetesのDeployment設定のイメージ名が一致していることを確認してください。


これで、Docker Desktop for MacのローカルKubernetes環境上にRailsアプリケーションをデプロイする手順が完了しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0