nekop's blog

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

openshift-ansibleとVagrantでOpenShift Origin v1.1を構築する

この投稿はOpen PaaS Advent Calendar 2015の8日目の記事です。

OpenShiftにはopenshift-ansibleというインストーラーのプロジェクトがあり、Vagrantと組み合わせて簡単にOpenShiftの実行環境が構築できるようになっています。VagrantでのセットアップについてはREADME_vagrant.mdに記述されています。

デフォルトの設定では以下の3台構成のOpenShiftができあがります。

192.168.100.100 ose3-master.example.com
192.168.100.200 ose3-node1.example.com
192.168.100.201 ose3-node2.example.com

これを自分の4 CPU cores, 12GBメモリのラップトップで構築してみましょう。Fedora 23でのVagrant libvirtのセットアップまでのステップはVagrantで構築編を参照してください。

openshift-ansibleではansibleとvagrantvagrant-hostmanagerプラグインが必要ですので、それらもインストールします。

sudo dnf install ansible -y
vagrant plugin install vagrant-hostmanager

CPUやメモリの設定はVagrantfileにハードコードされていますが、多少控え目に定義してあって実際に利用するとつらい感じになりやすいので、cloneした後に若干増やしておきます。

-    libvirt.cpus = 2
-    libvirt.memory = 1024
+    libvirt.cpus = 4
+    libvirt.memory = 2048

vagrant upのときに--no-provisionを忘れずにつけましょう。忘れると1ノード時点でprovisionがはじまってしまうのでやり直すはめになります。

vagrant provisionを実行するとAnsibleによるインストールがはじまるので、結構時間がかかります。

git clone https://github.com/openshift/openshift-ansible/
cd openshift-ansible
vi Vagrantfile # modify cpus and memory if needed
vagrant up --provider=libvirt --no-provision
vagrant provision

マルチノード構成なので、masterノードで作業します。

vagrant ssh master

oc get nodeを実行すると3台構成となっているのがわかります。

oc get node
NAME                      LABELS                                           STATUS                     AGE
ose3-master.example.com   kubernetes.io/hostname=ose3-master.example.com   Ready,SchedulingDisabled   26m
ose3-node1.example.com    kubernetes.io/hostname=ose3-node1.example.com    Ready                      26m
ose3-node2.example.com    kubernetes.io/hostname=ose3-node2.example.com    Ready                      26m

docker registryとrouterを作成しましょう。3台くらいの構成ではmasterにregistryとrouterを稼働させるのが一般的です。デフォルトでschedulable=falseとなっているので、このときだけtrueに変更します。

sudo oadm manage-node ose3-master.example.com --schedulable=true
sudo oadm registry --selector=kubernetes.io/hostname=ose3-master.example.com --credentials=/etc/origin/master/openshift-registry.kubeconfig --service-account=registry
sudo oadm router   --selector=kubernetes.io/hostname=ose3-master.example.com --credentials=/etc/origin/master/openshift-router.kubeconfig   --service-account=router
sleep 120 # docker pullがどのくらいの時間で終わるのかは環境依存なので、目視確認したりsleep調整したりしてください
sudo oadm manage-node ose3-master.example.com --schedulable=false

master-config.xmlのsubdomainにxip.ioを記述しておくとアプリケーションもそのままアクセスできるようになるので設定しておきましょう。

sudo vi /etc/origin/master/master-config.yaml
# Change the subdomain value as follows:
#   subdomain:  "apps.192.168.100.100.xip.io"
sudo systemctl restart origin-master

これでmaster上での作業は終わりです。あとはVagrantホストからリモートで利用できます。

vagrant-hostmanagerプラグインによって、vagrantホストの/etc/hostsエントリも追加されるので、ブラウザでWebコンソールにアクセス可能になっています。オレオレTLSなので警告が出ます。

https://ose3-master.example.com:8443/console/

認証はAllowAllが設定されているので、適当なユーザ名と空ではないパスワードで認証が通るようになっています。

ブラウザアクセスだけではなく、ocコマンドももちろん利用できます。masterからocコマンドを取ってきて実行すれば良いです。

vagrant ssh master -- cat /usr/bin/oc > oc
chmod +x ./oc
./oc version
./oc login ose3-master.example.com

さて、プロジェクトを作成してアプリケーションを放り込んでみましょう。

./oc login ose3-master.example.com --username=nekop
./oc new-project test
./oc new-app https://github.com/nekop/hello-sinatra
./oc expose service hello-sinatra

oc get allで状態を確認すると以下のように見えます。

./oc get all
NAME                    TYPE                                             FROM      LATEST
hello-sinatra           Source                                           Git       1
NAME                    TYPE                                             FROM      STATUS    STARTED         DURATION
hello-sinatra-1         Source                                           Git       Running   2 minutes ago   2m48s
NAME                    DOCKER REPO                                      TAGS      UPDATED
hello-sinatra           172.30.90.98:5000/test/hello-sinatra                       
NAME                    TRIGGERS                                         LATEST
hello-sinatra           ConfigChange, ImageChange                        0
NAME                    HOST/PORT                                        PATH          SERVICE         LABELS                                             INSECURE POLICY   TLS TERMINATION
hello-sinatra           hello-sinatra-test.apps.192.168.100.100.xip.io                 hello-sinatra   app=hello-sinatra                                                    
NAME                    CLUSTER_IP                                       EXTERNAL_IP   PORT(S)         SELECTOR                                           AGE
hello-sinatra           172.30.44.105                                    <none>        8080/TCP        app=hello-sinatra,deploymentconfig=hello-sinatra   2m
NAME                    READY                                            STATUS        RESTARTS        AGE
hello-sinatra-1-build   1/1                                              Running       0               2m

ビルドが終われば、http://hello-sinatra-test.apps.192.168.100.100.xip.ioにアクセスすることでアプリケーションが稼働していることを確認できます。