0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Red Hat OpenShift LocalでOpenShift Buildsを使ってHello worldを動かしてみる

Posted at

はじめに

前回の記事でRed Hat OpenShift LocalをMacにインストールしたので、早速それを使ってみることにします。
と言っても、もうRed Hat OpenShift Localの新しいバージョン2.10.2が出ていたのでインストールし直しました。

前提環境

今回使用した手元のRed Hat OpenShift Localの環境はこちらです。

  • MacBook Pro (13-inch, 2020)
  • MacOS Monterey 12.6
  • Red Hat OpenShift Localのバージョン 2.10.2

GitHubなどのGitリポジトリを別途用意してある前提です。

OpenShiftでのCI/CDについて

OpenShiftのCI/CD の概要を参照します。
OpenShiftは、開発者向けのエンタープライズ対応のKubernetesプラットフォームですので、継続的インテグレーション (CI) や継続的デリバリー (CD) などの DevOpsソリューションが提供されています。

  • OpenShift Builds
  • OpenShift Pipeline
  • OpenShift GitOps

OpenShift Buildsを使用するとBuildahを利用してコンテナイメージの生成ができます。
OpenShift Pipelineは、KubernetesネイティブのCI/CDフレームワークであるTektonベースのパイプラインです。
OpenShift GitOpsは、宣言型GitOpsエンジンとしてArgo CDを使用するオペレーターです。

今回は、OpenShift Buildsを使ってみます。

Dockerビルド、Source-to-Image (S2I)ビルド、カスタムビルドが選べるのですが、今回はDockerビルドでDockerfileからコンテナーイメージを生成します。
(Source-to-Image (S2I)ビルドで、アプリケーションソースコードからイメージを作成するというのも便利そうなので、機会があったら試してみたいですね。)

ソースコードの準備

定番のHello worldを作ろうと思いますが、ここ数年pythonが盛り上がっているので、python+FastAPIでやってみます。

FastAPIのサイトにデプロイの説明があります。
その中のDockerを使用したデプロイの解説が充実していますので参照します。

日本語版ではpython3.7で解説されているのですが、英語版ではpython3.9になっているので、python3.9でやってみます。
パス名などは好みで変更します。

Gitリポジトリに以下の構成でソースファイルを置きます。

├── Dockerfile
├── README.md
├── requirements.txt
└── src
    └── main.py

Dockerfileは次のとおりです。

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9

COPY ./requirements.txt /tmp/requirements.txt 
RUN pip3 install --no-cache-dir --upgrade -r /tmp/requirements.txt

EXPOSE 8080

COPY ./src /app

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

requirements.txtも作成します。

requirements.txt
fastapi>=0.68.0,<0.69.0
pydantic>=1.8.0,<2.0.0
uvicorn>=0.15.0,<0.16.0

main.pyを作成して、Hello world!と表示するためのコードを書きます。
おまけとして、OpenShift Localでサーバのホスト名としてコンテナ名を取得できるかどうかが気になったので、その確認もしてみます。

from fastapi import Cookie, FastAPI, Request
from typing import Optional
import os

app = FastAPI()

# ルート
@app.get('/')
async def index():
    hostname = os.uname()[1]
    return{"msg":"Hello world!","hostname":hostname}

ビルドとデプロイ

ログイン

メニューアイコンから、Openshiftコンソール画面を開きます。
OpenShiftLocalのメニュー.png

ブラウザが起動して、Openshiftコンソールのログイン画面が開きます。

Openshift Localは、デフォルトでkubeadminとdeveloperというユーザーが用意されています。
今回は、アプリケーションのビルドをやってみますので、developerでログインします。

コンソール画面ログイン.png

Openshiftコンソール画面は、開発と運用の分離の観点でAdministrator用とDeveloper用に分かれています。
developerでログインすると最初にトポロジーの画面が開きますが、まだプロジェクトがないため新規プロジェクトの作成リンクがあるくらいしか有益な表示がありません。

プロジェクトの作成

新規プロジェクトの作成リンクをクリックして、プロジェクト(名前空間)を作成します。プロジェクト名は、application-dev-1とします。
プロジェクトの作成.png

作成されたプロジェクトの詳細が表示されます。
OpenShift Localは、端末で動かす開発用ツールですので、残念ながらCPU/メモリ等のメトリクスは取得できません。通常のOpenShiftと違うところですね。
プロジェクト作成済み.png

Gitからのインポート

次に左のメニューから「追加」を選択します。
表示されたメニューの中から「Gitからのインポート」を選択します。
Gitからのインポート.png

Gitからのインポートの画面が開くため、ソースコードのGitリポジトリURLを入力します。
すぐにGitタイプの入力も求められるますので、使っているGitタイプを選択します。
Gitリポジトリ指定.png

詳細のGitオプションの表示を選択します。

ソースシークレットの項目で、「新規シークレット作成」を選択します。
GitリポジトリにアクセスするためのSSHキーをシークレットとして設定します。
名前は、repo-1とします。
(GitリポジトリのアクセスのためのSSHキー作成方法は、GitHub等のヘルプを参照してください)

ソースシークレットの作成.png

詳細のGitオプションの表示に戻りますので、そのままスクロールダウンします。
インポートストラテジーの項目で、Dockerfileを選択して、Dockerfile名を指定します。Dockerfileをそのまま入力します。
インポートストラテジー.png

アプリケーション名と名前は、helloにします。
それ以外は、デフォルトのままで、作成ボタンを押すとトポロジーが表示されてビルドが始まります。
トポロジー.png

トポロジー

このアイコンから進行中のビルドのログやソースコードリポジトリやデプロイ関係情報、アプリケーションへそれぞれアクセスすることができます。
ビルドが完了したら自動でデプロイされて、トポロジーの円が青になります。
トポロジー青.png

アプリケーションにアクセスしてみます。
アプリケーション結果.png

できました。
ホスト名としてコンテナ名が取れていますね。
今回は、Red Hat OpenShift Local上でOpenShift Buildsを使用してpython+FastAPIのアプリケーションをビルドしてデプロイしました。

以上

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?