SlideShare a Scribd company logo
1 of 23
Download to read offline
© 2017 Internet Initiative Japan Inc. ‐ 1 ‐‐ 1 ‐
Rancherを活用して開発効率を上げる
株式会社インターネットイニシアティブ
寺田 充毅
© 2017 Internet Initiative Japan Inc. ‐ 2 ‐‐ 2 ‐
自己紹介 & チーム紹介
 名前:寺田 充毅(みちたか)
 IIJのクラウド本部の分散技術課というチームに所属しています
 IIJ GIO(IIJのクラウド)のs3互換のオブジェクトストレージを担当している
課です
 ソフトウェアのエンジニアで主にJavaを書いて仕事をしています
 もともとは金融、産業界隈でSEをやっていました
© 2017 Internet Initiative Japan Inc. ‐ 3 ‐‐ 3 ‐
 内製のs3互換ストレージ
 サービスを構成する各AppがREST APIでつながっている
 2ケタ前半の台数で構成されている
フロントサーバ(外部向けREST API)
担当サービス:IIJ GIO ストレージ&アナリシスサービス
メタデータ管理
契約管理 分散ファイルシステム
インターネット
※アナリシス、コンソールは省略。
分散DB
© 2017 Internet Initiative Japan Inc. ‐ 4 ‐‐ 4 ‐
目次
なぜRancherを使い始めたか
RancherでCIを実践する
今後進めていくこと
© 2017 Internet Initiative Japan Inc. ‐ 5 ‐‐ 5 ‐
なぜRancherを使い始めたか
© 2017 Internet Initiative Japan Inc. ‐ 6 ‐‐ 6 ‐
Rancherを利用としようと思った背景
 ストレージサービスのリリースがつらい
• Chefと手作業を組み合わせたリリースに限界を感じてきていた
• サーバが増えてきた
• 属人的
• デリバリを高頻度にこなす仕組みを作りたい
 検証作業をサクサクやりたい
• R&D部署としての役割がある
• 調査対象のソフトウェアを速やかに立てて検証できるような仕組みがほしい
• 特に煩雑な分散処理基盤を楽にインストールしたい
• サーバを有効利用したい
• サーバの確保、気軽に共有
 新しいアーキテクチャの模索
• マイクロサービス
• オーケストレータを活用しないと実現が厳しそう
© 2017 Internet Initiative Japan Inc. ‐ 7 ‐‐ 7 ‐
Rancher meetup #1
 初回のミートアップに参加
• CI/CDの発表があり、好感触
 GUIだけでなくCLIがある
• 課内でも受け入れられやすそう
 カタログ!
• アプリをカタログにして環境に一気に展開できる
• 自動デプロイできる
• Hadoopとか少々構築に手間がかかるようなものがカタログにある
 オーケストレータを選べる
• 提供サービスの要件に対応できる幅がありそう
• 導入が大変だという話を聞き二の足を踏んでいたkubernetesも使え
る
© 2017 Internet Initiative Japan Inc. ‐ 8 ‐‐ 8 ‐
RancherでCIを実践する
© 2017 Internet Initiative Japan Inc. ‐ 9 ‐‐ 9 ‐
早速構築にとりかかる
 実サービスへの適用前にRancherの経験値を上げることに
 題材 : 開発中のNFSサーバのITを自動化してみる
• 自社のオブジェクトストレージをバックエンドに使うNFSサーバ
• 開発がホットなもので実績を積んでいきたい
• 環境の展開、試験、廃棄までの一連の処理をRancherでやってみる
 今回はすべてオンプレミスで構築
 構成
• RancherのDBはRancherサーバのコンテナ外にたてた
• うっかり削除防止
• 結果としてバージョンアップが楽になった
• ストレージはGlusterFSで構築
• 試験対象が大量のデータをディスクに書くため
• Rancherのストレージとして登録、管理(NFS)
© 2017 Internet Initiative Japan Inc. ‐ 10 ‐‐ 10 ‐
ストレージサーバ
全体像
 管理用ノードに詰め込み
管理用ノード
自社開発のオブジェ
クトストレージ
Docker
アカウント連携
ソース取得
社内Github
GlusterFS で サ ー バ の ス ト
レージを束ねて大きめのボ
リュームを構成
ストレージとして
Rancherで管理
処理用ノード
CentOS7
Docker
処理用ノード
RancherOS
DockerDocker
Server
Agent Agent
Registry
MySQLイメージを
PUT/GET
もうちょっと台数がある
Agentを介して
管理される
© 2017 Internet Initiative Japan Inc. ‐ 11 ‐‐ 11 ‐
テスト(IT)自動化
 自動化のためにやったこと
• イメージを作る
• カタログを作る
• ビルドとテストのJenkinsジョブを仕込む
• Rancher CLI導入
© 2017 Internet Initiative Japan Inc. ‐ 12 ‐‐ 12 ‐
カタログ ‐ 1
 Rancher meetup #4の資料で詳しく説明されています
• 「Rancher プライベートカタログとCompose」(m-daichangさん作)
 config.xml、rancher‐compose.yml、docker‐compose.ymlを作って
Githubに置けばOK
 設定の一部をパラメータ化することもできる
• rancher-compose.ymlでパラメータ(variable)を定義する
• 定義をもとにGUIが生成され、インストール時に画面から設定できるようになる
• スタック:カタログから生成される関連を持った一連のコンテナ、サービス
スタックカタログ
© 2017 Internet Initiative Japan Inc. ‐ 13 ‐‐ 13 ‐
カタログ ‐ 2
 rancher‐compose.ymlのパラメータ(variable)を、docker‐
compose.ymlに埋め込むことができる
• ${variable名}で参照する
• 例ではaccess_key_idを環境変数で渡している
• ただ、コンテナに詰めたアプリケーションが環境変数を読んでくれないときはつらい
version: '2'
catalog:
name: "NFS Dagrin”
version: "v1.1"
description: "test for nfs-ganesha-dag"
questions:
・・・・
- variable: "access_key_id"
label: "ACCESS KEY ID"
description: "ACCESS KEY ID for dagrin"
required: true
type: "string"
default: "XXXXXXXXXXXXX"
・・・・
rancher‐compose.yml
version: '2'
services:
nfs-ganesha:
cap_add:
- SYS_ADMIN
image: registroy:5000/dagrin/image:${target_tag}
stdin_open: true
volumes:
- ${cache_volume}:/var/tmp/fsal_dag
- ${config_volume}:/etc/ganesha
volume_driver: ${volume_driver}
・・・・
environment:
STORAGE_ENDPOINT: ${dagrin_endpoint}
BUCKET: ${bucket}
ACCESS_KEY_ID: ${access_key_id}
SECRET_ACCESS_KEY: ${secret_access_key}
USE_HTTPS: ${use_https}
・・・・
docker‐compose.yml
© 2017 Internet Initiative Japan Inc. ‐ 14 ‐‐ 14 ‐
イメージ作り
 環境変数で制御できないアプリに、カタログのパラメータをどうやってプロセ
スに食わせるのか?
 要は環境変数を読んで設定ファイルを出力し、プロセスを起動すればいい
• Entrykitを使ってみた
• https://github.com/progrium/entrykit
• プロセス起動の前にちょっとした仕事をこなしたいときに便利なツールの詰め合わせ
• renderコマンドを今回使った
• テンプレートファイルを用意し、埋め込みたい場所に以下の記法で変数を指定
• テンプレートのファイル名は実際に配置するファイル名に.tmplを付加する形式
• 今回の例ならnfs-iij.comf.tmpl
• Dockerfile側で以下のように指定すると、テンプレートから設定ファイルをrenderした後に
pid=1となるプロセスを起動してくれる
 知見がたまってきた今だとsidekickコンテナでやるかもしれない
access_key_id = {{ var "ACCESS_KEY_ID" }};
ENTRYPOINT ["render", "/etc/nfs/iij-nfs.conf", "--", "iij-nfs.nfsd"]
実行対象のコマンドテンプレートの配置先
© 2017 Internet Initiative Japan Inc. ‐ 15 ‐‐ 15 ‐
Rancher CLIの導入
 GUIからダウンロードし、APIキーを設定するだけで利用可能
 今使っているのは以下の操作
• volumeの作成、削除( rancher volume create/delete)
• カタログの展開(rancher catalog install)
• リソースが利用可能になるまで待機 (rancher wait) ※自動化時に重宝するコマンド
• スタックの停止(rancher stack stop)
• リソース(コンテナ、スタック)の削除 (rancher rm)
 answerfile.txt
• カタログのパラメータを指定するファイル(variable=value形式)
• ドキュメントを検索しても記載方法出てこなくて挫折しかけた
• カタログのプレビュー画面に実はあった
cache_volume=
volume_driver=
target_tag=latest
・
・
expose_port=3000
endpoint_label=endpoint-server¥=true
© 2017 Internet Initiative Japan Inc. ‐ 16 ‐‐ 16 ‐
全体像
 gitのタグ付けを契機にテスト実行(dailyでも回している)
 試験が成功した場合はボリューム、スタックを削除する仕組み
2. タグ付けを契
機に処理開始
10 .テスト実行(httpで投げ込む)
5. ボリューム作成
7. カタログ install
8. スタック
を展開
6. ボリューム作成
(実体はディレクトリ)
9. 各ノードがイメージPULL
1. タグ付け
処理用ノード 処理用ノード
スタック
NFS ServerClient
GlusterFS
3. イメージ
ビルド
4. イメージをPUSH
※。===
Clientは将来的には並行実
行用に複数立てる予定
linkして名前
でアクセス
© 2017 Internet Initiative Japan Inc. ‐ 17 ‐‐ 17 ‐
Rancher やってみて良かった点 / 悪かった点
 良かった
• クリーンな環境で継続してをIT回せる
• 環境丸ごと作成 -> 廃棄なので非常にクリーン
• 同じ流れで別環境(本番)へデリバリできるので、将来の自動デリバリの目途が付いた
• 検証作業で活用できている ※プレゼンでは話せていませんが
• それRancher環境でやってみれば?という雰囲気
• proxy 3種類立てて試してよ? -> スタンドアローンコンテナでサクサク試した
• ログをPrestoで分析するか -> 同上
• 上記を踏まえると、Rancherの導入で開発効率アップを後押しできていると思う
 悪かった
• たまにハマる
• バグはかなり少ない印象だがはまるときははまる(なんでもそうですが)
• ソースが読みやすいので追おうと思えばなんとかなる
• バージョンアップで解消することがある(今回経験)
• 悩んだらバージョン上げることにした
 その他
• Dockerの知識は必要
• いろいろな知識がこの界隈は必要になるので、隣人を巻き込んだほうがいい
© 2017 Internet Initiative Japan Inc. ‐ 18 ‐‐ 18 ‐
困った時の情報源
 公式ドキュメント
• 読みやすい
• https://docs.rancher.com/rancher/
 RancherJP
• http://www.rancher.jp/
 Qiitaとかも徐々に増えてきている
 RancherJPのslack
• catalog installがタイムアウトする事象に遭遇
• 自力で解決できずにslack の#qaに投稿すると即座にレスが
• ありがとうございます
• 恩返しできるように頑張ります
• 過去ログ漁って情報集めたりしています
© 2017 Internet Initiative Japan Inc. ‐ 19 ‐‐ 19 ‐
(横道) テストの遠隔実行 & 結果回収
 スタック外からアクセスし難いアプリをどうやって試験するか?
• Tugbotとかを当初調べていた
• https://github.com/gaia-docker/tugbot
• Jenkinsスレーブを試験対象のスタック内に立てて試験する?
 今回はテストクライアントのコンテナに対してHTTPでリクエストを投げると、
スクリプトやコマンドを実行する仕組みを作って実現している
• captainhook
• https://github.com/bketelsen/captainhook
• mount用のhookとテスト用のhookを作った
• 自作のgolangのクライアントで実行
• 結果のjsonをパースしている(jqでも戦えたかもしれない)
Client コンテナ
Captain
hook
mountコマンド
test script1
test script2
http://host/exec_mount
http://host/exec_test
http://host/exec_test
自作
コマ
ンド
© 2017 Internet Initiative Japan Inc. ‐ 20 ‐‐ 20 ‐
今後進めていくこと
© 2017 Internet Initiative Japan Inc. ‐ 21 ‐‐ 21 ‐
実サービスに使う前にクリアにしていきたいこと
 障害時の挙動の把握
• ネットワークインタフェースをdownして挙動を観察している
• Rancherサーバとの疎通が生命線ということは理解できて来た
• 復旧時に一時的に同じ役割のコンテナが重複して起動するタイミングがありそう
 ネットワーク関連の機能の熟知
• サービス&LBの設定、挙動整理
• healthチェックの種類や、再起動strategyによる挙動の違いを確認、整理中
• エンドポイントの冗⾧化
• External DNS(PowerDNS)を試し始めている
 上記2点を踏まえ、Rancher(オーケストレータ)環境に適したアプリケーショ
ンの設計、必要な機能を見出していきたい
 その他
• 監視
• IPSec、VXLanとでどこまで性能差があるか、10G使い切れるか?
• Longhornは試してみたい
• 複数NIC環境でどうやって運用するのか?
© 2017 Internet Initiative Japan Inc. ‐ 22 ‐‐ 22 ‐
(おまけ)NFSサーバのCIを高度化する – マシンドライバを活用する
 クライアントとサーバのOSを変えて、組み合わせ試験を実施したい
 マシンドライバを使ってVMを作成し、そこにコンテナ展開して試験をしたい
• NFSはカーネルがマウントしているので、今はホストでマウントして試験している状態
• 今だとCentOSとRancherOSで試験していることになる
 KVMのdocker‐machineのマシンドライバで試行するつもり
• https://github.com/dhiltgen/docker-machine-kvm
• cliのオプションがないので一筋縄ではいかない模様
クライアント用ノード
・・・
CentOS Ubuntu
Client
処理用ノード
Client
NFS Server
(centos base)
処理用ノード
NFS Server
(ubuntu base)
・・・
KVMとか
VMの構築から
ITの中でやる
次にスタックをインス
トールして試験する
© 2017 Internet Initiative Japan Inc. ‐ 23 ‐‐ 23 ‐

More Related Content

What's hot

AWS Cognito makes old web apps available from anywhere
AWS Cognito makes old web apps available from anywhereAWS Cognito makes old web apps available from anywhere
AWS Cognito makes old web apps available from anywhereYukiya Hayashi
 
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達softlayerjp
 
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform CloudWataru Unno
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例gree_tech
 
OpenStack & Container
OpenStack & ContainerOpenStack & Container
OpenStack & ContainerHiroki Ito
 
AnsibleによるHWプロビジョニング -OneViewの連携-
AnsibleによるHWプロビジョニング  -OneViewの連携-AnsibleによるHWプロビジョニング  -OneViewの連携-
AnsibleによるHWプロビジョニング -OneViewの連携-Takahiro Kida
 
Node-REDのフローをバックアップしよう
Node-REDのフローをバックアップしようNode-REDのフローをバックアップしよう
Node-REDのフローをバックアップしようKota Suizu
 
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介富士通クラウドテクノロジーズ株式会社
 

What's hot (19)

VM 基盤運用チームの DevOps
VM 基盤運用チームの DevOpsVM 基盤運用チームの DevOps
VM 基盤運用チームの DevOps
 
AWS Cognito makes old web apps available from anywhere
AWS Cognito makes old web apps available from anywhereAWS Cognito makes old web apps available from anywhere
AWS Cognito makes old web apps available from anywhere
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Try IoT with Node-RED
Try IoT with Node-REDTry IoT with Node-RED
Try IoT with Node-RED
 
マネージドKubernetesサービス ニフクラ Hatoba(β)リリース!!
マネージドKubernetesサービス ニフクラ Hatoba(β)リリース!!マネージドKubernetesサービス ニフクラ Hatoba(β)リリース!!
マネージドKubernetesサービス ニフクラ Hatoba(β)リリース!!
 
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
 
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud
 
クラウド上のシステム監視 入門編
クラウド上のシステム監視 入門編クラウド上のシステム監視 入門編
クラウド上のシステム監視 入門編
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 
ニフクラでDockerを使う際のTips
ニフクラでDockerを使う際のTipsニフクラでDockerを使う際のTips
ニフクラでDockerを使う際のTips
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
 
ニフクラ × RancherでつくるKubernetes環境
ニフクラ × RancherでつくるKubernetes環境ニフクラ × RancherでつくるKubernetes環境
ニフクラ × RancherでつくるKubernetes環境
 
ニフクラのサービス基盤運用におけるCIの取り組み
ニフクラのサービス基盤運用におけるCIの取り組みニフクラのサービス基盤運用におけるCIの取り組み
ニフクラのサービス基盤運用におけるCIの取り組み
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③
 
OpenStack & Container
OpenStack & ContainerOpenStack & Container
OpenStack & Container
 
AnsibleによるHWプロビジョニング -OneViewの連携-
AnsibleによるHWプロビジョニング  -OneViewの連携-AnsibleによるHWプロビジョニング  -OneViewの連携-
AnsibleによるHWプロビジョニング -OneViewの連携-
 
Node-REDのフローをバックアップしよう
Node-REDのフローをバックアップしようNode-REDのフローをバックアップしよう
Node-REDのフローをバックアップしよう
 
SpinnakerとOpenStackの構築
SpinnakerとOpenStackの構築SpinnakerとOpenStackの構築
SpinnakerとOpenStackの構築
 
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
 

Similar to Rancherを活用して開発効率を上げる

Rancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組みRancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組みMichitaka Terada
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係Kaz Aiso
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Takeshi Hirosue
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイiwata jaws-ug
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座DIVE INTO CODE Corp.
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbixsoftlayerjp
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
2017年のセキュリティ 傾向と対策講座
2017年のセキュリティ 傾向と対策講座2017年のセキュリティ 傾向と対策講座
2017年のセキュリティ 傾向と対策講座NHN テコラス株式会社
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)TIS Inc.
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方CData Software Japan
 
【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬る【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬るDevelopers Summit
 
Sumo logic meetup 2020 jan
Sumo logic meetup 2020 janSumo logic meetup 2020 jan
Sumo logic meetup 2020 janMasatomo Ito
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Insight Technology, Inc.
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介bitbank, Inc. Tokyo, Japan
 
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)Michitaka Terada
 

Similar to Rancherを活用して開発効率を上げる (20)

Rancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組みRancher/k8sを利用した運用改善の取り組み
Rancher/k8sを利用した運用改善の取り組み
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
 
初めてのWebプログラミング講座
初めてのWebプログラミング講座初めてのWebプログラミング講座
初めてのWebプログラミング講座
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
2017年のセキュリティ 傾向と対策講座
2017年のセキュリティ 傾向と対策講座2017年のセキュリティ 傾向と対策講座
2017年のセキュリティ 傾向と対策講座
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方
 
【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬る【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬る
 
Sumo logic meetup 2020 jan
Sumo logic meetup 2020 janSumo logic meetup 2020 jan
Sumo logic meetup 2020 jan
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
Database as code in Devops - DBを10分間で1000個構築するDB仮想化テクノロジーとは?(Ishikawa)
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
 

Rancherを活用して開発効率を上げる

  • 1. © 2017 Internet Initiative Japan Inc. ‐ 1 ‐‐ 1 ‐ Rancherを活用して開発効率を上げる 株式会社インターネットイニシアティブ 寺田 充毅
  • 2. © 2017 Internet Initiative Japan Inc. ‐ 2 ‐‐ 2 ‐ 自己紹介 & チーム紹介  名前:寺田 充毅(みちたか)  IIJのクラウド本部の分散技術課というチームに所属しています  IIJ GIO(IIJのクラウド)のs3互換のオブジェクトストレージを担当している 課です  ソフトウェアのエンジニアで主にJavaを書いて仕事をしています  もともとは金融、産業界隈でSEをやっていました
  • 3. © 2017 Internet Initiative Japan Inc. ‐ 3 ‐‐ 3 ‐  内製のs3互換ストレージ  サービスを構成する各AppがREST APIでつながっている  2ケタ前半の台数で構成されている フロントサーバ(外部向けREST API) 担当サービス:IIJ GIO ストレージ&アナリシスサービス メタデータ管理 契約管理 分散ファイルシステム インターネット ※アナリシス、コンソールは省略。 分散DB
  • 4. © 2017 Internet Initiative Japan Inc. ‐ 4 ‐‐ 4 ‐ 目次 なぜRancherを使い始めたか RancherでCIを実践する 今後進めていくこと
  • 5. © 2017 Internet Initiative Japan Inc. ‐ 5 ‐‐ 5 ‐ なぜRancherを使い始めたか
  • 6. © 2017 Internet Initiative Japan Inc. ‐ 6 ‐‐ 6 ‐ Rancherを利用としようと思った背景  ストレージサービスのリリースがつらい • Chefと手作業を組み合わせたリリースに限界を感じてきていた • サーバが増えてきた • 属人的 • デリバリを高頻度にこなす仕組みを作りたい  検証作業をサクサクやりたい • R&D部署としての役割がある • 調査対象のソフトウェアを速やかに立てて検証できるような仕組みがほしい • 特に煩雑な分散処理基盤を楽にインストールしたい • サーバを有効利用したい • サーバの確保、気軽に共有  新しいアーキテクチャの模索 • マイクロサービス • オーケストレータを活用しないと実現が厳しそう
  • 7. © 2017 Internet Initiative Japan Inc. ‐ 7 ‐‐ 7 ‐ Rancher meetup #1  初回のミートアップに参加 • CI/CDの発表があり、好感触  GUIだけでなくCLIがある • 課内でも受け入れられやすそう  カタログ! • アプリをカタログにして環境に一気に展開できる • 自動デプロイできる • Hadoopとか少々構築に手間がかかるようなものがカタログにある  オーケストレータを選べる • 提供サービスの要件に対応できる幅がありそう • 導入が大変だという話を聞き二の足を踏んでいたkubernetesも使え る
  • 8. © 2017 Internet Initiative Japan Inc. ‐ 8 ‐‐ 8 ‐ RancherでCIを実践する
  • 9. © 2017 Internet Initiative Japan Inc. ‐ 9 ‐‐ 9 ‐ 早速構築にとりかかる  実サービスへの適用前にRancherの経験値を上げることに  題材 : 開発中のNFSサーバのITを自動化してみる • 自社のオブジェクトストレージをバックエンドに使うNFSサーバ • 開発がホットなもので実績を積んでいきたい • 環境の展開、試験、廃棄までの一連の処理をRancherでやってみる  今回はすべてオンプレミスで構築  構成 • RancherのDBはRancherサーバのコンテナ外にたてた • うっかり削除防止 • 結果としてバージョンアップが楽になった • ストレージはGlusterFSで構築 • 試験対象が大量のデータをディスクに書くため • Rancherのストレージとして登録、管理(NFS)
  • 10. © 2017 Internet Initiative Japan Inc. ‐ 10 ‐‐ 10 ‐ ストレージサーバ 全体像  管理用ノードに詰め込み 管理用ノード 自社開発のオブジェ クトストレージ Docker アカウント連携 ソース取得 社内Github GlusterFS で サ ー バ の ス ト レージを束ねて大きめのボ リュームを構成 ストレージとして Rancherで管理 処理用ノード CentOS7 Docker 処理用ノード RancherOS DockerDocker Server Agent Agent Registry MySQLイメージを PUT/GET もうちょっと台数がある Agentを介して 管理される
  • 11. © 2017 Internet Initiative Japan Inc. ‐ 11 ‐‐ 11 ‐ テスト(IT)自動化  自動化のためにやったこと • イメージを作る • カタログを作る • ビルドとテストのJenkinsジョブを仕込む • Rancher CLI導入
  • 12. © 2017 Internet Initiative Japan Inc. ‐ 12 ‐‐ 12 ‐ カタログ ‐ 1  Rancher meetup #4の資料で詳しく説明されています • 「Rancher プライベートカタログとCompose」(m-daichangさん作)  config.xml、rancher‐compose.yml、docker‐compose.ymlを作って Githubに置けばOK  設定の一部をパラメータ化することもできる • rancher-compose.ymlでパラメータ(variable)を定義する • 定義をもとにGUIが生成され、インストール時に画面から設定できるようになる • スタック:カタログから生成される関連を持った一連のコンテナ、サービス スタックカタログ
  • 13. © 2017 Internet Initiative Japan Inc. ‐ 13 ‐‐ 13 ‐ カタログ ‐ 2  rancher‐compose.ymlのパラメータ(variable)を、docker‐ compose.ymlに埋め込むことができる • ${variable名}で参照する • 例ではaccess_key_idを環境変数で渡している • ただ、コンテナに詰めたアプリケーションが環境変数を読んでくれないときはつらい version: '2' catalog: name: "NFS Dagrin” version: "v1.1" description: "test for nfs-ganesha-dag" questions: ・・・・ - variable: "access_key_id" label: "ACCESS KEY ID" description: "ACCESS KEY ID for dagrin" required: true type: "string" default: "XXXXXXXXXXXXX" ・・・・ rancher‐compose.yml version: '2' services: nfs-ganesha: cap_add: - SYS_ADMIN image: registroy:5000/dagrin/image:${target_tag} stdin_open: true volumes: - ${cache_volume}:/var/tmp/fsal_dag - ${config_volume}:/etc/ganesha volume_driver: ${volume_driver} ・・・・ environment: STORAGE_ENDPOINT: ${dagrin_endpoint} BUCKET: ${bucket} ACCESS_KEY_ID: ${access_key_id} SECRET_ACCESS_KEY: ${secret_access_key} USE_HTTPS: ${use_https} ・・・・ docker‐compose.yml
  • 14. © 2017 Internet Initiative Japan Inc. ‐ 14 ‐‐ 14 ‐ イメージ作り  環境変数で制御できないアプリに、カタログのパラメータをどうやってプロセ スに食わせるのか?  要は環境変数を読んで設定ファイルを出力し、プロセスを起動すればいい • Entrykitを使ってみた • https://github.com/progrium/entrykit • プロセス起動の前にちょっとした仕事をこなしたいときに便利なツールの詰め合わせ • renderコマンドを今回使った • テンプレートファイルを用意し、埋め込みたい場所に以下の記法で変数を指定 • テンプレートのファイル名は実際に配置するファイル名に.tmplを付加する形式 • 今回の例ならnfs-iij.comf.tmpl • Dockerfile側で以下のように指定すると、テンプレートから設定ファイルをrenderした後に pid=1となるプロセスを起動してくれる  知見がたまってきた今だとsidekickコンテナでやるかもしれない access_key_id = {{ var "ACCESS_KEY_ID" }}; ENTRYPOINT ["render", "/etc/nfs/iij-nfs.conf", "--", "iij-nfs.nfsd"] 実行対象のコマンドテンプレートの配置先
  • 15. © 2017 Internet Initiative Japan Inc. ‐ 15 ‐‐ 15 ‐ Rancher CLIの導入  GUIからダウンロードし、APIキーを設定するだけで利用可能  今使っているのは以下の操作 • volumeの作成、削除( rancher volume create/delete) • カタログの展開(rancher catalog install) • リソースが利用可能になるまで待機 (rancher wait) ※自動化時に重宝するコマンド • スタックの停止(rancher stack stop) • リソース(コンテナ、スタック)の削除 (rancher rm)  answerfile.txt • カタログのパラメータを指定するファイル(variable=value形式) • ドキュメントを検索しても記載方法出てこなくて挫折しかけた • カタログのプレビュー画面に実はあった cache_volume= volume_driver= target_tag=latest ・ ・ expose_port=3000 endpoint_label=endpoint-server¥=true
  • 16. © 2017 Internet Initiative Japan Inc. ‐ 16 ‐‐ 16 ‐ 全体像  gitのタグ付けを契機にテスト実行(dailyでも回している)  試験が成功した場合はボリューム、スタックを削除する仕組み 2. タグ付けを契 機に処理開始 10 .テスト実行(httpで投げ込む) 5. ボリューム作成 7. カタログ install 8. スタック を展開 6. ボリューム作成 (実体はディレクトリ) 9. 各ノードがイメージPULL 1. タグ付け 処理用ノード 処理用ノード スタック NFS ServerClient GlusterFS 3. イメージ ビルド 4. イメージをPUSH ※。=== Clientは将来的には並行実 行用に複数立てる予定 linkして名前 でアクセス
  • 17. © 2017 Internet Initiative Japan Inc. ‐ 17 ‐‐ 17 ‐ Rancher やってみて良かった点 / 悪かった点  良かった • クリーンな環境で継続してをIT回せる • 環境丸ごと作成 -> 廃棄なので非常にクリーン • 同じ流れで別環境(本番)へデリバリできるので、将来の自動デリバリの目途が付いた • 検証作業で活用できている ※プレゼンでは話せていませんが • それRancher環境でやってみれば?という雰囲気 • proxy 3種類立てて試してよ? -> スタンドアローンコンテナでサクサク試した • ログをPrestoで分析するか -> 同上 • 上記を踏まえると、Rancherの導入で開発効率アップを後押しできていると思う  悪かった • たまにハマる • バグはかなり少ない印象だがはまるときははまる(なんでもそうですが) • ソースが読みやすいので追おうと思えばなんとかなる • バージョンアップで解消することがある(今回経験) • 悩んだらバージョン上げることにした  その他 • Dockerの知識は必要 • いろいろな知識がこの界隈は必要になるので、隣人を巻き込んだほうがいい
  • 18. © 2017 Internet Initiative Japan Inc. ‐ 18 ‐‐ 18 ‐ 困った時の情報源  公式ドキュメント • 読みやすい • https://docs.rancher.com/rancher/  RancherJP • http://www.rancher.jp/  Qiitaとかも徐々に増えてきている  RancherJPのslack • catalog installがタイムアウトする事象に遭遇 • 自力で解決できずにslack の#qaに投稿すると即座にレスが • ありがとうございます • 恩返しできるように頑張ります • 過去ログ漁って情報集めたりしています
  • 19. © 2017 Internet Initiative Japan Inc. ‐ 19 ‐‐ 19 ‐ (横道) テストの遠隔実行 & 結果回収  スタック外からアクセスし難いアプリをどうやって試験するか? • Tugbotとかを当初調べていた • https://github.com/gaia-docker/tugbot • Jenkinsスレーブを試験対象のスタック内に立てて試験する?  今回はテストクライアントのコンテナに対してHTTPでリクエストを投げると、 スクリプトやコマンドを実行する仕組みを作って実現している • captainhook • https://github.com/bketelsen/captainhook • mount用のhookとテスト用のhookを作った • 自作のgolangのクライアントで実行 • 結果のjsonをパースしている(jqでも戦えたかもしれない) Client コンテナ Captain hook mountコマンド test script1 test script2 http://host/exec_mount http://host/exec_test http://host/exec_test 自作 コマ ンド
  • 20. © 2017 Internet Initiative Japan Inc. ‐ 20 ‐‐ 20 ‐ 今後進めていくこと
  • 21. © 2017 Internet Initiative Japan Inc. ‐ 21 ‐‐ 21 ‐ 実サービスに使う前にクリアにしていきたいこと  障害時の挙動の把握 • ネットワークインタフェースをdownして挙動を観察している • Rancherサーバとの疎通が生命線ということは理解できて来た • 復旧時に一時的に同じ役割のコンテナが重複して起動するタイミングがありそう  ネットワーク関連の機能の熟知 • サービス&LBの設定、挙動整理 • healthチェックの種類や、再起動strategyによる挙動の違いを確認、整理中 • エンドポイントの冗⾧化 • External DNS(PowerDNS)を試し始めている  上記2点を踏まえ、Rancher(オーケストレータ)環境に適したアプリケーショ ンの設計、必要な機能を見出していきたい  その他 • 監視 • IPSec、VXLanとでどこまで性能差があるか、10G使い切れるか? • Longhornは試してみたい • 複数NIC環境でどうやって運用するのか?
  • 22. © 2017 Internet Initiative Japan Inc. ‐ 22 ‐‐ 22 ‐ (おまけ)NFSサーバのCIを高度化する – マシンドライバを活用する  クライアントとサーバのOSを変えて、組み合わせ試験を実施したい  マシンドライバを使ってVMを作成し、そこにコンテナ展開して試験をしたい • NFSはカーネルがマウントしているので、今はホストでマウントして試験している状態 • 今だとCentOSとRancherOSで試験していることになる  KVMのdocker‐machineのマシンドライバで試行するつもり • https://github.com/dhiltgen/docker-machine-kvm • cliのオプションがないので一筋縄ではいかない模様 クライアント用ノード ・・・ CentOS Ubuntu Client 処理用ノード Client NFS Server (centos base) 処理用ノード NFS Server (ubuntu base) ・・・ KVMとか VMの構築から ITの中でやる 次にスタックをインス トールして試験する
  • 23. © 2017 Internet Initiative Japan Inc. ‐ 23 ‐‐ 23 ‐