Download - Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな
![Page 1: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/1.jpg)
Dec 18, 2018
はじめてみよう〜DevOps編〜
![Page 2: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/2.jpg)
● GCP アカウントをまだ作成されてない方は、下記リンクの p12 からの手順を参考に、GCP アカウントを作成ください。
http://goo.gl/ua5fQw
● クーポンコードを有効にするためには、GCP アカウントを無料トライアルから有料アカウントへアップグレードする必要があります。
● アカウントをアップグレードすると、クレジットを使い切った時点、またはクレジットが期限切れになった時点で自動的に請求されます。
はじめるまえに
![Page 3: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/3.jpg)
本日のアジェンダ
1. Google が考える DevOps
2. ハンズオン準備編
3. GKE 入門編
4. トラブルシュート編
5. ビルド・デプロイ自動化編
6. (Optional) 高度なデプロイ編
7. Clean up 編
![Page 4: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/4.jpg)
01Google が考えるDevOps
![Page 5: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/5.jpg)
製品ライフサイクル
コンセプト ビジネス 開発 運用 一般公開
![Page 6: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/6.jpg)
製品ライフサイクル
コンセプト ビジネス 開発 運用 一般公開
アジャイル DevOps
![Page 7: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/7.jpg)
DevOps における2つの観点
文化: 開発と運用を高速に繰り返し行うための組織や考え方
技術: DevOps 文化を支えるための技術やツール
本日はこちらを中心に
![Page 8: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/8.jpg)
DevOps における技術要件の変化
1. 手動から自動化へ
a. オペレーション数削減
b. 再現性の向上
2. 自動化からアーキテクチャ最適化へ
a. オペレーションしやすいアーキテクチャへの変更
![Page 9: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/9.jpg)
DevOps を支える技術
1. マイクロサービスアーキテクチャ
2. コンテナとオーケストレーション
3. CI / CD
4. 高度な監視(フィードバックループの実現)
![Page 10: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/10.jpg)
マイクロサービスアーキテクチャとは?従来のモノリシック(一枚岩)なアプリケーションとは異なり、
役割や責務ごとに機能を小さなサービスに分割し、それらのサービスが
一つのシステムとして動作する状態を目指したアーキテクチャ。
モノリシック マイクロサービス
User/AuthProductPayment
User/Auth
Product
Payment
![Page 11: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/11.jpg)
マイクロサービスアーキテクチャのメリット
● ビルド・デプロイプロセスがサービス単位でシンプルに
● コードベースが小さく、エンジニアの初期学習コスト低
● サービス間が疎結合になっているので新たな技術を導入しやすい
DevOps 的に開発と運用を高速に繰り返すには最適なアーキテクチャ
![Page 12: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/12.jpg)
コンテナとは?
コンテナはアプリケーションコードとその依存性を一
つのユニットとしてまとめる
これにより、アプリケーションとインフラを疎結合にする
ことができる
• コンテナはアプリケーションとその依存性がまとまっているので、例え
ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな
る
• オンプレミス、プライベートクラウド、パブリッククラウド等ことなる実行
環境間の移動が容易になる
コンテナ イメージ
依存性
アプリケーション コード
![Page 13: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/13.jpg)
VM vs コンテナ
VM
コンテナ
![Page 14: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/14.jpg)
DevOps とも親和性が高いコンテナ
軽量仮想マシンに比べて
軽量でシンプル。数十ミリ秒で起動
ポータブル様々な実行環境に対応し、
デプロイメントが容易
効率性リソース使用量が少なく、コンピュートリソースを細分化して効率的に利用可能
![Page 15: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/15.jpg)
コンテナ管理の課題
Cluster
● 複数のノードに対するコンテナのデプロイは?
● ノード障害が発生した場合は?
● コンテナ障害が発生した場合は?
● アプリケーションのアップグレードはどうやって管理する?
Node NodeNode
???
コンテナ コンテナ コンテナ コンテナコンテナコンテナ
![Page 16: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/16.jpg)
Kubernetes(k8s)
OSS のコンテナオーケストレーションシステム
Google 内部で使われている Borg をインスパイア
オンプレでもクラウドでも運用可能
kubernetesの特徴
● 複数のコンテナに対する管理機構
● manifest による宣言的な定義/管理
● オートスケール
● ローリングアップデート・自己修復
![Page 17: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/17.jpg)
Google Kubernetes Engine (a.k.a GKE)
● GCP 上で動作する kubernetes のマネージドサービス
● マスターノードの管理は全て Google が行う
● 自動アップグレード
● GCP の各種サービスとのインテグレーション
![Page 18: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/18.jpg)
CI / CD とは?
継続的インテグレーション( CI: Continuous Integration)一日に何度もビルドを実行し、ソフトウェアをインテグレーションした時に発生する様々な問題を早期に検出する。フィードバッ
クループを短くし、ソフトウェア開発の品質と生産性を向上させる
継続的デリバリー(CD: Continuous Delivery)ソフトウェア全体のライフサイクルを通じて、常に本番環境にリリースできる状態を保つ
リリースまでの期間を短縮することで、フィードバックループを短くできる
Trunk, Releasebranch/tag
git flow
CD
CILocal env, Feature
branch/PR
deploy to test envint teststrigger build +
unit test
artifact registry
bake/package sys tests deploy to
qa/staging/prodtriggerint teststrigger build + unit test
引用: [改訂第3版]Jenkins実践入門
![Page 19: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/19.jpg)
GCP で CI / CD
ソースコード ビルド&テスト ストレージ デプロイ
1 2 3 4 5
モニタリング
Container RegistryCloud BuildSource
Repository
Cloud Storage
Cloud Build Stackdriver
← フィードバックループ
![Page 20: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/20.jpg)
Cloud Build
サーバーレスな CI/CD プラットフォーム
お客様が VM を用意したりキャパシティの管理をする必要はない
柔軟なビルドステップ
あらゆるサーバーレス CLI ツールをビルドステップとして
組み込むことが可能
デベロッパーフレンドリー
開発者が使い慣れた Git のイベントに応じたトリガー
Spinnaker との連携
GKE 環境での B/G デプロイ、カナリーリリースへの対応
![Page 21: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/21.jpg)
Cloud Build によるワークフロー
workspace
git pushPull request
Trigger
Container Registry
Cloud Storage
Cloud Functions Firebase
KubernetesEngine
App Engine
go docker gcloud kubectl
ビルダーイメージ
![Page 22: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/22.jpg)
Stackdriver
サーバーレスの統合監視プラットフォーム
Monitoring や Logging、APM など豊富な機能を一括で提供
高度な故障分析機能
アプリケーション動作環境にまで踏み込んだデバッグや
サービス間のトレーシング
マイクロサービス間の可視化を容易に
Isitoとの連携によりマイクロサービス間を可視化
![Page 23: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/23.jpg)
Stackdriverの主な機能
Monitoring
Logging
Debug Trace
Error Reporting Profiler
![Page 24: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/24.jpg)
ステージング環境
本番環境開発環境
ハンズオンのシステム構成
Cloud Shell Profiler Trace Logging
Kubernetes Engine
Cloud Source Repositories
Container RegistryCloud Build
commit, push
trigger register
deploy hook
Get container
Send telemetry
deploy hooknew imagedetect
![Page 25: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/25.jpg)
02ハンズオン準備編
![Page 26: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/26.jpg)
● Cloud Build API● Cloud Source Repositories API● Cloud Container Registry API● Resource Manager API● Kubernetes Engine API● Stackdriver Trace API● Stackdriver Profiler API● Stackdriver Logging API
ハンズオンで利用する API を有効化する
[APIとサービス ] > [ライブラリ] から、サーチボックスで以下のサービスを検索の上、有効化
![Page 27: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/27.jpg)
1. [IAMと管理] > [サービスアカウント ] から [サービスアカウントを作成 ] をクリック
2. dohandson というIAMユーザーを作成し、project の編集者 アクセス権を付与する .
IAM の設定を行う
![Page 28: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/28.jpg)
2. [キーを作成]をクリックし、キーのタイプを
JSONにし[作成]をクリックする。
するとdohandson ユーザーの認証情報
(Credential)がPCにダウンロードされる。
サービスアカウント作成ページ、一番下の [完了]をクリックする。
IAMの設定を行う
![Page 29: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/29.jpg)
3. [IAMと管理] > [IAM] から先程作成した
”dohanson@****.iam.gserviceaccount.com”の画面右端に表示されている鉛筆ボタンから Source Repository 読み取り と Kubernetes Engine 管理者 の権限に付与し [保存]をクリックする。
IAMの設定を行う
![Page 30: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/30.jpg)
画面右上のCloud Shell起動ボタンをクリック。
PCにダウンロードした認証情報 ( dohandsonユーザーの認証情報 ) をCloud Shellに転送する
IAM 認証情報を Cloud Shell に転送する
![Page 31: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/31.jpg)
ハンズオン用アプリの動作確認
$ go get -u cloud.google.com/go/cmd/go-cloud-debug-agent github.com/astaxie/beego github.com/astaxie/beego/context github.com/beego/bee go.opencensus.io/trace contrib.go.opencensus.io/exporter/stackdriver cloud.google.com/go/profiler github.com/sirupsen/logrus
$ cp <project-name>-xxxxxx.json gopath/src/devops-handson/gcp-credentials/auth.json
$ curl https://storage.googleapis.com/devops-handson/devops-handson.zip -O$ unzip devops-handson.zip -d gopath/src/
1. 必要パッケージをCloud Shell環境にインストール
2. ハンズオン用アプリのダウンロードと展開
3. 先程作成したサービスアカウントのクレデンシャルをコピーしてハンズオン用アプリに配置
ハンズオン用アプリの動作確認を Cloud Shell上で行います。
#赤字のところはそれぞれの環境のファイル名に置き換えてください。
![Page 32: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/32.jpg)
ハンズオン用アプリの動作確認
$ cd gopath/src/devops-handson/$ vim conf/app.conf # gcpprojectの値を自身の環境に合わせて変更する$ vim gke-config/deployment.yaml # ProjectID (samuraitaiga-demo) の値を自身の環境に合わせて変更する
6. 以下のURLにアクセスできることを確認する● /● /bench1
5. ハンズオン用アプリの起動、 localのTCP8080で上がるのでCloud Shellの以下メニューからアクセス
4. 先ハンズオン用アプリに配置の設定ファイルの修正
$ GOOGLE_APPLICATION_CREDENTIALS=./gcp-credentials/auth.json go run main.go
7. 確認後、CTRL + Cで終了
![Page 33: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/33.jpg)
03GKE入門編
![Page 34: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/34.jpg)
● コンテナの作成
● レジストリへの登録
● GKEへのデプロイ
この章で行うこと
ステージング環境
本番環境開発環境
Cloud Shell Profiler Trace Logging
Kubernetes Engine
Container Registry
1. コンテナビルド
コンテナ取得
Send telemetry
2. コンテナ登録3. デプロイコマンド実行
![Page 35: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/35.jpg)
クラスタ作成
$ gcloud container --project "$GOOGLE_CLOUD_PROJECT" clusters create "k8s-devops-handson" \--zone "asia-northeast1-c" \--enable-autoupgrade \--enable-autorepair \--username "admin" \--cluster-version "1.11.4-gke.8" \--machine-type "n1-standard-1" \--image-type "COS" \--disk-type "pd-standard" \--disk-size "100" \--scopes "https://www.googleapis.com/auth/cloud-platform" \--num-nodes "3" \--enable-cloud-logging --enable-cloud-monitoring \--enable-ip-alias \--network "projects/$GOOGLE_CLOUD_PROJECT/global/networks/default" \--subnetwork "projects/$GOOGLE_CLOUD_PROJECT/regions/asia-northeast1/subnetworks/default" \--addons HorizontalPodAutoscaling,HttpLoadBalancing
1. GKEクラスターを作成する。手動で作成する場合は以下 2点を設定すること● Allow full access to all Cloud APIs● Enable VPC-native (using alias IP)
![Page 36: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/36.jpg)
クラスタの認証情報取得
$ gcloud container clusters get-credentials k8s-devops-handson --zone asia-northeast1-c --project $GOOGLE_CLOUD_PROJECT
1. GKE クラスター作成後、当該クラスターから認証情報を取得する。作成後、数分を置いて実施すること。
![Page 37: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/37.jpg)
コンテナの作成
$ cd ~/gopath/src/devops-handson$ docker build -t gcr.io/$GOOGLE_CLOUD_PROJECT/devops-handson:v1 .$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/devops-handson:v1
以下コマンドを実行し、コンテナの作成とコンテナレジストリへの登録を行う
![Page 38: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/38.jpg)
コンテナのデプロイ
$ cd ~/gopath/src/devops-handson$ kubectl create -f gke-config/deployment.yaml
以下コマンドを実行し、コンテナレジストリへ登録されているコンテナを GKEへデプロイする
![Page 39: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/39.jpg)
デプロイに関する設定ファイルの説明
apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: devops-hands on-deploymentspec: replicas: 2 template: metadata: labels: app: devops-handson spec: containers: - name: myapp image: gcr.io/samuraitaiga-demo/devops-handson:v1 ports: - containerPort: 8080
---apiVersion: v1kind: Servicemetadata: name: devops-handsonspec: type: NodePort selector: app: devops-handson ports: - name: myapp port: 8080 targetPort: 8080
---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: devops-handson-ingressspec: backend: serviceName: devops-handson servicePort: 8080
![Page 40: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/40.jpg)
接続確認
$ kubectl get ingressNAME HOSTS ADDRESS PORTS AGEdevops-handson-ingress * xx.xxx.xx.xxx 80 1d
2. ブラウザでコマンドで確認したアドレスにアクセスし、画面が表示できることを確認する。アクセスできるまで5 - 10分ほど掛かる。
1. こちらのコマンドで ingressのIPアドレスを取得する、 IPアドレスの表示まで少し時間が掛かるときがあるので、その際は再度コマンドを実行する。
![Page 41: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/41.jpg)
プログラムの修正とデプロイ
1. プログラムに変更を加え、 Cloud Shell上で動作確認を行う。
2. v2というタグでコンテナを再作成し、 Container RegistryへPushする。
3. GKEにコンテナをデプロイし、想定通り動作することを確認する。
演習
views/index.tpl に以下変更を加える事が簡単でおすすめ
変更前 : <h1 class="header center orange-text">{{.WebsiteTitle}}</h1>変更後 : <h1 class="header center orange-text">{{.WebsiteTitle}} v2 </h1>
![Page 42: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/42.jpg)
ヒント
すでにGKEに上にデプロイ済みコンテナに変更を行う際に使うコマンド
$ kubectl apply -f xxxx.yaml
もしくは
$ kubectl set image deployment/xxxxx \ myapp=gcr.io/$GOOGLE_CLOUD_PROJECT/xxxxxxxx:v2
演習
![Page 43: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/43.jpg)
● Dockerコマンドを使い、コンテナのビルド・レジストリへの登録を行うことができる
○ レジストリへの登録時はタグを設定し、タグを利用したデプロイを行うことが望ましい
● GKEへのデプロイはkubectlを利用して行うことができる
○ 構成ファイル(yaml)を利用したデプロイ、コマンドによるデプロイ、両方実施可能。環境や組織、
チームにとって最適なやり方を選択することが重要
ここまでのまとめ
![Page 44: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/44.jpg)
04トラブルシュート編
![Page 45: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/45.jpg)
● Stackdriver Trace, Profiler, Loggingを使ったサービスの管理・分析方法
この章で行うこと
ステージング環境
本番環境開発環境
Cloud Shell Profiler Trace Logging
Kubernetes Engine
Container Registry
1. コンテナビルド
コンテナ取得
Send telemetry
2. コンテナ登録3. デプロイコマンド実行
![Page 46: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/46.jpg)
プロダクトの関連、データフロー
Go App(Container)
GCLB(Ingress)
リクエスト転送HTTP Header (X-Cloud-Trace-Context :
traceid/spanid )
Profiler
Trace
Logging
APIプロファイル情報
Kubernetes Engine
STDOUT{“logging.googleapis.com/trace” :
“traceid”, … }
APIトレース情報 ( traceid, spanid )
APIログ情報
Traceid, spanidで情報を紐づけ
Go App(Container)
RPC, gRPCHTTP Header (X-Cloud-Trace-Context :
traceid/spanid )
![Page 47: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/47.jpg)
トラブルがあるページの確認
1. Chrome DevTools を開くa. Chrome メニューから [More Tools] >
[Developer Tools] を選択します。b. ページ要素を右クリックして、[Inspect] を
選択します。c. キーボード ショートカットの Ctrl+Shift+I
キー(Windows)または Cmd+Opt+I キー(Mac)を使用します。
d. [Network]タブを選択します。
2. ブラウザで http://<INGRESS-IP>/bench1 にアクセスし、画面表示にかかる時間を確認する。
ページの読み込みが遅い。。。
ブラウザがChromeではない方は、実際にページを開いてみてどのくらい遅いか確認してください
![Page 48: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/48.jpg)
トラブルのあるページの確認
後のステップで確認する Stackdriver Profilerのサンプル数を稼ぐため、
Apache Benchを使い複数回、 /bench1へのアクセスを行う。
Timeoutエラーが出た場合は -tの値を増やしてみてください。 (Timeout値)
$ sudo apt-get install apache2-utils$ ab -n 30 -c 5 -t 60 http://[INGRESS_IP]/bench1
![Page 49: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/49.jpg)
Stackdriver Traceで確認
1. トレース -> トレースリストを
開き、リクエスト フィルタに /bench1 を入力する。
2. リクエストが遅い Span を確
認する。
3. ログを表示をクリック
4. “I” と表示されるアイコンをク
リックして、連携された
Stackdriver loggingのログ
を確認する
![Page 50: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/50.jpg)
Stackdriver Loggingでログを確認する
Traceのページで /bench1 のトレースを表示し、Logの横に表示されている View リンクをクリックする。
![Page 51: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/51.jpg)
Stackdriver Profilerでの確認
[ プロファイラ ] を開き、どこの処理にリソースが使われているか確認する。
閲覧時は、ゾーンに “asia-northeast1-c”、バージョンに “1.0.0” を設定する。
![Page 52: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/52.jpg)
プログラムの確認と修正
● ~/gopath/src/devops-handson/routers/router.go (初期化処理)● ~/gopath/src/devops-handson/controllers/default.go (HTTPリクエストの処理 )
● Stackdriver Trace Overview● Stackdriver Profiler - Profiling Go code● GKE Logging Best Practices● Stackdriver Loggingへのインプットフォーマット
ヒント:● Stackdriver Profilerに関するコードに入っているバージョンを変更すること
により、前後の比較ができるようになる。● フィボナッチ数列の計算回数は 2000000000に変更するとProfilerで比較を
閲覧可能。Profilerでの比較が不要な場合はそれより低く設定しても問題ない。
演習
以下2つのプログラムを修正し、処理の遅延を修正する。
![Page 53: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/53.jpg)
(Optional) プログラムの確認と修正
● ~/gopath/src/devops-handson/controllers/default.go (HTTPリクエストの処理 )
● GKE Logging Best Practices● Stackdriver Loggingへのインプットフォーマット
演習
default.goにあるMethodLoggingを修正し、Stackdrive loggingにキーをmethod_name、バリューをmethod名として出力できるよう修正を行う。
![Page 54: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/54.jpg)
コンテナのビルドとデプロイ
前章のコマンドを参考に修正後のコードを入れたコンテナを作成し、 GKEへデプロイする。
コンテナをビルドする時に指定するタグは v3とする。
演習
![Page 55: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/55.jpg)
Stackdriver Traceで確認
1. ブラウザで http://<INGRESS-IP>/bench1 にアクセスし、画面表示にかかる時間を確認する。
2. Stackdriver Traceで処理時間が短くなっている事を確認する。
演習
![Page 56: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/56.jpg)
Stackdriver Profilerで確認
1. Stackdriver Profilerで処理時間が短くなっている事を確認する。確認時は、Version比較により確認を行うこと。
演習
![Page 57: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/57.jpg)
(Optional) Stackdriver loggingの確認
演習
Stackdriver Loggingにmethod名が出力されていることを確認する。
![Page 58: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/58.jpg)
● Stackdriver Trace, Profiler, Loggingを利用するとサービスの管理・分析が簡単に行える
○ Stackdrier Traceを利用する時は、Stackdriver Loggingでtrace, spanIdをつけてログを出力する
とより分析を効率的に行うことができる。
○ マイクロサービスアーキテクチャを採用し、他のサービスを呼び出す(RPC, gRPC)際もトレースに
関するHTTPヘッダーをサービス間で送り合うことにより、サービス全体で一貫したトレーシングを
行うことができる。
○ GKEとStackdriver Loggignを利用する場合、標準出力にJSONフォーマットでログを出力するとロ
グが構造され、フィールドをカスタマイズすることにより分析時のフィルタリングが効率的になる。
ここまでのまとめ
![Page 59: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/59.jpg)
05ビルド・デプロイ自動化編
![Page 60: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/60.jpg)
この章で行うこと
ステージング環境
本番環境開発環境
Cloud Shell Profiler Trace Logging
Kubernetes Engine
Cloud Source Repositories
Container RegistryCloud Build
commit, push
trigger register
deploy hook
Get container
Send telemetry
deploy hooknew image
detect
● コンテナの自動ビルド
● コンテナの自動登録
● コンテナの自動リリース
![Page 61: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/61.jpg)
Cloud Source Repositoryでレポジトリを作成するhttps://source.cloud.google.com/ にアクセスする。
画面右上の[新しいレポジトリ]を選択する。
“新しいレポジトリを作成”にチェックを入れ、[続行]をクリックする。
# Cloud ConsoleからもSource Repositoryにアクセスできますが、古いUIのため、
今回は新しいSource Repositoryに直接アクセス頂きます。
![Page 62: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/62.jpg)
Cloud Source Repositoryでレポジトリを作成する
レポジトリ名に “devops-handson” を設定し、作成ボタンをクリックする。
![Page 63: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/63.jpg)
Git レポジトリに資材を登録する
Cloud Shellより以下コマンドを実行する
$ cd ~/gopath/src/devops-handson/$ git init .$ git config --global credential.https://source.developers.google.com.helper gcloud.sh$ git remote add google https://source.developers.google.com/p/$GOOGLE_CLOUD_PROJECT/r/devops-handson$ git config --global user.name "USERNAME" # 自身のユーザ名を設定
$ git config --global user.email "[email protected]" # 自身のメールアドレスを設定
$ git add --all$ git commit -m "initial commit"$ git push google master
![Page 64: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/64.jpg)
Cloud Source Repositoryに資材が登録されていることを確認するトップページから[View all repositories]をクリックし、先程作成したレポジトリを選択する。
![Page 65: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/65.jpg)
Cloud Build で自動ビルドを設定する
Cloud Consoleに戻り、サイドバーから[ Cloud Build ] > [トリガー] から [トリガーを作成]を選択する
![Page 66: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/66.jpg)
Cloud Build で自動ビルドを設定する
![Page 67: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/67.jpg)
Cloud Build で自動ビルドを設定する
![Page 68: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/68.jpg)
Cloud Buildのサービスアカウントに必要な権限を付与
サイドメニューの[IAMと管理]から[IAM]を選択、[email protected]を見つけ、右端の鉛筆ボタンをクリック、Kubernetes Engine管理社の役割を追加し、[保存]をクリックする。
![Page 69: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/69.jpg)
リポジトリに cloudbuild.yaml を登録し、自動ビルドを行う。
演習
1. ビルドの定義ファイル(cloudbuild.yaml)を作成する
2. リポジトリに追加、コミット、プッシュする
3. 自動ビルドが実行され、成功する事を確認する。
4. GKE上のアプリケーションにアクセスし、アプリケーションにアクセスできる事
を確認する
5. (Optional) コード(P.41のviewなど)を修正し、2-4を繰り返す。
コンテナのビルド、レジストリへの登録、GKEへのデプロイを行うビルド定義ファイルを作成する。
参考資料● Cloud Build - Quickstart for Docker● Cloud Build - Building, testing, and deploying artifacts● Cloud Build - Cloud builders
![Page 70: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/70.jpg)
cloudbuild.yamlのサンプル
steps:- name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/devops-handson:$SHORT_SHA', '.']- name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/devops-handson:$SHORT_SHA']- name: 'gcr.io/cloud-builders/kubectl' args: - 'set' - 'image' - 'deployment/devops-handson-deployment' - 'myapp=gcr.io/$PROJECT_ID/devops-handson:$SHORT_SHA' env: - 'CLOUDSDK_COMPUTE_ZONE=asia-northeast1-c' - 'CLOUDSDK_CONTAINER_CLUSTER=k8s-devops-handson'
演習
![Page 71: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/71.jpg)
● Cloud Source Repository, Cloud Buildを用いると簡単に自動ビルド、自動リリースが実現できる
○ Cloud Buildにはビルドを行うためのビルダーが多数用意されているため、必要な物を利用するこ
とにより、より多くのビルドに関するワークロードをCloud Build上で処理することができる。
○ Cloud Buildのワーカーはフルマネージドかつ並列処理実行可能なため、ビルドがボトルネックに
なりずらい。
○ Cloud BuildはGithubとも連携しているため、今回と同じ事をGithubを用いて行うことが可能。
ここまでのまとめ
![Page 72: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/72.jpg)
06(Optional)高度なデプロイ編
![Page 73: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/73.jpg)
● Spinnakerのハンズオンを行います。
● GKEのクラスターにHelmを使ってSpinnakerをインストールします。
● Spinnakerを使ってカナリーリリースを行う、CI / CD パイプラインを作成しま
す。
この章で行うこと
![Page 74: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/74.jpg)
Spinnakerとは?
● Netflix が開発した OSS のマルチクラウド
Continous Delivery プラットフォーム
● Google も 2014 年から開発に参加
● CD はパイプラインで管理する
● CI 連携は git イベント、Jenkins、他の Spinnaker
パイプライン、などなど
● Immutable Infrastructure - デフォルトで
Blue/Gree (R/B) をサポート
![Page 75: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/75.jpg)
作成する CI/CD パイプライン
SourceRepository
Container Registry
CloudBuild
Kubernetes Engine
開発者
$ git commit$ git tag$ git push build
trigger push new image
Detect New Image
Manual Approval
Deploy to Canaly
Kubernetes Engine
Deploy to Production
Integration Test
![Page 76: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/76.jpg)
大まかなハンズオンの流れ
Spinnaker をクラス
ターにデプロイ
Cloud Buildのトリ
ガーを設定
パイプラインの動作
させてみる
1 2 3 4 5
環境設定
(IDおよびアクセス管
理等)
GKEクラスタの確認
![Page 77: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/77.jpg)
環境設定
![Page 78: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/78.jpg)
1. サービスアカウントを作成します
2. 後のコマンドで使用するために、サービス アカウントのメールアドレスと現在のプロジェクト ID
を環境変数に格納します。
ID およびアクセス管理を設定する
gcloud iam service-accounts create spinnaker-storage-account \ --display-name spinnaker-storage-account
サービス アカウントを作成して Spinnaker に権限を委任し、Cloud Storage にデータを保存できるようにします。
export SA_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:spinnaker-storage-account" \ --format='value(email)')export PROJECT=$(gcloud info --format='value(config.project)')
![Page 79: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/79.jpg)
3. storage.admin 役割をサービス アカウントにバインドします。
4. サービス アカウント キーをダウンロードします。後のステップで Spinnaker をインス
トールして、このキーを Kubernetes Engine にアップロードします。
ID およびアクセス管理を設定する
gcloud projects add-iam-policy-binding \ $PROJECT --role roles/storage.admin --member serviceAccount:$SA_EMAIL
サービス アカウントを作成して Spinnaker に権限を委任し、Cloud Storage にデータを保存できるようにします。
gcloud iam service-accounts keys create spinnaker-sa.json --iam-account
$SA_EMAIL
※Cloud Shell のカレントディレクトリに spinnaker-sa.json が作成されます。
![Page 80: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/80.jpg)
Spinnaker を GKE クラスターにデプロイする
![Page 81: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/81.jpg)
1. helm バイナリをダウンロードしてインストールします。
2. ファイルをローカル システムに解凍します。
3. Helm のサーバー側である Tiller に対して、cluster-admin 役割を付与します。
Helm をインストールする
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz
Helm を使用して Charts レポジトリから Spinnaker をデプロイします。Helm は、Kubernetes アプリケーションの設定とデプロイに使用可能なパッケージ マネージャです。
kubectl create clusterrolebinding user-admin-binding --clusterrole=cluster-admin --user=$(gcloud config get-value account)kubectl create serviceaccount tiller --namespace kube-systemkubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
tar zxfv helm-v2.7.2-linux-amd64.tar.gzcp linux-amd64/helm .
![Page 82: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/82.jpg)
4. Spinnaker に対して cluster-admin 役割を与え、全てのネームスペースにリソースをデプロ
イできるようにします。
5. Helm のサーバー側である Tiller をクラスタにインストールするために Helm を初期化しま
す。
Helm をインストールする
kubectl create clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:default spinnaker-admin
./helm init --service-account=tiller
./helm update
![Page 83: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/83.jpg)
6. 次のコマンドを実行して、 Helm が正しくインストールされていることを確認します。 Helm が正
しくインストールされている場合は、クライアントとサーバーの両方に v2.7.2 が表示されます。
表示例)
Helm をインストールする
./helm version
Client: &version.Version{SemVer:"v2.7.2",GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6",GitTreeState:"clean"}Server: &version.Version{SemVer:"v2.7.2",GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6",GitTreeState:"clean"}
![Page 84: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/84.jpg)
1. Spinnaker でパイプライン設定を保存するためのバケットを作成します。
2. Cloud Shell で次のコマンドを実行して、設定ファイルを作成します。
Spinnaker のデプロイ設定ファイルを作成する
export PROJECT=$(gcloud info \ --format='value(config.project)')export BUCKET=$PROJECT-spinnaker-configgsutil mb -c regional -l us-central1 gs://$BUCKET
export SA_JSON=$(cat spinnaker-sa.json)export PROJECT=$(gcloud info --format='value(config.project)')export BUCKET=$PROJECT-spinnaker-configcat > spinnaker-config.yaml <<EOFstorageBucket: $BUCKETgcs: enabled: true project: $PROJECT jsonKey: '$SA_JSON'
# Disable minio the defaultminio: enabled: false
# Configure your Docker registries hereaccounts:- name: gcr address: https://gcr.io username: _json_key password: '$SA_JSON' email: [email protected]
※先ほど作成した spinnaker-sa.json が保存されているディレクトリで実行してください
![Page 85: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/85.jpg)
1. Helm コマンドライン インターフェースを使用して、設定セットとともに Spinnaker をデプロ
イします。このコマンドは完了するまでに 5 〜 10 分程度かかります。
2. コマンドが完了したら、次のコマンドを実行して、 Cloud Shell から Spinnaker UI へのポー
ト転送をセットアップします。
./helm install -n cd stable/spinnaker -f spinnaker-config.yaml --timeout 600 \ --version 0.3.1
Helm を使用して Spinnaker をデプロイする
export DECK_POD=$(kubectl get pods --namespace default -l "component=deck" \ -o jsonpath="{.items[0].metadata.name}")kubectl port-forward --namespace default $DECK_POD 8080:9000 >> /dev/null &
3. Spinnaker ユーザー インターフェースを開くには、 Cloud Shell で [ウェブでプレビュー ] をクリックし、[ポート 8080 でプレビュー] をクリックします。
4. ようこそ画面が表示されてから、 Spinnaker UI が表示さ
れるはずです。
![Page 86: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/86.jpg)
参考:Helm とは
「Helm」はKubernetes用のパッケージ管理ツールです 。パッケージ
そのものは「Chart」と呼ばれるYAMLファイルの集合体で,独自の
パッケージリポジトリとして「 Kubernetes Charts」を提供していま
す。
Helmでは,kubectlコマンドが使うYAMLファイルから設定可能な部
分を別YAMLファイルとして分離できます。テンプレートエンジンを
使って,インストール時にサイト固有の設定を kubectlコマンドに提
供するYAMLファイルに反映するのです。また, Hook機能によって
パッケージのライフサイクルや定義済みのイベントの途中に,別の
処理を行うことも可能ですし,他のパッケージ( Chart)との依存関
係も構築できます。
![Page 87: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/87.jpg)
参考:Helmとは用語 役割
helm yum, aptに相当するパッケージマネージャー
chart deb, rpmに相当するパッケージ、Kubernetesのマニフェストのテンプレート (jsonかYamlファイル) をまとめたもの
tiller デプロイを担うサーバーコンポーネント
Package Helmを使って Kubernetes 上にインストールアプリケーション
Release Kubernetes 上にインストールされたパッケージ
Repository チャートが保存される場所
![Page 88: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/88.jpg)
Docker イメージのビルド
![Page 89: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/89.jpg)
1. ソースコードをダウンロードします。
2. ソースコードを解凍します。
3. ディレクトリをソースコードに変更します。
4. このレポジトリの Git commit にユーザー名とメールアドレスを設定します。[EMAIL_ADDRESS] を Git メールアドレスに置き換え、[USERNAME] を Git ユーザー名に置き換えます。
ソースコードレポジトリを作成する
wget https://gke-spinnaker.storage.googleapis.com/sample-app.tgz
アプリケーション ソースコードの変更を検出し、 Docker イメージをビルドしてから、 Container Registry に push するように Cloud Buildを設定します。
tar xzfv sample-app.tgz
git config --global user.email "[EMAIL_ADDRESS]"git config --global user.name "[USERNAME]"
cd sample-app
![Page 90: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/90.jpg)
5. ソースコード レポジトリへの最初の commit を行います。
6. コードをホストするレポジトリを作成します。
7. 新しく作成したレポジトリをリモートとして追加します。
8. コードを新しいレポジトリのマスター ブランチに push します。
9. コンソールにソースコードが表示されることを確認します。https://console.cloud.google.com/code/develop/browse/sample-app/master
ソースコードレポジトリを作成する
git initgit add .git commit -m "Initial commit"
export PROJECT=$(gcloud info --format='value(config.project)')git remote add origin https://source.developers.google.com/p/$PROJECT/r/sample-app
gcloud source repos create sample-appgit config credential.helper gcloud.sh
git push origin master
![Page 91: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/91.jpg)
1. Cloud Console の Cloud Buildメニューから [Triggers] を選
択し、[Add Trigger]をクリックします。
2. [Cloud Source Repository] を選択し、[Continue] をクリッ
クします。
3. リストから新しく作成した sample-app レポジトリを選択し、
[Continue] をクリックします。
4. 次のトリガー設定を指定します。
○ Name: sample-app-tags○ Trigger type: タグ
○ Tag(regex): v.*○ Build Configuration: cloudbuild.yaml○ cloudbuild.yaml location: /cloudbuild.yaml
5. [Create Trigger] をクリックします。
ビルドトリガーを設定するGit タグがソース レポジトリに push されるたびに Docker イメージをビルドして push するように Cloud Build を設定します。Cloud Build は、自動的にソースコードをチェックして、レポジトリ内の Dockerfile から Docker イメージをビルドし、そのイメージを Container Registry に push します。
![Page 92: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/92.jpg)
1. Cloud Shell でソースコード フォルダに移動します。
2. Git タグを作成します。
3. タグを push します。
4. Cloud Build で、[History] をクリックして、ビルドがトリガーされたことを確認します。トリガーされていない場合は、前のセクションでトリガーが正しく設定されていることを確認します。
イメージをビルドする
cd ~/sample-app
文字 "v" が先頭に付いている Git タグをソースコード レポジトリに push すると、Cloud Build は、自動的に、アプリケーションをビルドして、 Docker イメージとして Container Registry に push します。
git tag v1.0.0
git push --tags
![Page 93: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/93.jpg)
パイプラインの設定
![Page 94: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/94.jpg)
1. Spinnaker UI で、[Actions] をクリックしてから、
[Create Application] をクリックします。
2. [New Application] ダイアログで、次のフィールドを入
力します。
○ Name: sample○ Owner Email: [あなたのメールアドレス]
3. [Create] をクリックします。
Spinnakerで “アプリケーション” を作成するこれまでの手順で、イメージが自動的にビルドされるようになりました。ここからは、 Kubernetes クラスタにデプロイするパイプラインの設定を Spinnaker 上で行っていきます。
![Page 95: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/95.jpg)
1. Cloud Shell で、sample-app ルート ディレクトリから次のコマンドを実行します。
cd ~/sample-a
サービスロードバランサを作成するKubernetes コマンドライン インターフェースを使用してサービス用のロードバランサを作成します。なおこの操作は Spinnaker UI でを実行することもできます。
kubectl apply -f k8s/services
※sample-app/k8s/services に格納されている4つの yaml ファイルで定義されたロードバランサが作成されます。
cat sample-frontend-prod.yamlapiVersion: v1kind: Servicemetadata: labels: app: sample-frontend-prod name: sample-frontend-prodspec: ports: - name: 80-80 port: 80 protocol: TCP targetPort: 8080 selector: load-balancer-sample-frontend-prod: "true" sessionAffinity: None type: LoadBalancer
![Page 96: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/96.jpg)
1. Cloud Shell の新しいタブを開き、ソースコード ディレクトリで次のコマンドを実行し、パイプラインの例を Spinnaker インスタンスにアップロードします。
2. Spinnaker UI で、上部ナビゲーション バーの [Pipelines] をクリックします。
3. Deploy パイプラインで [Configure] をクリックします。継続的デリバリー パイプラインの設定が UI に表示されます。
デプロイメントパイプラインを作成する
export PROJECT=$(gcloud info --format='value(config.project)')sed s/PROJECT/$PROJECT/g spinnaker/pipeline-deploy.json | curl -d@- -X \ POST --header "Content-Type: application/json" --header \ "Accept: /" http://localhost:8080/gate/pipelines
次に、デプロイメント パイプラインを作成します。このチュートリアルでは、 "v" という接頭辞が付いた Docker イメージが Container Registry に到着したことを検出するようにパイプラインが設定されます。
![Page 97: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/97.jpg)
パイプラインを手動で実行する
![Page 98: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/98.jpg)
1. [Pipelines] をクリックして、パイプライン ページに戻ります。
2. [Start Manual Execution](手動実行を開始) をクリックします。
3. [tag] プルダウン リストから v1.0.0 タグを選択し、[Run] をクリックします。
パイプラインを手動で実行するいま作成したパイプラインの設定には接頭辞の "v" が付いた新しい Git タグが push されたときにパイプラインを開始するトリガーが含まれています。まずは、パイプラインを手動で実行してテストします。その次に、 Git タグを push し、パイプラインが自動的に実行されるのを観察することによってテストします。
![Page 99: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/99.jpg)
4. パイプラインが開始したら、[Details] をクリックして、ビルドの進捗状況の詳細を表示します。このセクションでは、デプロイメント パイプラインのステータスとその手順を示します。青色のステップは現在実行中、緑色のステップは正常に完了、赤色のステップは失敗を示します。ステージをクリックすると、その詳細が表示されます。
3 〜 5 分後に統合テストフェーズが完了し、パイプラインがデプロイメントを続行するための手動承認を要求します。
5. 黄色の「人物」アイコンにカーソルを合わせ、[続行] をクリックします。
ロールアウトが本番環境フロントエンドと本番環境バックエンドのデプロイメントに進みます。これは数分後に完了します。
パイプラインを手動で実行する
![Page 100: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/100.jpg)
6. アプリケーションを表示するには、Spinnaker UI の右上にある [Load Balancers] をクリックします。
7. ロードバランサのリストをスクロール ダウンし、[sample-frontend-prod] の下で [DEFAULT] をクリックします。
8. 右側の詳細ウィンドウをスクロール ダウンし、Ingress IP 上のクリップボード ボタンをクリックして、アプリケーションの IP アドレスをコピーします。# httpでアクセスしてください。
パイプラインを手動で実行する
![Page 101: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/101.jpg)
9. アドレスをブラウザに貼り付けると、アプリケーションの本番環境バージョンが表示されます。
これで、アプリケーションをビルド、テスト、デプロイするパイプラインを手動でトリガーできました。
パイプラインを手動で実行する
![Page 102: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/102.jpg)
パイプラインのトリガーを動かす
![Page 103: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/103.jpg)
1. Cloud Shell で、sample-app ルート ディレクトリから次のコマンドを実行し、アプリケーションの色をオレンジ色から青色に変更します。
2. 変更にタグを付け、ソースコード レポジトリに push します。
3. 新しいビルドが Cloud BuildのHistoryに表示されます。4. Spinnakerの[Pipelines] をクリックして、パイプラインがイメージのデプロイを開始するのを監視
します。デプロイが開始されない場合はブラウザのページを更新してみてください。5. 実際はここでアプリケーションのテストをします。テストが完了したら、[Spinnaker] タブに戻り、
デプロイメントを承認します。
デプロイメントパイプラインを作成する
sed -i 's/orange/blue/g' cmd/gke-info/common-service.go
コードの変更、Git タグの push 、レスポンスでのパイプライン実行の監視を通して、パイプラインをエンドツーエンドでテストします。
git add cmd/gke-info/common-service.gogit commit -a -m "Change color to blue"git tag v1.0.1git push --tags
![Page 104: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/104.jpg)
6. パイプラインが完了すると、アプリケーションが次のスクリーンショットのようになります。コードが変更されたために色が青に変わったことと、[バージョン] フィールドに v1.0.1 と表示されていることに注意してください。
これで、アプリケーションを本番環境全体に正常にロールアウトできました。
7. (オプション)前回の commit を元に戻して、この変更をロールバックすることができます。ロールバックすると新しいタグ (v1.0.2) が追加され、v1.0.1 をデプロイするときに使用したのと同じパイプラインを通してタグが戻されます。
デプロイメントパイプラインを作成する
git revert v1.0.1git tag v1.0.2git push --tags
![Page 105: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/105.jpg)
クリーンアップ(終わり)
![Page 106: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/106.jpg)
作成したリソースを削除する本ハンズオンで作成したリソースについて課金を回避するために削除する手順は次の通りです。あるいは、プロジェクトまるごと削除して頂いても結構です。
1. Spinnaker のインストールを削除します。
2. サンプル アプリケーション サービスを削除します。
3. サービス アカウントを削除します。
4. Kubernetes Engine クラスタを削除します。
5. レポジトリを削除します。
../helm delete --purge cd
kubectl delete -f k8s/services
export SA_EMAIL=$(gcloud iam service-accounts list \--filter="displayName:spinnaker-storage-account" --format='value(email)')gcloud iam service-accounts delete $SA_EMAIL
gcloud container clusters delete spinnaker-tutorial
gcloud source repos delete sample-app
![Page 107: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/107.jpg)
作成したリソースを削除する6. バケットを削除します。
7. コンテナ イメージを削除します。
8. 上記のオプションのロールバック ステップで v1.0.2 を作成した場合は、そのコンテナ イメージを削除します。
export PROJECT=$(gcloud info --format='value(config.project)')export BUCKET=$PROJECT-spinnaker-configgsutil -m rm -r gs://$BUCKET
export PROJECT=$(gcloud info --format='value(config.project)')gcloud container images delete gcr.io/$PROJECT/sample-app:v1.0.0gcloud container images delete gcr.io/$PROJECT/sample-app:v1.0.1
gcloud container images delete gcr.io/$PROJECT/sample-app:v1.0.2
![Page 108: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/108.jpg)
ここまでのまとめ
● Spinnakerを使うことで、ブルー/グリーンデプロイメントやカナリーリリースな
ど、より高度なデプロイを行うことが可能です。
● Manual approveなど実際に現場に即した要素をパイプラインに組み込むこと
が出来ます。
![Page 109: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/109.jpg)
07Clean up編
![Page 110: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/110.jpg)
● プロジェクトを削除してください。作成したリソースは全て削除されます。
○ [IAMと管理] > [設定] > [シャットダウン ]
本ハンズオン後に不用な課金を避けるため
![Page 111: Dec 18, 2018 DevOps編〜 はじめてみよう · • コンテナはアプリケーションとその依存性がまとまっているので、例え ば、開発環境、テスト環境、本番環境をまたいだデプロイが容易にな](https://reader035.vdocuments.pub/reader035/viewer/2022070617/5dd0c7c1d6be591ccb62a936/html5/thumbnails/111.jpg)
Confidential & Proprietary
Thank you