nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

OpenShift Origin v3の最新版を試す - 利用編

前回OpenShift Origin v3の最新版の環境を構築したので、アプリケーションを動作させてみます。慣れるとある程度複雑な構成のアプリケーションもコピペ感覚でボコボコ生やすことができて面白いですよ。

OpenShiftのクライアントコマンドであるocのバイナリさえあればOpenShiftへのアクセスできます。通常はこのocコマンドを配布してリモートからOpenShiftを操作するのですが、今回はVagrant環境上でそのまま利用します。ocコマンドにはMacOSX, Windows, Linux版があるのでどのOSでも動作します。

Vagrant環境ではocコマンドが利用する設定ファイルパスを示す環境変数$KUBECONFIGがadminのものに設定されているので、まずはunsetしてまっさらな状態にします。それから、一般ユーザとしてログインします。

$ cd
$ unset KUBECONFIG
$ oc login
Server [https://localhost:8443]: 
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server could be intercepted by others.
Use insecure connections? (y/n): y

Username: nekop
Authentication required for https://localhost:8443 (openshift)
Password: 
Login successful.

You don't have any projects. You can try to create a new project, by running

    $ oc new-project <projectname>

ユーザ名は何でも構いません。All-in-one環境ではAllowポリシーというザル認証モジュールが設定されているので、どのユーザにどのようなパスワードを入力しても認証が通ります。パスワードが空の場合ははじかれます。

次にプロジェクトを作成します。ここもユニーク値であれば何でも構いません。

oc new-project nekop

次にアプリケーションを作成します。まずはオフィシャルで提供されているSTIビルド (Source to image build, ソースコードからDocker imageをビルドするやつ) のテンプレートで作成します。

oc new-app -f https://raw.githubusercontent.com/openshift/origin/master/examples/sample-app/application-template-stibuild.json

このテンプレートで指定されているアプリケーションのソースコードhttps://github.com/openshift/ruby-hello-world で、データベースアクセスを行うRubysinatraアプリケーションです。アプリケーション自体は、データベースの接続情報を環境変数から取得する、という点以外はごく一般的なsinatraアプリケーションです。.stiというOpenShift特有のディレクトリがあって説明ドキュメントやデフォルト設定が置いてありますが、これは無くても変わりません。

テンプレートというのは複雑な構成をひとまとめにできる設定です。このテンプレートにはデータベースの設定などが入っているので長くなっています。もちろん、テンプレートを利用しなくてもコマンドをいくつか発行することで同じ構成をマニュアルで作成できるので、見通しをよくするためにテンプレートを利用せずシェルスクリプトにするという方法もあります。

oc new-appを実行すると、必要なDocker imageのpullや、アプリケーションのDocker imageのビルドなどが行われるので、コーヒーを淹れましょう。ビルドの状況の確認にはoc get build, oc build-logs <build name>, oc get eventなどを利用します。

ビルドが完了したら、frontendサービスにアクセス可能になっているはずです。

$ oc get service
NAME       LABELS                                   SELECTOR        IP(S)           PORT(S)
database   template=application-template-stibuild   name=database   172.30.247.13   5434/TCP
frontend   template=application-template-stibuild   name=frontend   172.30.90.201   5432/TCP
$ curl 172.30.90.201:5432
(長いので省略)

今回はDockerのサービスIPに直接アクセスできる環境でテストしていますが、本来は外部から通常のブラウザでURLアクセスを行えるようにします。このあたりはDNSの設定などが入ってくるので今回のAll-in-oneセットアップでは対象外です。

oc new-appには、github上の通常のアプリケーションのclone URLを指定することもできますし、通常のアプリケーションではなくDockerfileのあるソースツリーも指定できます。また、docker pullのpullspec形式も指定でき、既存のDocker imageをそのままOpenShift上で動作させることもできます。

oc new-app https://github.com/nekop/hello-sinatra # sinatraのhello world
oc new-app oc new-app https://github.com/openshift/centos7-wordpress  # Dockerfile
oc new-app openshift/jenkins-16-centos7 # Docker image pull

どれもビルドが終わればcurlで問題なくアクセスできるはずです。

ocコマンドさえあれば、リモートからOpenShift上のノードのどこかにあるDockerコンテナにexecを発行して操作することもできます。

oc get pod
oc exec -it -p <pod-name> bash # sshのようなリモートシェル感覚な接続
pod> ls

一般的なPaaSっぽい機能でいくと、oc scale rc frontend-1 --replicas=8のようにレプリカ増やしてコンテナ分散配置してスケールアウトができます。また、podやDockerコンテナ内のpid=1のプロセスが死んだりしても、検知して勝手に再起動して障害復旧してくれます。ローリングアップデートがサポートされているので、無停止リリースもできます。もちろんロールバックも。

OpenShiftにはアプリケーションの構成を確認するためのWebコンソールが付属しています。Vagrantではポートフォワード設定がされるので、 https://localhost:8443/console/ でアクセスできます。

f:id:nekop:20150728154333p:plain

とりあえず今回はここまで。

最後にエンタープライズ向けですが開発者ハンズオンというのを書いたので、リンク置いておきます。