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とvagrantのvagrant-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
にアクセスすることでアプリケーションが稼働していることを確認できます。