覚書 - Vagrant/VirtualBox On Mac での色々

環境

vagrant 1.7.4

Virtualbox 5.0.3

ゲストOSのネットワークアダプタは、NATとホストオンリーネットワーク

 

ホストOSの設定

ホストオンリーネットワークを利用するために、vboxnetX を作成。ゲストOSはIPを固定にするので、DHCPは無効

VirtualBox - ネットワークの設定

アダプター(例)

ゲストOSを 192.168.232.0/24 のネットワークに接続する場合

  • IPv4アドレス : 192.168.232.1
  • IPv4ネットマスク: 255.255.255.0

ゲストOSの設定

DNSの設定

NATは10.0.2.15 になっている。ホストOSをDNSサーバに見立てる場合は、ifcfg-ethxxx(NAT側のアダプタ)に

DNS1=10.0.2.3

を追加する。

こうすれば、ホストOSがどのネットワークに接続されているかを気にすることなく、名前解決が可能になる。

 

覚書 - コンテナの名前解決のトラブルシューティング

OpenShiftのビルド用コンテナからgithub.comなどが見えない場合

Docker 内で名前解決ができていない場合は、dockerデーモンのオプションで明示的にDNSサーバを指定すれば良い。

ex) --dns 8.8.8.8

Docker内で名前解決が行われない場合の対処法 - Qiita

 

デプロイ対象のテンプレートアプリケーションをDockerで動かす

docker run -it openshift3/nodejs-010-rhel7  /bin/sh

ここで、名前解決できるか確認すれば OK

覚書-OpenShift内部の使用リソースの除去(Pruning)

パッとわかりにくかったので、備忘録として。

OpenShiftには、不要になったリソースを除去するためのCLIのコマンドがあります。対象となるリソースは、builds, deploymentsとimagesです。

builds - Docker Build, S2I Build, Custom Buildを実行するために生成されるオブジェクト。ビルドの度に生成されるので、何度もビルドをしていると溜まっていきいます。

deployments - デプロイを実行するためにに生成されるオブジェクト。

images - ビルドの結果生成さ、OpenShift内部に保存されるDocker Image。

builds, deployments はマニュアルに記載の通り system:admin というシステムアカウントで実行すれば、除去することができます。

$ oadm prune builds
$ oadm prune deployments

ですが、images の除去はちょっと違います。

$ oadm prune images
error: You must use a client config with a token

OpenShiftのユーザとしてログインしてから実行する必要がありますが、ここで準備が必要になります。通常のユーザには、system:image-prunerの権限がありません。 まず、OpenShiftの管理者でユーザ(ここではjoe)に system:image-pruner の権限を付与します。

$ oadm policy add-cluster-role-to-user system:image-pruner joe
$ oc login --username joe
$ oadm prune images
Dry run enabled - no modifications will be made. Add --confirm to remove images

Deleting registry layer blobs ...
BLOB
sha256:ddf7338aedaa23ecb45fe7adc222ee367bf822a8fe576e1ef02566a75ba07c2d
sha256:51352e3baedfe18f25986f24992fd79b403885301477ba28d293bb9ea1b177d9
sha256:1986487abec7fd451a1247e4ff522103b37d3f184758fb701518e44d8ef619a8
sha256:162699bb928f7acb06ece7a699006cc71aa18c08045d7bcc7075381a36c2962d
sha256:ae823ba6c0be979b400879198a21b8c629a7933d1c24c166ff4f546a214063c5

Deleting images from OpenShift ...
IMAGE
sha256:4d3785ddc85f1c53105b54792a23ee4c4ccf6e27cf4f1dcb597094d8d182a345

詳細は、Administrator Guide[1]をご参照ください。

[1]https://access.redhat.com/documentation/en/openshift-enterprise/version-3.0/openshift-enterprise-30-administrator-guide#pruning-resources

RHEL7のIPアドレスの割り当てをDHCPから固定アドレスに変更する方法

すぐに忘れちゃうので、自分用にメモ

Networkscripts の変更

[/etc/sysconfig/network-scripts/ifcfg-eth0]

BOOTPROTO を dhcp から static に変更する
BOOTPROTO="static"

 

DNS設定を追加する
NETMASK="255.255.255.0"
GATEWAY="10.208.81.3"
IPADDR="10.208.81.237"
DNS1="10.208.81.237"
SEARCH="example.com"
DNS2="10.208.81.1"

 

 

FQDNの変更

[/etc/hosts] を編集する

[/etc/hostname]を編集する

hostnamectl コマンドでホスト名を設定する

 hostnamectl --static set-hostname  ose3b3-master

hostname, hostname -f コマンドで確認する

systemctl restart systemd-hostnamed

 

http://sharadchhetri.com/2014/09/27/set-hostname-fqdn-centos-7-rhel-7/

 

 

 

Openshift Origin v0.4.3のWebUI - クリックでアプリケーション作成

OpenShift Origin v0.4.3 をインストールしてみたら、「Create+」というボタンがついていました。何ができるのかなと試してみたところ、CLIではなくWebの管理画面からアプリケーションをデプロイすることができました。

Web画面で選択できるアプリケーションは、OpenShift に予め登録されたアプリケーションテンプレートです。

将来的にはWeb Hosting | OpenShift Hubからアプリケーションを入手して作成するということもできるようになるのでしょう。

今回は、アプリケーションテンプレートの登録方法とこの機能の利用方法を、OpenShift v3 beta (v0.4)を試す - akubicharm’s blog で作成した panda ユーザを使ってご紹介します。

ユーザとプロジェクト

ユーザの準備

[root@local] # useradd panda

プロジェクトの作成

管理コンソールでの指示に従って、プロジェクトの作成とポリシーの設定をします。

ユーザ panda
プロジェクト demo
[root]# openshift ex new-project demo --admin=panda
[root]# openshift ex policy add-role-to-user admin panda -n demo

テンプレート

ここではシンプルなアプリケーションを作成するテンプレート(akubicharm/openshift-v3-application · GitHubの hello-pod-temlate.json)を利用します。

テンプレートの登録

-f オプションでテンプレートを指定し、-n オプションでプロジェクトを指定します。

[root]# osc create -f hello-pod-template.json -n demo
templates/hello-pod-template
[root]# osc get template -n demo
NAME                 DESCRIPTION   PARAMETERS    OBJECTS
hello-pod-template                 0 (all set)   1

テンプレートは panda ユーザでも登録することが出来ます。 pandaユーザで demo プロジェクトでの操作ができるように osc login コマンドでログインします。ログイン時に -n オプションで demo プロジェクトを指定していますので、osc create 実行時は -n オプションは不要です。

[root]# su - panda
[panda]$ osc login -u panda -p panda -n demo
[panda]$ osc create -f hello-pod-template.json
テンプレートでの定義内容

テンプレートではアプリケーション作成時に指定可能なパラメータを定義しておくことも可能ですが、今回は単純なテンプレートなので、パラメータの定義はありません。

メタデータセクション この定義の名称などを定義します。
name": "hello-pod-template"
テンプレート定義セクション テンプレートの情報を定義します
"kind": "Template",
"apiVersion": "v1beta1",
"description": "Hello Pod Template",
アイテムズセクション 通常のアプリケーション定義。ポートのマッピングなどを定義します
"ports": [{
  "hostPort": 6061,
  "containerPort": 8080
}]

アプリケーションの作成

  1. ログイン
    panda/panda でログインします。

    f:id:akubicharm:20150416212910p:plain

  2. プロジェクトの選択
    「demo」プロジェクトを選択します。

    f:id:akubicharm:20150416213029p:plain

  3. 作成開始
    画面右上の「Create+」ボタンをクリックして、アプリケーションの作成を開始します。

    f:id:akubicharm:20150416212959p:plain

  4. テンプレートの選択
    「Browse all templates...」ボタンをクリックすると、テンプレート選択画面が表示されます(まだ、一つしかテンプレートを登録していないので寂しい…)。ここで「hello-pod-template」を選択すると、確認のダイアログが表示されます。ここで「Select template...」ボタンをクリックしてテンプレートの選択を確定します。

    f:id:akubicharm:20150416213141p:plain

  5. アプリケーションの作成
    画面下部の「Create」ボタンをクリックするとアプリケーションの作成が始まります。成功を示すポップアップが表示されたら完成です。

    f:id:akubicharm:20150416213441p:plain

    f:id:akubicharm:20150416213615p:plain

hello-openshift アプリケーションは、コンテナの8080ポートをローカルホストの6061ポートにマッピングしているのでhttp://localhost:6061にアクセスすると"Hello OpenShift!"と表示されます。

[root]# curl http://localhost:6061
Hello OpenShift!

OpenShift v3 beta (v0.4)を試す

暫くアップデートしていなかったので、最新版はどうかなということで試してみました。

#日々、こまごまと変化しており、4/12にcloneしたソースコードとすでに変わってます。。。

環境構築

仮想OS の起動

Release v0.4.3 のソースコードアーカイブでは hack/build-go.sh がうまく行かなかったので、素直に git clone で最新のソースコードを取得すること方が良さそうです。

手順は以下の通りです。

(1) git clone https://github.com/openshift/origin.git

(2) cd <ローカルのクローンしたディレクトリ>

(3) vagrant up で、仮想OS の起動

(4) vagrant ssh で、仮想OSへログイン

(5) cd /data/src/github.com/openshift/origin; hack/build-go.sh

※/data/src/github.com/openshift/origin にホストOSのクローンしたディレクトリがマウントされています。

(6) sudo systemctl start openshift

インストールの詳細はOpenShift v3 beta1 を試す - akubicharm’s blog を見てください。(ただし、GUI モードだとちゃんと動作しないので、GUIパッケージのインストールと有効化はやらないでください)

動作確認

systemd の状態を確認すると、以下のようにpublic-master=https://10.0.2.15:8443  とNATのアドレスの 8443 ポートで管理コンソールが動作するようになっています。

[root@openshiftdev etc]# systemctl status openshift
● openshift.service - OpenShift
   Loaded: loaded (/usr/lib/systemd/system/openshift.service; disabled)
   Active: active (running) since Sun 2015-04-12 14:58:16 UTC; 45min ago
     Docs: https://github.com/openshift/origin
 Main PID: 18782 (openshift)
   CGroup: /system.slice/openshift.service
           ├─18782 /data/src/github.com/openshift/origin/_output/local/go/bin/openshift start --public-master=https://10.0.2.15:8443
           └─18822 journalctl -f

8443ポートはポートフォワーディングの設定がされているので、ホストOS のブラウザかで https://localhost:8443/console へアクセスすると、管理コンソールらしき画面が表示されます。

しかし、、、。ログイン画面は public-master で指定された URL にフォワードされるので NAT のアドレスになっていると、ホストOSのブラウザからはアクセスできません。

そこで、/usr/lib/systemd/system/openshift.service の起動オプションを次のように変更します。

[Unit]
Description=OpenShift
After=docker.service
Requires=docker.service
Documentation=https://github.com/openshift/origin

[Service]
Type=simple
EnvironmentFile=-/etc/profile.d/openshift.sh
#ExecStart=/data/src/github.com/openshift/origin/_output/local/go/bin/openshift start --public-master=https://10.0.2.15:8443
ExecStart=/data/src/github.com/openshift/origin/_output/local/go/bin/openshift start --public-master=https://localhost:8443

[Install]
WantedBy=multi-user.target

OpenShift を再起動します。

systemctl restart openshift
管理コンソールへのログイン

これで、ホストOSのブラウザで管理コンソールが表示されました。

admin/admin でログインでログインすることができます。

f:id:akubicharm:20150413015156p:plain

管理コマンドの利用

プロジェクトを作成しアプリケーションをデプロイする前に、環境変数を変更します。KUBERNETES_MASTER=http://localhost:8080

となっていますが、https://localhost:8443 で起動するようになっていますので、OpenShift v3 beta1 を試す - akubicharm’s blog と同様に環境変数を変更します。

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



これで osc コマンドが使えるようになりました。osc status で確認すると次のように出力されます。

[root@openshiftdev ~]# osc status
In project default

service kubernetes (172.30.0.2:443 -> 443)

service kubernetes-ro (172.30.0.1:80 -> 80)

To see more information about a service or deployment config, use 'osc describe service <name>' or 'osc describe dc <name>'.
You can use 'osc get pods,svc,dc,bc,builds' to see lists of each of the types described above.

ローカルの Docker Registoryの作成

/data/src/github.com/openshift/origin/examples/sample-app/pullimages.shで Docker Image をダウンロード

[root@openshiftdev sample-app]# openshift ex registry --create --credentials=/openshift.local.certificates/openshift-registry/.kubeconfig --images=openshift/docker-registry:latest
services/docker-registry
deploymentConfigs/docker-registry
[root@openshiftdev sample-app]# osc get services
NAME              LABELS                                    SELECTOR                  IP             PORT(S)
docker-registry   docker-registry=default                   docker-registry=default   172.30.96.26   5000/TCP
kubernetes        component=apiserver,provider=kubernetes   <none>                    172.30.0.2     443/TCP
kubernetes-ro     component=apiserver,provider=kubernetes   <none>                    172.30.0.1     80/TCP

確認は example/sample-app/README.md ではcurl `osc get service docker-registry --template="{{ .portalIP }}:{{ .port }}"`と書いてありますが、ポート番号の表記方法が異なるため、この方法では確認ができません。

[root@openshiftdev ~]# osc get services | grep registry
docker-registry   docker-registry=default                   docker-registry=default   172.30.136.235   5000/TCP
[root@openshiftdev ~]# curl 172.30.136.235:5000
"docker-registry server (dev) (v0.9.0)"

プロジェクトの作成
[root@openshiftdev sample-app]# openshift ex new-project test --display-name="OpenShift 3 Sample" --description="This is an example project to demonstrate OpenShift v3" --admin=panda
[root@openshiftdev ~]# osc login -u panda -p panda
Login successful.

Using project "test"
[root@openshiftdev ~]# osc project test
Now using project "test" on server "https://10.0.2.15:8443"

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