OpenShift v3 beta1 を試す

tamesu OpenShift v3 Beta1 が公開されましたので、環境構築とサンプルのデプロイ方法をご紹介します。

ホストOSのブラウザからアクセスだと、サイトのリダイレクトが発生した場合にちゃんと動かなかったりと苦労するので、今回はクライアントも一緒に使える All In One 環境としてセットアップします。

■仮想環境の準備

VirtualBox, Vagrantのインストールは、OpenShift v3 beta1rc1 を試す - akubicharm’s blogを見てください。

■■OpenShift v3をクローン

git clone git://github.com/openshift/origin
以降の説明では、cloneしたディレクトリをとします。

■■仮想OSの準備

cd <ORIGIN_HOME>
vagrant up
環境が作成されたら、ログインして設定を確認します。
vagrant ssh
■■■GUIパッケージのインストールと有効化
ここで作成される環境はサーバモードなので、All in Oneで試せるようにGUIを有効にします。
設定方法はfedora 21 server をgraphical modeに変更する - akubicharm’s blogを参考にしてください。
■■■Vagrantの設定をUIモードに変更
    # ################################
    # Set VirtualBox provider settings
    config.vm.provider "virtualbox" do |v, override|
      override.vm.box     = vagrant_openshift_config['virtualbox']['box_name'] unless dev_cluster
      override.vm.box_url = vagrant_openshift_config['virtualbox']['box_url'] unless dev_cluster
      override.ssh.insert_key = vagrant_openshift_config['insert_key']

      v.memory            = vagrant_openshift_config['memory']
      v.cpus              = vagrant_openshift_config['cpus']
      v.customize ["modifyvm", :id, "--cpus", "2"]
      # to make the ha-proxy reachable from the host, you need to add a port forwarding rule from 1080 to 80, wh
ich
      # requires root privilege. Use iptables on linux based or ipfw on BSD based OS:
      # sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1080
      # sudo ipfw add 100 fwd 127.0.0.1,1080 tcp from any to any 80 in
        # enable GUI mode
        v.gui = true
    end if vagrant_openshift_config['virtualbox']    
ここまでできたら、仮想OSを再起動します。
vagrant halt
vagrant up
f:id:akubicharm:20150212020343p:plainユーザ=vagrant、パスワード=vagrant でログインできます。 ホストOSからは
vagrant ssh
でログイン可能です。
仮想OSではホストOSでcloneしたOpenShiftのリポジトリが/data/src/github.com/openshift/originにマウントされています。。

■OpenShiftの実行

■■systemd でOpenShiftの起動ゲスト
OSでOpenShiftを起動します。
$ cd /data/src/github.com/openshift/origin
$ sudo su # ./hack/build-go.sh ++ Building go targets for linux/amd64: cmd/openshift ++ Placing binaries $ sudo systemctl start openshift
openshiftのステータスを確認します。
sudo systemctl status openshift
結果がこんな風に出力されれば、OpenShiftは正常に動作しています。
    systemctl status openshift
● openshift.service - OpenShift
   Loaded: loaded (/usr/lib/systemd/system/openshift.service; disabled)
   Active: active (running) since 水 2015-02-11 15:28:18 UTC; 1h 48min ago
     Docs: https://github.com/openshift/origin
 Main PID: 1323 (openshift)
   CGroup: /system.slice/openshift.service
           └─1323 /data/src/github.com/openshift/origin/_output/local/go/bin/openshift start --public-master=https://10.0.2.15:8443
(2015/2/11時点のソースの場合)
ここで注目するのは、
--public-master=https://10.0.2.15:8443
10.0.2.15 は VirtualBoxのNATのIPアドレスで、ここではOpenShiftが動作しているホストのIPアドレスになります。All In One環境では https://localhost:8443 にアクセスすると管理機能が利用できるようになります。
 
(2015/2/12時点のソースの場合)
--listen=http://0.0.0.0:8080というオプションになっていたので、
KUBERNETES_MASTER=http://localhost:8080
のままで良さそうです。
 

■■ prebuildバイナリでの実行

https://github.com/openshift/origin/releases/ から取得したプリビルドのバイナリで実行する場合は、以下の様にします。

   openshift start &> openshift.log & 


■■環境変数の設定

export KUBECONFIG=/openshift.local.certificates/admin/.kubeconfig
export KUBERNETES_MASTER=https://localhost:8443
export CURL_CA_BUNDLE=/openshift.local.certificates/admin/root.crt
export CERT_DIR=/openshift.local.certificates/master
  • KUBERNETES_MASTER
    管理ノードのアドレス。デフォルトでは http://localhost:8080 に設定されていますが、OpenShiftの起動オプションで --public-master=https://10.0.2.15:8443 にあわせる必要があります。
  • KUBECONFIG
    kubernetesの設定ファイル。systemdでopenshiftを実行した場合は /openshift.local.certificates/admin/.kubeconfig を設定します。それ以外の場合は、openshift コマンドを実行したディレクトリに openshift.local.certifications ディレクトリが作成されています。
  • CURL_CA_BUNDLE
  • CERT_DIR
    管理コンソールに https でアクセスする場合の認証情報が保存されているディレクトリを指定します。
    ※CERT_DIRを指定しない場合、osc コマンドの実行時には『--insecure-skip-tls-verify』オプションを指定します。
    2015/2/12時点のソースでは listen-portがhttp://localhost:8080になっているのでこの環境変数は不要。その代わりに install-registry.sh を実行する際にポートとプロトコルを指定します。
    export API_PORT=8080
    export API_SCHEME=http

Dockerリポジトリの作成

リポジトリ作成のスクリプト環境変数CERT_DIRを参照しています。
cd /data/src/github.com/openshift/origin
hack/install-registry.sh
PodとServiceの確認をします。
# osc get pods
POD                       IP                  CONTAINER(S)         IMAGE(S)                    HOST                           LABELS                                                                                                             STATUS
docker-registry-1-d73jb   172.17.0.3          registry-container   openshift/docker-registry   openshiftdev.local/127.0.0.1   deployment=docker-registry-1,deploymentconfig=docker-registry,name=registrypod,template=docker-registry-template   Running
# osc get services
NAME                LABELS                                    SELECTOR            IP                  PORT
docker-registry     template=docker-registry-template         name=registrypod    172.30.17.249       5001
kubernetes          component=apiserver,provider=kubernetes                 172.30.17.2         443
kubernetes-ro       component=apiserver,provider=kubernetes                 172.30.17.1         80    
Dockerレジストリにアクセスできることを確認します。
# curl `osc get services docker-registry -o template --template="{{ .portalIP}}:{{ .port }}"`
"docker-registry server (dev) (v0.9.0)"

ここまでできたら、OpenShifの管理コンソールにアクセできるようになります。管理コンソールには admin/admin でログイン可能です。

f:id:akubicharm:20150212193042p:plain

f:id:akubicharm:20150212025527p:plain

プロジェクトの作成

cd /data/src/github.com/openshift/origin/examples/sample-app
osc create -f project.json

サンプルアプリケーションをデプロイします

githubで公開されているサンプルアプリケーションruby-hello-worldをデプロイします。ここでデプロイするアプリケーションは Source To Image 方式のビルドなので、webhookに指定したリポジトリソースコードの変更をコミットするか、明示的にビルドコマンドが発行された場合に、ビルド&デプロイが実行されます。
今回は、明示的にビルドコマンドを発行します。

cd /data/src/github.com/openshift/origin/examples/sample-app
osc process -n test -f application-template-stibuild.json | osc create -n test -f - 
osc start-build -n test ruby-sample-build
osc get -n test builds --watch

-n test でネームスペースを指定しています。

f:id:akubicharm:20150212031124p:plain

frontend の IPアドレスとポートにアクセスすると Key/Valueを登録するRubyのアプリケーションが見えます。

f:id:akubicharm:20150212182528p:plain

fedora 21 server をgraphical modeに変更する

作業手順

1. 利用可能なGUI環境を確認する

yum grouplist

グラフィカル環境のインストール

yum groupinstall "Fedora Workstation" --skip-broken

システム設定の変更

systemctl set-default graphical.target
※変更まえは systemctl get-default で確認すると multi-user.target でした。

参考

詳細はこちらを見てください。


Graphical Desktop Environments on Fedora 21 Server | Fedora Server Working Group

OpenShift v3 beta1rc1 を試す

OpenShift v3 のβ版が github で公開されました。そこで、プリビリドされたバイナリとサンプルアプリケーションのデプロイの手順をご紹介します。

※書慣れないので、コマンドを色付けするとかうまく出来ていません。。。

■利用するソフトウェアなど

  1. Virtualbox
  2. Vagrant
  3. OpenShift v3 プリビルドバイナリReleases · openshift/origin · GitHub

■作業の流れ

  1. OpenShiftをデプロイする仮想環境の準備
  2. OpenShift v3 の環境構築
  3. サンプルアプリケーションのデプロイ

■手順

1. OpenShiftをデプロイする仮想環境の準備

当初はOpenShift v3 のDocker Imageを利用しようと試みていましたが、いくつかうまくいかないことがあったのでVirtualBoxを使って仮想環境を作成することしました。OpenShiftOriginのプロジェクトはVagrantを使って簡単に環境構築ができるよになっています。

VirtualBoxのインストール

ホストOSにはRHEL7を使っているのでVirtualBox 4.3 on CentOS 7 / RHEL 7を参考してインストールします。

Vagrantのインストール

Download Vagrant - VagrantからVagrantをダウンロードしてインストールします。

仮想OSの設定

https://github.com/openshift/origin/blob/master/CONTRIBUTING.adoc#develop-on-virtual-machine-using-vagrant に従い仮想OSを設定します。

この作業は、ホストOSで実行します。

  • github からopenshift-origin を取得
    $ git clone git://github.com/openshift/origin
  • 以降、openshift-originのトップディレクトリを<ORIGIN_HOME>とします。
  •  仮想OSの設定

    cd <ORIGIN_HOME>
    $ vagrant up
  • 仮想OSにログイン
    $ vagrant ssh
仮想OSにOpenShiftの環境構築
  • ログインの確認
    $ ls
    bin  sync
    $ id
    uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),991(docker) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
  • 設定の確認
    docker の起動オプションに"--insecure-registry 172.30.17.0/24" が設定されてることを確認します。
    ----
    $ cat /etc/sysconfig/docker
    # /etc/sysconfig/docker
    # Modify these options if you want to change the way the docker daemon runs
    OPTIONS='--insecure-registry=172.30.17.0/24 --selinux-enabled -H fd://'
    DOCKER_CERT_PATH=/etc/docker
    ---
    

2. OpenShift v3 の環境構築

  • プリビリドバイナリとソースコードの入手
    https://github.com/openshift/origin/releasesからバイナリとソースコードを取得します
    [vagrant@openshiftdev ~]$ tar ztvf openshift-origin-v0.2.2-a58b1fb-linux-amd64.tar.gz 
    drwxr-xr-x root/root         0 2015-02-04 03:48 ./
    -rwxr-xr-x root/root  45165144 2015-02-04 03:48 ./osc
    -rwxr-xr-x root/root  45165144 2015-02-04 03:47 ./openshift
    [vagrant@openshiftdev ~]$ tar ztvf v0.2.2.tar.gz
    drwxrwxr-x root/root         0 2015-02-04 00:43 origin-0.2.2/
    -rw-rw-r-- root/root       204 2015-02-04 00:43 origin-0.2.2/.gitignore
    -rw-rw-r-- root/root       597 2015-02-04 00:43 origin-0.2.2/.travis.yml
    -rw-rw-r-- root/root      8096 2015-02-04 00:43 origin-0.2.2/CONTRIBUTING.adoc
    -rw-rw-r-- root/root       698 2015-02-04 00:43 origin-0.2.2/Dockerfile
    <まだまだたくさんファイルが含まれています>
    
    https://github.com/openshift/origin/blob/master/examples/sample-app/README.mdに従って、サンプルアプリケーションをデプロイします。
  • Openshiftの起動
    $ sudo ./openshift  start &> logs/openshift.log &

    コマンドを実行したディレクトリに openshift.local.certificates  openshift.local.etcd  openshift.local.volumes という3つのディレクトリができます。
  • 環境変数の設定
    OpenShiftの起動で作成されたファイルのオーナは root になっているので、権限を追加します。
    $ export KUBECONFIG=`pwd`/openshift.local.certificates/admin/.kubeconfig
    $ export CURL_CA_BUNDLE=`pwd`/openshift.local.certificates/admin/root.crt
    $ export CERT_DIR=`pwd`/openshift.local.certificates/master
    ※CERT_DIR は次の install-registry.sh を実行するために必要な環境変数です。
    $ sudo chmod +r `pwd`/openshift.local.certificates/admin/key.key
    $ sudo chmod +r `pwd`/openshift.local.certificates/master/key.key
  • <ローカルの Docker Registry を作成
    $ cd <ORIGIN_HOME>
    $ ./hack/install-registry.sh
    [INFO] Submitting docker-registry template file for processing
    docker-registry
    docker-registry
  • レジストリのPodができていることを確認します
    $ osc get pods
    POD                                    IP                  CONTAINER(S)         IMAGE(S)                    HOST                  LABELS                                                                                                             STATUS
    e6997a19-ad14-11e4-8d65-080027c5bfa9   172.17.0.13         registry-container   openshift/docker-registry   openshiftdev.local/   deployment=docker-registry-1,deploymentconfig=docker-registry,name=registrypod,template=docker-registry-template   Running

    $ osc get services
    NAME                LABELS                                    SELECTOR            IP                  PORT
    docker-registry     template=docker-registry-template         name=registrypod    172.30.17.5         5001
    kubernetes          component=apiserver,provider=kubernetes   <none>              172.30.17.243       443
    kubernetes-ro       component=apiserver,provider=kubernetes   <none>              172.30.17.95        80
  • レジストリへのアクセスを確認
    $ curl `osc get services docker-registry -o template --template="{{ .portalIP}}:{{ .port }}"`
    "docker-registry server (dev) (v0.9.0)"

    ※ openshift-origin の docker image ではここが出来ませんでした。。。
  • プロジェクトの作成
    OpenShift v2 ではドメインと呼んでいた概念がプロジェクトという名称に変わりました。
    
    $ cd <ORIGIN_HOME>examples/sample-app
    $ osc create -f project.json
    test

    作業する namespace を、今作成したプロジェクトのnamespaceである"test"に設定します。

    $ osc namespace test
    Set current namespace to test
    F0205 09:02:49.329490   27652 namespace.go:57] open : no such file or directory

    ※エラーの原因究明は後日に、、、。name は設定されているけど、namespaceが正しくされておらず、default になっている模様。
  • 管理コンソールの確認
    ここでホストOSのブラウザからhttps://localhost:8444へアクセスすると、OpenShiftOriginの管理コンソールが現れます。ジャジャーン♪
    VirtualBoxのNATの設定でポートフォワーディングが設定されているので localhost で接続可能です。

f:id:akubicharm:20150205184750p:plain

3. サンプルアプリケーションのデプロイ

githubで公開されている ruby のアプリケーションをデプロイし、Source To Build を実行します。

  • アプリケーションの作成
    $ cd <ORIGIN_HOME>/examples/sample-app
    $ osc process -f application-template-stibuild.json | osc create -f -
    frontend
    origin-ruby-sample
    database と frontend というサービスができていることを確認します。

    $ osc get services
    NAME                LABELS                                    SELECTOR            IP                  PORT
    database            template=ruby-helloworld-sample           name=database       172.30.17.24        5434
    frontend            template=ruby-helloworld-sample           name=frontend       172.30.17.127       5432

    ruby-helloworld-sample という pod ができていることを確認します。

    $ osc get pods
    POD                                    IP                  CONTAINER(S)               IMAGE(S)                    HOST                  LABELS                                                                                                             STATUS
    646c6c8f-ad18-11e4-8d65-080027c5bfa9   172.17.0.15         ruby-helloworld-database   mysql                       openshiftdev.local/   deployment=database-1,deploymentconfig=database,name=database,template=ruby-helloworld-sample                      Running

 

  • Source To Image ビルドの実行
    本当ならば、webhook の指定をして、ソースコードの変更をトリガにしたいところですが、ここでは、openshift master に変更を通知しビルドを実施します。

    $ curl -X POST https://localhost:8443/osapi/v1beta1/buildConfigHooks/ruby-sample-build/secret101/generic?namespace=default


    README(参考にしたサイト[2]) のstep 14の通りに実行すると、”buildConfig "ruby-sample-build" not found"となり buildConfig が見つかりません。default ネームスペースに作成されているようなので、namespace=default とします。

    $ osc get builds
    NAME                                   TYPE                STATUS              POD
    f765cd24-ad18-11e4-8d65-080027c5bfa9   STI                 Running             build-f765cd24-ad18-11e4-8d65-080027c5bfa9

    $ osc get builds --watch
    NAME                                   TYPE                STATUS              POD
    f765cd24-ad18-11e4-8d65-080027c5bfa9   STI                 Complete            build-f765cd24-ad18-11e4-8d65-080027c5bfa9

    ビルドのステータスが"Complete"となれが完了です。"Failed"となった場合は、

    $ osc build-logs <build name>

    ※<build name> は、osc get builds で出力されるNAMEを指定で、ビルドログを確認してください。
  • アプリケーションの確認
    $ osc get services |grep ruby-helloworld-sample
    database            template=ruby-helloworld-sample           name=database       172.30.17.24        5434
    frontend            template=ruby-helloworld-sample           name=frontend       172.30.17.127       5432
    フロントエンドサービスのアドレスにアクセスし、アプリケーションがデプロイされていることを確認します。
    今回の場合は http://172.30.17.127:5432 です。

 

f:id:akubicharm:20150205184703p:plain

 

 参考にしたサイト

[1]https://github.com/openshift/origin/blob/master/CONTRIBUTING.adoc

[2]https://github.com/openshift/origin/blob/master/examples/sample-app/README.md

 

メモ

STI Build ソースコードの変更をトリガーとする場合
ruby-hello-world をFORK
右側のメニューから Settings を選択
左側のメニューから Webhooks & Services を選択
真ん中のWebhoooksの「Add webhook」を選択

JBoss Fuse Fabric の使い方-お試し編

コンテナ作成と確認

  1. Fabricコンテナ作成
    JBossFuse:karaf@root> fabric:create --new-user AdminUser --new-user-password AdminPass
      --zookeeper-password ZooPass --wait-for-provisioning
  2. rootのサブコンテナ作成
    JBossFuse:karaf@root> fabric:container-create-child root child
  3. コンテナリスト確認
    JBossFuse:karaf@root> shell:watch container-list
  4. サンプルのデプロイ
    JBossFuse:karaf@root> fabric:container-change-profile child example-camel-twitter
    ※Getting Start Guideでは example-camel-hello となっているが、jboss-fuse-6.1.0.redhat-379/fabric/import/fabric/configs/versions/1.0/profiles にないので twitterに変更
  5. コンテナリスト確認
    JBossFuse:karaf@root> shell:watch container-list

Fabric Web App

http://localhost:8181

参考

https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Fuse/6.1/html/Fabric_Guide/

OpenShift OnlineのDBの活用方法

OpenShift のDIYカートリッジとポートフォワーディングを活用して、OpenShift Online上のデータベースがあたかもローカルにインストールされているかのように利用することができます。

作業の流れ

  1. OpenShift Onlineへログイン
  2. DIYカートリッジを利用したアプリケーションを作成
  3. 2で作成したアプリケーションにデータベーすのカートリッジを追加
  4. ポートフォワーディングを開始
  5. クライアントアプリケーションで接続

実践

PostgreSQL9.2カートリッジを利用する mydb というアプリケーションを作成していきます。

 DIYカートリッジを利用したアプリケーションの作成

$ rhc create-app mydb diy-0.1

データベースカートリッジの追加

ここでは、PostreSQLカートリッジを mydb アプリケーションへ追加します。

$ rhc cartridge add postgresql-9.2 -a mydb

Adding postgresql-9.2 to application 'mydb' ... done

postgresql-9.2 (PostgreSQL 9.2)
-------------------------------
  Gears:          Located with diy-0.1
  Connection URL: postgresql://$OPENSHIFT_POSTGRESQL_DB_HOST:$OPENSHIFT_POSTGRESQL_DB_PORT
  Database Name:  mydb
  Password:       mqDgzBCpUbLX
  Username:       admin4cphbbk

カートリッジが追加されると、データベースのユーザとパスワード、DB名が表示されます。

ポートフォワーディングの有効化

$ rhc port-forward mydb
Checking available ports ... done
Forwarding ports ...

To connect to a service running on OpenShift, use the Local address

Service    Local               OpenShift
---------- -------------- ---- ----------------
postgresql 127.0.0.1:5432  =>  127.2.112.2:5432
ruby       127.0.0.1:8080  =>  127.2.112.1:8080

Press CTRL-C to terminate port forwarding

接続確認

DB接続のクライアントアプリケーションで接続を確認します。ここではSQuirrelSQLを使って接続してみます。

URL jdbc:postgresql://localhost:5432/mydb
User Name  admin4cphbbk
Password  mqDgzBCpUbLX

ユーザ名とパスワードは、PostgreSQLカートリッジを追加した時に設定されたユーザとパスワードです。