OpenShift Interactive Learning Portal ①Deploying Applications From Images

はじめに

OpenShift Interactive Learning PortalDeploying Applications From Images コースをCodeReady Container環境で行う。

https://learn.openshift.com/introduction/deploying-images/

学習内容

OpenShiftを使用する場合、アプリケーションを追加する方法はいくつかある。 主な方法は次のとおり。

  • 既存のコンテナイメージからアプリケーションをデプロイする
  • Source-to-Imageビルダーを使用して、Gitリポジトリーに含まれているソースコードからビルドおよびデプロイする
  • DockerfileのGitリポジトリに含まれるソースコードからビルドしてデプロイする

このコースでは、OpenShift Webコンソールおよびocコマンドをを使用して、既存のコンテナイメージからアプリケーションをデプロイする方法を学習する。

環境

以下で作成したCodeReady Container環境を使用 http://10.88.10.20:8080/open.knowledge/view/40?offset=0

Deploying Using the Command Line

developerユーザでログインする。

[crc@codeready ~]$ oc login -u developer -p developer
Login successful.

projectは以前作成した「myproject」を使用する。

[crc@codeready ~]$ oc project
Using project "myproject" on server "https://api.crc.testing:6443".

デプロイするimageの名前を指定して、それがコマンドラインから有効かどうかを確認するには、oc new-app --searchコマンドを使用する。

→以下の表示結果からは、Docuer Hubレジストリにimageがあることが分かる。

[crc@codeready ~]$ oc new-app --search openshiftkatacoda/blog-django-py

Docker images (oc new-app --docker-image=<docker-image> [--code=<source>])
-----

openshiftkatacoda/blog-django-py
  Registry: Docker Hub
  Tags:     latest

imageをデプロイするには次のコマンドを実行する。

[crc@codeready ~]$ oc new-app openshiftkatacoda/blog-django-py
--> Found container image 927f823 (9 months old) from Docker Hub for "openshiftkatacoda/blog-django-py"

    Python 3.5
    ----------
    Python 3.5 available as container is a base platform for building and running various Python 3.5 applications and frameworks. Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python's elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
    
    Tags: builder, python, python35, python-35, rh-python35
    
    * An image stream tag will be created as "blog-django-py:latest" that will track this image
    * This image will be deployed in deployment config "blog-django-py"
    * Port 8080/tcp will be load balanced by service "blog-django-py"
      * Other containers can access this service through the hostname "blog-django-py"

--> Creating resources ...
    imagestream.image.openshift.io "blog-django-py" created
    deploymentconfig.apps.openshift.io "blog-django-py" created
    service "blog-django-py" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/blog-django-py'
    Run 'oc status' to view your app.

OpenShiftは、imageの名前に基づいてデフォルト名を割り当てる(この場合はblog-django-py)。引数として--nameオプションを指定することにより、アプリケーションと作成されるリソースに異なる名前を指定できる。

Webコンソールから既存のコンテナーイメージをデプロイする場合とは異なり、アプリケーションはデフォルトでOpenShiftクラスターの外部に公開されない。 OpenShiftクラスターの外部で使用できるように作成されたアプリケーションを公開するには、次のコマンドを実行する。

[crc@codeready ~]$ oc expose service/blog-django-py
route.route.openshift.io/blog-django-py exposed

作成したrouteについては、WebコンソールからもCLIからも確認できる。

  1. Webコンソールから確認

    コンソールを選択してOpenShift Webコンソールに切り替え、アプリケーションがデプロイされていることを確認する。 トポロジビューでアプリケーションに表示されるURLショートカットアイコンを選択して、プロジェクトにアクセスする。

  2. コマンドラインから確認

    コマンドラインから作成されたルートに割り当てられているホスト名を表示するには、次のコマンドを実行する。

[crc@codeready ~]$ oc get route/blog-django-py
NAME             HOST/PORT                                   PATH   SERVICES         PORT       TERMINATION   WILDCARD
blog-django-py   blog-django-py-myproject.apps-crc.testing          blog-django-py   8080-tcp                 None

ブラウザからURLへアクセスすると作成したサイトへアクセスできた。

http://blog-django-py-myproject.apps-crc.testing/

コースはここで終了だが、oc new-appコマンドで何が作成されたかを以下で確認しておく。

[crc@codeready ~]$ oc get all
NAME                          READY   STATUS        RESTARTS   AGE
pod/blog-django-py-1-build    1/1     Running       0          3m50s
pod/blog-django-py-1-deploy   0/1     Completed     0          27m
pod/blog-django-py-1-n7fvs    1/1     Running       0          27m

NAME                                     DESIRED   CURRENT   READY   AGE
replicationcontroller/blog-django-py-1   1         1         1       27m

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/blog-django-py   ClusterIP   172.30.52.157   <none>        8080/TCP   27m

NAME                                                REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/blog-django-py   1          1         1         config,image(blog-django-py:latest)

NAME                                            TYPE     FROM   LATEST
buildconfig.build.openshift.io/blog-django-py   Source   Git    1

NAME                                        TYPE     FROM          STATUS    STARTED         DURATION
build.build.openshift.io/blog-django-py-1   Source   Git@35b89e2   Running   3 minutes ago

NAME                                            IMAGE REPOSITORY                                                                   TAGS     UPDATED
imagestream.image.openshift.io/blog-django-py   default-route-openshift-image-registry.apps-crc.testing/myproject/blog-django-py   latest   27 minutes ago

NAME                                      HOST/PORT                                   PATH   SERVICES         PORT       TERMINATION   WILDCARD
route.route.openshift.io/blog-django-py   blog-django-py-myproject.apps-crc.testing          blog-django-py   8080-tcp                 None

deploymentconfig, buildconfig, build, imagestreamについての学習はまた別途。

OpenShiftのおすすめ書籍

  • 下記の本がお勧めです!

OpenShift徹底活用ガイド [ 澤橋松王 ]


OpenShift徹底入門 [ 株式会社リアルグローブ・オートメーティッド ]

【初心者向け】VMware (vSphere)のおすすめの書籍

【初学者向け】VMware学習用のおすすめの本

業務でVMware Cloud Directorの検証をしたのですが、そこで自身のvSphere製品に関する知識の無さを痛感しました。今後同じようなVMwareの知識不足を実感する方々に向けて、参考になりそうな本を紹介させて頂きます。

VMware徹底入門 第4版 VMware vSphere 6.0対応 VMware vSphere 6.0対応 [ ヴイエムウェア株式会社 ]

販売元のVMwareが執筆しているということもあり、入門者向けに非常に理解しやすい内容で書かれていました。 vSphere 7.0対応の書籍の出版が待ち遠しいですね。 他にもVMware関連でわかりやすいと思った書籍があれば紹介していこうと思います。

GitLab CI/CDを学ぶのにおすすめの書籍(2022年最新版)

私がGitLab CI/CD(GitLab Runner)を学んだ方法

1. Qiitaの参考記事を読んでみる

GitLab CI/CDパイプライン設定リファレンス の記事を一通り読んでみる →内容がボリュームありすぎて、理解できず。。

2.GitLabの参考書籍から読んでみる

これは非常にわかりやすかったです。

kubectl を GUIから扱えるようにするツール「kui」を使ってみる

1. 動作環境

  • MacBook Air (M1, 2020)
  • Homebrew 3.4.0
  • Docker Desktop Version 4.5.0

2. 「kui」とは

GUIでkubectlと同等の操作をできるツール。 kubernetesGUIとしてはdashboardがあるが、これは既存のリソースなどを確認するためのもので、kubectlによる操作を代替するものではない。 今回はkuiを使ってみて操作性などを確認してみる。

3. インストール方法

Macならbrewでインストール可能。

brew install --cask kui

4. 利用方法

kubectl kui get po 

GUIを起動することが出来る。 f:id:kurikube:20220302113224p:plain

5. 触ってみる

今回はNamespaceに限定してどのような操作が可能か確認する

  • kubeconfigのコンテキスト、namespace、kuiのGUIの表示を左下のボタンから変更できる

f:id:kurikube:20220302113111p:plain

  • リソースを表示してみる(namespace)

f:id:kurikube:20220302113211p:plain

  • それぞれのnamespaceに関して詳細を表示できる

f:id:kurikube:20220302113214p:plain

  • 画面下部にはOSのshellもある

f:id:kurikube:20220302113221p:plain

6. 参考サイト

7. K8s関連のお勧め書籍(2022年版)

Kubernetes完全ガイド 第2版 (top gear) [ 青山真也 ]

HTTPのPOSTメソッドで送信した内容をそのまま表示するHTTPサーバ(Flask)

背景

webhookなどの自作スクリプトの動作確認などをする際に、 httpリクエストの対応相手側が受け取った情報を確認できるようにしたい

動作要件

python3/flask (動作確認は、Python 3.7.3@Macbookpro2019で行った)

事前準備

$ pip3 install Flask

$ python3 -m pip install Flask

スクリプト

from flask import Flask, request
app = Flask(__name__)

@app.route("/", methods=['POST'])
def webhook():
    headers = request.headers
    print(headers)
    body = request.get_data().decode('utf-8') + '\n'
    print(body)
    return body

if __name__ == "__main__":
    app.run()

起動方法

スクリプトを実行するのみ。終了はCtrl+C ※環境に依っては、pythonの部分がpython3だったりpytohn3.xだったりします。

$ python test.py
 * Serving Flask app "test" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

動作確認

別ターミナルを開いて、確認。確かにBODY部を応答している。 以下では、print(herders)をコメントアウトしてBODYのみ表示している

$ curl -X POST -d $(echo "hello") http://127.0.0.1:5000/
hello

Flaskお勧め書籍(2022年度版)

PythonフレームワークFlaskで学ぶWebアプリケーションのしくみとつくり [ 掌田津耶乃 ]