さくらインターネットにおけるserverspec導入事例(devops勉強会 #3...

44
さくらインターネットにおける 導入事例 Serverspec Shuji Yamada (山田 修司 ) @uzyexe Jul 6, 2016 DevOps 勉強会 #3 Serverspec の巻

Post on 15-Apr-2017

2.169 views

Category:

Technology


0 download

TRANSCRIPT

さくらインターネットにおける導入事例

Serverspec

ShujiYamada(山田修司)@uzyexeJul6,2016

DevOps勉強会 #3 Serverspecの巻

アジェンダ• 自己紹介• Serverspec の特徴とユースケース• さくらインターネットでの Serverspec 導入事例• まとめ

SHUJI YAMADA• さくらインターネット9年目• エンジニア• データセンター運用スタッフ• バックボーンネットワーク運用• さくらのクラウド運用• Docker ホスティング Arukas 担当 <- 今ココ

(山田 修司)

@uzyexe

5

使ってますか?

6

Serverspec使ってる人

\ 挙手! /

7

手動実行してる人

\ 挙手! /

8

自動実行してる人

\ 挙手! /

• gem install serverspec で一発インストール

• 基本ドキュメントは1ページ

• 一日で覚えられる!

• シンプル!

9

Serverspecの特徴

よくあるワークフロー その1

×https://jenkins.io/

1111

1212

git push

1313

git push

webhook

1414

git push

webhook

docker run

ステージング環境

1515

git push

webhook

docker run

rake serverspec

ステージング環境

よくあるワークフロー その2

手動実行

カタカタカタカタカタカタカタカタカタカタカタ

カタカタカタカタカタカタカタカタカタカタカタ

カタ( ^p^)カタカタカタカタカタカタカタ

_(__つ/‾‾‾/カタカタカタカタ

��\/___/カタカタカタカタカタ

カタカタカタカタカタカタカタカタカタカタカタカタ

カタカタカタカタカタカタカタカタカタカタ

よくあるワークフロー その3

20

テスト書く、忘れる。

テスト更新する、忘れる。爆発する。

21

22

23

WTF

どげんしようか・・・

24

起動時 強制実行

起動スクリプトに Serverspecの実行を定義

26

2727

git pull

sys temd

spec files

サーバ起動時の流れ

2828

git pull

rake serverspec

sys temd

spec files spec!

サーバ起動時の流れ

Settings

1. サーバ起動!

2. git clone で最新の spec ファイルを毎回取得

3. Dockerイメージ化されたServersepecを実行

4. 結果判定

29

具体的にどうやってるか?

30

[Unit]

After=docker.service # 任意のサービスを定義(ここで指定したサービスの実行後に処理が実行される)

[Service]

Type=oneshot

RemainAfterExit=yes

ExecStartPre=/usr/bin/git clone \

[email protected]:arukasio/****spec.git /tmp/serverspec

ExecStart=/bin/bash -c 'cd /tmp/serverspec; \

docker run --rm --net="host" --pid="host" --ipc="host" --privileged \

--volume=“/etc:/etc/:ro“ /

--volume=“$(pwd):/serverspec:ro" uzyexe/serverspec rake serverspec'

最新のspecをpull

32

[Unit]

After=docker.service # 任意のサービスを定義(ここで指定したサービスの実行後に処理が実行される)

[Service]

Type=oneshot

RemainAfterExit=yes

ExecStartPre=/usr/bin/git clone \

[email protected]:arukasio/hostspec.git /tmp/serverspec

ExecStart=/bin/bash -c 'cd /tmp/serverspec; \

docker run --rm --net="host" --pid="host" --ipc="host" --privileged \

--volume=“/etc:/etc:ro“ /

--volume=“$(pwd):/serverspec:ro" uzyexe/serverspec rake serverspec'

Serverspec実行

33

systemd の場合• 対象サービスの Requires / After 句で起動制御。

起動中断処理

サービス起動中断後の処理は監視システムに拾わせる

34

Success Failed

Boot

Start StoppedMonitoring

サーバリストを都度更新するのは手間。

中途半端な状態でサービス投入されると困る。

手動テストは後任者に引き継がれない。

36

強制実行するに至った経緯

大事なことなので二回言います

37

手動テストは後任者に引き継がれません!

38

• Serverspecは主にDevの人が利用している。

• サーバホスティング事業者 = Opsが多い。

• シェルスクリプトを利用した出荷前検査が多い。

• 目grep & 人力 & クロスチェックになりがち。

39

さくらインターネットのお話とある友達の会社

• 理想は全品検査(強制自動テスト)

• テストに失敗したサーバは中断

• サーバリスト更新不要

• 三日坊主問題解消!

40

まとめ

宣伝

違った

違った詳しくはWebで!

Thank you!