最近、電源が壊れたPCを1台リプレースし、余ったマザーボード、CPU、メモリーでファイルサーバーを構築しました。その際にデータをファイルサーバーに移し、デスクトップ PC の HDD を外してしまったので、仮想マシン用の VM の仮想ディスクイメージもファイルサーバーに移す必要がありました。しかし、Hyper-V のディスクイメージは Samba サーバーに置くことができないようなので、仮想マシンのディスクイメージを iSCSI で Hyper-V に接続するようにしてみました。

今日は openSUSE Leap 15.2 (beta) で iSCSI Target(サーバー)のセットアップ方法を紹介します。今回設定する構成はディスクイメージを iSCSI で公開するファイルサーバーと、ファイルサーバーと同じネットワークにあり、そのディスクイメージを使用する Windows 10 のデスクトップ PC からなる単純なものです。

必要なパッケージは targetcli をインストールすれば揃います。YaST でも設定できるのですが、設定できる項目が少ないようなので、targetcli を使って設定します。

それでは targetcli を起動して設定していきます。

まずはディスクイメージファイルを作成します。targetcli の中で /backstores/fileio に移動して、create コマンドでディスクイメージを作成できますここでは /var/storage/disk1.img に 10 GB のディスクイメージ作成します。 /var/storage ディレクトリは先に作成しておく必要があります。

ls コマンドで disk1 が作成されたことが確認できます。

次に /iscsi で create コマンドを実行し、iSCSI の target を作成します。create の IQN 形式の ID を省略すると勝手に作成してくれます。

この target で公開するディスク (lun0) を作成し、最初に作成したディスクイメージ(/backstores/fileio/disk1)を割り当てます。

最後に、この taget にはデスクトップPC からしかアクセスできないようにします。ここではデスクトップPCのID(Windows の iSCSI イニシエーターに設定するもの)を iqn.2020-04.example.com:desktop-pc とします。tpg1/acls 内でイニシエーター名を指定し、create コマンドを実行します。さらに、ユーザーIDとパスワードを設定し、事実上誰からもアクセスできる状態にならないようにします。

この段階で mapped_lun0 が作成され、iqn.2020-04.example.com:desktop-pc に mapped_lun0 が作成されます。Leap 15.1 で試したときは、この mapped_lun0 が自動的に作成されず、Windows の iSCSI イニシエーターから接続してもディスクが何も表示されない状態になってしまいました。このような場合は、次のコマンドで mapped_lun を作成することができます。

これまでの設定は以下の通りです。この状態で Windows の iSCSI イニシエーターでファイルサーバーに接続すると、ディスクの管理で iqn.2003-01.org.linux-iscsi.testserver.x8664:sn.b527a14e621a の lun0 (/backstores/fileio/disk1, /var/storage/disk1.img) がディスクとして見えるようになります。あとは Hyper-V でこのディスクを割り当てれば仮想マシンのディスクとして使用することができます。

この記事はopenSUSE Advent Calendar 2019の24日目です

※2020/01/26 追記 この設定をしてしまうと、Dockerが動かなくなってしまいます。詳細は現在調査中。まとまりましたら報告させて頂きます。※

GeekoMagazine 2019 冬号に、仮想サーバーをさくっと建てる方法を書かせていただいております。よろしくお願いいたします。

さて、私は実際にこの方法で立てた仮想サーバーを活用しているのですが、最近、家のルーターがipv4アドレスを仮想サーバーに割り振ってくれなくなってしまいました。

結論 ホストがbridgeしたパケットをフィルタリングするのを無効にする

sysctlで以下の設定を行った所、無事、DHCPでipv4が割り振られました。

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

1行づつ、sysctl -w で設定してもよいですし、ファイルに記述して、sysctl -p でそのファイルを読み込んでもOKです。

ただ、/etc/sysctl.d/ にファイルを配置しても、起動時に読み込んでくれません・・・ここは追って調査して、記事にしたいと思います。

これらは、bridgeのフィルタリングを無効にする設定とのことです。

もしかしたら、最近のカーネルのアップデートなどで設定が消えてしまったのかもしれません。私が忘れているだけで、以前はこの設定をしていたかもしれず、記事から抜けてしまっていて申し訳ないです・・・

橋本修太です

さて、突然ですが、今私のKubernetes環境はこんな感じになっています。

KVMは仮想マシン、KubicはopenSUSEのKubernetes専用ディストリビューション、masterやnodeはKubernetesクラスタでの役割を表しています。

ルーターに有線でデスクトップが繋がっていて、そこに3つKubicを走らせています。

また、ルーターはWiFiルーターに繋がっていて、WiFiでノートパソコンと通信、そのノートパソコンの上にも3つKubicが走っています。

それをですね、こうしたいのです。

デスクトップのnodeを、ノートパソコンのKubernetesクラスタに組み込みたいのです。

ノートパソコンは、メモリは16G積んでいて少し余裕はあるものの、CPUはcore i5で、KVMをこれ以上増やすのは難しいです。

そこで、クラスタの利点を活かして、デスクトップからnodeを引っ張ってくるわけです。

とりあえずこれでできました

KVMはデフォルトで閉じたネットワーク(ホストの外側からは中にアクセス出来ないネットワーク)を作成します。ただ、これはNATなので、ゲストからホストの外側にはアクセス出来ますが・・・

そこで、色々とやってみた結果、次のような方法でホストの外からのアクセスが出来ました。

  • 【ノートPC】KVMでバーチャルネットワークを作成、マスカレードで接続
  • 【デスクトップPC】ブリッジを作成

検証や調査等はおいおいやっていくとして、それぞれの設定を書いてみたいと思います。

今回は【ノートPC】編、次回は【デスクトップPC編】です

WiFi接続しているノートPCにブリッジを作成することに挫折

グーグル先生に教えてもらって、いくつかの方法を試したりしたのですが、どれも挫折してしまいました・・・

どうやら、ブリッジはレイヤー2で転送するものらしいのですが、WiFiはレイヤー2転送に対応していないというのが、WiFiでのブリッジ作成が難しい理由の大きなところらしいです。・・・いまいちピンとこないので、後ほど詳しく調べてみたいと思います。

parproutedやebtablesなどでレイヤー2転送を設定する

parproutedはarpをプロキシするものとの事です。また、etablesはEthernetフレーム用iptablesとの事です。parproutedはopenSUSE Leap15で上手く動かせられなかったり、ebtablesが意図した通り設定出来なかったりして、挫折してしまいました。

バーチャルネットワークを作成

Facebookでそんな事をなげいていたら、Saputro Aryuliant氏より、「KVMのバーチャルネットワーク設定して、iptablesでマスカレード設定すればいけるよ」とのお助けが。

「ホストPCの外から、ゲストPCにアクセスできる?」と聞くと、「iptables設定すればいけるよ」とのことでしたので、早速試してみることに。

KVMの設定

ルーティングでネットワークを作成します。

設定はvirt-managerでこんな感じです。

編集 > 接続の詳細

から、「仮想ネットワーク」タブを選んで、左下のプラスのアイコンをクリックして追加します。

デバイスにwlan0(WiFi)、方法にルーティングを指定している所がポイントです。

これ、デフォルトのNATネットワークだとだめなのかな?

iptablesの設定

まず、ノートPCでipv4のフォワードを有効にします。

sudo sysctl -w net.ipv4.ip_forward=1

これは再起動するとクリアされてしまいますので、常に設定したい場合は /etc/sysctl.d/の中に、{好きな名前}.confという名前で設定ファイルを作成して、その中に記述しておけばOKです。

確認は以下のコマンドで。

sudo sysctl -a

設定項目が表示されますので、grep -i forwardとかで絞ると楽に確認できます。

それから、同じくノートPCにマスカレードを設定します。

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE

  • -t nat パケット中のIPアドレスを書き換える用のテーブルを編集
  • -A POSTROUTING 転送でパケットが出ていく時に処理を行う
  • -s ここで指定した所から来た(Source)パケットに対する処理
  • -j 指定した処理を行う 今回はマスカレード

これで、ノートPCの上で走らせているKVM上のKubicが、自由に外にアクセスできるようになりました。

ノートPCの上で走らせているKVMにデスクトップPCからアクセスする

とりあえず、アクセスしたいマシンやKVM上のKubicで、以下の設定を行いました。

ip -4 route add 192.168.100.0/24 via 192.168.0.12

192.168.100.0/24行きのパケットは、192.168.0.12(ノートPCのIPアドレス)をデフォルトゲートウェイにしてね、という設定です。

これで、デスクトップや、そこで走っているKVM上のKubicから、ノートPC上のKubicにアクセスできるようになりました。

・・・もちろん、デスクトップ上のKVMも、ブリッジ設定して、ホストの外へアクセスできるようにすれば、です。その様子はまた次回に。

感想&課題

  • ネットワークの基礎が無いのでちょっときつい
  • レイヤー2ルーティングでブリッジ作成は可能?
  • そもそもルーティングによる接続ってなんだろう
  • ホスト外からアクセスする方法がスマートでない
  • この辺りをもうちょっとまとめたい

この記事は、「openSUSE AdventCalendar 2018」16日目の記事です。

皆さんおはようございます。橋本修太です。

さて、先日jaのMLにこんな投稿がありました。

【意訳】

openSUSE(Kubic)でCloud Foundry動かしたことある人います?

Kubicのキーワードが目に止まり、はて、Cloud Foundryとは?と思った私は、調査してみました。

本記事は情報収集のみとなります。「やってみた」は次の機会になりますこと、ご了承ください。

Cloud Foundryとは

ホームページはこちら。概要を纏めてくださっているページが幾つか有りますので、それらを見ていきますと、どうやら、webアプリケーションのソースコードをpushするだけで、ビルド・デプロイを自動で行ってくれる、オープンソースのソリューションの模様(商用版もあり)。イメージとしてはherokuに近いですね(こんな記事もありました)。

「アメリカのFortune 500企業のうち約半数が導入済み」といった謳い文句も見られますね。

インストール方法

いくつかあるようです。Cloud Foundry自体、複数のコンポーネントで構成されるソリューションなので、手順があったり、インストールを支援してくれるソリューションがあったりします。

また、Pivotal、SUSEなどがチューニングしたソリューションもあって、それぞれ強みがあるようです。

ちなみに、Cloud Foundryとやりとりを行うコマンドラインツール群、cf-cliは、openSUSEにパッケージがありました。(動くかな?)

A. PCF-DEVをインストール

PCFとは、Pivotal Cloud Foundryの略です。Pivotalはクラウドで有名な会社のようです。

ここが展開している、ローカル開発用のCloud Foundry、PCF-DEVが、インストールしてみるには丁度良いよ、という投稿もstack overflowで見たりしました。

構成としては、Linux(私の場合openSUSE)の上に、VirtualBoxを動かし、その中でPCFを動かすようです。

インストール方法はこちら

B. BOSHでインストール

BOSHは、Cloud Foundryの導入・運用を制御するソリューションのようです。

単一マシンに展開したり、クラスタ構成に展開したりもできるようです。

通常、Cloud Foundryをインストールと言えば、この方法が正攻法?なのかもしれません。

C. SUSE Cloud Foundryをインストール(on Vagrant)

SUSEも、Cloud Foundryには力を入れていて、チューニングしたソリューションを持っていました。

githubはこちら

主なチューニング点として、以下が挙げられていました。

  • Kubernetes(Docker)の上で動くように、Cloud Foundryのコンポーネントのコンテナライズにfissileを使っている
  • Cloud FoundryのコンポーネントはopenSUSE Steamcellで動く
  • オプションとして、Cloud FoundryのAppをopenSUSE stackのpreviewで動かす事が出来る

Steamcellだの、stackだの、previewだの、ちょっとピントこない単語が沢山・・・これらはおいおい調べていく事にしまして、1番目に付いて、もともとCloud FoundryはKubernetesの上で動くようには作られていなかったのですが、そこをSUSE等が開発したとの事です。

件のgithubには、on Kubernetesで動かす方法も記載されているのですが、ここではPCF-DEVと同じように、VMの上で動かす方法を。

Disclaimerに、「openSUSE 42.xは、libvirtでテストしてますよ」とあります。ここが42.xになっているのが、ちょっと気になるところですが・・・(あと、SUSEのgithubなのに、openSUSEがOpenSUSEになっている所とか)

あとは、Deploying SCF on Vagrantのセクション通りにやっていけばよさそうです。

ただ、要件にいきなり「メモリは16G以上は用意してね」とあって、私のデスクトップはもう無理状態です。

D. SUSE Cloud Foundryをインストール(on Kubernetes)

C.で触れましたが、Kubernetesの上にインストールできるのが、SCFの強みとの事。Helmでインストールするようですね。インストールページには要件等書いてありますので、適応させて行けば動くでしょうか?

ちなみに、環境チェック用スクリプトがあるのですが、Kubic上で走らせた所、半分ぐらいerrorとなってしまいました。

課題&感想

  • やってみる!
  • もう少し、正確かつ精密な情報を収集し、記事にする

駆け足で情報収集だけしたのですが、結構複雑な構成をしていて、ちゃんと理解しようとするとそれなりのボリュームになりそうです。使う側は、ソースコードをcf pushすれば、デプロイまで完了、とやりやすい事この上無いですね。

では、16Gメモリを積んでいるノートPCがあるので、近いうちにやってみたをやってみたいと思います。

明日は @ftake さんの、geeko.jpをメンテナンスした話ですね。塩漬けに近かったサイトですので、色々と面白い話題が出てきそうです。こうご期待。

 

 

 

 

OSC Nagoya 2018 参加報告

By kimitoboku @ 2018-05-22 21:26

5月19日(土)に開催されたOSC名古屋2018に出展しました.

OSC名古屋では,openSUSEが得意とする仮想化環境の構築についてのセミナーを行いました.

また,openSUSEによって構築されたKVM環境にて,GPUとUSBパススールを行い,仮想マシンのWindows10上でVRゲームを行うというデモの展示も行いました.

その他

Proxmox VEについて

By ribbon @ 2017-08-13 22:53

2017-08-13 の IRC定例で話題になった Proxmox-VE について、簡単にメモしておきます。

Proxmox-VE の一次情報は、 https://pve.proxmox.com/wiki/Main_Page  です。

Proxmox-VE はVMware ESXiに似た、仮想化アプライアンスで、Webベースで仮想マシンの制御や、LXCベースのコンテナの制御を行えます。オープンソース版と商用版がありますが、kernelがエンタープライズ版か否かくらいの違いしかありません。
ベースは、Debianで、その上にPerlで書かれたVM管理用ツールがインストールされています。ISOイメージからインストールすると、ターンキー仮想ホストとして、ディスクの初期化からパーティションの作成まで一気にやってしまいます。

LVMベースのディスク管理を使用しています。各仮想マシンはLVMのシンプロビジョニングか、通常のファイルで保持されます。スナップショットを使ったバックアップ機能もあります。

openSUSEの検証などにはよく使っています。ほぼすべてメッセージが日本語化されていますので、わかりやすいと思います。ESXiと違ってDebian 9 が動くマシンであればそのまま使えます。お手軽な仮想環境制御ツールをお探しの方は、一度試してみてはいかがでしょうか。

 

openSUSE mini sumitでも話ましたが、openSUSEを自動インストールしようとして試行錯誤しています。すべて仮想環境でテストしているのですが、なかなかうまくいきません。

仮想環境は、debian ベースの proxmoxVEを使っています。これが、なかなか便利で、Webベースで仮想マシンを立てたりつぶしたり、VNC経由で仮想マシンとサクッと繋がる、バックアップも取れる、やろうと思えば高可用性構成も取れるなど、便利な機能がてんこ盛りです。VMware ESXi と比べると、機能的に劣るところもありますが、個人ベースで使うには十分すぎるくらいです。

ただ、この仮想環境、ちょっと変わったところがあって、仮想OS用のBIOSに、iPXEが組み込まれているのですね。PXEではなくて。なので、ネットワークブートを行う時は、PXEのノウハウがあまり使えません。とりあえず、今やっていることをメモとして書いておきます。


準備

◆1 dhcpの設定

iPXEを使う時には、dhcpで、インストールサーバの情報を設定する必要があります。dhcpの設定はyastからも出来ますが、今回は直接 /etc/dhcpd.conf を設定しました。こんな感じになります。

default-lease-time 14400;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.101 192.168.10.127;
default-lease-time 14400;
max-lease-time 172800;
}
if exists user-class and option user-class = “iPXE” {
filename  “iPXE/boot.ipxe”;
}
else  {
filename “iPXE/undionly.kpxe”;
}
next-server 192.168.10.41;

この設定により、iPXEが、OSを起動するための初期スクリプト boot.ipxeをダウンロードすることが出来ます。

◆2 tftpの設定

tftpの設定はyast から行います。特に標準のままで問題ありません。なお、tftpはxinetd配下から起動することになります。

◆3 httpdの設定

httpdを設定します。rootディレクトリは、/srv/tftpboot/install/ にします。

◆4 OSイメージの展開

yast の、インストールサーバ設定から、OSイメージを展開します。サブディレクトリは、leap42にしてみます。

◆5 OSイメージの配置

/srv/tftpboot 配下にOSのISOイメージを置きます。

◆6 boot.ipxe の作成

ひな形は、ここにあります。こんな感じになっています。

#!ipxe
menu Please choose an operating system to install
item –gap openSUSE
item isolinux isolinux boot
item efi efi boot
item iso iso boot
item –gap ipxe shell
item shell       Drop to iPXE shell

choose target && goto ${target}

:failed
echo Booting failed, dropping to shell
goto shell

:shell
echo Type ‘exit’ to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start

:isolinux
kernel http://192.168.10.41/install/leap42/CD1/boot/x86_64/loader/isolinux.bin initrd=http://192.168.10.41/install/leap42/CD1/boot/x86_64/loader/initrd install=http://192.168.10.41/install/leap42/CD1/
initrd http://192.168.10.41/install/leap42/CD1/boot/x86_64/loader/initrd
boot || goto failed

:efi
chain   /install/leap42/CD1/EFI/BOOT/bootx64.efi initrd=initrd install=/install/132/CD1
initrd  /install/leap42/CD1/boot/x86_64/loader/initrd
boot || goto failed

:iso
sanboot http://192.168.10.41/leap42.iso
boot || goto failed


やってみました

◆1 isolinux でブートする

展開されたISOイメージ内にはisolinux.bin があります。これを直接指定してみます。結果は

isolinux-bad

と、あえなく撃沈。

◆2 EFIでブートする

展開されたISOイメージ内にはEFI用のブートコードがあります。これを指定してみます。結果は

efi-bad

と、これも撃沈。

◆3 ISOイメージをブートする

iPXEには、SANからブートする機能があります。この機能を使うと、ISOイメージをそのままブートすることが出来ます。結果は、

iso-ok-01

と、ISOブートと同じ画面が出ます。ただ、この後そのまま続行しても、インストールデータがネットワークブートしたkernelから直接読めるわけではないので、

iso-ok-02

と、インストールデータがある場所を要求してきます。ここに、httpで取得出来るURLを入れてあげればそのまま続行出来ます。

とりあえずここまでは出来ています。