Above & Beyond

日々のアウトプット記録

OchaCafe #1 - Kubernetesで作るコンテナベースCI☆CDの夕べ

12/20は「OchaCafe #1 - Kubernetesで作るコンテナベースCI☆CDの夕べ」に参加してきました。

ochacafe.connpass.com f:id:kabukawa:20181216110105p:plain

会場は日本オラクル株式会社さんのカフェスペース。

f:id:kabukawa:20181220175623j:plain:w255f:id:kabukawa:20181220175604j:plain:w450 f:id:kabukawa:20181220175855j:plain f:id:kabukawa:20181220181715j:plain

ものすごく広くてオシャレなカフェに来ちまったぜ、という感じですがオラクルさんの社内ですから。すげー。


目次


今回のテーマ

事前にここまで概要をキッチリお知らせしてくれている勉強会ってあまりない気がするので、貼っておきます。
よく見たらキーワードも書いてありますね。。。
ここ見てちゃんと予備知識を入れてから参加したほうが、より内容を理解しやすかったかもしれません。

CI/CD(継続的インテグレーション/デリバリー)は、アジャイル開発の登場頃から存在する比較的歴史のある概念ですが、本当にアプリケーションの自動配備(デリバリー)までを構築・運用した例はあまり多くないのが現実でした。 しかし、昨今のコンテナ技術の発展と、それを活用したCI/CDツール群の登場によって、構築・運用のハードルは徐々に下がってきています。 OchaCafe#1 では、そんなコンテナベースのCI/CDの実現方法について、実際に可動するCI/CDの仕組みをデモしながら解説します。


タイムテーブル

開始が他の勉強会よりざっと1時間位早いですが、参加者、かなり多いですね!

18:00 受付開始
18:30 オープニング
18:35 セッション開始
20:00 セッション終了/懇親会
20:45 撤収

内容

カフェという名前の通り、最初から飲み物を飲み、食べ物をつまみつつお話を聞くスタイル。

勉強会に参加しているんですけど、こんな雰囲気の場所で勉強できるとか素敵すぎるだろ。。。(笑)

ちなみに、当日のツイートが既にトゥギャられているので、そちらも是非。

togetter.com


オープニング

会場案内やオラクルさんからの各種宣伝などを 茂こと(cotoc88)さんから。

f:id:kabukawa:20181220183437j:plain:h200

OchaCafe について

f:id:kabukawa:20181221002912j:plain:w600

テーマは以下を予定されているとのこと。(月一回開催、全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

f:id:kabukawa:20181221004200j:plain:w600

無料トライアル

f:id:kabukawa:20181221004209j:plain:w600


Kubernetesで作るコンテナベースCI★CDの夕べ

日本オラクル株式会社 早川 博(@hhiroshell)さん

f:id:kabukawa:20181220184158j:plain:h200

speakerdeck.com

スライドがメチャ分かり易く書かれているのでそちらを読めばOK、と書くとここで終わっちゃうので、概要だけ。


目次

  • イントロダクション
  • CI/CD(継続的インテグレーション/継続的デリバリー)とは
  • GitOps
    • GitOpsとは
    • GitOpsの実践
  • GitOpsを実現するツールの紹介

イントロダクション

cndjp の時とは違い、ビジネス寄りの話から。

ITシステムへのニーズは変化してきている。

バックオフィス業務の効率化 ⇒ 既存ビジネスの遂行 ⇒ 新しいビジネスの発見

ニーズをアプリケーションの更新頻度で考えてみるとこんな感じの表に。

f:id:kabukawa:20181221004805p:plain:w600

新しいビジネスに対応するにはアプリケーションを高頻度で更新する必要がある

高頻度リリースを実現する上での課題とそれを克服する手段

  1. 開発プロジェクトの進め方
    アジャイル開発
  2. 開発者と運用担当者の壁
    →DevOps
  3. 開発・運用環境構築のリードタイム
    → インフラの自動構築とCI/CD
  4. アーキテクチャ
    →Microservices

このうち、3が今日のテーマ。ちなみに4は2回目と3回目のテーマですね。


CI/CD(継続的インテグレーション/継続的デリバリー)とは

開発、運用プロセスにおける高頻度リリースのための取り組み

  • ソースコードの変更から本番環境へのリリースまでの流れを極力自動化
  • 人手を極力配したテスト・リリースにより、システムの品質の安定と高頻度 リリースを実現

コンテナとKubernetesが登場

テスト・運用環境の構築が省力化されCI/CDを実現しやすくなった

CIツールとKubernetesによるCI/CDパイプラインの例

f:id:kabukawa:20181221103646p:plain:w600

CIツールからクラスターに指示を出すことで複数の環境を自動構築

CI/CDに残された課題

  • CIツール側で全てのデプロイ先との連携設定を管理する必要がある
  • セキュリティのリスク。CIツールがAttack Surfaceになる
  • 環境の再現性が保証されない
  • オペレーションにCIツール固有の操作が入り込む

GitOpsとは

GitOps → Gitリポジトリのコードを起点にオペレーションを行うCDの手法

2017年にロンドン発のスタートアップ「Weaveworks」社によって提唱された。

www.weave.worksGitOps - Operations by Pull Request

英語のページですが Google翻訳で結構読める日本語にしてくれるので、一読をオススメします。
また、今年の8月に更新されたエントリも公開されています。

www.weave.works

併せてどうぞ。


GitOpsの核となるアイデア
  • Single Source of Truth
  • 状態の差分検出とconversion
  • CIとCDの分離
  • OpsのインターフェースをGitに統合

GitOpsの考え方に基づくCI/CDパイプライン の例

f:id:kabukawa:20181221104426p:plain:w600


GitOpsのメリット

従来型のCI/CDの課題を解決

  • 管理性とセキュリティ
  • 環境の状態の保証
  • 運用のインターフェースをGitに統一

GitOpsの実践

GitOpsでの開発 – リリースのフロー

f:id:kabukawa:20181221111718p:plain:w600

  1. featureブランチをPushするとテストを実行
  2. releaseにマージするとimageのPushとmanifestの更新PullRequestを発行
  3. manifestを更新するとその内容が環境(staging)に反映される
  4. stagingでの確認が完了したらmasterにマージ。あとは一緒
  5. 今度はproductionにmanifestの更新が反映される

パイプラインを作るときの注意点

f:id:kabukawa:20181221112123p:plain:w600


ブランチ戦略とGitOpsパイプライン

ブランチ戦略の特性によってパイプラインの維持管理の難易度がちがう f:id:kabukawa:20181221120513p:plain:w600 f:id:kabukawa:20181221120551p:plain:w600


Single Source of Truthにテンプレートエンジンを利用する

manifestのバリエーションを生成する機能がGitOpsと高い相性

f:id:kabukawa:20181221120653p:plain:w600


GitOpsを実現するツールの紹介

従来からあるツールの組み合わせで実現可能

このうち、Wercker、Helm、Spinnaker を使ったデモを最後に実施。


Wercker | Oracle Container Pipelines Service

コンテナベースの開発に対応するCI/CDサービス

オランダ発のスタートアップが発祥。2017年に Oracleが買収してサービスを継続

  • 成果物はコンテナとしてビルド
  • パイプライン実行環境として任意のコンテナを導入 可能。
  • 直感的で効率的なWorkflow作成

f:id:kabukawa:20181221114505p:plain:w600


Helm

Kubernetes上で可動するソフトウェアを簡単に展開/共有するツール

  • Kubernetesのパッケージマネージャ
  • CNCFがホストするプロジェクトのひとつ。
  • Chartを自作してmanifestのテンプレートエンジンと しても利用可能

Helmのアーキテクチャ

f:id:kabukawa:20181221115009p:plain:w600

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

f:id:kabukawa:20181221115339p:plain:w600


Spinnaker

継続的デリバリーツール

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

Spinnakerによるリソースの抽象化

f:id:kabukawa:20181221115637p:plain:w600

GitOpsにおけるSpinnakerの使い方

f:id:kabukawa:20181221115740p:plain:w600


デモ

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

デモの構成

f:id:kabukawa:20181221120056p:plain:w600

デモに使われたソースなどのあるGitHubリポジトリ(たぶん)

github.com

github.com


まとめ

CI/CDやGitOpsについてなんとなく分かっているつもりだったけど、「分かってなかったなぁという事を完全に理解した」感じです。 また、紹介いただいた Wercker や Spinnaker については、名前を聞いたことがある程度でお恥ずかしい限り。 開発周りも大事ですけど、運用に向けたことを考えるとこのあたりは外せないものなので、これを期に勉強し直そうと思います。

1回目ということで準備など大変だったと思います。
講演者の早川さん、司会の茂さんを始めとするスタッフの方々、お疲れ様でした。
参加できて、勉強しなきゃと心を新たにすることができました。

ありがとうございました f:id:kabukawa:20181220174002j:plain