More Related Content
PPTX
DeNA private cloudのその後 #denatechcon PDF
Rancher による社内向けテナントサービス基盤 PPTX
PPTX
Rancherを活用した開発・運用効率の改善への取り組み PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行 PDF
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話 PDF
PDF
マネージドKubernetes、「Kubernetes Service Hatoba」を使ってみよう What's hot
PDF
PDF
AWS Cognito makes old web apps available from anywhere PDF
【初心者向け】API を使ってクラウドの管理を自動化しよう PDF
PPTX
マネージドKubernetesサービス ニフクラ Hatoba(β)リリース!! PDF
いまからでも遅くない Docker事始め&愉快な仲間達 PDF
見終わったらすぐできる! VMware & Nutanix ユーザーのためのTerraform Cloud PDF
PPTX
PDF
PPTX
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例 PPTX
ニフクラ × RancherでつくるKubernetes環境 PDF
PDF
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT③ PDF
PDF
AnsibleによるHWプロビジョニング -OneViewの連携- PDF
PDF
PDF
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介 Similar to Rancherを活用して開発効率を上げる
PDF
Rancher/k8sを利用した運用改善の取り組み PDF
20180214 rancher seminar_minehiko_nohara PDF
Rancher command line interface PDF
PDF
Netapp rancher agenda_210129 PDF
PDF
PDF
Rancher Meetup Tokyo #4 Intro PDF
【AWS共催】"Hosted Rancher on AWS" オンラインミートアップ PDF
Rancher2.0で実現する Managed Kubernetes Service PDF
On-Premise Kubernetes on Rancher PDF
Hajimete hostedrancher 200605 PDF
オープンソースのコンテナ管理プラットフォーム Rancher のご紹介 PDF
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~ PDF
Jbs seminar rancher_200325 PDF
Rancherなら簡単にできる マルチクラウドコンテナー PDF
PPTX
Introduction of Rancher at OSC Tokyo 17 Spring PPTX
Introduction of Kubernetes & Rancher PPTX
Rancherを活用して開発効率を上げる
- 1.
© 2017 InternetInitiative Japan Inc. ‐ 1 ‐‐ 1 ‐
Rancherを活用して開発効率を上げる
株式会社インターネットイニシアティブ
寺田 充毅
- 2.
© 2017 InternetInitiative Japan Inc. ‐ 2 ‐‐ 2 ‐
自己紹介 & チーム紹介
名前:寺田 充毅(みちたか)
IIJのクラウド本部の分散技術課というチームに所属しています
IIJ GIO(IIJのクラウド)のs3互換のオブジェクトストレージを担当している
課です
ソフトウェアのエンジニアで主にJavaを書いて仕事をしています
もともとは金融、産業界隈でSEをやっていました
- 3.
© 2017 InternetInitiative Japan Inc. ‐ 3 ‐‐ 3 ‐
内製のs3互換ストレージ
サービスを構成する各AppがREST APIでつながっている
2ケタ前半の台数で構成されている
フロントサーバ(外部向けREST API)
担当サービス:IIJ GIO ストレージ&アナリシスサービス
メタデータ管理
契約管理 分散ファイルシステム
インターネット
※アナリシス、コンソールは省略。
分散DB
- 4.
© 2017 InternetInitiative Japan Inc. ‐ 4 ‐‐ 4 ‐
目次
なぜRancherを使い始めたか
RancherでCIを実践する
今後進めていくこと
- 5.
- 6.
© 2017 InternetInitiative Japan Inc. ‐ 6 ‐‐ 6 ‐
Rancherを利用としようと思った背景
ストレージサービスのリリースがつらい
• Chefと手作業を組み合わせたリリースに限界を感じてきていた
• サーバが増えてきた
• 属人的
• デリバリを高頻度にこなす仕組みを作りたい
検証作業をサクサクやりたい
• R&D部署としての役割がある
• 調査対象のソフトウェアを速やかに立てて検証できるような仕組みがほしい
• 特に煩雑な分散処理基盤を楽にインストールしたい
• サーバを有効利用したい
• サーバの確保、気軽に共有
新しいアーキテクチャの模索
• マイクロサービス
• オーケストレータを活用しないと実現が厳しそう
- 7.
© 2017 InternetInitiative Japan Inc. ‐ 7 ‐‐ 7 ‐
Rancher meetup #1
初回のミートアップに参加
• CI/CDの発表があり、好感触
GUIだけでなくCLIがある
• 課内でも受け入れられやすそう
カタログ!
• アプリをカタログにして環境に一気に展開できる
• 自動デプロイできる
• Hadoopとか少々構築に手間がかかるようなものがカタログにある
オーケストレータを選べる
• 提供サービスの要件に対応できる幅がありそう
• 導入が大変だという話を聞き二の足を踏んでいたkubernetesも使え
る
- 8.
- 9.
© 2017 InternetInitiative Japan Inc. ‐ 9 ‐‐ 9 ‐
早速構築にとりかかる
実サービスへの適用前にRancherの経験値を上げることに
題材 : 開発中のNFSサーバのITを自動化してみる
• 自社のオブジェクトストレージをバックエンドに使うNFSサーバ
• 開発がホットなもので実績を積んでいきたい
• 環境の展開、試験、廃棄までの一連の処理をRancherでやってみる
今回はすべてオンプレミスで構築
構成
• RancherのDBはRancherサーバのコンテナ外にたてた
• うっかり削除防止
• 結果としてバージョンアップが楽になった
• ストレージはGlusterFSで構築
• 試験対象が大量のデータをディスクに書くため
• Rancherのストレージとして登録、管理(NFS)
- 10.
© 2017 InternetInitiative Japan Inc. ‐ 10 ‐‐ 10 ‐
ストレージサーバ
全体像
管理用ノードに詰め込み
管理用ノード
自社開発のオブジェ
クトストレージ
Docker
アカウント連携
ソース取得
社内Github
GlusterFS で サ ー バ の ス ト
レージを束ねて大きめのボ
リュームを構成
ストレージとして
Rancherで管理
処理用ノード
CentOS7
Docker
処理用ノード
RancherOS
DockerDocker
Server
Agent Agent
Registry
MySQLイメージを
PUT/GET
もうちょっと台数がある
Agentを介して
管理される
- 11.
© 2017 InternetInitiative Japan Inc. ‐ 11 ‐‐ 11 ‐
テスト(IT)自動化
自動化のためにやったこと
• イメージを作る
• カタログを作る
• ビルドとテストのJenkinsジョブを仕込む
• Rancher CLI導入
- 12.
© 2017 InternetInitiative 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 InternetInitiative 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 InternetInitiative 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 InternetInitiative 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 InternetInitiative 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 InternetInitiative Japan Inc. ‐ 17 ‐‐ 17 ‐
Rancher やってみて良かった点 / 悪かった点
良かった
• クリーンな環境で継続してをIT回せる
• 環境丸ごと作成 -> 廃棄なので非常にクリーン
• 同じ流れで別環境(本番)へデリバリできるので、将来の自動デリバリの目途が付いた
• 検証作業で活用できている ※プレゼンでは話せていませんが
• それRancher環境でやってみれば?という雰囲気
• proxy 3種類立てて試してよ? -> スタンドアローンコンテナでサクサク試した
• ログをPrestoで分析するか -> 同上
• 上記を踏まえると、Rancherの導入で開発効率アップを後押しできていると思う
悪かった
• たまにハマる
• バグはかなり少ない印象だがはまるときははまる(なんでもそうですが)
• ソースが読みやすいので追おうと思えばなんとかなる
• バージョンアップで解消することがある(今回経験)
• 悩んだらバージョン上げることにした
その他
• Dockerの知識は必要
• いろいろな知識がこの界隈は必要になるので、隣人を巻き込んだほうがいい
- 18.
© 2017 InternetInitiative Japan Inc. ‐ 18 ‐‐ 18 ‐
困った時の情報源
公式ドキュメント
• 読みやすい
• https://docs.rancher.com/rancher/
RancherJP
• http://www.rancher.jp/
Qiitaとかも徐々に増えてきている
RancherJPのslack
• catalog installがタイムアウトする事象に遭遇
• 自力で解決できずにslack の#qaに投稿すると即座にレスが
• ありがとうございます
• 恩返しできるように頑張ります
• 過去ログ漁って情報集めたりしています
- 19.
© 2017 InternetInitiative 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.
- 21.
© 2017 InternetInitiative Japan Inc. ‐ 21 ‐‐ 21 ‐
実サービスに使う前にクリアにしていきたいこと
障害時の挙動の把握
• ネットワークインタフェースをdownして挙動を観察している
• Rancherサーバとの疎通が生命線ということは理解できて来た
• 復旧時に一時的に同じ役割のコンテナが重複して起動するタイミングがありそう
ネットワーク関連の機能の熟知
• サービス&LBの設定、挙動整理
• healthチェックの種類や、再起動strategyによる挙動の違いを確認、整理中
• エンドポイントの冗⾧化
• External DNS(PowerDNS)を試し始めている
上記2点を踏まえ、Rancher(オーケストレータ)環境に適したアプリケーショ
ンの設計、必要な機能を見出していきたい
その他
• 監視
• IPSec、VXLanとでどこまで性能差があるか、10G使い切れるか?
• Longhornは試してみたい
• 複数NIC環境でどうやって運用するのか?
- 22.
© 2017 InternetInitiative 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.