2015年11月27日金曜日

CoreOSでクラスタ構成を組む(etcd2 + fleet)

以下、参考URL

https://coreos.com/fleet/docs/latest/launching-containers-fleet.html

「コンテナはフォアグラウンドで何か動いていないとすぐに落ちる」という前提を理解していなかったので

ExecStart=/usr/bin/docker run --name -it test centos:6 と実行してすぐに落ちる!と首をかしげていました・・・。

参考URLそのままで簡単に構成できます。

①クラスタ対象のコンテナをサービス化するファイルを作成
②fleetctl start コマンドでコンテナ登録

CoreOSクラスタの任意のホストで下記ディレクトリに移動します。


cd /etc/systemd/system


コンテナを起動するためのserviceファイルを作成します。


vi test.service



[Unit]
Description=test
After=docker.service
Requires=docker.service 

#↑実行後にDockerサービスを要求、起動する

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill test #実行前にtestコンテナがある場合は停止
ExecStartPre=-/usr/bin/docker rm test #実行前にtestコンテナがある場合は削除
ExecStartPre=/usr/bin/docker pull centos:6 #実行前にcentos:6イメージをダウンロード
ExecStart=/usr/bin/docker run --name test centos:6 top -b #コンテナ[test]を[centos:6]イメージで実行しtop コマンドを実行
ExecStop=/usr/bin/docker stop test #fleetctl stopコマンドでtestを停止する

以下コマンドでfleetでtestコンテナを起動します。


fleetctl start test.service


以下コマンドでfleetでtestが起動していることを確認します。


fleetctl list-units
UNIT            MACHINE                         ACTIVE          SUB
test.service    1e0536bd.../192.168.159.140     active          running


discovery.ioサービスを使用したetcd2クラスタ3台構成では残り1台になるとfleetに登録しているクラスタが停止しました。
どこかでクラスタは4台推奨と書いてあった気がします。

さらに高可用性クラスタ(同じコンテナイメージを複数立てる)を構成する場合は[X-Fleet]オプションを追加します。


[Unit]
Description=test2
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill test2
ExecStartPre=-/usr/bin/docker rm test2
ExecStartPre=/usr/bin/docker pull centos:6
ExecStart=/usr/bin/docker run --name test2 centos:6 top -b
ExecStop=/usr/bin/docker stop test2

[X-Fleet]
Conflicts=test2@*.service


以下コマンドでfleetでtest2コンテナを3台起動します。


fleetctl start test2@1.service
fleetctl start test2@2.service
fleetctl start test2@3.service


以下コマンドでfleetでtest2が起動していることを確認します。


fleetctl list-units
UNIT            MACHINE                         ACTIVE          SUB
test2@1.service 708896cf.../192.168.159.139     active          running
test2@2.service c8fce403.../192.168.159.141     activating      start-pre #起動中でした
test2@3.service 1e0536bd.../192.168.159.140     active          running

docker pullでイメージを引っ張るので本番環境ではdockerイメージを格納した共有サーバ的なものが必要になるんですね。
まだまだ勉強が必要です。

2015年11月26日木曜日

CoreOSでクラスタ構成を組む準備をする(etcd2 + fleet)



以下、参考URL

https://coreos.com/os/docs/latest/cloud-config.html
https://coreos.com/os/docs/latest/cluster-discovery.html

「共有ディスクもなしにクラスタなんてどうやるの?」と典型的なインフラエンジニアの思考をしていたため
理解に時間がかかりました・・・。

①コンテナをサービス化することでCoreOSホスト障害時に他のCoreOSでサービス化したコンテナを動かす。
②サービス化したコンテナはDocker pullでコンテナをダウンロードしてから起動する
という理解でしょうか。
いうまでもなくデータセンター向きですねDocker

etcd2とfleetの役割ですがetcd2が複数のCoreOSを束ねてfleetが束ねたCoreOS群を管理、コンテナを起動するイメージ
でしょうか。
https://coreos.com/using-coreos/clustering/


【事前準備】
クラスタ管理するためのディスカバリの仕組みを構成します。
ディスカバリサーバによって動的にクラスタが構成されるため容易にクラスタ管理が可能となります。
従来はクラスタ追加、削除に一苦労でしたがこれは便利ですね。
ディスカバリサーバは自前構築も可能ですがCoreOSでサービス提供されているのでこちらを使います。
以下コマンドを実行するのみ


curl -w "\n" 'https://discovery.etcd.io/new?size=3'


上記コマンド実行結果を後述するcloud-configに記載します。

今回はVMwarePlayerでCoreOS3台を構築してクラスタ構成を組みます。
VMwarePlayerでのCoreOSの作り方は以下を参照ください。
http://qiita.com/umchifre/items/3ed0d1e5fea53f3fcc61

cloud-configは以下のようになります。
 [1-3]はCoreOS3台でそれぞれ置き換えてください。(IPアドレス、ホスト名)
 discovery: にて下記コマンド結果のURLを貼り付けてください
  curl -w "\n" 'https://discovery.etcd.io/new?size=3'
 listen-client-urls: は0.0.0.0でOKです。


#cloud-config

hostname: core[1-3]
coreos:
  units:
    - name: vmtoolsd.service
      command: start
      content: |
        [Unit]
        Description=VMware Tools Agent
        Documentation=http://open-vm-tools.sourceforge.net/
        ConditionVirtualization=vmware

        [Service]
        ExecStartPre=/usr/bin/ln -sfT /usr/share/oem/vmware-tools /etc/vmware-tools
        ExecStart=/usr/share/oem/bin/vmtoolsd
        TimeoutStopSec=5

    - name: 10-static.network
      runtime: no
      content: |
        [Match]
        Name=eno16777984

        [Network]
        Address=192.168.1.[1-3]/24
        Gateway=192.168.1.254
        DNS=192.168.1.1
    - name: etcd2.service
      command: start
    - name: fleet.service
      command: start
    - name: docker.service
      command: start
  oem:
    bug-report-url: "https://github.com/coreos/bugs/issues"
    id: vmware
    name: VMWare
    version-id: "9.10.0-r1"
  etcd2:
    discovery: "[curl -w "\n" 'https://discovery.etcd.io/new?size=3']"
    advertise-client-urls: "http://192.168.1.[1-3]:2379"
    initial-advertise-peer-urls: "http://192.168.1.[1-3]:2380"
    listen-client-urls: "http://0.0.0.0:2379,http://0.0.0.0:4001"
    listen-peer-urls: "http://192.168.1.[1-3]:2380,http://192.168.1.[1-3]:7001"

  users:
   - name: core
     passwd: [生成された乱数]
     groups:
     - sudo
     - docker
     ssh-authorized-keys:

上記にて3台のCoreOSインストール後以下コマンドで正常にクラスタ構成されていることを確認します。


core@core01 ~ $ etcdctl cluster-health

member 71d3cca95eb7fd22 is healthy: got healthy result from http://192.168.1.1:2379
member a44a8c7958024a51 is healthy: got healthy result from http://192.168.1.2:2379
member c8b976e5dd43adfd is healthy: got healthy result from http://192.168.1.3:2379
cluster is healthy

core@core01 ~ $ fleetctl list-machines

MACHINE         IP              METADATA
1e0536bd...     192.168.1.2 -
708896cf...     192.168.1.2 -
c8fce403...     192.168.1.3 -


NGの場合はcloud-configが正常に稼働しているか確認するために構成ファイルを再読み込みしてみてください。
errorが記録される場合はNGです。


coreos-cloudinit --from-file=./usr/share/oem/cloud-config.yml


あとはコンテナをサービス化してfleetで登録するのみです。
それはまた後程・・・。

2015年11月24日火曜日

CoreOSをVMwarePlayerにインストールする(iso)

「とりあえずVMwarePlayerでCoreOS動かしたい」だけの目的の場合での構築メモisoインストール、パラメータ変えてみた版です。

isoイメージから導入してみました。
以下URLからisoイメージをダウンロードします。

【Running CoreOS on VMWare】
https://coreos.com/os/docs/latest/booting-with-iso.html

以下要件で仮想マシン作成しisoブートします。

メモリ:1GB
プロセッサ:2
ハードディスク:8GB
ネットワークアダプタ:NAT
ゲストOS:その他

仮想マシンを起動します。
ユーザcoreでログインシェルに自動ログインしました。

ユーザcoreの一時パスワードを設定します

```bash
 sudo passwd core
```

ifconfig コマンドでIPアドレスを確認してTeraTermでユーザcoreでパスワードログインします。
sudo suします。

以下コマンドでユーザcoreの本パスワードと鍵を生成します。

ssh-keygen -t rsa
※Enter passphraseでパスワード入力

デフォルトでは/root/.ssh/以下に秘密鍵と公開鍵が生成されます。

公開鍵キーを確認します

```bash
 cat /root/.ssh/id_rsa.pub
```

cloud-config.ymlファイルを以下の要領で作成します。

vi cloud-config.yml

以下パラメータを追加して保存します。


```bash
#cloud-config

 hostname:core01

 coreos:
   units:
    - name: 10-static.network
      runtime: no
      content: |
        [Match]
        Name=eth0

        [Network]
        Address=192.168.99.101/24
        Gateway=192.168.99.2
        DNS=192.168.99.2

users:
 - name: core
   groups:
   - sudo
   - docker
   ssh-authorized-keys:
    - [cat /root/.ssh/id_rsa]※ssh-rsaを含めた乱数

```
上記は固定IP付与+鍵認証の設定です。
上記の場合、SSHログインはできますがローカルコンソールでのログインはできません。
ローカルコンソールでログインする場合は passwd: パラメータを追加するか
インストール後にpasswdコマンドでパスワードを設定します。

秘密鍵を確認してデスクトップに任意のファイルに保存します。

```bash
 cat /root/.ssh/id_rsa
```
以下コマンドを実行してインストールします。
※構文にエラーがある場合はインストールエラーになります。

```bash
coreos-install -d /dev/sda -c cloud-config.yml
```

インターネット経由でイメージファイルをダウンロードします。
Succsess!が表示されたらインストール完了です。
rebootで再起動します。

再起動後、TeraTermからcoreユーザでログインできることを確認します。
※ssh-keygen -t rsa で設定したパスワードと秘密鍵ファイルが必要です。


適当にコンテナ動かしてみます


 docker run --name centos -it centos /bin/bash


動きました
OVAと違ってVMware Tools Agentが入っていないですね。
OVAのcloud-config.ymlあたりの設定を見ればいいのかな・・・?
でもOVAと違ってcloud-config.ymlファイルがない・・・。

CoreOSをVMwarePlayerにインストールする(OVA)



「とりあえずVMwarePlayerでCoreOS動かしたい」だけの目的の場合での構築メモです。

CoreOSのイメージは最新のVMwarePlayer(VMware Workstation 12 Player)であればOVAが提供されています。

【Running CoreOS on VMWare】
https://coreos.com/os/docs/latest/booting-on-vmware.html

以下OVAファイルをダウンロードします。
http://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ova

VMwarePlayerで「仮想マシンを開く」で上記OVAファイルを選択します。

「インポート」をクリックします。
途中、失敗のダイアログが表示されるので「再試行」をクリックします。

インポート完了後、仮想マシン一覧に登録されるので「設定の編集」からネットワークの種類を「NAT」に変更します。(DHCPでIP勝手にとってくれるので・・・)

以降の作業は以下URLを参考にしました。

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2105725

仮想マシンを起動します。
ブートローダ画面表示されるので「e」キーを押します。
カーネル起動パラメータが表示されるので
「$usr_uuid」パラメータの次に「coreos.autlogin」と入力します。
F10キーを押して起動します。
ユーザcoreでログインシェルに自動ログインしました。

以降はTerTermで接続して作業します。
ユーザcoreの一時パスワードを設定します


 sudo passwd core


ifconfig コマンドでIPアドレスを確認してTeraTermでユーザcoreでパスワードログインします。
以下コマンドでユーザcoreの本パスワードを生成します。

 openssl passwd -1 [パスワード]

※本当は公開鍵/秘密鍵を生成したほうがよいのですがテストということで。詳細は参考URLを見てください。

上記コマンドを実行すると乱数が生成されるのでコピーします。
以下コマンドを実行します。


 vi /usr/share/oem/cloud-config.yml


以下パラメータを追加して保存します。


users:
 - name: core
   passwd:[生成された乱数]
   groups:
   - sudo
   - docker

再起動します。

再起動後、コンソール画面からcoreユーザでログインできること、TeraTermからcoreユーザでログインできることを確認します。

適当にコンテナ動かしてみます


 docker run --name ubuntu -it ubuntu /bin/


動きました
isoと違ってVMware Tools Agentが入っているので管理しやすいですね。

2015年11月20日金曜日

AmazonPrimeMusicをMVNOで使えるか → 使える

AmazonプライムユーザのためPrimeMusicがタダで使える(年会費3900円払ってるんですけどね)ということでやってみました。
外出先はOCNモバイルONEの一番安いコース使っています。(110MB/日)

制限なしと制限ありでの違いを検証するため残り10MBから制限された時の差分を確認、と思ったのですが音楽ファイルよりもパッケージ画像にデータを取られてしまい、「どの音楽聞こうかなー」とスワイプしていたらあっという間に制限に・・・。

ということで制限状態で利用してみました。
やはりパッケージ画像のダウンロードに時間を取られてしまい10秒程度くるくる回りますが、その後、音楽が流れてきたら特に途切れることなく聞くことができました。

これであれば制限されていてもなんとか聞けますね。
次の音楽の時にはやはりパッケージ画像のダウンロードに時間がかかりますが、画像読み込み完了すると聞くことができます。

流石に地下鉄乗っているときは途切れることがありますが。。。

ということでPrimeMusicはMVNOでもまあ、使えるのではないでしょうかという結果でした。

2015年11月13日金曜日

Windows10 10586 のNested Hyper-V で Hyper-V in ESXiはできるか→できない

11/13にWindows10のメジャーアップデート10586がリリースされました。
細かい修正点はさておきNested Hyper-Vが提供されたのが個人的に興味深い点です。
Nested Hyper-Vは「Hyper-Vの仮想マシンでHyper-Vが使える機能」とのことですが
じゃあHyper-VでESXiも起動できたらうれしいなーということでやってみました。

まずWindows10をWindowsUpdateで10586にアップデートします。(約1時間)
続きまして「Windowsの機能の有効かまたは無効化」でHyper-Vを有効にします。
Hyper-V管理マネージャから仮想マシンを作成してESXi6のisoをマウントして起動します。
「Relocating modules and starting up the kernel」で止まります・・・。
一旦仮想マシンを停止して以下を参照にNested Hyper-Vを有効にします。

http://blogs.technet.com/b/virtualization/archive/2015/10/13/windows-insider-preview-nested-virtualization.aspx

 1.管理者権限で「PowerShell」を実行
 2.下記コマンドを実行します。
 
 Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile ~/Enable-NestedVm.ps1
 
 Enable-NestedVm.ps1  -VmName [仮想マシン名]
 
 3.Would you like to enable? の表示がされるので Y と入力します。
 
もう一度ESXi6仮想マシンを起動します。
「Relocating modules and starting up the kernel」で止まります・・・。

ということでダメでした

2015年11月2日月曜日

Zabbix3.0(アルファ版)をインストールする

Zabbix3.0アルファ版がリリースされていましたので試しにインストールしてみました。

ダウンロードページ(ソースのみ)
http://www.zabbix.com/jp/download.php

マニュアル
https://www.zabbix.com/documentation/3.0/


仮想環境にCentOS 6.7 minimalでインストールしてzabbix3.0を導入します。

Selinuxを無効化


vi /etc/selinux/config


  SELINUX=disabled に

ファイアウォール無効化
 

  service iptables stop
 chkconfig iptables off
 chkconfig ip6tables off


サーバ再起動


 reboot


CentOS6がサポートしているのでCentOS6で最新化


/etc/yum.conf


 exclude=kernel* centos* #追記


yum update


gccインストール


yum --disableexcludes=main install gcc


apacheとmysqlその他もろもろインストール
(ソースから導入するので必要なパッケージが多くて面倒です・・・)

yum install php php-mysql httpd mysql-server mysql-devel libxml2-devel net-snmp net-snmp-devel curl-devel gettext


phpは5.4以上なので以下の要領でインストール


rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install php --enablerepo=remi
yum install php-bcmath php-mbstring php-gd php-xmlwriter php-xmlreader --enablerepo=remi


Zabbixのインストール要件満たしているかバージョン確認

httpd -v #1.3.12以上
mysql -v #5.03以上
php -v #5.4.0以上

サービス有効化


chkconfig httpd on
chkconfig mysqld on


サービス起動


service httpd start
service mysqld start


ダウンロードしたソースを展開


tar -zxvf zabbix-3.0.0alpha.tar.gz


zabbixユーザ作成


groupadd zabbix
useradd -g zabbix zabbix


configure実行(とりあえず全機能)


./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2


インストール実施


make install


設定ファイル編集


vi /usr/local/etc/zabbix_server.conf


DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

zabbix起動


zabbix_server
zabbix_agentd


vi /etc/php.ini の編集


post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Tokyo


webコンソールのインストール


cd /var/www/html/
mkdir zabbix
cd /home/zabbix-3.0.0alpha3/frontends/php
cp -a . /var/www/html/zabbix/
cd /var/www/html/zabbix
cd locale
./make_mo.sh


データベース作成


mysql -uroot
> create database zabbix character set utf8;
> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';


スキーマインポート


cd [解凍先]/zabbix-3.0.0alpha3/database/mysql/
mysql -uroot zabbix < schema.sql
mysql -uroot zabbix < images.sql
mysql -uroot zabbix < data.sql


Webブラウザで以下の要領でzabbixWebコンソールにログインします。


http://[zabbixサーバのIPアドレス]/zabbix


welcome to Zabbix 3.0 で「Next step」をクリック
Check of pre-requisites ですべてOKであることを確認して「Next step」をクリック
Configure DB connectionでpasswordにzabbix(vi /usr/local/etc/zabbix_server.confのDBPasswordの値)と入力して「Next step」をクリック
Zabbix server detailsでzabbixサーバの詳細(省略可)を入力して「Next step」をクリック
Pre-installation summaryで「Next step」をクリック
Cannot create the configuration file.となり失敗したっぽいですが画面にある通りの手順を実行します。
「Download the configuration file」のリンクでphpファイルをダウンロード
下記ディレクトリに「zabbix.conf.php」をアップロード


 /var/www/html/zabbix/conf/


そのまま「Next step」とすると権限で怒られたので以下コマンドを実行。


 chmod 755 /var/www/html/zabbix/conf/zabbix.conf.php


ログイン画面が表示されました「admin/zabbix」でログイン

コンソール画面が表示された。

[Administration]-[User groups]-[Admin]から言語を日本語に変更する。

再ログインすると日本語表示に。

青い画面になりました。かっこいいですね

再起動後はzabbix_serverを実行しないとzabbixが起動しませんでした。
この辺は作りこみですかね。。。