【入門】OpenShiftを用いてビルドとデプロイメントを行う方法

【入門】OpenShiftを用いてビルドとデプロイメントを行う方法



✓目次



  • OpenShiftを実機で動かすための環境構築方法は以下を参考にしてください。
  • Dockerって何?ビルドって何?という方は以下の記事を参照いただければと思います。

1. Githubにソースコードをpushしておく

  • 今回は簡単なデモなので、python on Flaskの簡単なコードをご自身のGithubリポジトリにおいておきましょう。この記事で使用するのは、以下のapp.pyファイルと、requirement.txtファイルの2つです。
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
from flask import Flask
app = Flask(__name__)

@app.route("/")
def main():
return "Welcome!"

@app.route('/how are you')
def hello():
return 'I am good, how about you?'

if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
requirement.txt
1
Flask

2. OpenShift Web Consoleでプロジェクト作成と設定を行う

OpenShiftのWebコンソールを開き、ログインします。

OpenShiftコンソール画面

今回は、pythonのプログラムを動かすので、pythonというカタログを選択します。すると以下のような画面が現れるので、nextをクリックしましょう。

OpenShiftカタログ選択後の表示

プロジェクト名等を入力しましょう。これらは任意の名称で問題ありません。そして、Git Repository欄に、GithubリポジトリのURLを入力し、Createをクリックしましょう。

OpenShiftプロジェクト作成/設定画面

以下のように表示されれば、プロジェクトの作成と設定は完了です。

OpenShiftプロジェクト作成完了画面

3. 作成したプロジェクトを確認する

以下のように、Webコンソール画面の右側に作成したプロジェクトが表示されます。本記事の場合ですと、Python testというプロジェクトが、それにあたります。My Projectというのは、デフォルトで存在するプロジェクトであり、今回は使用しません。

OpenShiftプロジェクト作成完了後のコンソール画面

作成したプロジェクトをクリックし、左側のメニューの「Builds」→「Builds」とクリックすると、自動的に作成されたビルド設定があることが確認できます。

OpenShiftプロジェクト作成完了後のコンソール画面

「View Logs」をクリックしてログを確認してみましょう。以下のようになっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Cloning "https://github.com/xxxxxxxxxx/openshift-sample-app.git " ...
Commit: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (update)
Author: xxxx xxxx <xxxxxx@xxxx.com>
Date: Thu Dec 10 12:45:37 2020 +0900
Using 172.30.1.1:5000/openshift/python@sha256:ac50754646f0d37616515fb30467d8743fb12954260ec36c9ecb5a94499447e0 as the s2i builder image
---> Installing application source ...
---> Upgrading pip to version 19.3.1 ...
Collecting pip==19.3.1
Downloading https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl (1.4MB)
Installing collected packages: pip
Found existing installation: pip 9.0.1
Uninstalling pip-9.0.1:
Successfully uninstalled pip-9.0.1
Successfully installed pip-19.3.1
---> Installing dependencies ...
Collecting Flask
Downloading https://files.pythonhosted.org/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl (94kB)
Collecting itsdangerous>=0.24
Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting Jinja2>=2.10.1
Downloading https://files.pythonhosted.org/packages/30/9e/f663a2aa66a09d838042ae1a2c5659828bb9b41ea3a6efa20a20fd92b121/Jinja2-2.11.2-py2.py3-none-any.whl (125kB)
Collecting click>=5.1
Downloading https://files.pythonhosted.org/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl (82kB)
Collecting Werkzeug>=0.15
Downloading https://files.pythonhosted.org/packages/cc/94/5f7079a0e00bd6863ef8f1da638721e9da21e5bacee597595b318f71d62e/Werkzeug-1.0.1-py2.py3-none-any.whl (298kB)
Collecting MarkupSafe>=0.23
Downloading https://files.pythonhosted.org/packages/b2/5f/23e0023be6bb885d00ffbefad2942bc51a620328ee910f64abe5a8d18dd1/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl
Installing collected packages: itsdangerous, MarkupSafe, Jinja2, click, Werkzeug, Flask
Successfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 itsdangerous-1.1.0
WARNING: You are using pip version 19.3.1; however, version 20.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Pushing image 172.30.1.1:5000/python-test/python-flask:latest ...
Pushed 0/10 layers, 3% complete
Pushed 1/10 layers, 16% complete
Pushed 2/10 layers, 23% complete
Pushed 3/10 layers, 38% complete
Pushed 4/10 layers, 40% complete
Push successful

ログからは以下が読み取れます。

  • 最初にGithubリポジトリのクローンを実施。
  • アプリケーションのソースと依存関係をインストール
  • ビルドが完了すると、172.30.1.1:5000にある内部のDockerレジストリにイメージをプッシュ

プッシュが完了すると、自動的にkubernetesのリソースの一つであるDeploymentが作成され、アプリケーションイメージのインスタンスが生成されます。kubernetesのDeploymentとは、Podの集合であるReplicaSetの世代管理ができ、ロールバックやロールフォワードができるものです。余談ですが、Podの集合として、StatefulSetというリソースもあります。Deploymentとの違いは、StatefulSetはPodをスケールする際の名前が一定である点です。

Webコンソールの左側のメニューのOverviewをクリックし、作成されたアプリケーションメニューをみてみると、外部アクセス用に生成されたRouteがあります。

OpenShiftプロジェクト作成完了後のコンソール画面

これをクリックすると、Flaskアプリケーションが確認できます。これが、エンドユーザに提供するリンクになるわけです。

Flaskアプリの確認画面

まとめ

デモで見たように、OpenShiftは、Githubにあるソースコードをダウンロードし、Dockerイメージをビルドし、それをDockerレジストリにプッシュし、Deploymentを作成してアプリケーションをKubernetesクラスタにデプロイしてくれます。

Openshiftは、インフラ管理タスクを抽象化したツールを提供することで、開発者がKubernetesベースのインフラ上でアプリケーションを簡単にデプロイして管理できるようにしてくれる、ということが分かったと思います。

また、Openshiftは、Githubのようなソースコード管理ソフトウェアとの連携も可能であり、アプリ開発、ビルド、テスト、デプロイを一貫して担ってくれることも分かったと思います。

もっと詳しく学びたい方へ

- 以下のUdemyの講座で、OpenShiftの基礎を学ぶことができます。ビルド、ビルドトリガー、イメージストリーム、デプロイメントの理解などをハンズオンで学ぶことができます。Udemyは30日間の返金保証が付いているため、「ちょっと違うな。」と思ったら返金も可能なので気軽に試してみてください。

[セール時は1200円]Dockerに特化した専門知識を身に着けたい方は以下がオススメ

  • Dockerに特化した学習は以下のUdemy講座がおすすめです。質、ボリューム共に豊富です。(私はこの講座を終えるのに2か月かかりましたが、非常に詳しく分かりやすくまとめられた講座です。)

ゼロからはじめる Dockerによるアプリケーション実行環境構築

  • Dockerの基礎や復習に加え、コンテナオーケストレーションを行うKubernetesについて学びたい場合は以下の講座がおすすめです。質、ボリュームもちょうどよく、Kubernetesの各種リソースの解説に加え、Web3層構造(MongoDB, Node.js, Nginx)の環境を構築をするので、実践的なスキルが身につくと思います。

Docker + Kubernetes で構築する Webアプリケーション 実践講座

コメント