Netflixは、業界のマイクロサービスおよびDevOps組織のモデルであり、大規模な本番レベルのマイクロサービスで成功を収めています。一部の企業はNetflixよりも前にマイクロサービスを行っていますが、Netflixはおそらく大規模な実稼働レベルのマイクロサービスの中で最も優れています。
Netflixはオープンソースコミュニティに多大な貢献をしており、展開、パッケージング、その他の機能のための多くのオープンソースツールをリリースしています。Spinnakerは、ハイブリッドクラウド環境にデプロイするためのNetflixのオープンソースプロジェクトであり、クラウドプラットフォーム全体のデプロイメントタスクのオーケストレーションを実現できます。NetflixでSpinnakerを使用して、Amazonマシンに毎日4000の変更を公開します。Google CloudもデプロイにSpinnakerを使用しています。また、ビルド時にJenkinsを使用し、bakeと呼ばれるプロセスがあります。bakeはアプリケーションをミラーにパッケージ化してから、デプロイでミラーをデプロイします。NetflixのDevOpsプラクティスは注目に値するものであり、チェックする価値のある多くのプロジェクトとオープンソースツールも持っています。
この記事では主に、Spinnakerの開発モデル、継続的インテグレーション、およびデプロイメントプラクティスを分析します。
サービスアーキテクチャ
Spinnaker
複数のマイクロサービスで構成されています。Deck
これは、フロントエンドのページで、ゲートウェイ、すべての呼び出し元のプログラムが通信して、オーケストレーションエンジンのハンドルすべての一時的な操作とパイプライン;それは、すべてのクラウドプロバイダーへの変更の呼び出し、およびインデックス/キャッシュがデプロイされたすべてのリソースに責任がある、それがされたアプリケーションを保存するために使用しますメタデータ、プログラム、パイプライン、プロジェクト、および通知のために、様々なクラウドプロバイダーのための不変のVMイメージを生成する画像生成; 使用トリガーパイプラインにによってシステムの継続的な統合の仕事を待っているが、それが可能にステージがためにパイプラインで使用されます; メッセージ通知の責任者; ユーザー権限管理の責任者; 自動カナリア分析を提供するため;これはライフサイクル構成管理ツールです。Gate
API
Spinnaker UI
api
Gate与Spinnaker
Orca
CloudDriver
Front50
Rosco
Igor
Jenkins和Travis CI
Jenkins / Travis
Echo
Fiat
Kayenta
Spinnaker
Halyard
Spinnaker
コードウェアハウス管理
Spinnakerのマイクロサービスは、各マイクロサービスのコードベースを作成することです。GithubのSpinnakerの倉庫にアクセスできます。各マイクロサービスには、対応する倉庫管理コードがあります。プロジェクトを入力して、ブランチ戦略、メインブランチ開発、バージョンブランチリリースを表示します。
継続的インテグレーション
使用されているツールはGitHubアクションです。このciファイルbranch-build
には、主にGradleビルドを実行するジョブが1つだけあります。
.github/workflows/build.yml
CIファイルの内容は次のとおりです。master
ブランチとversion-*tag
コミットがあると自動的にトリガーされます。することでenv
設定gradle
のパラメータをビルドを。
name: Branch Build
on:
push:
branches:
- master
- version-*
env:
GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g
jobs:
branch-build:
# Only run this on repositories in the 'spinnaker' org, not on forks.
if: startsWith(github.repository, 'spinnaker/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Install Java 8 for cross-compilation support. Setting it up before
# Java 11 means it comes later in $PATH (because of how setup-java works)
- uses: actions/setup-java@v1
with:
java-version: 8
- uses: actions/setup-java@v1
with:
java-version: 11
- uses: actions/cache@v1
with:
path: ~/.gradle
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build
run: ./gradlew -PenableCrossCompilerPlugin=true build --stacktrace
アプリケーションの配置
多くのリソースファイルを外部から取得する必要があるため、Spinnakerのインストールと展開は頭痛の種です。必要なリソースファイルを中国にインポートする場合、実際にはそれほど苦痛はありません。少なくとも今では、スピンネーカーを30分以内に展開することが非常に現実的です。(Alibaba Cloudイメージからのプル時間をカウントしない場合、スクリプトは5分以内にインスタンスをデプロイします)
Spinnaker製品のすべてのマイクロサービスバージョン情報を記録するこのバージョンファイルを見てみましょう。実際、halyardはSpinnakerをデプロイしてこのファイルを読み取り、ファイルの内容に基づいて必要なリソースを取得します。
version: 1.19.4
timestamp: '2020-04-03 08:01:05'
services:
echo:
version: 2.11.2-20200401121252
commit: 5e2b673d1d658f88a3ae7741ab99cc0fd4a9df48
clouddriver:
version: 6.7.3-20200401190525
commit: 77c774d185de42bb83dffde1f813f719f712994b
deck:
version: 3.0.2-20200324040016
commit: 7c228ce82928f73a0f3051c4233242a6f87e0bec
fiat:
version: 1.10.1-20200401121252
commit: aaebd07d8134d48630b056d6877a799a09ed282b
front50:
version: 0.22.1-20200401121252
commit: ef1e7feff41797beb2d1695c1c3c0face550fe4b
gate:
version: 1.15.1-20200403040016
commit: 365aa9fc5b1351207731c4445d7bbb79885d6da1
igor:
version: 1.9.2-20200401121252
commit: 576235bcfce0c48bc139e9c94fe98b3467d3d170
kayenta:
version: 0.14.0-20200304112817
commit: 85f590de74db46d54f016d88862418c990a17747
orca:
version: 2.13.2-20200401144746
commit: 8460456e8380d370d1678b06acd015900a94f515
rosco:
version: 0.18.1-20200401121252
commit: 9a20165e9c0d33e538d0038d5d02cb480e27f8c3
defaultArtifact: {}
monitoring-third-party:
version: 0.16.2-20200228142642
commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
monitoring-daemon:
version: 0.16.2-20200228142642
commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
dependencies:
redis:
version: 2:2.8.4-2
consul:
version: 0.7.5
vault:
version: 0.7.0
artifactSources:
debianRepository: https://dl.bintray.com/spinnaker-releases/debians
dockerRegistry: gcr.io/spinnaker-marketplace
googleImageProject: marketplace-spinnaker-release
gitPrefix: https://github.com/spinnaker
これはYaml形式のファイルで、上部にversion
はSpinnakerのバージョン番号services
が表示され、下部には各サービスの情報(バージョン、送信)が含まれています。dependencies
これは、spinnakerのデプロイに必要な依存サービスです。各サービスversion
のフィールドの役割を分析してみましょう。このフィールドは非常に便利です。このフィールドを使用して、サービスブランチでDockerイメージタグと構成ファイルの取得を指定します。
echo:
version: 2.11.2-20200401121252
Echoはメッセージの通知を担当するSpinnakerのマイクロサービスの1つです。Halyardは、version-2.11.2
ラベルhalconfig
のディレクトリにあるecho.yml
構成ファイルを読み取り、gcr.io/spinnaker-marketplace/echo:2.11.2-20200401121252
ミラーをダウンロードします。他のサービスは類推によって推論することができます。
最後に、hal deploy apply
Spinnakerをリリースするために、ワンクリックのデプロイメントを実行します。
マイクロサービスモデルプロジェクトの場合、Spinnakerのモデルから多くの詳細を学ぶことができます。たとえば、gitlabウェアハウスのバージョン番号に対応するyamlファイルを作成することもできます。このファイルには、現在のバージョンの各マイクロサービスのミラータグが含まれています。リリースの準備をするときは、Jenkinsのバージョンブランチを選択し、バージョンブランチのバージョン番号に従ってgitlabウェアハウス内の対応するバージョンのyamlファイルを読み取り、ワンクリックでデプロイします。ロールバックする必要がある場合は、以前のバージョン番号と同じプロセスを入力してロールバックします。