OpenShift Interactive Learning Portal ①Deploying Applications From Images
はじめに
OpenShift Interactive Learning Portal の Deploying 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からも確認できる。
Webコンソールから確認
コンソールを選択してOpenShift Webコンソールに切り替え、アプリケーションがデプロイされていることを確認する。 トポロジビューでアプリケーションに表示されるURLショートカットアイコンを選択して、プロジェクトにアクセスする。
コマンドラインから確認
コマンドラインから作成されたルートに割り当てられているホスト名を表示するには、次のコマンドを実行する。
[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のおすすめ書籍
- 下記の本がお勧めです!
【初心者向け】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と同等の操作をできるツール。
kubernetesのGUIとしてはdashboard
があるが、これは既存のリソースなどを確認するためのもので、kubectlによる操作を代替するものではない。
今回はkui
を使ってみて操作性などを確認してみる。
3. インストール方法
brew install --cask kui
4. 利用方法
kubectl kui get po
GUIを起動することが出来る。
5. 触ってみる
今回はNamespaceに限定してどのような操作が可能か確認する
- kubeconfigのコンテキスト、namespace、kuiのGUIの表示を左下のボタンから変更できる
- リソースを表示してみる(namespace)
- それぞれのnamespaceに関して詳細を表示できる
- 画面下部にはOSのshellもある
6. 参考サイト
7. K8s関連のお勧め書籍(2022年版)
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