12/20は「OchaCafe #1 - Kubernetesで作るコンテナベースCI☆CDの夕べ」に参加してきました。
会場は日本オラクル株式会社さんのカフェスペース。


ものすごく広くてオシャレなカフェに来ちまったぜ、という感じですがオラクルさんの社内ですから。すげー。
目次
今回のテーマ
事前にここまで概要をキッチリお知らせしてくれている勉強会ってあまりない気がするので、貼っておきます。
よく見たらキーワードも書いてありますね。。。
ここ見てちゃんと予備知識を入れてから参加したほうが、より内容を理解しやすかったかもしれません。
CI/CD(継続的インテグレーション/デリバリー)は、アジャイル開発の登場頃から存在する比較的歴史のある概念ですが、本当にアプリケーションの自動配備(デリバリー)までを構築・運用した例はあまり多くないのが現実でした。 しかし、昨今のコンテナ技術の発展と、それを活用したCI/CDツール群の登場によって、構築・運用のハードルは徐々に下がってきています。 OchaCafe#1 では、そんなコンテナベースのCI/CDの実現方法について、実際に可動するCI/CDの仕組みをデモしながら解説します。
- キーワード: Kubernetes, Wercker, Spinnaker
- 前提知識:
- Dockerの概要を理解していること
- CI/CD(継続的インテグレーション/デリバリー)のがどういうものか知っていること
タイムテーブル
開始が他の勉強会よりざっと1時間位早いですが、参加者、かなり多いですね!
| 18:00 | 受付開始 |
|---|---|
| 18:30 | オープニング |
| 18:35 | セッション開始 |
| 20:00 | セッション終了/懇親会 |
| 20:45 | 撤収 |
内容
カフェという名前の通り、最初から飲み物を飲み、食べ物をつまみつつお話を聞くスタイル。
こ、これは!!! #ochacafe pic.twitter.com/0nhr0KX3jM
— kabukawa (@kabukawa) 2018年12月20日
勉強会に参加中です。オラクルさんです。 #ochacafe pic.twitter.com/0H7gqzcE9k
— kabukawa (@kabukawa) 2018年12月20日
勉強会に参加しているんですけど、こんな雰囲気の場所で勉強できるとか素敵すぎるだろ。。。(笑)
ちなみに、当日のツイートが既にトゥギャられているので、そちらも是非。
オープニング
会場案内やオラクルさんからの各種宣伝などを 茂こと(cotoc88)さんから。

OchaCafe について

テーマは以下を予定されているとのこと。(月一回開催、全6回を予定)
| # | テーマ | キーワード |
|---|---|---|
| 1 | コンテナを使ったCI/CD | Wercker,Kubernetes,Spinnaker |
| 2 | Microservicesの運用・管理 | Grafana,Prometheus,istio,Zipkin,Jaegar |
| 3 | MicroservicesなJavaアプリケーション | Helidon,MicroProfile,GraalVM |
| 4 | 明日から使えるEnterprise Blockchain | Hyperledger Fabric |
| 5 | 避けては通れない 認証/認可 | OAuth 2.0,OpenID Connect |
| 6 | OpenAPIのエコシステム | OpenAPI |
2回目は2019/01/15(火)、3回目は2019/02/28(木)に開催予定とのことです。
オラクルさんからのお知らせ
Oracle Developper Meetup

無料トライアル

Kubernetesで作るコンテナベースCI★CDの夕べ
日本オラクル株式会社 早川 博(@hhiroshell)さん

スライドがメチャ分かり易く書かれているのでそちらを読めばOK、と書くとここで終わっちゃうので、概要だけ。
目次
- イントロダクション
- CI/CD(継続的インテグレーション/継続的デリバリー)とは
- GitOps
- GitOpsとは
- GitOpsの実践
- GitOpsを実現するツールの紹介
イントロダクション
cndjp の時とは違い、ビジネス寄りの話から。
ITシステムへのニーズは変化してきている。
バックオフィス業務の効率化 ⇒ 既存ビジネスの遂行 ⇒ 新しいビジネスの発見
ニーズをアプリケーションの更新頻度で考えてみるとこんな感じの表に。

新しいビジネスに対応するにはアプリケーションを高頻度で更新する必要がある
高頻度リリースを実現する上での課題とそれを克服する手段
このうち、3が今日のテーマ。ちなみに4は2回目と3回目のテーマですね。
CI/CD(継続的インテグレーション/継続的デリバリー)とは
開発、運用プロセスにおける高頻度リリースのための取り組み
- ソースコードの変更から本番環境へのリリースまでの流れを極力自動化
- 人手を極力配したテスト・リリースにより、システムの品質の安定と高頻度 リリースを実現
コンテナとKubernetesが登場
テスト・運用環境の構築が省力化されCI/CDを実現しやすくなった
CIツールとKubernetesによるCI/CDパイプラインの例

CIツールからクラスターに指示を出すことで複数の環境を自動構築
CI/CDに残された課題
- CIツール側で全てのデプロイ先との連携設定を管理する必要がある
- セキュリティのリスク。CIツールがAttack Surfaceになる
- 環境の再現性が保証されない
- オペレーションにCIツール固有の操作が入り込む
GitOpsとは
GitOps → Gitリポジトリのコードを起点にオペレーションを行うCDの手法
2017年にロンドン発のスタートアップ「Weaveworks」社によって提唱された。
www.weave.worksGitOps - Operations by Pull Request
英語のページですが Google翻訳で結構読める日本語にしてくれるので、一読をオススメします。
また、今年の8月に更新されたエントリも公開されています。
併せてどうぞ。
GitOpsの核となるアイデア
- Single Source of Truth
- 状態の差分検出とconversion
- CIとCDの分離
- OpsのインターフェースをGitに統合
GitOpsの考え方に基づくCI/CDパイプライン の例

GitOpsのメリット
従来型のCI/CDの課題を解決
- 管理性とセキュリティ
- 環境の状態の保証
- 運用のインターフェースをGitに統一
GitOpsの実践
GitOpsでの開発 – リリースのフロー

- featureブランチをPushするとテストを実行
- releaseにマージするとimageのPushとmanifestの更新PullRequestを発行
- manifestを更新するとその内容が環境(staging)に反映される
- stagingでの確認が完了したらmasterにマージ。あとは一緒
- 今度はproductionにmanifestの更新が反映される
パイプラインを作るときの注意点

ブランチ戦略とGitOpsパイプライン
ブランチ戦略の特性によってパイプラインの維持管理の難易度がちがう

Single Source of Truthにテンプレートエンジンを利用する
manifestのバリエーションを生成する機能がGitOpsと高い相性

GitOpsを実現するツールの紹介
従来からあるツールの組み合わせで実現可能
CIツール
jenkins.io circleci.com github.com github.com etc...環境毎のmanifestを生成するテンプレートエンジン
helm.sh github.com github.com etc...差分検出と反映
github.com www.spinnaker.io github.com etc...
このうち、Wercker、Helm、Spinnaker を使ったデモを最後に実施。
Wercker | Oracle Container Pipelines Service
コンテナベースの開発に対応するCI/CDサービス
オランダ発のスタートアップが発祥。2017年に Oracleが買収してサービスを継続
- 成果物はコンテナとしてビルド
- パイプライン実行環境として任意のコンテナを導入 可能。
- 直感的で効率的なWorkflow作成

Helm
Kubernetes上で可動するソフトウェアを簡単に展開/共有するツール
- Kubernetesのパッケージマネージャ
- CNCFがホストするプロジェクトのひとつ。
- Chartを自作してmanifestのテンプレートエンジンと しても利用可能
Helmのアーキテクチャ

GitOpsにおけるHelmの使い方の例

Spinnaker
継続的デリバリーツール
- CD(継続的デリバリー)ツール
- Netflixにより開発されているOSS
- Cloud Providerを利用することにより、様々なインフラ 環境を抽象化してデプロイ先として利用することができる
- (名前がかっこいい)
Spinnakerによるリソースの抽象化

GitOpsにおけるSpinnakerの使い方

デモ
デモについては理解が追いついていないこともあり、動画などが公開された後で自分でも写経(?)できればいいなと思っています。
デモの構成

デモに使われたソースなどのあるGitHubリポジトリ(たぶん)
まとめ
み、水で割ってあるからお茶です。(キリッ #OCHaCafe pic.twitter.com/D0vazthqfn
— kabukawa (@kabukawa) December 20, 2018
CI/CDやGitOpsについてなんとなく分かっているつもりだったけど、「分かってなかったなぁという事を完全に理解した」感じです。 また、紹介いただいた Wercker や Spinnaker については、名前を聞いたことがある程度でお恥ずかしい限り。 開発周りも大事ですけど、運用に向けたことを考えるとこのあたりは外せないものなので、これを期に勉強し直そうと思います。
1回目ということで準備など大変だったと思います。
講演者の早川さん、司会の茂さんを始めとするスタッフの方々、お疲れ様でした。
参加できて、勉強しなきゃと心を新たにすることができました。
ありがとうございました

