Upgrade to Pro — share decks privately, control downloads, hide ads and more …

showKs開発の舞台裏

Kazuto Kusama
December 06, 2018

 showKs開発の舞台裏

Japan Container Days v18.12の主催者企画 "showKs"。
開発の経緯と実装についてまとめました。
http://showks.containerdays.jp/

showKs Team
@jacopen @jyoshise @amsy810 @makocchi @kojiha @inductor @tsukaman

Kazuto Kusama

December 06, 2018
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

  1. StagingとProductionわけたいよね Stg ポータル Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Stg ポータル Prod キャンバス Prod キャンバス Prod キャンバス git git git
  2. てかGitHubに自動でリポジトリ作成しないとね Stg ポータル Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Stg ポータル Prod キャンバス Prod キャンバス Prod キャンバス git git git
  3. SpinnakerとConcourseのパイプラインも生成要るね Stg ポータル Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Prod ポータル Prod キャンバス Prod キャンバス Prod キャンバス git git git
  4. アプリ連携アーキテクチャ変えないとね・・・ Stg アグリゲータ Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Stg アグリゲータ Prod キャンバス Prod キャンバス Prod キャンバス git git git Stg ポータル Prod ポータル
  5. ポータルもちょっと分けて作るわ Stg アグリゲータ Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Stg アグリゲータ Prod キャンバス Prod キャンバス Prod キャンバス git git git Stg ポータル Frontend Stg ポータル Backend Prod ポータル Frontend Prod ポータル Backend
  6. あ、無くてもうまいこといったわ Stg アグリゲータ Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Stg アグリゲータ Prod キャンバス Prod キャンバス Prod キャンバス git git git Stg ポータル Prod ポータル
  7. メトリクスをダッシュボードで見たいよね Stg アグリゲータ Stg キャンバス Stg キャンバス Stg キャンバス git

    git git CI Form Stg アグリゲータ Prod キャンバス Prod キャンバス Prod キャンバス git git git Stg ポータル Prod ポータル
  8. showks-terraform K8sで開発するとしても、k8s外に必要なものが沢山出てき ます。 - k8sそのもの - DNS - オブジェクトストレージ -

    踏み台サーバー - スタティックIP ついつい気が緩んで手作業しがちですが、しっかりとコード 化して Infrastructure as codeやりましょう https://github.com/containerdaysjp/showks-terraform
  9. showks-form https://github.com/containerdaysjp/showks-form Stg ポータル Stg キャンバス Stg キャンバス Stg キャンバス

    git git git CI Form Prod ポータル Prod キャンバス Prod キャンバス Prod キャンバス git git git
  10. showks-form https://github.com/containerdaysjp/showks-form • ユーザーからの入力に応じて ◦ バリデーション ◦ GitHubにリポジトリ作成 ◦ ベースCanvasのPush

    ◦ Webhookの設定 ◦ Collaboratorの設定 ◦ Protected Brachの設定 ◦ Concourse Pipelineの生成と反映 ◦ Spinnaker Pipelineの生成と反映
  11. Concourse Pipeline https://github.com/containerdaysjp/showks-concourse-pipelines showKs関連コンポーネント • showks-form • showks-portal-frontend • showks-aggregator

    ユーザーのCanvas • showks-canvas-USERNAME これらの • Unit test • Dockerイメージ作成とpush • Prodリリース時はタグの付け替え • k8sマニフェスト作成
  12. CDパイプライン概要(Portal, Aggregator) deploy-to-stg canary-to-prod deploy-to-prod stg cluster prod cluster stg

    manifest stg image prod manifest prod image CI (stgブランチへ の merge) CI (masterブランチ への merge)
  13. CDパイプライン概要(canvas) deploy-to-stg deploy-to-prod stg cluster prod cluster stg manifest stg

    image prod manifest prod image CI (stgブランチへ の merge) CI (masterブランチ への merge) このパイプライン自体が自動 生成される
  14. Spinnakerのターニングポイント: Kubernetes V2 Provider Kubernetesの基本的な考え方: • Kubernetes上で動作するワークロードの全ての真実はManifests(YAML)に記述さ れる • Kubernetesは自律的に、適用されたManifestsに記述されている状態に実際のク

    ラスタの状態を追従させる • 宣言的デプロイ、GitOpsといったCloud Nativeベストプラクティスの根本 Spinnaker Kubernetes V2 Providerは上記を尊重→従来のコンテナイメージ中心の CDパイプラインから、Manifest中心のCDパイプラインへの転換期
  15. Spin CLI • 大したことはできない • でもそれによってむしろ Immutableなパイプライン が実現できるのかも やったこと •

    Web UIから雛形パイプラ インを作成 • それをspin pipeline getで JSONファイル化 • Pythonでパラメータを置換 して複製
  16. CDパイプライン概要(Portal, Aggregator) deploy-to-stg canary-to-prod deploy-to-prod stg cluster prod cluster stg

    manifest stg image prod manifest prod image CI (stgブランチへ の merge) CI (masterブランチ への merge)
  17. その他ハマったこと • 認証でドハマり ◦ Spinnaker自体はユーザー認証の機能を持っていない ◦ 当初GitHub OAuthを使おうとしたがGitHub TeamsのOrganizationじゃないとダメっぽい ◦

    Google OAuthにしようとしたらG SuiteのOrganizationじゃないとダメっぽい ◦ 仕方なく単一のgoogleアカウントのみアクセスできるようにした ◦ などなど • Credential管理問題 ◦ Kubernetes各クラスタのCredential、GCSのCredential、GitHubのCredentialなどいろんなところに とっ散らかってしまった ◦ 最初になにか管理手段を確立すべきだった • Spinnakerのドキュメントが謎だらけ ◦ 特にKubernetes V2 Providerは従来のコンセプトをがらりと変えるので既存のドキュメントとの矛盾 が多い、かつ実装が文書化されていないので結局コードを読む羽目に
  18. できたもの - Portal - シンプルなNuxt.jsベースのアプリ - APIとって表示するだけの簡単な処理とBulmaを使った一覧表示 - 無駄にPWA対応(簡単すぎた) -

    Universal App的な何かができた - なぜNuxtにしたのか? - 使ってみたかったから!!!!! - という気軽な気持ちでやってみれるのがこういうプロジェクトのいいところ