OpenShift Origin Minishiftとは
RedHat社が提供するOpenShift環境のOrigin(RedHatからみたfedora的な位置づけのOSSプロダクト)、検証環境です。
オフィシャルサイト: OpenShift Origin - Minishift
OpenShiftでは、PaaS開発環境としてS2Iという機能がある他、
Docker + Kubernetesの上に成り立つプラットフォームで、コンテナオーケストレーションがすごいプロダクトです。
盛大な開発環境を用意しなくとも、minimumでこのopenshiftを使えますよ。というものです。
KVMや、Hyper-V、xhyveなど仮想環境上に、VMをロードし、仮想マシン+コンテナを動かして、
OpenShiftのコンポーネントさえもdockerイメージで動かしてしまうようです。
(このあたりの概要はまだ完全な理解で無いため、意図が正しくない場合はすいません)
Minishiftのインストールできるバリエーション
どれがオススメというわけではありませんが、1、2は私が実際に導入までこぎつけました。
3,4,は私の環境特有の問題ということで、断念です。
macbook(xhyve)に入れる。
home brewを使ってインストール出来るので割りと考慮点なくサクッと入ったイメージ。
実は初めて使ったのですがxhyveという仮想環境をhomebrewの上で構築されます。
後日書く予定。KVM based linuxに入れる。
今回の記事。
ただし、実機ではなく、VMware Workstation上に。
この記事ではOpenShift Originを入れることをメインに書きますが、
VMware Workstationなどの仮想環境に入れた際に考慮するポイントを書きます。Windows Hyper-V上に入れる
実はVMware Workstationに入れようとしてうまく行かなくて、
Hyper-VとVMware Workstation共存環境作ろうとしたのですが・・・ 諦めました。
(Device Guardまわりで、VMware Workstationの方に影響したので)Windows Virtual Boxに入れる
3と理由は同じで検討しましたが、Hyper-V入れたあとVMware WorkstationのVMが全て動かなくなり、
半泣きになったので諦めました。
実際にはmacbookで遊んでいるのですが、広いデスクトップでもopenshiftであそびたーい!ということで、Windows10上にVMで立ててみることとしました。
今回はうまくWindows nativeに建てられなかったので、もう少し課題が残っていますが起動するところまではこぎつけたので記録と紹介を兼ねてUpです。
インストールに使用した環境
ホストOS
環境 | 構成 |
---|---|
Host OS | Windows 10 Pro 64 Bit |
Hypervisor | VMware Workstation Pro12 |
ゲストOS
環境 | 構成 |
---|---|
GustOS | CentOS 7.3 64bit |
Guest vCPU | 2core |
Guest vMem | 8GB |
Guest vHDD | 100GB |
Guest vNIC | Bridge |
ゲストOSのインストール
ゲストVMの設定
仮想マシンのハードウェア互換性の選択
ハードウェア互換性を「Workstation 12.x」のままで「次へ」をクリックします。
ゲストOSの選択
ゲストOS「Linux」、バージョン「CentOS 64 ビット」を選択し、「次へ」をクリックします。
プロセッサ構成
プロセッサ数「2」、プロセッサごとのコア数「1」としますが、
環境と必要数にそって変更してください。
指定後、「次へ」をクリックします。
ディスク容量の指定
ディスクサイズはまず100GBとしました。
I/Oパフォーマンスを重視して、「今すぐ全ディスク容量を割り当てる」と選択し、
「仮想ディスクを単一ファイルとして格納」を選択後、「次へ」をクリックします。
ハードウェアのカスタマイズ#1 プロセッサ
非常に重要です!
VMware上に、Hypervisorを更に載せて仮想化するため、
「Intel VT-x/EPT または AMD-V/RVIを仮想化」をクリックし有効にします。
これを実行しないとKVMが有効になりません。
ハードウェアのカスタマイズ#2 CD-ROM
ISOイメージから"CentOS-7-x86_64-Minimal-1611.iso"を選びます。
選択後、「閉じる」をクリック、「完了」をクリックします。
ゲストOSのインストール
VMをパワーオンしてインストールを開始します。
ネットワークとホスト名
ホスト名を入力して、「適用」をクリック
イーサネットの「オフ」をクリックして「オン」にする。
「設定」をクリックする。
ネットワークとホスト名(IF設定ー>IPv4のセッティング)
静的IPアドレスを設定して、「保存」(画面上では切れて「保」のみですが・・・)をクリック
インストールの開始
「インストールの開始」をクリック。
インストールが始まりますが、rootユーザ、一般ユーザのパスワード入力を求められるので適宜変更します。
再起動
インストール完了後、「再起動」のボタンが表示されるので再起動します。
ゲストOSの設定
パッケージのアップデート
ここは有無言わずにまずはパッケージのアップデートです。
# yum -y update
基礎パッケージの導入
VMware WorkstationのVMですので、vmware-toolsを使います。
ここの所個人的には純正のVMware-toolsを使わず、RPMのみでお手軽導入できるopen-vm-toolsを利用します。
# yum install -y open-vm-tools
wgetの導入
個人的に欲しくて入れてますが、ご自由に
※minishiftパッケージがうまく落とせなくて、私はwgetを利用しました
# yum install -y wget
KVMのインストール
- KVMまわりのパッケージ
kvmとインターフェースをブリッジするツールをインストールします。
# yum -y install qemu-kvm libvirt virt-install bridge-utils virt-manager
- KVMの起動・有効化 KVMインストール後はデフォルトで自動起動になっているので、 起動のみ行います。
# systemctl start libvirtd
- KVM有効の確認 以下のようにkvmのモジュールがロードされていることを確認します。 ゲストVMの設定で「Intel VT-x/EPT または AMD-V/RVIを仮想化」を忘れると、 このモジュールが読み込まれません。
# lsmod | grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm
KVMのインターフェース設定
KVM(libvirt)のインストールが終わると、仮想NICが追加されます。
デフォルトインストールでは、インターフェースがブリッジされず、外と通信できません。
このままでは、minishiftで立ち上がってくるコンテナが見えないため、
ブリッジの設定を行います。
- インターフェースの確認
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:72:82:31 brd ff:ff:ff:ff:ff:ff
inet 192.168.xxx.172/24 brd 192.168.xxx.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::39e2:465f:f926:cbae/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:1a:9b:8f brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:1a:9b:8f brd ff:ff:ff:ff:ff:ff
- IPv4ブリッジの為、パケット転送を許可する
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
# echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/10-ipv4.conf
CentOS 7.xからNetworkManagerが主流なので、逆らわずにnmtuiで管理する
ifcfg-ethXが無い!と嘆いていないで、時代の流れに逆らわずにnmtui使いましょう。
- インターフェースの管理状態の確認 デフォルトではbridgeとなるNICはあるものの(virbr0)、設定が無いので通信できません。
# nmcli device
デバイス タイプ 状態 接続
virbr0 bridge 接続済み virbr0
ens33 ethernet 接続済み ens33
lo loopback 管理無し --
virbr0-nic tun 管理無し --
- ブリッジインターフェースの作成 virbr0はあくまでも内部用とし、外部用のブリッジインターフェースを作成します。 br0という名前のインターフェースとします。
# nmcli con add type bridge ifname br0
接続 'bridge-br0' (cae264d7-c4d5-42ee-bd40-d343b3a5bc76) が正常に追加されました。
- スパニングツリープロトコルを無効化 いらないので止めておく。
# nmcli con modify bridge-br0 bridge.stp no
- インターフェースIPなどの設定 インターフェースの設定をします。 ens33へOS導入時に設定したIPアドレスと同じものをbr0に割り当てます。 割当完了後、最後にens33のIPを消して入れ替えます。
# nmcli con modify bridge-br0 ipv4.method manual ipv4.address "192.168.xxx.172/24" ipv4.gateway "192.168.xxx.252" ipv4.dns 192.168.xxx.112
- VMブリッジインターフェースをbridgeデバイスに所属させる
# nmcli con add type bridge-slave ifname ens33 master bridge-br0
接続 'bridge-slave-ens33' (b90a8052-abca-48fb-a872-ecc1ce28126f) が正常に追加されました。
- VMブリッジインターフェースのIP設定を削除し、NetworkManagerの再起動を行う。 元のインターフェースとIPが重複するため、SSHなどでログインしている現IPの設定を削除して、 NetworkManagerを再起動します。delだけだと、繋がらなくなったり怖いので、;区切りでリスタートをしました。
# nmcli con del ens33; systemctl restart NetworkManager
接続 'ens33' (9b003d45-7b3a-4c99-86f0-97145c71eff6) が正常に削除されました。
- VMインターフェースの確認
# nmcli device
デバイス タイプ 状態 接続
br0 bridge 接続済み bridge-br0
virbr0 bridge 接続済み virbr0
ens33 ethernet 接続済み bridge-slave-ens33
lo loopback 管理無し --
virbr0-nic tun 管理無し --
KVM関連ユーザの作成
# usermod -a -G libvirt root
# newgrp libvirt
docker-machine-driver-kvmを導入
- Docker Machine Driver KVM のバイナリをダウンロード
# curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /usr/local/bin/docker-machine-driver-kvm
- 実行権限を付与する
# chmod +x /usr/local/bin/docker-machine-driver-kvm
minishiftのダウンロード
curlでダウンロードしていたのですが、リダイレクトを追随してくれなかったりなど(curlオプション勉強不足で)不便を感じたので、wgetでダウンロードしました。
- 作業ディレクトリの作成
# mkdir -p /opt/minishift
# cd /opt/minishift
- wgetでパッケージのダウンロード
# wget https://github.com/minishift/minishift/releases/download/v1.1.0/minishift-1.1.0-linux-amd64.tgz
- パッケージの解凍
回答してあっけにとられたのですが、これだけ???
# tar xzvf minishift-1.1.0-linux-amd64.tgz
LICENSE
README.adoc
minishift
- 環境変数へパスを通す
# export PATH=$PATH:/opt/minishift
# cd ~/
# echo "export PATH=$PATH:/opt/minishift" >> .bashrc
minishift の起動
minishiftコマンドを利用して、minishiftを起動する。
初回はISOのダウンロードやdockerコンテナのデプロイやらで少しまたされます。
管理IPなどが出てきたら成功です。
# minishift start
Starting local OpenShift cluster using 'kvm' hypervisor...
Downloading ISO 'https://github.com/minishift/minishift-b2d-iso/releases/download/v1.0.2/minishift-b2d.iso'
40.00 MiB / 40.00 MiB [===========================================================================================================================================================] 100.00% 0s
Downloading OpenShift binary 'oc' version 'v1.5.1'
19.96 MiB / 19.96 MiB [===========================================================================================================================================================] 100.00% 0s
-- Checking OpenShift client ... OK
-- Checking Docker client ... OK
-- Checking Docker version ... OK
-- Checking for existing OpenShift container ... OK
-- Checking for openshift/origin:v1.5.1 image ...
Pulling image openshift/origin:v1.5.1
Pulled 0/3 layers, 3% complete
Pulled 1/3 layers, 73% complete
Pulled 2/3 layers, 99% complete
Pulled 3/3 layers, 100% complete
Extracting
Image pull complete
-- Checking Docker daemon configuration ... OK
-- Checking for available ports ... OK
-- Checking type of volume mount ...
Using Docker shared volumes for OpenShift volumes
-- Creating host directories ... OK
-- Finding server IP ...
Using 192.168.42.29 as the server IP
-- Starting OpenShift container ...
Creating initial OpenShift configuration
Starting OpenShift using container 'origin'
Waiting for API server to start listening
OpenShift server started
-- Adding default OAuthClient redirect URIs ... OK
-- Installing registry ... OK
-- Installing router ... OK
-- Importing image streams ... OK
-- Importing templates ... OK
-- Login to server ... OK
-- Creating initial project "myproject" ... OK
-- Removing temporary directory ... OK
-- Checking container networking ... OK
-- Server Information ...
OpenShift server started.
The server is accessible via web console at:
https://192.168.42.29:8443
You are logged in as:
User: developer
Password: developer
To login as administrator:
oc login -u system:admin
だがしかし、繋がらない(2017/06/25現在)
どうやら、「docker-machines」のvirbr1配下のとなったようなので、外からはアクセスできない。
※当然といえば当然。
このため、VMの外からは現状アクセスできない。
NATとかha-proxyとかでなんとかすればつながるのかもしれないが、今日は断念。。
TODO:
- Windows 10上に直接minishiftをデプロイする方法をもう少し考える(virtualbox共存とか)
- OpenShift WebConsoleをVM外からアクセスする為に firewalldでnatを試す
- OpenShift WebConsoleをVM外からアクセスする為に ha-proxyで管理画面を外にだす
参考にしたサイト
Qiita: OpenShift Origin MinishiftをCentOS7にインストールしてみた
既に同じ内容で書かれていたようですが、補完の意も含めてこの記事書かせて頂きました。