Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
© 2017 Internet Initiative Japan Inc. ‐ 1 ‐‐ 1 ‐
Rancherを活用して開発効率を上げる
株式会社インターネットイニシアティブ
寺田 充毅
© 2017 Internet Initiative Japan Inc. ‐ 2 ‐‐ 2 ‐
自己紹介 & チーム紹介
 名前:寺田 充毅(みちたか)
 IIJのクラウド本部の分散技術課というチームに所属しています
 IIJ GIO(...
© 2017 Internet Initiative Japan Inc. ‐ 3 ‐‐ 3 ‐
 内製のs3互換ストレージ
 サービスを構成する各AppがREST APIでつながっている
 2ケタ前半の台数で構成されている
フロントサー...
© 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と手作業を組み合わせたリリースに限界を感じてきてい...
© 2017 Internet Initiative Japan Inc. ‐ 7 ‐‐ 7 ‐
Rancher meetup #1
 初回のミートアップに参加
• CI/CDの発表があり、好感触
 GUIだけでなくCLIがある
• 課内で...
© 2017 Internet Initiative Japan Inc. ‐ 8 ‐‐ 8 ‐
RancherでCIを実践する
© 2017 Internet Initiative Japan Inc. ‐ 9 ‐‐ 9 ‐
早速構築にとりかかる
 実サービスへの適用前にRancherの経験値を上げることに
 題材 : 開発中のNFSサーバのITを自動化してみる
•...
© 2017 Internet Initiative Japan Inc. ‐ 10 ‐‐ 10 ‐
ストレージサーバ
全体像
 管理用ノードに詰め込み
管理用ノード
自社開発のオブジェ
クトストレージ
Docker
アカウント連携
ソース取...
© 2017 Internet Initiative Japan Inc. ‐ 11 ‐‐ 11 ‐
テスト(IT)自動化
 自動化のためにやったこと
• イメージを作る
• カタログを作る
• ビルドとテストのJenkinsジョブを仕込む
...
© 2017 Internet Initiative Japan Inc. ‐ 12 ‐‐ 12 ‐
カタログ ‐ 1
 Rancher meetup #4の資料で詳しく説明されています
• 「Rancher プライベートカタログとCompo...
© 2017 Internet Initiative Japan Inc. ‐ 13 ‐‐ 13 ‐
カタログ ‐ 2
 rancher‐compose.ymlのパラメータ(variable)を、docker‐
compose.ymlに埋め込...
© 2017 Internet Initiative Japan Inc. ‐ 14 ‐‐ 14 ‐
イメージ作り
 環境変数で制御できないアプリに、カタログのパラメータをどうやってプロセ
スに食わせるのか?
 要は環境変数を読んで設定ファ...
© 2017 Internet Initiative Japan Inc. ‐ 15 ‐‐ 15 ‐
Rancher CLIの導入
 GUIからダウンロードし、APIキーを設定するだけで利用可能
 今使っているのは以下の操作
• volum...
© 2017 Internet Initiative Japan Inc. ‐ 16 ‐‐ 16 ‐
全体像
 gitのタグ付けを契機にテスト実行(dailyでも回している)
 試験が成功した場合はボリューム、スタックを削除する仕組み
2....
© 2017 Internet Initiative Japan Inc. ‐ 17 ‐‐ 17 ‐
Rancher やってみて良かった点 / 悪かった点
 良かった
• クリーンな環境で継続してをIT回せる
• 環境丸ごと作成 -> 廃棄な...
© 2017 Internet Initiative Japan Inc. ‐ 18 ‐‐ 18 ‐
困った時の情報源
 公式ドキュメント
• 読みやすい
• https://docs.rancher.com/rancher/
 Ranch...
© 2017 Internet Initiative Japan Inc. ‐ 19 ‐‐ 19 ‐
(横道) テストの遠隔実行 & 結果回収
 スタック外からアクセスし難いアプリをどうやって試験するか?
• Tugbotとかを当初調べていた...
© 2017 Internet Initiative Japan Inc. ‐ 20 ‐‐ 20 ‐
今後進めていくこと
© 2017 Internet Initiative Japan Inc. ‐ 21 ‐‐ 21 ‐
実サービスに使う前にクリアにしていきたいこと
 障害時の挙動の把握
• ネットワークインタフェースをdownして挙動を観察している
• Ra...
© 2017 Internet Initiative Japan Inc. ‐ 22 ‐‐ 22 ‐
(おまけ)NFSサーバのCIを高度化する – マシンドライバを活用する
 クライアントとサーバのOSを変えて、組み合わせ試験を実施したい
...
© 2017 Internet Initiative Japan Inc. ‐ 23 ‐‐ 23 ‐
Upcoming SlideShare
Loading in …5
×

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

1,376 views

Published on

Rancher meetup#6資料

Published in: Engineering
  • Be the first to comment

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

  1. 1. © 2017 Internet Initiative Japan Inc. ‐ 1 ‐‐ 1 ‐ Rancherを活用して開発効率を上げる 株式会社インターネットイニシアティブ 寺田 充毅
  2. 2. © 2017 Internet Initiative Japan Inc. ‐ 2 ‐‐ 2 ‐ 自己紹介 & チーム紹介  名前:寺田 充毅(みちたか)  IIJのクラウド本部の分散技術課というチームに所属しています  IIJ GIO(IIJのクラウド)のs3互換のオブジェクトストレージを担当している 課です  ソフトウェアのエンジニアで主にJavaを書いて仕事をしています  もともとは金融、産業界隈でSEをやっていました
  3. 3. © 2017 Internet Initiative Japan Inc. ‐ 3 ‐‐ 3 ‐  内製のs3互換ストレージ  サービスを構成する各AppがREST APIでつながっている  2ケタ前半の台数で構成されている フロントサーバ(外部向けREST API) 担当サービス:IIJ GIO ストレージ&アナリシスサービス メタデータ管理 契約管理 分散ファイルシステム インターネット ※アナリシス、コンソールは省略。 分散DB
  4. 4. © 2017 Internet Initiative Japan Inc. ‐ 4 ‐‐ 4 ‐ 目次 なぜRancherを使い始めたか RancherでCIを実践する 今後進めていくこと
  5. 5. © 2017 Internet Initiative Japan Inc. ‐ 5 ‐‐ 5 ‐ なぜRancherを使い始めたか
  6. 6. © 2017 Internet Initiative Japan Inc. ‐ 6 ‐‐ 6 ‐ Rancherを利用としようと思った背景  ストレージサービスのリリースがつらい • Chefと手作業を組み合わせたリリースに限界を感じてきていた • サーバが増えてきた • 属人的 • デリバリを高頻度にこなす仕組みを作りたい  検証作業をサクサクやりたい • R&D部署としての役割がある • 調査対象のソフトウェアを速やかに立てて検証できるような仕組みがほしい • 特に煩雑な分散処理基盤を楽にインストールしたい • サーバを有効利用したい • サーバの確保、気軽に共有  新しいアーキテクチャの模索 • マイクロサービス • オーケストレータを活用しないと実現が厳しそう
  7. 7. © 2017 Internet Initiative Japan Inc. ‐ 7 ‐‐ 7 ‐ Rancher meetup #1  初回のミートアップに参加 • CI/CDの発表があり、好感触  GUIだけでなくCLIがある • 課内でも受け入れられやすそう  カタログ! • アプリをカタログにして環境に一気に展開できる • 自動デプロイできる • Hadoopとか少々構築に手間がかかるようなものがカタログにある  オーケストレータを選べる • 提供サービスの要件に対応できる幅がありそう • 導入が大変だという話を聞き二の足を踏んでいたkubernetesも使え る
  8. 8. © 2017 Internet Initiative Japan Inc. ‐ 8 ‐‐ 8 ‐ RancherでCIを実践する
  9. 9. © 2017 Internet Initiative Japan Inc. ‐ 9 ‐‐ 9 ‐ 早速構築にとりかかる  実サービスへの適用前にRancherの経験値を上げることに  題材 : 開発中のNFSサーバのITを自動化してみる • 自社のオブジェクトストレージをバックエンドに使うNFSサーバ • 開発がホットなもので実績を積んでいきたい • 環境の展開、試験、廃棄までの一連の処理をRancherでやってみる  今回はすべてオンプレミスで構築  構成 • RancherのDBはRancherサーバのコンテナ外にたてた • うっかり削除防止 • 結果としてバージョンアップが楽になった • ストレージはGlusterFSで構築 • 試験対象が大量のデータをディスクに書くため • Rancherのストレージとして登録、管理(NFS)
  10. 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. 11. © 2017 Internet Initiative Japan Inc. ‐ 11 ‐‐ 11 ‐ テスト(IT)自動化  自動化のためにやったこと • イメージを作る • カタログを作る • ビルドとテストのJenkinsジョブを仕込む • Rancher CLI導入
  12. 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. 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. 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. 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. 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. 17. © 2017 Internet Initiative Japan Inc. ‐ 17 ‐‐ 17 ‐ Rancher やってみて良かった点 / 悪かった点  良かった • クリーンな環境で継続してをIT回せる • 環境丸ごと作成 -> 廃棄なので非常にクリーン • 同じ流れで別環境(本番)へデリバリできるので、将来の自動デリバリの目途が付いた • 検証作業で活用できている ※プレゼンでは話せていませんが • それRancher環境でやってみれば?という雰囲気 • proxy 3種類立てて試してよ? -> スタンドアローンコンテナでサクサク試した • ログをPrestoで分析するか -> 同上 • 上記を踏まえると、Rancherの導入で開発効率アップを後押しできていると思う  悪かった • たまにハマる • バグはかなり少ない印象だがはまるときははまる(なんでもそうですが) • ソースが読みやすいので追おうと思えばなんとかなる • バージョンアップで解消することがある(今回経験) • 悩んだらバージョン上げることにした  その他 • Dockerの知識は必要 • いろいろな知識がこの界隈は必要になるので、隣人を巻き込んだほうがいい
  18. 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. 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. 20. © 2017 Internet Initiative Japan Inc. ‐ 20 ‐‐ 20 ‐ 今後進めていくこと
  21. 21. © 2017 Internet Initiative Japan Inc. ‐ 21 ‐‐ 21 ‐ 実サービスに使う前にクリアにしていきたいこと  障害時の挙動の把握 • ネットワークインタフェースをdownして挙動を観察している • Rancherサーバとの疎通が生命線ということは理解できて来た • 復旧時に一時的に同じ役割のコンテナが重複して起動するタイミングがありそう  ネットワーク関連の機能の熟知 • サービス&LBの設定、挙動整理 • healthチェックの種類や、再起動strategyによる挙動の違いを確認、整理中 • エンドポイントの冗⾧化 • External DNS(PowerDNS)を試し始めている  上記2点を踏まえ、Rancher(オーケストレータ)環境に適したアプリケーショ ンの設計、必要な機能を見出していきたい  その他 • 監視 • IPSec、VXLanとでどこまで性能差があるか、10G使い切れるか? • Longhornは試してみたい • 複数NIC環境でどうやって運用するのか?
  22. 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. 23. © 2017 Internet Initiative Japan Inc. ‐ 23 ‐‐ 23 ‐

×